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

数据库从本地迁移到 Azure 云

贡献者 kevin-hoke

由于 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;

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

通过 PDB 迁移将本地 Oracle 数据库迁移到 Azure

具有最大可用性选项的 Oracle PDB 重定位采用了 PDB 热克隆技术,该技术允许在 PDB 复制到目标时源 PDB 可用。在切换时,用户连接会自动重定向到目标 PDB。因此,无论 PDB 的大小如何,停机时间都可以最小化。 NetApp提供了基于 Ansible 的工具包,可自动执行迁移过程。

  1. 在 Azure 公有云中的 Azure VM 上创建具有相同版本和修补程序级别的 CDB。

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

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

  4. 为源和目标 Oracle 服务器配置 Ansible 主机变量文件以及用于名称解析的 DB 服务器主机的配置文件。

  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 数据库迁移决策过程"