使用物理迁移进行迁移

以下步骤介绍了如何执行联机或脱机物理迁移。在执行物理迁移之前,请注意以下事项。

  • x86 服务器上的源数据库不必加密。零停机迁移将在迁移期间加密目标数据库。
  • 迁移之前,必须在源数据库中定义透明数据加密 (Transparent Data Encryption,TDE) wallet,即使源数据库未加密也是如此。
  • 源和目标数据库上的 sys 口令、Wallet 口令、数据库版本和补丁程序级别必须相同。
  • 零停机迁移将容器数据库 (CDB) 迁移到 CDB ,将非 CDB 迁移到非 CDB

要使用零停机迁移运行物理迁移,请执行以下操作:

  1. 在单独的服务器上下载并安装零停机迁移软件。使用 zdmuser 运行零停机迁移软件。
  2. zdmuser 身份登录到您的 ZDM 服务器。
  3. 生成 ssh 密钥对。
  4. 启用从 zdmuser 到源 x86 服务器 (root/privilege-sudoer user) 以及目标 Oracle Exadata Database Service on Cloud@Customer 数据库 (opc user) 上的所有 VM 集群节点的无口令 SSH。
  5. 在 Oracle ZFS Storage Appliance (NAS) 上,创建要在迁移进行期间用作源数据库 RMAN 备份的占位符的网络文件系统 (Network File System,NFS) 共享资源。
    目标数据库将从此 NFS 共享上保存的备份中还原。
  6. 在源数据库和目标数据库的所有节点上的同一个挂载点上挂载 NFS 共享。确保所有用户对源和目标都具有读取、写入和执行 (rwx) 权限。
  7. Create a Oracle Exadata Database Service on Cloud@Customer target database using the OCI GUI or REST API.按如下方式配置目标数据库:
    • 目标数据库和源数据库的名称必须相同,但 DB_UNIQUE_NAME 必须不同。
    • 源和目标数据库上的 sys 口令、Wallet 口令、数据库版本和补丁程序级别必须相同。
    • 请勿选择备份目标或启用自动备份。在将数据库从源迁移到目标之后,可以启用这些设置。
  8. 验证源数据库是否在归档日志模式下配置。如果归档日志未启用,请参阅下面的启用归档日志模式
  9. 如果源数据库未加密,请参阅下面的配置透明数据加密 (TDE) 密钥库。数据不需要加密,物理迁移只需要 TDE 密钥库。确保密钥库 (wallet) 密码与用于在 Oracle Exadata Database Service on Cloud@Customer 中创建目标数据库的 sys/wallet 密码相同。
  10. 为零停机迁移创建响应文件以运行迁移。关键参数包括:
    • TGT_DB_UNIQUE_NAME :目标 Oracle Exadata Database Service on Cloud@Customer 数据库的数据库唯一名称。
    • MIGRATION_METHODOFFLINE_PHYSICALONLINE_PHYSICAL
    • DATA_TRANSFER_MEDIUM: NFS
    • PLATFORM_TYPE: EXACC
    • BACKUP_PATH :步骤 4 中源和目标上网络文件系统 (Network File System,NFS) 共享的挂载点。
    • SHUTDOWN_SRC: TRUE
  11. 运行零停机迁移模拟运行迁移作业 (-eval),以验证迁移的所有先决条件都是可能的。例如:
    zdmcli migrate database -sourcedb source_db_name \
    -sourcenode IP/hostname_of_x86_db_server \
    -srcauth zdmauth \
    -srcarg1 user: root_or_sudoer_user \
    -srcarg2 identity_file:path_to_ssh_private_key/ssh_private_key_file_name
    \
    -srcarg3 sudo_location:/usr/bin/sudo \
    -targetnode IP/hostname_of_first_Exadata_Database_Cloud@Customer_VM_Cluster_Node
    -tgtarg1 user:opc \
    -tgtarg2 identity_file: path_to_ssh_private_key/ssh_private_key_file_name
    \
    -tgtarg3 sudo_location:/usr/bin/sudo \
    -rsp path_to_response_file/response_file_name_from_step_10 \
    -eval
  12. 运行零停机迁移作业。例如:
    zdmcli migrate database -sourcedb source_db_name \
    -sourcenode IP/hostname_of_x86_db_server \
    -srcauth zdmauth \
    -srcarg1 user: root_or_sudoer_user \
    -srcarg2 identity_file:path_to_ssh_private_key/ssh_private_key_file_name
    \
    -srcarg3 sudo_location:/usr/bin/sudo \
    -targetnode IP/hostname_of_first_Exadata_Database_Cloud@Customer_VM_Cluster_Node
    -tgtarg1 user:opc \
    -tgtarg2 identity_file:path_to_ssh_private_key/ssh_private_key_file_name
    \
    -tgtarg3 sudo_location:/usr/bin/sudo \
    -rsp path_to_response_file/response_file_name_from_step_10
在物理联机迁移期间,零停机迁移将在源和目标之间配置 Oracle Data Guard ,以确保数据库在迁移期间始终联机。Oracle Data Guard 将同步任何源数据库更改到目标数据库。
这将完成物理迁移。

启用归档日志模式

必须在源数据库中为零停机物理迁移启用归档日志模式。以下步骤将描述如何在源数据库上配置归档日志模式。

  1. 验证源数据库未在归档日志模式下配置。
    SQL> select log_mode from v$database;
    LOG_MODE
    ------------
    NOARCHIVELOG
  2. 配置源数据库日志归档目标。以下示例来自 Linux 文件系统中具有数据库文件的源数据库。如果数据库文件存储在 Oracle ASM 磁盘组中,则 LOCATION 不同。
    SQL> alter system set 
    log_archive_dest_1='LOCATION=/u01/app/oracle/oradata/db_name/arc' 
    scope=both;
    System altered.
    SQL> select destination,STATUS from v$archive_dest where status='VALID';
    DESTINATION
    --------------------------------------------------------------------------------
    STATUS
    ---------
    /u01/app/oracle/oradata/db_name/arc
    VALID
  3. 关闭数据库,然后挂载数据库。
    SQL> shutdown immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> startup mount;
    ORACLE instance started
  4. 启用归档日志模式。
    alter database archivelog;
  5. 打开数据库。
    alter database open;
  6. 验证数据库是否处于归档日志模式。
    SQL> select destination,STATUS from v$archive_dest where statuS='VALID';
    DESTINATION
    --------------------------------------------------------------------------------
    STATUS
    ---------
    /u01/app/oracle/oradata/db_name/arc
    VALID
    SQL> select log_mode from v$database;
    LOG_MODE
    ------------
    ARCHIVELOG

配置透明数据加密 (TDE) 密钥库

零停机迁移物理迁移需要 auto_login TDE 加密密钥库/钱包(即使源数据库未加密)。必须使用与目标数据库密钥库相同的密码配置此密钥库。以下步骤介绍了如何在源数据库上配置密钥库。

  1. 检查是否为数据库配置了默认密钥库位置。
    SQL> select * from v$encryption_wallet;
    WRL_TYPE
    --------------------
    WRL_PARAMETER
    --------------------------------------------------------------------------------
    STATUS WALLET_TYPE WALLET_OR KEYSTORE FULLY_BAC
    ------------------------------ -------------------- --------- -------- ---------
    CON_ID
    ----------
    FILE
    /u01/app/oracle/admin/db_name/wallet
    NOT_AVAILABLE UNKNOWN SINGLE NONE UNDEFINED
    1
    SQL>
  2. 如果密钥库的目录尚不存在,请为密钥库创建目录。
    mkdir -p /u01/app/oracle/admin/db_name/wallet
  3. 创建用于存储 sqlnet.ora 文件的目录。
    mkdir -p $ORACLE_HOME/network/admin/
  4. 使用步骤 1 中的密钥库信息在目录 $ORACLE_HOME/network/admin/ 中创建 sqlnet.ora 文件。
    ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)
     (METHOD_DATA=(DIRECTORY=/u01/app/oracle/admin/db_name/wallet)))
  5. 创建使用口令保护的密钥库。请注意,还必须为此口令配置目标 Oracle Exadata Database Service on Cloud@Customer 数据库密钥库。
    SQL>administer key management create keystore 
    '/u01/app/oracle/admin/db_name/wallet' identified by keystore_password;
  6. 打开密钥库。
    如果源数据库是非 CDB,则删除 container = ALL
    SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY 
    keystore_password container = ALL;
  7. 为密钥库创建备份。
    如果源数据库是非 CDB,则删除 container = ALL
    SQL> ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY keystore_password
    with backup container = ALL;
  8. 验证是否已创建和备份密钥库。
    SQL> SELECT * FROM v$encryption_keys;
    Snip…
    ACTIVATING_PDBNAME
    --------------------------------------------------------------------------------
    ACTIVATING_PDBID ACTIVATING_PDBUID ACTIVATING_PDBGUID CON_ID
    ---------------- ----------------- -------------------------------- ----------
    ATOlrcGaa0/iv/dFeRSkNSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    --------------------------------------------------------------------------------
    ACTIVATING_PDBID ACTIVATING_PDBUID ACTIVATING_PDBGUID CON_ID
    ---------------- ----------------- -------------------------------- ----------
    db_name
    ACTIVATING_PDBID ACTIVATING_PDBUID ACTIVATING_PDBGUID CON_ID
    ---------------- ----------------- -------------------------------- ----------
    1 86B637B62FDF7A65E053F706E80A27CA
    Snip…
  9. 从在步骤 5 中创建的密钥库创建 auto_login 密钥库。
    SQL> ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM 
    KEYSTORE '/u01/app/oracle/admin/db_name/wallet' IDENTIFIED BY 
    keystore_password ;
  10. 从步骤 5 中关闭密钥库。
    SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE IDENTIFIED BY 
    keystore_password;
  11. 验证 auto_login 密钥库是否仍处于打开状态。
    SQL> SELECT * FROM v$encryption_wallet;
    WRL_TYPE
    --------------------
    WRL_PARAMETER
    --------------------------------------------------------------------------------
    STATUS WALLET_TYPE WALLET_OR KEYSTORE FULLY_BAC
    ------------------------------ -------------------- --------- -------- ---------
    CON_ID
    ----------
    FILE
    /u01/app/oracle/admin/db_name/wallet
    OPEN AUTOLOGIN SINGLE NONE NO