データベースのクラウドへのアップグレードおよび移行

この単一ステップ直接移行プロシージャを使用すると、オンプレミス・データベースをほぼゼロの停止時間でOracle Cloud Infrastructureに移行でき、同時にデータベースを最新バージョンにアップグレードできます。この移行プロシージャは、データベースの移行に必要なコスト、エンドツーエンドの移行時間およびテスト作業を削減します。

Oracle Database 18 cへのアップグレード

18 c Oracle Homeの下にあるソース11.2.0.3データベースのRMANバックアップをリストアして、Oracle Database 18 cにアップグレードします。

Oracle Database Exadata Cloud Serviceでは、ターゲット・コンテナ・データベースがすでに作成されているとみなされます。オンプレミス・データベースから取得されたバックアップは18 cにアップグレードされ、事前に作成されたこのコンテナにプラガブル・データベース(PDB)として接続されます。オンプレミス・データベースのバックアップは11.2.0.3ですが、Oracle Database Exadata Cloud Serviceの18 c DBホームでリストアできます。

Set until SCNを定義する際に、ソースのRMANバックアップから取得されたSCNを使用します。これは、データベースを特定の時点までリストアするためです。この開始点は、Oracle GoldenGateから変更のデルタの適用を開始することです。

  1. 18 c Oracle Homeの下にあるソース11.2.0.3データベースのRMANバックアップをリストアします。

    データベースのリストアのみ。リストアおよびリカバリ後にデータベースをオープンしないでください。これは、データベースを18 cにアップグレードするためです。

    RMANコマンドの実行時には、Set until SCNの値はソースのRMANバックアップから取得されたSCNです。

    RMAN> restore controlfile from '/rman_backups/cntrl_882_1_1005936032';
    
    RMAN> alter database mount;
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo1_1.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo1_2.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo2_1.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo2_2.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo3_1.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo3_2.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo30_1.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo30_2.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo31_1.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo31_2.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo32_1.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo32_2.log'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo40_1.dbf'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo40_2.dbf'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb/bildb/onlinelog/thread1/redo41_1.dbf'' to ''+RECOC1''";
    SQL "alter database rename file ''/oradata/bildb_mirr/bildb/onlinelog/thread1/redo41_2.dbf'' to ''+RECOC1''";
    
    RMAN> run
    {
    allocate channel ch1 type DISK ;
    allocate channel ch24 type DISK ;
    set until scn 2579195632075;
    set newname for database to '+DATAC1';
    restore database;
    switch datafile all;
    switch tempfile all;
    recover database;
    release channel ch1;
    release channel ch24;
    }
    
  2. Oracle Databaseバージョン18 cにアップグレードします。

    upgradeオプションを指定してデータベースをオープンし、dbupgradeコマンドを実行します。

    SQL> alter database open resetlogs upgrade
    $ORACLE_HOME/bin/dbupgrade -n 20
    SQL> @?/rdbms/admin/utlu122s.sql
    SQL> @?/rdbms/admin/catuppst.sql 
    SQL> @?/rdbms/admin/utlrp.sql
    
  3. ターゲット・コンテナで次の文を実行して、タイムゾーン・バージョンを検証します。
    SQL> select * from v$timezone_file;
    
    FILENAME                VERSION     CON_ID
    -------------------- ---------- ----------
    timezlrg_31.dat              31          0
  4. ソース・データベースのタイムゾーンが最新のタイムゾーンではない場合、アップグレード済データベースのタイムゾーンをクラウド・データベース内の最新のタイムゾーンに更新します。
    たとえば、ソース・データベースのタイムゾーンが14の場合、クラウドの最新のタイムゾーン・バージョンに更新する必要があります。

データベースをコンテナ・データベースに変換します

非コンテナ・データベースを、プラガブル・データベース(PDB)としてターゲット・コンテナに組み込みます。

タイムゾーンの更新後、非コンテナ・データベースは、ターゲット・コンテナにプラガブル・データベースとして組み込む準備ができます。データベース・サイズが大きくなるため、NOCOPY句を使用してPDBを作成できます。NOCOPY句を使用する場合、非コンテナ・データベースに属する同じデータ・セットが、コピー操作を実行するかわりにプラガブル・データベースに再シードされます。これにより、大容量データベースの時間とスペースを節約できます。

非コンテナ・データベースは、プラグイン操作のために読取り専用モードである必要があります。
  1. 非コンテナ・データベースでプラガブル・データベース(PDB)ディスクリプタ・ファイルを生成します。
    SQL> alter database open read only;
    SQL>BEGIN
    DBMS_PDB.DESCRIBE(pdb_descr_file => '/tmp/bildb.xml');
    END;
    /
    SQL> shutdown immediate
    
  2. 非コンテナ・データベース・コンテナでPDBを作成し、セッションを変更します。
    SQL> SET SERVEROUTPUT ON;
    DECLARE
    compatible CONSTANT VARCHAR2(3) := CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(pdb_descr_file => '/tmp/bildb.xml')
    WHEN TRUE THEN 'YES'
    ELSE 'NO'
    END;
    BEGIN
    DBMS_OUTPUT.PUT_LINE(compatible);
    END;
    /
    SQL> CREATE PLUGGABLE DATABASE bildb USING '/tmp/bildb.xml' SOURCE_FILE_NAME_CONVERT=('+DATA/bildb/DATAFILE','+DATA/bildb/DATAFILE','+DATA/bildb/TEMPFILE','+DATA/bildb/TEMPFILE') NOCOPY TEMPFILE REUSE;
    Pluggable database created.
    SQL>
    
    SQL> alter session set container=bildb;
    Session altered.
    
    SQL> show con_name
    CON_NAME
    ------------------------------
    BILDB
  3. Medataを更新します。
    SQL> @/u01/app/oracle/product/18.0.0.0/dbhome_1/rdbms/admin/noncdb_to_pdb.sql

ソースとの同期化

ターゲット・データベースで変更の同期を開始し、変更の差分を適用してデータを移行します。

データベースをリストアし、ターゲット・コンテナにプラガブル・データベースとしてプラグインすると、Oracle GoldenGateの初期ロードが完了します。ソース・データベースから取得したRMANバックアップで取得したものと同じSCNから変更の同期化を開始します。

  1. 変更同期化のためにターゲット・データベースでreplicatコマンドを起動します。
    GGSCI (mlib-gghubtgt) 2> START REPLICAT rep18c, ATCSN 2579195632075
    レプリケーションの開始後、オンプレミス・データベースからの変更はOracle Cloud InfrastructureOracle Database 18 cへの適用を開始します。
  2. カットオーバーの場合は、クラウドのOracle Database 18 cからOracle Database 11.2.0.3オンプレミスへの逆向きレプリケーションパスを作成することをお薦めします。カットオーバーの後、トランザクションがクラウド・データベースからオンプレミスの11.2.0.3データベースに流れるようにするには、逆向きレプリケーション・パスを有効にする必要があります。