准备 Oracle RAC

要准备将 Oracle Real 应用程序集群(Oracle RAC)数据库迁移到 Oracle Cloud Infrastructure 服务器,必须先执行多个准备任务,然后才能开始迁移。

为数据库实例添加条目

在 Oracle RAC 节点上更新/etc/oratab文件并添加数据库实例的条目,如下所示:

  1. 使用 SSH 可登录到要移植的源数据库(主数据库)的第一个节点。
  2. 更新 /etc/oratab,通过执行以下操作将数据库实例 ID 添加到数据库条目:
    1. 编辑 /etc/oratab:
      sudo vi /etc/oratab
    2. 按以下格式添加数据库条目:
      $ORACLE_SID:$ORACLE_HOME:N
      节点 1 示例:
      orcl1:/u01/app/oracle/product/12.1.0.2/dbhome_1:N
      节点 2 示例:
      orcl2:/u01/app/oracle/product/12.1.0.2/dbhome_1:N
  3. 运行 oraenv 脚本以设置数据库的环境变量,例如 $ ORACLE_HOME
    . oraenv
  4. 对第二个 Oracle RAC 节点重复上述步骤。

请确保要移植的数据库正在运行

在开始迁移过程之前,必须检查要迁移的源数据库(主数据库)是否正在运行。

  1. 使用 SSH 登录到要移植的源数据库(主数据库)所在的服务器。
  2. 以数据库软件所有者 oracle 身份登录。
    sudo su - oracle
  3. 执行 oraenv 脚本 , 该脚本设置$ ORACLE_HOME 环境变量。
    . oraenv
  4. 转到 $ORACLE_HOME 位置。
    cd $ORACLE_HOME

    如果尚未设置 $ORACLE_HOME 位置,则使用 oraenv 脚本(位于 /usr/local/bin 目录中)设置环境(包括 $PATH),因此可以在不使用完整路径名的情况下解析 lsnrctlsqlplus 命令。

  5. 请检查监听程序状态。
    srvctl status listener
  6. 如果监听程序未运行(例如,输出出有错误 TNS-12541: TNS:no listener),则切换到操作系统用户网格并启动监听程序。
    sudo su - grid  
    srvctl start listener
  7. 请确保数据库正在运行。
    sqlplus / as sysdba
    此命令应连接到数据库实例,并且会显示 SQL> 提示。
  8. 检查数据库是否以读写模式运行
    SELECT NAME, OPEN_MODE FROM V$DATABASE;

    此时将显示类似于以下内容的输出:

    NAME              OPEN_MODE
    --------------    ---------
    source_db_name    READ WRITE
  9. 退出 SQL*Plus
    EXIT

确保源数据库中的所有数据库组件都安装在目标数据库中

通过查询 DBA_REGISTRY 数据字典视图,可以找到在源数据库(主数据库)上安装的组件。

  1. 使用 SSH 登录到源数据库服务器。
  2. 以管理员用户身份登录到 SQL*Plus。
    例如:
    sqlplus sys / as sysdba
    Password: password
  3. 记录显示在左侧标帜中的软件版本。
  4. 退出 SQL*Plus。
    EXIT
  5. 使用 opatch 产品清单命令查找已应用的最新补丁程序集。
    例如:
    $ORACLE_HOME/OPatch/opatch lsinventory
  6. 在源数据库的第二个节点以及目标数据库(备用数据库)的两个节点上重复这些步骤。
  7. 源数据库和目标数据库的两个节点的第二个节点应安装相同或更高版本。

为 Oracle Cloud Infrastructure 系统创建备用数据库

除了当前位于此系统上的数据库之外 , 还必须在 Oracle Cloud Infrastructure 上创建备用数据库(目标数据库)。用于创建此数据库的创建过程在预配期间创建启动数据库。使用站点所需的主机名、配置和 CPU 计数创建数据库系统。

生成 SSH 密钥对

要获得对 Oracle Cloud Infrastructure Virtual Machine 数据库系统上的工具、实用程序和其他资源的本地访问权限,可以使用 Secure Shell (SSH)客户机软件建立安全连接并以用户 oracle 或用户 opc 身份登录。要使用 SSH 访问备用虚拟机数据库系统 , 必须使用 SSH 密钥对而非口令来验证远程用户。密钥对包含私有密钥和公共密钥。您将私有密钥保留在计算机上,并在每次启动实例时提供公共密钥。要创建密钥对,可以在 UNIX 样式系统(包括 Linux、Solaris、BSD 和 OS X)上使用第三方工具,也可以在 Windows 上使用 PuTTY 密钥生成器等 OpenSSH。

创建虚拟云网络

在使用 Oracle Cloud Infrastructure 时,第一个步骤是为云资源设置虚拟云网络(VCN)。在创建备用数据库之前,确保您已设置 VCN。有关如何创建 VCN 的详细信息,请参阅 Oracle Cloud Infrastructure 文档。

验证您的租户支持的虚拟机数据库配置

注册 Oracle Cloud Infrastructure 时,将为租户配置一组服务限制。服务限制是资源上设置的限额或津贴。例如,您的租户允许每个可用性域的最大计算实例数。在购买 Oracle Cloud Infrastructure 时,通常会与 Oracle 客户代表建立这些限制。

创建备用虚拟机数据库系统时,必须确保所选的虚拟机数据库配置准确地映射到主(源)实例。还必须确保您的租户支持所选配置。

验证您的租户限制和使用情况(按区域):

注:

如果给定资源类型对于每个可用性域有限制,则显示每个可用性域的限制和使用情况。
  1. 打开 Oracle Cloud Services 仪表板。打开用菜单并单击租户 : < your_tenancy_name >。
  2. 单击页面左侧的服务限制

    此时将显示特定区域的资源限制和使用情况(按服务细分)。

  3. 单击数据库, 并验证租户支持的虚拟机数据库配置。

备用数据库配置的选择应该是与租户中支持的数据库形状之间的紧密映射到主(源)实例配置的形状组合。虚拟机数据库系统以固定数据大小调整形状提供。确保为创建数据库而选择的形状能够容纳源数据库以及任何将来的大小调整要求。滑块指示器规则是使用与源数据库大小相似或更高的形状。

创建备用虚拟机数据库系统

注:

请确保使用与主数据库(源数据库)相同的参数(例如字符集)创建数据库。
  1. 登录到 Oracle Cloud Services 面板
  2. 打开导航菜单。在服务下,单击数据库 (不是经典数据库)。
  3. 数据库下,单击裸金属、VM 和 Exadata
  4. 选择要处理的区间
  5. 单击启动数据库系统
  6. 启动数据库系统向导中,输入以下信息:
    1. 数据库系统信息
      • 间:默认情况下,数据库系统在当前区间中启动,您可以使用该区间中的网络资源。如果要为数据库系统 , 网络和子网资源启用区间选择 , 请在对话框中单击处链接。
      • 显示名称:数据库系统的友好显示名称。名称不必唯一。Oracle Cloud 标识符(OCID)将唯一标识数据库系统。
      • 可用性域:数据库系统所在的可用性域。
      • 配置类型: 选择虚拟机
      • :用于启动数据库系统的形状。形状确定数据库系统的类型以及分配给系统的资源。选择从上一部分标识的虚拟机数据库配置。

      • 节点总数:数据库系统中的节点数。该数字取决于所选的形状。必须指定 2。
      • Oracle Database 软件版本:数据库系统支持的数据库版本。选择等于或高于主数据库的数据库版本。

      • 可用存储大小(GB):输入至少与主(源)服务器大小相同的大小。
      • 可证类型:要用于数据库系统的许可证类型。您的选择会影响计量以便开单。

        • 含许可证表示云服务的成本包含数据库服务的许可证。
        • 自带许可证(BYOL)表示您是带有无限制许可协议或非无限制许可协议的 Oracle Database 客户,并且希望与 Oracle Cloud Infrastructure 一起使用许可证。此操作需要删除单独的内部部署许可证和云许可证。
      • SSH 公共密钥:要用于对数据库系统进行 SSH 访问的密钥对的公共密钥部分。使用您在上一部分中生成的公共密钥。
    2. 网络信息
      • 虚拟云网络: 要在其中启动数据库系统的 VCN。选择您在上一区域中创建的 VCN。
      • 子网划分:在云网络中包含子网的划分,用于将数据库系统附加到。
      • 客户机子网: 数据库系统应附加到的子网。

      • 机名前缀:您为数据库系统选择的主机名。主机名必须以字母字符开头 , 并且只能包含字母数字字符和连字符(-)。

        • 允许的最大字符数为 30。主机名在子网中必须唯一。如果不唯一,则数据库系统将无法预配。

      • 主机域名:数据库系统的域名。如果所选子网使用 Oracle 提供的互联网和 VCN 解析程序进行 DNS 名称解析,则此字段显示子网的域名,无法更改。否则,可以提供您选择的域名。不允许使用连字符(-)。

      • 主机和域 URL:组合主机名和域名以显示数据库的全限定域名(FQDN)。最大长度为 64 字符。
    3. 数据库信息
      • 数据库名称:数据库的名称。数据库名必须以字母字符开头 , 最多可包含 8 个字母数字字符。不允许使用特殊字符。指定与主数据库(源数据库)名称不同的名称。
      • 数据库版本:在数据库系统上启动时在其上创建的初始数据库的版本。数据库系统处于活动状态后,您可以在其上创建其他数据库。可以在数据库系统上混合使用数据库版本,但不能混合版本。
      • PDB 名称:省略此设置,因为执行 Oracle RMAN 重复步骤时,稍后将在以后创建插接式数据库(PDB)。
      • 数据库管理员口令:输入用于主数据库(源数据库)的相同 SYS 口令。它应为 SYS, SYSTEM, TDE Wallet 和 PDB 管理员的强口令。口令必须为 9 到 30 字符,并且至少包含 2 大写、2 小写、2 数字和 2 特殊字符。特殊字符必须是_、#或-。口令不能包含用户名(SYS, SYSTEM 等等)或单词"oracle", 采用正向或反向顺序 , 无论大小写如何。(如果主数据库 SYS 口令不符合此要求 , 则可以在完成这些设置后进行更改。)

      • 确认数据库管理员口令:重新输入指定的数据库管理员口令。
      • 自动备份:选中该复选框可为此数据库启用自动增量备份。
      • 数据库工作量:选择最适合您的应用程序的工作量类型。

        • 联机事务处理(OLTP)将数据库配置为事务处理工作量,并将偏向大量随机数据访问。
        • 决策支持系统(DSS)为决策支持或数据仓库工作量配置数据库,并将偏向大型数据扫描操作。
      • 字符集:数据库的字符集。默认值为 AL32UTF8。
      • 国家字符集:数据库的国家字符集。默认值为 AL16UTF16。
      • 标记:(可选)可以应用标记。如果您有权创建资源,则还具有将自由格式标记应用到该资源的权限。要应用已定义的标记,必须具有使用标记名称空间的权限。有关标记的详细信息,请参阅资源标记。如果您不确定是否应该应用标记,请跳过此选项(您可以稍后应用标记)或要求管理员。
  7. 单击启动数据库系统。数据库系统将显示在状态为“预配”的列表中。数据库系统的图标将从黄色变为绿色(或红色表示错误)。
  8. 等待数据库系统的图标变为绿色,状态为“可用”,然后单击突出显示的数据库系统名称。将显示有关数据库系统的详细信息。
  9. 注意 IP 地址;您需要专用或公共 IP 地址,具体取决于网络配置,才能连接到数据库系统。
  10. 检查主数据库(源)上的 SYS 口令。如果不满足 Oracle Cloud Infrastructure 口令要求,则将其更改为与为备用数据库(目标数据库)创建的口令匹配。

确保在主数据库和备用数据库之间打开端口 1522 和 1521

必须确保在主数据库(源数据库)上打开端口 1522 并在备用数据库(目标数据库)上打开端口 1521,才能使数据库连接。

启用从 Oracle Cloud Infrastructure System 到 Oracle Cloud Infrastructure Classic System 的通信

Oracle Cloud Infrastructure Classic 系统上,必须从 Oracle Cloud Infrastructure 虚拟机系统打开端口 22 和 1522 进行入站通信。

Oracle Cloud My Services Console 中将备用数据库配置为主数据库通信设置

您可以使用 Oracle Cloud My Services 控制台配置通信设置的第一部分。

  1. 登录“我的服务”控制台。
  2. 在仪表板中,单击经典数据库。
  3. 在服务:Oracle Database Cloud Service 上,单击页面右侧的打开服务控制台
  4. 从数据库部署的 img/action_menu.png 菜单中,选择访问规则
    此时将显示“访问规则”页。
  5. 找到 ora_p2_dblistener 规则以在公共互联网的端口 1522 上启用入站通信。
  6. 从位置规则的 img/action_menu.png 菜单中,选择启用
    此时将显示“启用访问规则”窗口。
  7. 单击启用
    “启用访问规则”窗口将关闭,并且规则在规则列表中显示为已启用。计算节点上的给定端口已打开到公共互联网。
  8. 创建源 db-ssh 规则以从公共 Internet 在端口 22 上打开入站通信。
    如果端口 22 尚未打开 , 请添加此访问规则。
    In the "Create Access Rule" wizard enter the following information:
    1. 规则名: 源 db-ssh
    2. :PuBLicvernet(从下拉菜单中选择)
    3. 目标:下拉菜单中的数据库名称
    4. 目标端口: 22
    5. 协议:TCP (从下拉菜单中选择)
  9. 单击创建
  10. 状态设置为已启用。
  11. 使用 SSH 登录到备用数据库(目标数据库)所在的服务器。
  12. Oracle Cloud Infrastructure 系统到 Oracle Database Cloud Service 系统 , 在端口 22 上测试 SSH。
    Oracle Database Cloud Service 系统上的端口 22 默认情况下在公共互联网上打开。
    1. 通过使用安全的文件传输实用程序(例如 SCP), 将 SSH 私有密钥传输到/home/opc/.ssh目录。
    2. 作为 Oracle Cloud Infrastructure OPC 用户,通过运行以下命令来测试 SSH。在此示例中,私有密钥的名称为 privateKey:
      ssh -i /home/opc/.ssh/privateKey opc@source_ip
完成命令行上的 Oracle Cloud InfrastructureOracle Cloud Infrastructure Classic 通信设置

必须设置 TCP 套接字大小、编辑 etc/host 文件以及更新主数据库(源数据库)上的 tnsnames.ora 文件。

  1. SSH 到主数据库的第一个节点(源数据库)
  2. 以 root 身份连接。
    sudo su -
  3. (可选)设置 TCP 套接字大小。例如:
    sysctl -w net.core.rmem_max=10485760 
    sysctl -w net.core.wmem_max=10485760

    注:

    TCP 套接字大小设置为在迁移期间提高性能。此设置对于生产数据库不是理想的。
  4. 连接为 Oracle 用户。
    su - oracle
  5. 执行 oraenv 脚本 , 该脚本设置$ ORACLE_HOME 环境变量。
    . oraenv
  6. 在两个 Oracle RAC 节点上,在 Oracle Cloud Infrastructure Classic 的主数据库(源数据库)的 $ ORACLE_HOME/network/admin/tnsnames.ora 文件中,添加类似于以下的 TNS 条目:

    注:

    将 source_node1_ip, source_node2_ip 和 source_server_name 替换为主数据库(源数据库)的参数。将 target_node1_ip, target_node2_ip 和 target_server_name 替换为备用数据库(目标数据库)的参数。
    MIGRAC_OCIC_s1 =
      (DESCRIPTION =
        (ADDRESS_LIST=
          (ADDRESS = (PROTOCOL = TCP)(HOST = source_node1_ip)(PORT = 1522))
          (ADDRESS = (PROTOCOL = TCP)(HOST = source_node2_ip)(PORT = 1522))
        )
        (CONNECT_DATA =
          (UR=A)
          (SERVER = DEDICATED)
          (SERVICE_NAME = source_service_name)
        )
      )
      
    MIGRAC_OCI_s2 =
      (DESCRIPTION =
        (ADDRESS_LIST=
          (ADDRESS = (PROTOCOL = TCP)(HOST = target_node1_ip)(PORT = 1521))
          (ADDRESS = (PROTOCOL = TCP)(HOST = target_node2_ip)(PORT = 1521))
        )
        (CONNECT_DATA =
          (UR=A)
          (SERVER = DEDICATED)
          (SERVICE_NAME = target_service_name)
        )
      )
    

    注:

    (UR = A)对于 RAC 是可选的。
  7. 测试 SQL*Plus 在端口 1521 上从备用数据库(目标数据库)系统连接到主数据库(目标数据库)。
    sqlplus sys@migrac_oci_s2 as sysdba
    Enter password: password
    
    SQL> SELECT NAME FROM V$DATABASE;
  8. 退出 SQL*Plus。
    exit
  9. 在主数据库(源数据库)的第二个节点上重复这些步骤。

启用从 Oracle Cloud Infrastructure Classic System 到 Oracle Cloud Infrastructure System 的通信

Oracle Cloud Infrastructure Database 系统上,必须从 Oracle Cloud Infrastructure Classic 系统打开端口 22 和 1521 进行入站通信。

Oracle Cloud Infrastructure 控制台中配置 Oracle Cloud Infrastructure ClassicOracle Cloud Infrastructure 通信设置

可以使用 Oracle Cloud Infrastructure 控制台配置通信设置的第一部分。

  1. 记下 Oracle Cloud Infrastructure Classic 服务器的公共 IP 地址。
  2. 登录 Oracle Cloud Infrastructure 控制台。
  3. 在页面左侧,选择区间,然后选择页面顶部的网络选项卡。
  4. 在“区间”页的虚拟云网络上,选择网络的名称。
  5. 在使用网络名称标记的页上,从左侧导航窗格中选择安全列表
  6. 在安全列表页上,选择要查看的列表。
  7. 在 network_name 的 Security_list_name 安全列表页面上,单击编辑所有规则
  8. 滚动查找您要更改的规则,或者单击添加规则以查找原始规则或工程规则。
  9. 将数据库系统安全列表更新到您在第一步中获取的 Oracle Cloud Infrastructure Classic 服务器公共 IP。
    默认情况下,在 Oracle Cloud Infrastructure 系统上启用 SSH 的端口 22 以通过公共 Internet 进行通信。
    1. SOURCE CIDR 设置为 Oracle Cloud Infrastructure Compute Classic 服务器上的 IP 地址。
    2. IP 协议设置为 TCP。
    3. SOURCE PORT RANGE 设置为 ALL。
    4. DESTINATION PORT RANGE 设置为 1521。
完成命令行上的 Oracle Cloud Infrastructure ClassicOracle Cloud Infrastructure 通信设置

必须编辑 $ORACLE_HOME/network/admin/tnsnames.ora 文件,在备用数据库(目标数据库)上设置 TCP 套接字大小。

  1. SSH 到备用数据库(目标数据库)的第一个节点。
  2. 在备用数据库(目标数据库)上,作为数据库软件所有者 Oracle 连接。
    sudo su - oracle
  3. 执行 oraenv 脚本 , 该脚本设置$ ORACLE_HOME 环境变量。
    . oraenv
  4. 在这两个节点上,在 Oracle Cloud Infrastructure 虚拟机系统上的 $ORACLE_HOME/network/admin/tnsnames.ora 文件中,为每个数据库添加一个 TNS 条目:
    在此示例中,主数据库 TNS 名称为 OCIC-ORCL,备用数据库 TNS 名称为 OCI-ORCL

    注:

    使用主数据库(源数据库)的参数替换 source_node1_ip, source_node2_ip, source_server_name

    target_node1_ip, target_node2_ip 和 target_server_name替换为备用数据库(目标数据库)的参数

    MIGRAC_OCIC_s1 =
      (DESCRIPTION =
        (ADDRESS_LIST=
          (ADDRESS = (PROTOCOL = TCP)(HOST = source_node1_ip)(PORT = 1522))
          (ADDRESS = (PROTOCOL = TCP)(HOST = source_node2_ip)(PORT = 1522))
        )
        (CONNECT_DATA =
          (UR=A)
          (SERVER = DEDICATED)
          (SERVICE_NAME = source_service_name)
        )
      )
      
    MIGRAC_OCI_s2 =
      (DESCRIPTION =
        (ADDRESS_LIST=
          (ADDRESS = (PROTOCOL = TCP)(HOST = target_node1_ip)(PORT = 1521))
          (ADDRESS = (PROTOCOL = TCP)(HOST = target_node2_ip)(PORT = 1521))
        )
        (CONNECT_DATA =
          (UR=A)
          (SERVER = DEDICATED)
          (SERVICE_NAME = target_service_name)
        )
      )
  5. 使用 SQL*Plus 测试从 Oracle Cloud Infrastructure 系统到端口 1521 上的 Oracle Cloud Infrastructure Classic 数据库的连接。
    sqlplus sys@migrac_orcl_s2 as sysdba
    Enter password: password
    (在此阶段,任何您执行的 SQL 语句将失败,因为备用数据库尚未完全配置。)
  6. 在命令行上,以 root 身份进行连接。
    sudo su -
  7. (可选)在两个节点上,设置 TCP 套接字大小。例如:
    sysctl -w net.core.rmem_max=10485760 
    sysctl -w net.core.wmem_max=10485760

    注:

    TCP 套接字大小设置为在迁移期间提高性能。此设置对于生产数据库不是理想的。
  8. 在备用数据库(目标数据库)的第二个节点上重复这些步骤。

请确保包补丁程序已应用且在同步中

请确保主数据库(源数据库)Oracle Cloud Infrastructure Classic 系统上的补丁程序级别早于或等于备用数据库(目标数据库)Oracle Cloud Infrastructure 系统上的补丁程序级别。

  1. 使用 SSH 可登录到主数据库(源数据库)的第一个节点。
  2. 检查主数据库上的补丁程序级别,如下所示:
    1. 要查找补丁程序的简要列表,请执行以下操作:
      $ORACLE_HOME/OPatch/opatch lspatches
    2. 要查找补丁程序的详细列表,请执行以下操作:
      $ORACLE_HOME/OPatch/opatch lsinventory
  3. 记下补丁程序级别。
  4. 针对主数据库(源数据库)的第二个节点重复步骤 1 到 3。
  5. 使用 SSH 登录到备用数据库(目标数据库)的节点。
  6. 通过运行 opatch lsinventory 命令检查备用数据库节点上的补丁程序级别。
  7. 比较数据库节点的补丁程序级别。请确保备用系统具有等于或迟于主数据库上的绑定补丁程序的绑定补丁程序。
  8. 如果必须在备用数据库(目标数据库)上安装以后的补丁程序,则访问 My Oracle Support: https://support.oracle.com/
  9. 将补丁程序的正确版本下载到备用数据库(目标数据库)。
  10. 提取绑定补丁程序。
  11. 列出可用的补丁程序。
    $ORACLE_HOME/OPatch/opatch lspatches
  12. 应用补丁程序。
    $ORACLE_HOME/OPatch/opatch apply patch_number