OracleDB 12c R2でプラガブル・データべース操作基礎その壱
事前に環境構築済みのOracle DB 12cを操作していきます。
今回は12cの機能であるコンテナ・データベースとプラガブル・データベースを操作していきます。
今回の作業内容は以下になります。
- 共有ロールの作成
- 共有ユーザの作成(他記事で作成しましたが再作成)
- プラガブル・データベースの作成
それではまずリスナーとデータベースを起動しておきましょう。
[root@oracle12c ~]# su - oracle 最終ログイン: 2018/03/21 (水) 14:22:50 JST日時 pts/1 [oracle@oracle12c ~]$
[oracle@oracle12c ~]$ lsnrctl start LISTENER LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 07-APR-2018 20:42:19 Copyright (c) 1991, 2014, Oracle. All rights reserved. Starting /u01/app/oracle/product/12.2.0/dbhome/bin/tnslsnr: please wait... TNSLSNR for Linux: Version 12.1.0.2.0 - Production System parameter file is /u01/app/oracle/product/12.2.0/dbhome/network/admin/listener.ora Log messages written to /u01/app/oracle/diag/tnslsnr/oracle12c/listener/alert/log.xml Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle12c)(PORT=1521))) Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) 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 07-APR-2018 20:42:21 Uptime 0 days 0 hr. 0 min. 0 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))) The listener supports no services The command completed successfully [oracle@oracle12c ~]$
リスナーが正常に起動しました。
ちなみにEM Expressは後日設定します。
簡単なのでここでは使用しないので省略します。
データベースを起動します。
[oracle@oracle12c ~]$ sqlplus / as sysdba SQL*Plus: Release 12.1.0.2.0 Production on Sat Apr 7 20:44:33 2018 Copyright (c) 1982, 2014, Oracle. All rights reserved. Connected to an idle instance. SQL>
後々、バックアップ・リストアについて書く予定なので、ついでにアーカイブ・ログモードへ変更します。
インスタンスはマウントモードで起動します。
SQL> startup mount ORACLE instance started. Total System Global Area 1258291200 bytes Fixed Size 2923920 bytes Variable Size 452985456 bytes Database Buffers 788529152 bytes Redo Buffers 13852672 bytes Database mounted. SQL>
アーカイブ・ログモードに変更します。
SQL> alter database archivelog; Database altered. SQL>
変更されたので、データベースをオープンします。
SQL> alter database open; Database altered. SQL>
正常に起動しました。
では早速作業をしたいと思います。
共通ロール作成
まず、共通ロールとは何かと言うと、プラガブル・データベースはそれぞでユーザやロールを作成するとローカルとして扱われるますがCDB上で作成すると、すべてのプラガブル・データベースで使用可能なロールを作成することが出来ます。
また、共通ユーザも後述しますが同じものになります。
CDBルートに接続している事を確認します。
SQL> show con_name CON_NAME ------------------------------ CDB$ROOT SQL>
それではロールを作成します。
共通ユーザ、共通ロールは接頭辞に「C##」を付けます。
SQL> create role C##cdb_dba; Role created. SQL>
次に権限を付与していきます。
まずは全てのコンテナ・データベースに接続できる権限を付与します。
SQL> grant connect to C##cdb_dba container=all; Grant succeeded. SQL>
共通ユーザの作成
次はユーザを作成します。
C##を付与してcreate文で作成します。
SQL> create user C##nikaido identified by subaru; User created. SQL>
次に権限とロールを付与します。
SQL> grant C##cdb_dba to C##nikaido; Grant succeeded. SQL>
これからデータベースやテーブルを作成するための権限を付与します。
しかし今回はSYSDBA権限でデータベースを作成していきます。
また、プラガブル・データベースへの接続権限の確認のためにコンテナ内のデータベースすべてにアクセスできる権限を付与します。
SQL> grant resource,unlimited tablespace to C##nikaido; Grant succeeded. SQL> SQL> grant set CONTAINER to C##nikaido CONTAINER=ALL; Grant succeeded. SQL>
一度、sqlplusから抜けます。
SQL> quit Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options [oracle@oracle12c ~]$
C##nikaidoユーザで接続してみます。
[oracle@oracle12c ~]$ sqlplus C##nikaido/subaru SQL*Plus: Release 12.1.0.2.0 Production on Sat Apr 7 22:31:00 2018 Copyright (c) 1982, 2014, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options SQL> SQL> SQL> SQL> show con_name CON_NAME ------------------------------ CDB$ROOT SQL>
無事に接続が確認できました。
それではデータベースの作成に入っていきたいと思います。
プラガブル・データベースの作成
一旦、C##nikaidoユーザから切断して、SYSDBAへ権限で接続しなおして下さい。
それでは以下の形で、PDB SEEDからコピーしてプラガブルデータベースを作成します。
SQL> create pluggable database pdb2 admin user pdb2_admin identified by nikaido roles = (dba) file_name_convert = ('/u01/app/oracle/oradata/orcl/pdbseed','/u01/app/oracle/oradata/orcl/pdb2') storage unlimited ; Pluggable database created. SQL>
確認してみると、「MOUNT」モードで正常に作成できています。
他のごみデータは気にしないでくださいね。。
SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 ORCLPDB READ WRITE NO 4 TESTPDB MOUNTED 5 PDB2 MOUNTED SQL>
ではデータベースをオープンします。
SQL> alter pluggable database PDB2 open; Pluggable database altered. SQL>
オープンしたので接続します。
接続にはAlter文を使います。
SQL> alter session set container=pdb2; Session altered. SQL>
セッションが変更されました。
CDB$ROOTに戻りたい時は、container=CDB$ROOTで戻れます。
SQL> show con_name CON_NAME ------------------------------ PDB2 SQL>
無事に接続が出来ました。
では共通ユーザからはどうでしょうか。
確認のために共通ユーザをもう一つ作成します。
共通ロールのみ付与します。
ちなみに共通ユーザはCDBのみでしか作成できません。
SQL> create user C##test identified by test User created. SQL> grant C##cdb_dba to C##test; Grant succeeded. SQL>
正常に作成できました。
ではそれぞれで接続します。
- C##testユーザの場合
[oracle@oracle12c pdbseed]$ sqlplus C##test/test SQL*Plus: Release 12.1.0.2.0 Production on Sat Apr 7 22:53:21 2018 Copyright (c) 1982, 2014, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options SQL> SQL> SQL> alter session set container=pdb2; ERROR: ORA-01031: insufficient privileges SQL>
CDBに接続できましたが、プラガブル・データベースへの接続は失敗しています。
権限不足のエラーが発生しました。
- C##nikaidoユーザの場合
[oracle@oracle12c pdbseed]$ sqlplus C##nikaido/subaru SQL*Plus: Release 12.1.0.2.0 Production on Sat Apr 7 22:54:52 2018 Copyright (c) 1982, 2014, Oracle. All rights reserved. Last Successful login time: Sat Apr 07 2018 22:47:39 +09:00 Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options SQL> SQL> SQL> alter session set container=pdb2; Session altered. SQL>
正常にpdb2に接続が出来ました。
コンテナデータベースへの接続権限だけではなく、コンテナ・データベース全体への接続権限も必要になる事が分かりました。
次回は、tnsnames.oraの修正とOracle Clientからの接続について書いていきたいと思います。