[Database] Create a PDB directly from a stand-alone database?

原文はこちら。
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で試してみました。
  1. 既存のCDBから11.2.0.4データベースに向けてデータベースリンクを作成しました。
  2. SOURCEDB を読取り専用モードで起動しました。
  3. プラガブルデータベースを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
http://oracle-base.com/articles/12c/multitenant-clone-remote-pdb-or-non-cdb-12cr1.php#cloning-remote-non-cdb
まず、Test 1が失敗した理由は単純なことで、Oracle Database 11.2.0.4でCREATE PLUGGABLE DATABASEの権限を持つユーザーを設定していなかったためです。しかしこれは後ほどわかった要件です。
  1. SOURCEDBにPluggable Databaseを作成する権限を有するユーザーが必要です。
    GRANT CREATE PLUGGABLE DATABASE TO sourcedb_user;
  2. SOURCEDBをシャットダウンした後に、読取り専用モードで立ち上げます。
    SHUTDOWN IMMEDIATE;
    STARTUP OPEN READ ONLY;
  3. CDBからSOURCEDBに向けてデータベースリンクを作成します。
    CREATE DATABASE LINK sourcedblink
    CONNECT TO sourcedb_user IDENTIFIED BY password USING 'upgr12';
  4. ここまでの準備のあと、スタンドアロンのUPGR12データベースからプラガブルデータベースを作成します。
    CREATE PLUGGABLE DATABASE pdb_upgr12 FROM NON$CDB@sourcedblink
    FILE_NAME_CONVERT=('/oradata/UPGR12','/oradata/CDB2/pdb_upgr12');
  5. しかし、新たに作成した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スクリプトの実行が必要
最後に、DBMS_PDB.DESCRIBEを使ってXMLマニフェストファイルを作成するという特別なステップを回避できることが唯一の簡略化のように見えますが、それ以外では特にメリットが見いだせません。

0 件のコメント:

コメントを投稿