株式会社コーソル

コーソルDatabaseエンジニアのブログ

技術ブログ

通常のDBをPDBとしてplugする

プラガブルデータベースではない、通常のデータベースをPDBとしてCDBにplugしてみます。

基本的には以下のマニュアルに記載の手順を実行するだけです。

plugしようとしている通常のデータベースにSYSユーザーで接続し、テスト用のユーザーとデータを作成します。

[oracle@l63x64a ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on 金 8月 2 04:25:57 2013

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

アイドル・インスタンスに接続しました。

SQL> startup
ORACLEインスタンスが起動しました。

Total System Global Area  417546240 bytes
Fixed Size                  2289064 bytes
Variable Size             268436056 bytes
Database Buffers          142606336 bytes
Redo Buffers                4214784 bytes
データベースがマウントされました。
データベースがオープンされました。

SQL> CREATE USER rywatabe IDENTIFIED BY rywatabe;

ユーザーが作成されました。

SQL> GRANT DBA TO rywatabe;
権限付与が成功しました。

SQL> create table rywatabe.test (n number);

表が作成されました。

SQL> insert into rywatabe.test values(1);

1行が作成されました。

SQL> commit;

コミットが完了しました。

インスタンスをshutdownして、読み取り専用でOPENし、DBMS_PDB.DESCRIBEを実行して メタデータを作成します。


SQL> SHUTDOWN IMMEDIATE
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> startup mount
ORACLEインスタンスが起動しました。

Total System Global Area  417546240 bytes
Fixed Size                  2289064 bytes
Variable Size             268436056 bytes
Database Buffers          142606336 bytes
Redo Buffers                4214784 bytes
データベースがマウントされました。
SQL> ALTER DATABASE OPEN READ ONLY;

データベースが変更されました。

SQL> SELECT name, value FROM V$PARAMETER WHERE NAME = 'compatible';

NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
compatible
12.1.0.0.0

SQL> exec DBMS_PDB.DESCRIBE(pdb_descr_file => '/var/tmp/c101.xml');

PL/SQLプロシージャが正常に完了しました。

SQL> SHUTDOWN IMMEDIATE
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL>

次にコンテナデータベースに接続し、CREATE PLUGGABLE DATABASE USING ... でデータベースをplugします。

SYS@c101cdb##CDB$ROOT> SELECT PDB_NAME, STATUS FROM CDB_PDBS;

PDB_NAME                 STATUS
------------------------ -------------
PDB$SEED                 NORMAL
PDB1                     NEW

SYS@c101cdb##CDB$ROOT> CREATE PLUGGABLE DATABASE pdb2 USING '/var/tmp/c101.xml'
  2    COPY
  3      FILE_NAME_CONVERT = ('/u02/app/oracle/oradata/c101/', '/u02/app/oracle/oradata/c101cdb/pdb2/');

プラガブル・データベースが作成されました。

SYS@c101cdb##CDB$ROOT> SELECT PDB_NAME, STATUS FROM CDB_PDBS;

PDB_NAME                 STATUS
------------------------ -------------
PDB2                     NEW
PDB$SEED                 NORMAL
PDB1                     NEW

この後、PDBで @?/rdbms/admin/noncdb_to_pdb.sql を実行します。

SYS@c101cdb##PDB2> @?/rdbms/admin/noncdb_to_pdb.sql
SYS@c101cdb##PDB2> SET SERVEROUTPUT ON
SYS@c101cdb##PDB2> SET FEEDBACK 1
SYS@c101cdb##PDB2> SET NUMWIDTH 10
SYS@c101cdb##PDB2> SET LINESIZE 80
SYS@c101cdb##PDB2> SET TRIMSPOOL ON
  : 
  : 様々な処理が実行されます
  : 
SYS@c101cdb##PDB2> -- leave the PDB in the same state it was when we started
SYS@c101cdb##PDB2> BEGIN
  2    execute immediate '&open_sql &restricted_state';
  3  EXCEPTION
  4    WHEN OTHERS THEN
  5    BEGIN
  6      IF (sqlcode <> -900) THEN
  7        RAISE;
  8      END IF;
  9    END;
 10  END;
 11  /

PL/SQLプロシージャが正常に完了しました。

SYS@c101cdb##PDB2>
SYS@c101cdb##PDB2> WHENEVER SQLERROR CONTINUE;

引き続きDBMS_PDB.SYNC_PDB();を実行します。

SYS@c101cdb##PDB2> ALTER PLUGGABLE DATABASE pdb2 OPEN READ WRITE RESTRICTED;

プラガブル・データベースが変更されました。

SYS@c101cdb##PDB2> ALTER SESSION SET CONTAINER = pdb2;

セッションが変更されました。

SYS@c101cdb##PDB2> exec DBMS_PDB.SYNC_PDB();

PL/SQLプロシージャが正常に完了しました。

SYS@c101cdb##PDB2> SHUTDOWN IMMEDIATE
プラガブル・データベースがクローズされました。

PDBにplug前のデータがあることを確認します。

SYS@c101cdb##PDB2> STARTUP
プラガブル・データベースがオープンされました。SYS@c101cdb##PDB2>
SYS@c101cdb##PDB2> col name format a16
SYS@c101cdb##PDB2> col network_name format a24
SYS@c101cdb##PDB2> col pdb format a8
SYS@c101cdb##PDB2> SELECT name, network_name, pdb, con_id FROM V$SERVICES;

NAME             NETWORK_NAME             PDB          CON_ID
---------------- ------------------------ -------- ----------
pdb2.world       pdb2.world               PDB2              4

1行が選択されました。

SYS@c101cdb##PDB2> conn rywatabe/rywatabe@localhost:12101/pdb2.world
接続されました。

1行が選択されました。

RYWATABE@localhost:12101/pdb2.world##PDB2> SELECT * FROM test;

         N
----------
         1

1行が選択されました。

RYWATABE@localhost:12101/pdb2.world##PDB2>

プロフィール

On7tWW6m1Ul4

渡部 亮太

・Oracle ACE
・AWS Certified Solutions Architect - Associate
・ORACLE MASTER Platinum Oracle Database 11g, 12c 他多数

カテゴリー

アーカイブ