OracleDB 12c R2でプラガブル・データべース操作基礎その弐
前回はプラガブル・データベースに対する共通ロールと共通ユーザの作成とPDBを作成して接続しました。
今回は非CDB環境と同様に、OracleNet経由でPDBへ接続したいと思います。
またSQL Laoderも使いたいと思います。
トピックとしては以下にしたいと思います。
それでは書いていきたいと思います。
まずOracle ClientをOTNからダウンロードして回答しておきます。
Databaseダウンロードの右にある「See All」のリンクからダウンロードできます。
zipを解凍して「setup.exe」を実行します。
正常にインストーラが実行されるとインストール・プロセスに移行します。
「ランタイム」を選択します。
特にユーザは指定せずに次へ進みます。
次もデフォルトで進みます。
インストールチェックが走りますので、問題が無ければ「インストール」をクリックします。
正常にインストールが開始されます。
10分程度時間を置きましょう。
待っている間にtnsnames.oraを書き換えます。
今回は以下の「TESTPDB」へOracle Client経由で接続します。
SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 ORCLPDB READ WRITE NO 4 TESTPDB READ WRITE YES 5 PDB2 READ WRITE NO SQL>
サーバへ接続してディレクトリを移動します。
[oracle@oracle12c admin]$ cd /u01/app/oracle/product/12.2.0/dbhome/network/admin [oracle@oracle12c admin]$ ls listener.ora samples shrept.lst tnsnames.ora [oracle@oracle12c admin]$
tnsnames.oraの中身を書き換えます。
以下を追加します。
TESTPDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = oracle12c)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = testpdb) )
リスナーを確認します。
[oracle@oracle12c admin]$ lsnrctl status LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 05-MAY-2018 16:15:08 Copyright (c) 1991, 2014, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle12c)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 12.1.0.2.0 - Production Start Date 05-MAY-2018 16:09:48 Uptime 0 days 0 hr. 5 min. 19 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/oracle/product/12.2.0/dbhome/network/admin/listener.ora Listener Log File /u01/app/oracle/diag/tnslsnr/oracle12c/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle12c)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=oracle12c)(PORT=5500))(Security=(my_wallet_directory=/u01/app/oracle/admin/orcl/xdb_wallet))(Presentation=HTTP)(Session=RAW)) Services Summary... Service "orcl" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Service "orclXDB" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Service "orclpdb" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Service "pdb2" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Service "testpdb" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... The command completed successfully [oracle@oracle12c admin]$
正常に「TESTPDB」が見えています。
インストール完了を待ちます。
完了したので以下にtnsnames.oraファイルを配置します。
C:\app\client\[Windowsユーザ名]\product\[Oracleバージョン]\client_2\network\admin
ではルートコンテナへ接続してみます。
正常に接続が出来ました。
次にPDBへ接続します。
tnspingは正常にサービスを認識しています。
では接続しましょう。
と言いたいところではありますが、共通ロールにCONNECT権限があってもユーザにCREATE SESSIONの権限が無いと接続に失敗します。
そこでC##nikaidoユーザへ権限を付与します。
SQL> grant connect to C##nikaido container=all; Grant succeeded. SQL>
では接続します。
共通ユーザで正常にPDBへアクセス出来ました。
これでOracle Clientの動作確認は終了です。
また、SQL Loader用に表を作成します。
次にロードするファイルを用意します。
[oracle@oracle12c admin]$ wc -l sample.csv 10000 sample.csv [oracle@oracle12c admin]$
SQL Loaderの制御ファイルを用意します。
[oracle@oracle12c admin]$ cat ./sample.ctl LOAD DATA CHARACTERSET JA16SJISTILDE INFILE 'sample.csv' BADFILE 'sample.badi' APPEND INTO TABLE USERS ( id, name ) [oracle@oracle12c admin]$
ではSQL Loaderを使用してデータを投入します。
ちなみにOracle特有のダイレクト・パスロードを使用します。
[oracle@oracle12c admin]$ sqlldr C##nikaido/subaru@testpdb control='./sample.ctl' log='./sample.log' direct=true SQL*Loader: Release 12.1.0.2.0 - Production on Sat May 5 22:21:24 2018 Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved. Path used: Direct Load completed - logical record count 10000. Table USERS: 10000 Rows successfully loaded. Check the log file: ./sample.log for more information about the load.
1万レコードの挿入に1秒もかかりませんでした。
あっぱれですね。
Oracleのダイレクト・パスロードは優秀です。
他にもバルク・ロードも良いですがSQL Loaderを使うのであればダイレクトが良いですね。
PDBを通常のデータベースと同じように操作できるようになったので今回はここまでにしたいと思います。