Skip to main content
NetApp Solutions
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

将数据库从内部迁移到Azure云

贡献者

由于Oracle决定逐步淘汰单实例数据库、许多组织已将单实例Oracle数据库转换为多租户容器数据库。这样、可以使用最大可用性选项将一组称为PDB的容器数据库轻松地重新定位到云、从而最大限度地减少迁移期间的停机时间。

但是、如果您仍有一个Oracle数据库实例、则可以先将其转换为多租户容器数据库、然后再尝试PDB重新定位。

以下各节详细介绍了在这两种情况下将内部Oracle数据库迁移到Azure云的相关信息。

将单个实例非CDB转换为多租户CDB中的PDB

如果您仍有单实例Oracle数据库、则无论是否要将其迁移到云、都必须将其转换为多租户容器数据库、因为Oracle不久将停止支持单实例数据库。

以下过程会将单个实例数据库作为可插拔数据库或PDB插入容器数据库。

  1. 在与单实例数据库相同的主机上单独构建Shell容器数据库 ORACLE_HOME

  2. 关闭单个实例数据库并在只读模式下重新启动它。

  3. 运行 DBMS_PDB.DESCRIBE 用于生成数据库元数据的操作步骤。

    BEGIN
      DBMS_PDB.DESCRIBE(
        pdb_descr_file => '/home/oracle/ncdb.xml');
    END;
    /
  4. 关闭单实例数据库。

  5. 启动容器数据库。

  6. 运行 DBMS_PDB.CHECK_PLUG_COMPATIBILITY 用于确定非CDB是否与CDB兼容的函数。

    SET SERVEROUTPUT ON
    DECLARE
      compatible CONSTANT VARCHAR2(3) :=
        CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
               pdb_descr_file => '/disk1/oracle/ncdb.xml',
               pdb_name       => 'NCDB')
        WHEN TRUE THEN 'YES'
        ELSE 'NO'
    END;
    BEGIN
      DBMS_OUTPUT.PUT_LINE(compatible);
    END;
    /

    如果输出为Yes、则表示非CDB兼容、您可以继续执行下一步。

    如果输出为no、则表示非CDB不兼容、您可以检查 PDB_PLUG_IN_VIOLATIONS 查看其不兼容的原因。必须先更正所有违规、然后才能继续。例如、任何版本或修补程序不匹配的问题都应通过运行升级或opatch实用程序来解决。更正违规后、运行 DBMS_PDB.CHECK_PLUG_COMPATIBILITY 再次确认、以确保非CDB与CDB兼容。

  7. 插入单个实例非CDB。

    CREATE PLUGGABLE DATABASE ncdb USING '/home/oracle/ncdb.xml'
      COPY
      FILE_NAME_CONVERT = ('/disk1/oracle/dbs/', '/disk2/oracle/ncdb/')
    ;
    备注 如果主机上没有足够的空间、则 NOCOPY 选项可用于创建PDB。在这种情况下、单实例非CDB在作为PDB插入后不可用、因为PDB已使用原始数据文件。请确保在转换之前创建备份、以便在发生任何错误时可以恢复运行。
  8. 如果源单实例非CDB与目标CDB之间的版本不同、则在转换后开始PDB升级。对于相同版本的转换、可以跳过此步骤。

    sqlplus / as sysdba;
    alter session set container=ncdb
    alter pluggable database open upgrade;
    exit;
    dbupgrade -c ncdb -l /home/oracle

    查看中的升级日志文件 /home/oracle 目录。

  9. 打开可插拔数据库、检查PDB插件违规、然后重新编译无效对象。

    alter pluggable database ncdb open;
    alter session set container=ncdb;
    select message from pdb_plug_in_violations where type like '%ERR%' and status <> 'RESOLVED';
    $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -n 1 -c 'ncdb' -e -b utlrp -d $ORACLE_HOME/rdbms/admin utlrp.sql
  10. 执行 noncdb_to_pdb.sql 更新数据词典。

    sqlplus / as sysdba
    alter session set container=ncdb;
    @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql;

    关闭并重新启动容器数据库。ndb已退出受限模式。

通过PDB重新定位将内部Oracle数据库迁移到Azure

使用最大可用性选项的Oracle PDB重新定位采用PDB热克隆技术、这样、在PDB复制到目标时、可以使用源PDB。切换时、用户连接会自动重定向到目标PDB。因此、无论PDB的大小如何、都可以最大限度地减少停机时间。NetApp提供了一个基于Ansible的工具包、用于自动执行迁移操作步骤。

  1. 在Azure公共云中使用相同版本和修补程序级别在Azure虚拟机上创建CDB。

  2. 从Ansible控制器克隆自动化工具包的副本。

    git clone https://github.com/NetApp-Automation/na_ora_aws_migration.git
  3. 阅读README文件中的说明。

  4. 为源和目标Oracle服务器配置Ansible主机变量文件、并为数据库服务器主机的配置文件配置名称解析。

  5. 在Ansible控制器上安装Ansible控制器前提条件。

    ansible-playbook -i hosts requirements.yml
    ansible-galaxy collection install -r collections/requirements.yml --force
  6. 对内部服务器执行任何迁移前任务。

    ansible-playbook -i hosts ora_pdb_relocate.yml -u admin -k -K -t ora_pdb_relo_onprem
    备注 admin用户是内部Oracle服务器主机上具有sudo权限的管理用户。管理员用户使用密码进行身份验证。
  7. 执行从内部环境到目标Azure Oracle主机的Oracle PDB重新定位。

    ansible-playbook -i hosts ora_pdb_relocate.yml -u azureuser --private-key db1.pem -t ora_pdb_relo_primary
    备注 Ansible控制器可以位于内部或Azure云中。控制器需要连接到内部Oracle服务器主机和Azure Oracle VM主机。内部Oracle服务器主机和Azure Oracle VM主机之间的Oracle数据库端口(如1521)处于打开状态。

其他Oracle数据库迁移选项

有关其他迁移选项、请参见Microsoft文档: "Oracle数据库迁移决策过程"