原文はこちら。
https://blogs.oracle.com/UPGRADE/entry/create_a_pdb_directly_from
データベースをOracle Single-/Multitenantに移行するための隠された機能がドキュメントに記載されています。
ドキュメントを読んでみると、ドキュメントではあまり言及していません。例えば要件や正しい構文、例がありません。
...
https://blogs.oracle.com/UPGRADE/entry/create_a_pdb_directly_from
データベースをOracle Single-/Multitenantに移行するための隠された機能がドキュメントに記載されています。
NON$CDB
オプションを使ってリモートクローンを実行する
ドキュメントを読んでみると、ドキュメントではあまり言及していません。例えば要件や正しい構文、例がありません。Oracle® Database SQL Language Reference 12c Release 1 (12.1)
Database SQL Language Reference
CREATE PLUGGABLE DATABASE
http://docs.oracle.com/database/121/SQLRF/statements_6010.htm#SQLRF55686
Oracle® Database SQL言語リファレンス 12cリリース1 (12.1)
CREATE PLUGGABLE DATABASE
http://docs.oracle.com/cd/E57425_01/121/SQLRF/statements_6010.htm#SQLRF55686
FROM
句までスクロールしてみましょう。http://docs.oracle.com/database/121/SQLRF/statements_6010.htm#SQLRF55801(英語)
http://docs.oracle.com/cd/E57425_01/121/SQLRF/statements_6010.htm#SQLRF55801(日本語)
...
FROM NON$CDB@dblink
... このオプションは、スタンドアロンデータベースをプラグインし、プラガブルデータベースにすることができる、ということのようです。面白そうですね、やってみましょう。Test 1 - Oracle Database 11.2.0.4をプラグインしてみる
ドキュメントにはどのリリースに限られているのか記載がないので、まずはシンプルにOracle Database 11.2.0.4で試してみました。- 既存のCDBから11.2.0.4データベースに向けてデータベースリンクを作成しました。
- SOURCEDB を読取り専用モードで起動しました。
- プラガブルデータベースをSOURCEDBから作成しようとしました・・・が、失敗しました。
SQL> create pluggable database PDB1 from non$cdb@sourcedb;
create pluggable database PDB1 from non$cdb@sourcedb
*
ERROR at line 1:
ORA-17627: ORA-28002: the password will expire within 7 days
ORA-17629: Cannot connect to the remote database server
Test 2 - ファイルシステムのOracle Database 12.1.0.2をプラグインしてみる
Thanks to Tim Hall のブログエントリのおかげで、謎が解けました。Multitenant : Clone a Remote PDB or Non-CDB in Oracle Database 12c (12.1.0.2) - Cloning a Remote Non-CDBまず、Test 1が失敗した理由は単純なことで、Oracle Database 11.2.0.4で
http://oracle-base.com/articles/12c/multitenant-clone-remote-pdb-or-non-cdb-12cr1.php#cloning-remote-non-cdb
CREATE PLUGGABLE DATABASE
の権限を持つユーザーを設定していなかったためです。しかしこれは後ほどわかった要件です。- SOURCEDBにPluggable Databaseを作成する権限を有するユーザーが必要です。
GRANT CREATE PLUGGABLE DATABASE TO sourcedb_user;
- SOURCEDBをシャットダウンした後に、読取り専用モードで立ち上げます。
SHUTDOWN IMMEDIATE;
STARTUP OPEN READ ONLY; - CDBからSOURCEDBに向けてデータベースリンクを作成します。
CREATE DATABASE LINK sourcedblink
CONNECT TO sourcedb_user IDENTIFIED BY password USING 'upgr12'; - ここまでの準備のあと、スタンドアロンのUPGR12データベースからプラガブルデータベースを作成します。
CREATE PLUGGABLE DATABASE pdb_upgr12 FROM NON$CDB@sourcedblink
FILE_NAME_CONVERT=('/oradata/UPGR12','/oradata/CDB2/pdb_upgr12'); - しかし、新たに作成したPDBのステータスをチェックすると、OPENの状態ではあるものの、RESTRICTモードでしかないことがわかるはずです。そのため、
noncdb_to_pdb.sql
を実行する必要があります。新規作成したPDBに接続し、スクリプトを実行します。ALTER SESSION SET CONTAINER=pdb_upgr12;
@?/rdbms/admin/noncdb_to_pdb.sql
まとめ
このコマンドを使うと、簡単にスタンドアロンデータベースをコンテナデータベースにプラグインすることができますが、以下のような制限事項があります。- 移行元のデータベースは少なくともOracle Database 12.1.0.1以上でなければならない
- 移行元のデータベースは同一OSプラットフォーム上になければならない
- 移行元のデータベースはコンテナデータベースと同一バージョンでなければならない
noncdb_to_pdb.sql
スクリプトの実行が必要