將資料庫升級並移轉至雲端

使用此單一步驟的直接移轉程序,您可以在幾近零停機以及同時將資料庫升級至最新版本的情況下,將企業內部部署資料庫移轉至Oracle Cloud Infrastructure。此移轉程序可減少成本、端對端移轉時間,以及移轉資料庫所需的測試成本。

升級至 Oracle Database 18c

將 18c Oracle 本位目錄底下之 11.2.0.3 資料庫的 RMAN 備份回復至Oracle Database 18c。

使用Oracle Database Exadata Cloud Service時,假設目標容器資料庫已經建立。從內部部署資料庫進行的備份會升級為 18c,並插入為此預先建立之容器中的可插拔資料庫 (PDB)。雖然內部部署資料庫備份為 11.2.0.3,但是您可以在Oracle Database Exadata Cloud Service的 18c DB 本位目錄中回復它。

定義 Set until SCN 時,請使用從來源 RMAN 備份擷取的 SCN。這是為了確保我們將資料庫回復至特定時間點,這也是開始從Oracle GoldenGate套用變更的起點。

  1. 回復 18c Oracle 本位目錄底下之來源 11.2.0.3 資料庫的 RMAN 備份。

    僅回復資料庫。回復和復原後不開啟資料庫。這是因為我們想要將資料庫升級至 18c。

    執行 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 版本 18c。

    使用 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 子句時,屬於非容器資料庫的同一組資料檔會儲存至可插式資料庫,而不是執行複製作業。這可以節省大型資料庫的時間與空間。

Plugin 作業的非容器資料庫必須處於 READ ONLY 模式。
  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 Infrastructure上的Oracle Database 18c。
  2. 如果是轉換,建議您將雲端Oracle Database 18c 的反向複製路徑建立到Oracle Database 11.2.0.3 企業內部部署。轉換之後,必須針對交易啟用反向複製路徑,才能從雲端資料庫流向至企業內部部署 11.2.0.3 資料庫。