升级数据库并将其移植到云

使用此单步直接迁移过程,可以在接近零停机的情况下将内部部署数据库迁移到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 数据库主目录中还原它。

定义 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 子句时,属于非维护程序数据库的相同数据文件集将转发到插接式数据库,而不是执行复制操作。这样可以节省大量数据库的时间和空间。

对于插件操作 , 非维护程序数据库必须处于“只读”模式。
  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 数据库的交易启用反向复制路径。