2022年3月30日水曜日

APEXアプリケーションの開発用途のワークスペースを作成する

 データベースが2つあり、それぞれAPEXがインストールされているとします。片方のデータベースからコンポーネント(ページも同様)単位でエクスポートを行い、別のデータベースの同じアプリケーションにインポートする方法を紹介します。

コンポーネントおよびページ単位のエクスポート/インポートを行うには、両方のデータベースのワークスペースIDアプリケーションIDが一致している必要があります。アプリケーションについてはIDが一致しているだけではなく、アプリケーション自体があらかじめエクスポート/インポートによって作成されていることが必須です。

以下より、そのような条件を満たす開発向けのインスタンスを作成する方法を紹介します。

説明のためにAlways FreeのAutonomous Transaction Processingを使います。

最初にインスタンスAPEXPRODが作成済みとします。APEXのワークスペースとしてAPPWKSPが作成されています。

アプリケーションとしては、サンプル・データセットEMP/DEPTをインストールすると作成できるデモ - 従業員 / 部門を使います。


スキーマAPPWKSPには、表EMPやDEPTといったオブジェクトが作成されています。

select * from user_objects


ワークスペースAPPWKSPワークスペースIDを確認します。

select workspace_id, workspace from apex_workspaces where workspace = 'APPWKSP'



開発用途のワークスペースを作成するために必要な情報は以上です。


データベースのクローンを作成して対応


APEXのワークスペースやアプリケーションもデータベースに保存されているため、データベースごとクローンすると開発用途の環境が出来上がります。その場合は特にワークスペースIDを意識する必要がありません。

Always Freeのデータベースは2つまで作成できるため、他にデータベースを作成していなければデータベースのクローンを実行できます。

OCIのコンソールの他のアクションクローンの作成を実行します。


クローン・タイプの選択として、フル・クローンを選びます。ソースのクローニングデータベース・インスタンスからのクローニングを選択します。過去の状態が必要な場合、または、現在稼働しているデータベースに極力影響を与えたくない場合は、バックアップからのクローニングも選択対象になるでしょう。


これ以外に入力する情報は、データベースの新規作成に必要な情報と同じです。

以下の例では、表示名データベース名APEXDEVとしています。


管理者資格証明パスワードを入力し、Autonomous Databaseのクローンの作成を実行します。


しばらくすると、データベースがクローンとして作成されます。


クローンしたデータベースには、APEXのワークスペース、アプリケーション、登録済みのユーザー等も含まれます。そのため、クローン元と同様にワークスペース名APPWKSP、ユーザーAPPWKSPにてサインインできます。

作成済みのアプリケーションもクローンに含まれています。


ワークスペースIDも同じ値になります。




別のデータベースでの対応


元になるインスタンスよりワークスペースのエクスポートを実行します。

管理サービスにサインインし、ワークスペースの管理を開きます。


ワークスペースのエクスポートを開きます。


エクスポートするワークスペース(今回はAPPWKSP)を選択し、ワークスペースのエクスポートを実行します。


チーム開発を含めるはいエクスポート・タイプ最小がデフォルトです。そのまま変更せず、ファイルを保存をクリックします。


ワークスペース名.sql、今回の例ではAPPWKSP.sqlというファイルが、ワークスペースのエクスポートとしてダウンロードされます。ファイルがダウンロードされたら、取消をクリックしてダイアログを閉じます。

エクスポート・タイプ最小の他に、完全も選択可能です。ただし、ヘルプには以下のように記載されているので、通常は最小を選択します。

SQLスクリプト、SQLコマンドの履歴、保存されたSQL、ユーザー・プリファレンス、開発者のログイン履歴、電子メール・ログおよびユーザー・インタフェースのデフォルトを含め、すべてのワークスペース・アーティファクトを別のインスタンスに複製する場合にのみ、「完全」に設定します。ほとんどの場合は、デフォルト値「最小」を変更しないでください

エクスポートしたワークスペースを、開発用途のデータベースにインポートします。

APEXの管理サービスにサインインし、ワークスペースの管理を開きます。

ワークスペースのインポートを開きます。


ファイルのインポートとして、エクスポートしたワークスペースのファイル(今回はAPPWKSP.sql)を選択します。

へ進みます。


インストールをクリックして、ワークスペースをインポートします。


デフォルト・パーシング・スキーマの作成について確認されます。

APEXのワークスペースのインポートには、ワークスペースに紐づいていたスキーマおよびスキーマに含まれるデータベース・オブジェクトは含まれません。あらかじめ(または、ワークスペースの作成後に)元のデータベースからData Pumpなどでエクスポート/インポートを行い、別途複製する必要があります。

今回は、スキーマAPPWKSPを新規作成しています。へ進みます。


表示されたプライマリ・スキーマおよび指定された追加スキーマへの完全なアクセス権を持つワークスペースのインストールを実行する場合に選択してください。にチェックを入れます。

へ進みます。


インポートするワークスペースのワークスペースIDは、元のワークスペースIDと同じになります。

ワークスペースのインストールを実行します。


ワークスペースのインポートが完了します。今回の手順では、スキーマAPPWKSPも作成されます。


既存のワークスペースより、インポートされたワークスペースを確認できます。


ワークスペースのエクスポート/インポートではなく、単にワークスペースを作成する場合は、ワークスペースの作成時に詳細を開き、ワークスペースIDを指定します。


この場合でも、開発用途のワークスペースとして使用できますが、ワークスペースに作成されたApplication Expressユーザーなど、ワークスペースに構成済みの情報はコピーされません。


ページのエクスポートとインポートの確認



データベースAPEXPRODよりAPEXアプリケーションをエクスポートし、開発用途のデータベースAPEXDEVへインポートします。ワークスペースはAPPWKSPです。

データベースAPEXDEVのワークスペースAPPWKSPにサインインし、アプリケーションのインポートを開始します。

アプリケーションのインポート時に、次のアプリケーションとしてインストールとして、エクスポート・ファイルのアプリケーションID 100を再利用を選択します。アプリケーションIDの数値はアプリケーションによって異なりますが、再利用をすることにより同じアプリケーションIDにてインストールされます。


サンプル・データセットのEMP/DEPTをインストールし、表EMPとDEPTをインストールしておきます。

データベースAPEXDEVのワークスペースAPPWKSPにサインインし、ページの新規作成とエクスポートを行います。

アプリケーションデモ - 従業員/部門に、表EMPを操作する対話グリッドのページを作成します。

ページ作成ウィザードを起動し、フォームを選択します。


編集可能対話グリッドを選択します。


ページ名対話グリッドとします。へ進みます。


ナビゲーションのプリファレンスとして、新規ナビゲーション・メニュー・エントリの作成を選択します。

へ進みます。


データ・ソース表/ビューの名前として、EMPを指定します。作成をクリックします。


対話グリッドのページが作成されます。作成されたページを実行すると、以下のようになります。

ナビゲーション・メニュー対話グリッドが表示されます。


ページのユーティリティ・メニューを開いて、エクスポートを実行します。


指定されているページを確認し、ページのエクスポートを実行します。


fアプリケーションID_page_ページ番号.sql(今回はf100_page_7.sql)というファイルがダウンロードされます。

このファイルを、開発用途のデータベースにインポートします。

アプリケーション・ビルダーよりインポートを実行します。


ドラッグ・アンド・ドロップの領域に先ほどダウンロードしたファイルf100_page_7.sqlを選択します。ファイル・タイプとして、データベース・アプリケーション、ページまたはコンポーネントのエクスポートを選択します。

へ進みます。


ファイルのアップロードが完了したので、へ進みます。


 ページの起点として、このページは、現行のワークスペースのアプリケーションからエクスポートされました。と表示されます。

ページのインストールを実行します。


ページがインポートされます。ページを実行して、結果を確認します。


ページのみのインポートなので、ナビゲーション・メニューは作成されていません。


以上で、ページ単位のエクスポート/インポートの手順を確認できました。

Oracle APEXのアプケーション作成の参考になれば幸いです。

2022年3月28日月曜日

SQLコマンドで実行計画を表示しようとするとエラーが発生する

 Autonomous DatabaseのSQLコマンド実行計画を確認しようとしたところ

ORA-02404: 指定したPLAN_TABLE表が見つかりません。

が発生しました。

以下、対処方法です。

SQLコマンドで以下を実行して、表HTMLDB_PLAN_TABLEを作成します。

create table HTMLDB_PLAN_TABLE sharing=none (
statement_id varchar2(30),
plan_id number,
timestamp date,
remarks varchar2(4000),
operation varchar2(30),
options varchar2(255),
object_node varchar2(128),
object_owner varchar2(128),
object_name varchar2(128),
object_alias varchar2(261),
object_instance numeric,
object_type varchar2(30),
optimizer varchar2(255),
search_columns number,
id numeric,
parent_id numeric,
depth numeric,
position numeric,
cost numeric,
cardinality numeric,
bytes numeric,
other_tag varchar2(255),
partition_start varchar2(255),
partition_stop varchar2(255),
partition_id numeric,
other long,
distribution varchar2(30),
cpu_cost numeric,
io_cost numeric,
temp_space numeric,
access_predicates varchar2(4000),
filter_predicates varchar2(4000),
projection varchar2(4000),
time numeric,
qblock_name varchar2(128),
other_xml clob
) NOCOMPRESS;

元はOracle Database 21c Express Edtionの$ORACLE_HOME/rdbms/admin/utlxplan.sqlに記述されている表PLAN_TABLEを作成するDDLです。

Oracle APEXのSQLコマンドでは、表HTMLDB_PLAN_TABLEをプランを保存する表として使用しています。そのため、表の名前をHTMLDB_PLAN_TABLEに変更しています。

Autonomous Databaseのバージョンは19cなので、21cのスクリプトを流用するのは問題があるかもしれません。動いているので良しとしています。


表HTMLDB_PLAN_TABLEが作成されていると、ORA-2404は発生しません。


以上になります。

GitHubにあるdb-sample-schemasをAutonomous Databaseにインストールする

 GitHubにあるdb-sample-schemasのsales-historyをAlways FreeのAutonomous Databaseにインストールするつもりで準備作業をしました。準備が完了してsales-historyのサンプルをインストールしてみたところ、Autonomous Databaseには最初からスキーマSHがインストールされていて、db-sample-schemasのスクリプトを実行する必要はありませんでした。その他のサンプルのインストールも確認したところ、以下の結果になっています。

bus_intelligence: OEおよびSH、特にSHに依存しているためADBではインストールでエラーが発生する。
customer_orders:  インストールできる。
human_resource: インストールできる。
info_exchange: Streamsに関連したエラーが発生する。
order_entry: ディレクトリを作るところ(CREATE DIRECTORY)と、XDB関連でエラーが発生する。
product_media: ディレクトリを作るところ(CREATE DIRECTORY)でエラーが発生する。
sales_history: スキーマSHが存在するため、インストールはできない。
shipping: OE(order_entry)に依存しているが、スキーマOEが存在していればエラーは発生しない。

以前にReal Application Securityの動作確認を行った際にdb-sample-schemasのhuman_resourceをインストールしていたので、他のサンプルもインストールできるかと思ったのですが、そうではなかったです。

以前の記事は1年以上前の作業です。今回の作業では、プラットフォームもOracle Linux 8(シェイプはAlways FreeのVM.Standard.E2.1.Micro)を使い、実行しているコマンドも異なることから、改めて作業を記録します。また、Autonomous Databaseの接続に使用するウォレットは、ociコマンドを使って生成します。

Always Freeのコンピュート・インスタンスを、作成した直後の状態から作業を始めます。

今回は新規にユーザーを作成せず、ユーザーopcで作業をしています。opcは特別な権限を持つユーザーなので、opc以外のユーザーを作成して作業した方が良いでしょう。


ociコマンドのインストール


ユーザーopcで接続して、ociコマンドをインストールします。これでよろしいですか?と聞かれたら、yを入力します。

sudo dnf install python36-oci-cli

[opc@dwcp2 ~]$ sudo dnf install python36-oci-cli

Ksplice for Oracle Linux 8 (x86_64)                                            5.7 MB/s | 708 kB     00:00    

MySQL 8.0 for Oracle Linux 8 (x86_64)                                           15 MB/s | 2.2 MB     00:00    

MySQL 8.0 Tools Community for Oracle Linux 8 (x86_64)                          2.4 MB/s | 249 kB     00:00    

MySQL 8.0 Connectors Community for Oracle Linux 8 (x86_64)                     200 kB/s |  20 kB     00:00    

Oracle Software for OCI users on Oracle Linux 8 (x86_64)                        29 MB/s |  29 MB     00:00    

Oracle Linux 8 BaseOS Latest (x86_64)                                           28 MB/s |  43 MB     00:01    

Oracle Linux 8 Application Stream (x86_64)                                      24 MB/s |  32 MB     00:01    

Oracle Linux 8 Addons (x86_64)                                                 7.8 MB/s | 2.9 MB     00:00    

Latest Unbreakable Enterprise Kernel Release 6 for Oracle Linux 8 (x86_64)      24 MB/s |  40 MB     00:01    

依存関係が解決しました。

===============================================================================================================

 パッケージ                         Arch            バージョン                 リポジトリー              サイズ

===============================================================================================================

インストール:

 python36-oci-cli                   noarch          3.6.2-1.el8                ol8_addons                 13 M

アップグレード:

 python36-oci-sdk                   x86_64          2.61.0-1.el8               ol8_addons                 20 M

依存関係のインストール:

 python3-arrow                      noarch          1.1.1-1.el8                ol8_oci_included          119 k

 python3-jmespath                   noarch          0.10.0-1.el8               ol8_oci_included           48 k

 python3-terminaltables             noarch          3.1.0-1.0.1.el8            ol8_oci_included           31 k

 python3-typing-extensions          noarch          3.7.4.2-1.el8              ol8_oci_included           47 k


トランザクションの概要

===============================================================================================================

インストール    5 パッケージ

アップグレード  1 パッケージ


ダウンロードサイズの合計: 33 M

これでよろしいですか? [y/N]: y

パッケージのダウンロード:

(1/6): python3-terminaltables-3.1.0-1.0.1.el8.noarch.rpm                       425 kB/s |  31 kB     00:00    

(2/6): python3-typing-extensions-3.7.4.2-1.el8.noarch.rpm                      1.4 MB/s |  47 kB     00:00    

(3/6): python3-jmespath-0.10.0-1.el8.noarch.rpm                                251 kB/s |  48 kB     00:00    

(4/6): python3-arrow-1.1.1-1.el8.noarch.rpm                                    553 kB/s | 119 kB     00:00    

(5/6): python36-oci-cli-3.6.2-1.el8.noarch.rpm                                  18 MB/s |  13 MB     00:00    

(6/6): python36-oci-sdk-2.61.0-1.el8.x86_64.rpm                                 17 MB/s |  20 MB     00:01    

---------------------------------------------------------------------------------------------------------------

合計                                                                            25 MB/s |  33 MB     00:01     

トランザクションの確認を実行中

トランザクションの確認に成功しました。

トランザクションのテストを実行中

トランザクションのテストに成功しました。

トランザクションを実行中

  準備             :                                                                                       1/1 

  アップグレード中 : python36-oci-sdk-2.61.0-1.el8.x86_64                                                  1/7 

  インストール中   : python3-typing-extensions-3.7.4.2-1.el8.noarch                                        2/7 

  インストール中   : python3-arrow-1.1.1-1.el8.noarch                                                      3/7 

  インストール中   : python3-terminaltables-3.1.0-1.0.1.el8.noarch                                         4/7 

  インストール中   : python3-jmespath-0.10.0-1.el8.noarch                                                  5/7 

  インストール中   : python36-oci-cli-3.6.2-1.el8.noarch                                                   6/7 

  整理             : python36-oci-sdk-2.57.0-1.el8.x86_64                                                  7/7 

  scriptletの実行中: python36-oci-sdk-2.57.0-1.el8.x86_64                                                  7/7 

  検証             : python3-arrow-1.1.1-1.el8.noarch                                                      1/7 

  検証             : python3-jmespath-0.10.0-1.el8.noarch                                                  2/7 

  検証             : python3-terminaltables-3.1.0-1.0.1.el8.noarch                                         3/7 

  検証             : python3-typing-extensions-3.7.4.2-1.el8.noarch                                        4/7 

  検証             : python36-oci-cli-3.6.2-1.el8.noarch                                                   5/7 

  検証             : python36-oci-sdk-2.61.0-1.el8.x86_64                                                  6/7 

  検証             : python36-oci-sdk-2.57.0-1.el8.x86_64                                                  7/7 


アップグレード済み:

  python36-oci-sdk-2.61.0-1.el8.x86_64                                                                         

インストール済み:

  python3-arrow-1.1.1-1.el8.noarch                      python3-jmespath-0.10.0-1.el8.noarch                  

  python3-terminaltables-3.1.0-1.0.1.el8.noarch         python3-typing-extensions-3.7.4.2-1.el8.noarch        

  python36-oci-cli-3.6.2-1.el8.noarch                  


完了しました!

[opc@dwcp2 ~]$ 


テナンシとユーザーのOCIDの確認


OCIのコンソールにサインインし、右上のプロファイルを開きます。

テナンシを開いて、OCIDコピーします。ociコマンドのセットアップに使用するので、どこかにペーストしておきます。


ユーザー設定を開いて、OCIDコピーします。ociコマンドのセットアップに使用するので、どこかにペーストしておきます。


APIキーの作成は、oci setup configコマンドを実行して生成した公開鍵を使って行います。


oci setup configの実行


コンピュート・インスタンスに戻り、ociコマンドを構成します。

oci setup config

Enter a location for your configは作成される構成ファイルの名前です。デフォルトのまま変更しません。
Enter a user OCIDは、ユーザのOCIDです。コピー済みのユーザーのOCIDを貼り付けます。
Enter a tenancy OCIDは、テナンシのOCIDです。コピー済みのテナンシのOCIDを貼り付けます。
Enter a region by index or nameは、リージョンを数値か名前で指定します。今回の例では34us-ashburn-1を指定しています。東京リージョンであれば、13またはap-tokyo-1を指定します。
Do you want to generate a new API Signing RSA key pair?Yを入力し、APIキーとして登録するRSAのキーペア(APIキーとして登録するのは公開鍵)を生成します。
Enter a directory for your keys to be createdは、RSAのキーペアが作成されるディレクトリを指定します。デフォルトのまま変更しません。
Enter a name for your keyは、RSAのキーペアを保存するファイル名の一部になります。デフォルトのまま変更しません。公開鍵はこの識別子に_public.pemが追加されます。秘密鍵は.pemが追加されます。

以上でセットアップでの質問への入力は完了です。構成ファイルが作成されます。

Public key written toとして表示されるファイル名を覚えておきます。このファイルの内容を、ユーザーのAPIキーを作成するときに使用します。

[opc@dwcp2 ~]$ oci setup config

    This command provides a walkthrough of creating a valid CLI config file.


    The following links explain where to find the information required by this

    script:


    User API Signing Key, OCID and Tenancy OCID:


        https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#Other


    Region:


        https://docs.cloud.oracle.com/Content/General/Concepts/regions.htm


    General config documentation:


        https://docs.cloud.oracle.com/Content/API/Concepts/sdkconfig.htm



Enter a location for your config [/home/opc/.oci/config]: 

Enter a user OCID: コピー済みのテナンシのOCID

Enter a tenancy OCID: コピー済みのユーザーのOCID

Enter a region by index or name(e.g.

1: af-johannesburg-1, 2: ap-chiyoda-1, 3: ap-chuncheon-1, 4: ap-dcc-canberra-1, 5: ap-hyderabad-1,

6: ap-ibaraki-1, 7: ap-melbourne-1, 8: ap-mumbai-1, 9: ap-osaka-1, 10: ap-seoul-1,

11: ap-singapore-1, 12: ap-sydney-1, 13: ap-tokyo-1, 14: ca-montreal-1, 15: ca-toronto-1,

16: eu-amsterdam-1, 17: eu-frankfurt-1, 18: eu-marseille-1, 19: eu-milan-1, 20: eu-stockholm-1,

21: eu-zurich-1, 22: il-jerusalem-1, 23: me-abudhabi-1, 24: me-dcc-muscat-1, 25: me-dubai-1,

26: me-jeddah-1, 27: sa-santiago-1, 28: sa-saopaulo-1, 29: sa-vinhedo-1, 30: uk-cardiff-1,

31: uk-gov-cardiff-1, 32: uk-gov-london-1, 33: uk-london-1, 34: us-ashburn-1, 35: us-gov-ashburn-1,

36: us-gov-chicago-1, 37: us-gov-phoenix-1, 38: us-langley-1, 39: us-luke-1, 40: us-phoenix-1,

41: us-sanjose-1): 34

Do you want to generate a new API Signing RSA key pair? (If you decline you will be asked to supply the path to an existing key.) [Y/n]: Y

Enter a directory for your keys to be created [/home/opc/.oci]: 

Enter a name for your key [oci_api_key]: 

Public key written to: /home/opc/.oci/oci_api_key_public.pem

Enter a passphrase for your private key (empty for no passphrase): 

Private key written to: /home/opc/.oci/oci_api_key.pem

Fingerprint: fc:45:ac:d7:4a:fa:c3:d1:60:94:c2:8d:de:90:97:ac

Config written to /home/opc/.oci/config



    If you haven't already uploaded your API Signing public key through the

    console, follow the instructions on the page linked below in the section

    'How to upload the public key':


        https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#How2



[opc@dwcp2 ~]$ 




APIキーの追加



oci setup configを実行して生成された公開鍵を、クリップボードにコピーします。

[opc@dwcp2 ~]$ cat .oci/oci_api_key_public.pem 

-----BEGIN PUBLIC KEY-----

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzi1QIn/kVIju/edTp+W0

VVEgXuBQo1OF/8YUlaOOBjjLH1VMpHLnFdp96/2g3gY23INuYvcqy+PGOG8e6vwb

ipVvN05Uq9ZLqwvLSJzIMjSqxmhUdJXYYShEep+rjhYnObfXpRMLk1Nwl5v6Os8/

FXY3R3wCmQSU8vISeBL3dLLJkJbg85SECLTf5e7E3tTAaQ9t13tbDl1FA+RUOSTe

hFJCeWJVUtNK4L1qwW07JJr5y2rR8hGYgv18CZkAodPpzy2wgSMIS0CA4YUnYYXR

AH1iCM2yhKOdHJUCb9ueMCIgtJN+M7Leo1cKp42Quqo7e/mHX2CznMu6TxiRgc+a

cwIDAQAB

-----END PUBLIC KEY-----

[opc@dwcp2 ~]$ 


OCIコンソールのプロファイルからユーザー設定を開き、リソースからAPIキーを選択します。

APIキーの追加をクリックします。ダイアログが開くので、公開キーの貼付けを選択し、先ほどコピーした公開鍵を公開キーにペーストします。

以上を行い、追加をクリックします。


構成ファイルのプレビューが表示されます。閉じるをクリックすると、APIキーの追加は完了です。



接続先ADBのウォレットの生成



OCIコンソールより接続先となるAutonomous Databaseを開き、OCIDを確認します。

OCIDをクリップボードにコピーします。


コンピュート・インスタンスに移り、ウォレットを生成するコマンドを実行します。

oci db autonomous-database generate-wallet --autonomous-database-id ADBのOCID --file  ウォレット・ファイル名 --password "ウォレットのパスワード"

以下ではウォレットのファイル名として、Wallet_DWAPEX.zipを指定しています。ウォレットの生成コマンドは、成功したときにはメッセージを表示しないようです。

[opc@dwcp2 ~]$ oci db autonomous-database generate-wallet --autonomous-database-id ADBのOCID --file Wallet_DWAPEX.zip --password "パスワード"

[opc@dwcp2 ~]$ ls -l Wallet_DWAPEX.zip 

-rw-rw-r--. 1 opc opc 21627  3月 28 04:28 Wallet_DWAPEX.zip

[opc@dwcp2 ~]$ 




データベースへ接続するツールのインストール



sqlplussqlldrをインストールします。

最初にOracle Instance Clientが含まれるリポジトリを追加します。

sudo dnf -y install oracle-instantclient-release-el8

[opc@dwcp2 ~]$ sudo dnf -y install oracle-instantclient-release-el8

メタデータの期限切れの最終確認: 1:14:19 時間前の 2022年03月28日 03時23分34秒 に実施しました。

依存関係が解決しました。

===============================================================================================================

 パッケージ                                Arch            バージョン         リポジトリー               サイズ

===============================================================================================================

インストール:

 oracle-instantclient-release-el8          x86_64          1.0-1.el8          ol8_baseos_latest           16 k


トランザクションの概要

===============================================================================================================

インストール  1 パッケージ


ダウンロードサイズの合計: 16 k

インストール後のサイズ: 18 k

パッケージのダウンロード:

oracle-instantclient-release-el8-1.0-1.el8.x86_64.rpm                          313 kB/s |  16 kB     00:00    

---------------------------------------------------------------------------------------------------------------

合計                                                                           301 kB/s |  16 kB     00:00     

トランザクションの確認を実行中

トランザクションの確認に成功しました。

トランザクションのテストを実行中

トランザクションのテストに成功しました。

トランザクションを実行中

  準備             :                                                                                       1/1 

  インストール中   : oracle-instantclient-release-el8-1.0-1.el8.x86_64                                     1/1 

  scriptletの実行中: oracle-instantclient-release-el8-1.0-1.el8.x86_64                                     1/1 

  検証             : oracle-instantclient-release-el8-1.0-1.el8.x86_64                                     1/1 


インストール済み:

  oracle-instantclient-release-el8-1.0-1.el8.x86_64                                                            


完了しました!

[opc@dwcp2 ~]$ 


sqlplusが含まれるパッケージoracle-instantclient-sqlplussqlldrが含まれるパッケージoracle-instantclient-tools、それとGitHubよりdb-sample-schemasをクローンする際に使用するgitもインストールします。

sudo dnf -y install oracle-instantclient-sqlplus oracle-instantclient-tools git

[opc@dwcp2 ~]$ sudo dnf -y install oracle-instantclient-sqlplus oracle-instantclient-tools git

Oracle Instant Client 21 for Oracle Linux 8 (x86_64)                            79 kB/s | 9.9 kB     00:00    

依存関係が解決しました。

===============================================================================================================

 パッケージ                         Arch         バージョン             リポジトリー                     サイズ

===============================================================================================================

インストール:

 git                                x86_64       2.27.0-1.el8           ol8_appstream                    164 k

 oracle-instantclient-sqlplus       x86_64       21.5.0.0.0-1           ol8_oracle_instantclient21       710 k

 oracle-instantclient-tools         x86_64       21.5.0.0.0-1           ol8_oracle_instantclient21       864 k

依存関係のインストール:

 git-core                           x86_64       2.27.0-1.el8           ol8_appstream                    5.7 M

 git-core-doc                       noarch       2.27.0-1.el8           ol8_appstream                    2.5 M

 oracle-instantclient-basic         x86_64       21.5.0.0.0-1           ol8_oracle_instantclient21        53 M

 perl-Error                         noarch       1:0.17025-2.el8        ol8_appstream                     46 k

 perl-Git                           noarch       2.27.0-1.el8           ol8_appstream                     78 k

 perl-TermReadKey                   x86_64       2.37-7.el8             ol8_appstream                     40 k


トランザクションの概要

===============================================================================================================

インストール  9 パッケージ


ダウンロードサイズの合計: 63 M

インストール後のサイズ: 290 M

パッケージのダウンロード:

(1/9): oracle-instantclient-sqlplus-21.5.0.0.0-1.x86_64.rpm                    4.8 MB/s | 710 kB     00:00    

(2/9): oracle-instantclient-tools-21.5.0.0.0-1.x86_64.rpm                      3.1 MB/s | 864 kB     00:00    

(3/9): git-2.27.0-1.el8.x86_64.rpm                                             1.2 MB/s | 164 kB     00:00    

(4/9): git-core-2.27.0-1.el8.x86_64.rpm                                         16 MB/s | 5.7 MB     00:00    

(5/9): git-core-doc-2.27.0-1.el8.noarch.rpm                                    5.2 MB/s | 2.5 MB     00:00    

(6/9): perl-Error-0.17025-2.el8.noarch.rpm                                     312 kB/s |  46 kB     00:00    

(7/9): perl-TermReadKey-2.37-7.el8.x86_64.rpm                                  474 kB/s |  40 kB     00:00    

(8/9): perl-Git-2.27.0-1.el8.noarch.rpm                                        841 kB/s |  78 kB     00:00    

(9/9): oracle-instantclient-basic-21.5.0.0.0-1.x86_64.rpm                       27 MB/s |  53 MB     00:01    

---------------------------------------------------------------------------------------------------------------

合計                                                                            31 MB/s |  63 MB     00:02     

トランザクションの確認を実行中

トランザクションの確認に成功しました。

トランザクションのテストを実行中

トランザクションのテストに成功しました。

トランザクションを実行中

  準備             :                                                                                       1/1 

  インストール中   : git-core-2.27.0-1.el8.x86_64                                                          1/9 

  インストール中   : oracle-instantclient-basic-21.5.0.0.0-1.x86_64                                        2/9 

  scriptletの実行中: oracle-instantclient-basic-21.5.0.0.0-1.x86_64                                        2/9 

  インストール中   : git-core-doc-2.27.0-1.el8.noarch                                                      3/9 

  インストール中   : perl-TermReadKey-2.37-7.el8.x86_64                                                    4/9 

  インストール中   : perl-Error-1:0.17025-2.el8.noarch                                                     5/9 

  インストール中   : perl-Git-2.27.0-1.el8.noarch                                                          6/9 

  インストール中   : git-2.27.0-1.el8.x86_64                                                               7/9 

  インストール中   : oracle-instantclient-sqlplus-21.5.0.0.0-1.x86_64                                      8/9 

  scriptletの実行中: oracle-instantclient-sqlplus-21.5.0.0.0-1.x86_64                                      8/9 

  インストール中   : oracle-instantclient-tools-21.5.0.0.0-1.x86_64                                        9/9 

  scriptletの実行中: oracle-instantclient-tools-21.5.0.0.0-1.x86_64                                        9/9 

  検証             : oracle-instantclient-basic-21.5.0.0.0-1.x86_64                                        1/9 

  検証             : oracle-instantclient-sqlplus-21.5.0.0.0-1.x86_64                                      2/9 

  検証             : oracle-instantclient-tools-21.5.0.0.0-1.x86_64                                        3/9 

  検証             : git-2.27.0-1.el8.x86_64                                                               4/9 

  検証             : git-core-2.27.0-1.el8.x86_64                                                          5/9 

  検証             : git-core-doc-2.27.0-1.el8.noarch                                                      6/9 

  検証             : perl-Error-1:0.17025-2.el8.noarch                                                     7/9 

  検証             : perl-Git-2.27.0-1.el8.noarch                                                          8/9 

  検証             : perl-TermReadKey-2.37-7.el8.x86_64                                                    9/9 


インストール済み:

  git-2.27.0-1.el8.x86_64                                 git-core-2.27.0-1.el8.x86_64                         

  git-core-doc-2.27.0-1.el8.noarch                        oracle-instantclient-basic-21.5.0.0.0-1.x86_64       

  oracle-instantclient-sqlplus-21.5.0.0.0-1.x86_64        oracle-instantclient-tools-21.5.0.0.0-1.x86_64       

  perl-Error-1:0.17025-2.el8.noarch                       perl-Git-2.27.0-1.el8.noarch                         

  perl-TermReadKey-2.37-7.el8.x86_64                     


完了しました!

[opc@dwcp2 ~]$ 



Autonomous Databaseへの接続



Autonomous Databaseへ接続するために必要な準備を行います。

ユーザーopcホーム・ディレクトリORACLE_HOMEにします。ORACLE_HOME以下にディレクトリnetwork/adminを作成し、ウォレットの内容を展開しています。また、インストールされたsqlplus、sqlldrといったツールへのパスを通しています。

デフォルトの接続先として(TWO_TASKの設定)、dwapex_lowを設定してます。この値はADBのインスタンス名によって変わります。

[opc@dwcp2 ~]$ mkdir -p network/admin

[opc@dwcp2 ~]$ unzip -d network/admin Wallet_DWAPEX.zip 

Archive:  Wallet_DWAPEX.zip

  inflating: network/admin/README    

  inflating: network/admin/cwallet.sso  

  inflating: network/admin/tnsnames.ora  

  inflating: network/admin/truststore.jks  

  inflating: network/admin/ojdbc.properties  

  inflating: network/admin/sqlnet.ora  

  inflating: network/admin/ewallet.p12  

  inflating: network/admin/keystore.jks  

[opc@dwcp2 ~]$ export ORACLE_HOME=$HOME

[opc@dwcp2 ~]$ export PATH=/usr/lib/oracle/21/client64/bin:$PATH

[opc@dwcp2 ~]$ export TWO_TASK=dwapex_low

[opc@dwcp2 ~]$ export NLS_LANG=American_America.AL32UTF8


NLS_LANGも設定しておきます。 今回のようにOracle Corporationが提供しているスクリプトを実行する場合は、言語とテリトリはAmerican_Americaを指定しておいた方が無難です。

sqlplusを実行し、管理ユーザーADMINにてAutonomous Databaseに接続します。

sqlplus admin/管理ユーザーのパスワード

[opc@dwcp2 ~]$ sqlplus admin/管理ユーザーのパスワード


SQL*Plus: Release 21.0.0.0.0 - Production on Mon Mar 28 04:56:54 2022

Version 21.5.0.0.0


Copyright (c) 1982, 2021, Oracle.  All rights reserved.


Last Successful login time: Mon Mar 28 2022 02:34:38 +00:00


Connected to:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.15.0.1.0


SQL> exit

Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.15.0.1.0

[opc@dwcp2 ~]$ 

データベースへの接続までは完了しました。


サンプル・スキーマのインストール手順


サンプル・スキーマのインストール手順は、GitHubのREADMEに記述されている手順に従います。

cd $HOME
git clone https://github.com/oracle/db-sample-schemas.git

[opc@dwcp2 ~]$ cd $HOME

[opc@dwcp2 ~]$ git clone https://github.com/oracle/db-sample-schemas.git

Cloning into 'db-sample-schemas'...

remote: Enumerating objects: 636, done.

remote: Counting objects: 100% (67/67), done.

remote: Compressing objects: 100% (39/39), done.

remote: Total 636 (delta 43), reused 48 (delta 28), pack-reused 569

Receiving objects: 100% (636/636), 35.61 MiB | 6.86 MiB/s, done.

Resolving deltas: 100% (344/344), done.

Updating files: 100% (397/397), done.

[opc@dwcp2 ~]$ 

スクリプトに含まれているパスを、ローカルにインストールされたパスに置き換えます。

cd db-sample-schemas/
perl -p -i.bak -e 's#__SUB__CWD__#'$(pwd)'#g' *.sql */*.sql */*.dat


[opc@dwcp2 ~]$ cd db-sample-schemas/

[opc@dwcp2 db-sample-schemas]$ perl -p -i.bak -e 's#__SUB__CWD__#'$(pwd)'#g' *.sql */*.sql */*.dat 

[opc@dwcp2 db-sample-schemas]$ 

今回はsales-historyのインストールを試みました。

sales-historyのインストール・スクリプトが含まれるディレクトリへ移動します。

cd db-sample-schemas/sales_history/

[opc@dwcp2 ~]$ cd db-sample-schemas/sales_history/

[opc@dwcp2 sales_history]$ 

Autonomous Databaseが接続先の場合、AS SYSDBAでの接続はできません。AS SYSDBAが指定されている接続文を探します。

grep -i sysdba *.sql

[opc@dwcp2 sales_history]$ grep -i sysdba *.sql

sh_main.sql:CONNECT sys/&pass_sys@&connect_string AS SYSDBA;

[opc@dwcp2 sales_history]$ 

sh_main.sqlに含まれているので、sh_main.sqlを開いて、sysをadminに変更します。また、AS SYSDBAの部分を削除します。

sh_main.sqlの以下の部分を

CONNECT sys/&pass_sys@&connect_string AS SYSDBA;

次に変更します。

CONNECT admin/&pass_sys@&connect_string;

以上で、サンプル・スキーマのインストールを行う準備はおおむね完了です。実際にサンプル・スキーマのインストールを試みた結果は、記事の最初にまとめています。

大体のインストール・スクリプトで、ユーザーのデフォルト表領域とTEMP表領域の指定が求められます。Autonomous Databaseではそれぞれ、DATAまたはTEMPを指定します。

以上です。

残念な結果ではありますが、作業ログが何かの役にたてば幸いです。