二楷堂昴の人生忙しい

二楷堂昴の人生忙しい

二楷堂昴が技術者のために技術知識を書いていきます

OracleDB 12c R2でプラガブル・データべース操作基礎その弐

前回はプラガブル・データベースに対する共通ロールと共通ユーザの作成とPDBを作成して接続しました。
今回は非CDB環境と同様に、OracleNet経由でPDBへ接続したいと思います。
またSQL Laoderも使いたいと思います。
トピックとしては以下にしたいと思います。

  • Oracle Client経由でPDB接続
  • SQL Loaderでデータを投入


それでは書いていきたいと思います。


まずOracle ClientをOTNからダウンロードして回答しておきます。
Databaseダウンロードの右にある「See All」のリンクからダウンロードできます。
zipを解凍して「setup.exe」を実行します。

f:id:nikaidosubaru:20180505160354p:plain

正常にインストーラが実行されるとインストール・プロセスに移行します。
「ランタイム」を選択します。

f:id:nikaidosubaru:20180505160506p:plain

特にユーザは指定せずに次へ進みます。

f:id:nikaidosubaru:20180505160625p:plain

次もデフォルトで進みます。
インストールチェックが走りますので、問題が無ければ「インストール」をクリックします。

f:id:nikaidosubaru:20180505160724p:plain

正常にインストールが開始されます。
10分程度時間を置きましょう。

f:id:nikaidosubaru:20180505160838p:plain


待っている間に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」が見えています。
インストール完了を待ちます。

f:id:nikaidosubaru:20180505161650p:plain


完了したので以下にtnsnames.oraファイルを配置します。

C:\app\client\[Windowsユーザ名]\product\[Oracleバージョン]\client_2\network\admin

ではルートコンテナへ接続してみます。

f:id:nikaidosubaru:20180505162428p:plain

正常に接続が出来ました。
次にPDBへ接続します。
tnspingは正常にサービスを認識しています。

f:id:nikaidosubaru:20180505163715p:plain


では接続しましょう。
と言いたいところではありますが、共通ロールにCONNECT権限があってもユーザにCREATE SESSIONの権限が無いと接続に失敗します。
そこでC##nikaidoユーザへ権限を付与します。

SQL> grant connect to C##nikaido container=all;

Grant succeeded.

SQL> 

では接続します。

f:id:nikaidosubaru:20180505211949p:plain


共通ユーザで正常にPDBへアクセス出来ました。
これでOracle Clientの動作確認は終了です。

また、SQL Loader用に表を作成します。

f:id:nikaidosubaru:20180505215121p:plain

次にロードするファイルを用意します。

[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を通常のデータベースと同じように操作できるようになったので今回はここまでにしたいと思います。