使用實體移轉進行移轉

以下步驟描述如何執行線上或離線實體移轉。在執行實體移轉之前,請先記下下列內容。

  • x86 伺服器上的來源資料庫不需要加密。零停機移轉會在移轉期間加密目標資料庫。
  • 移轉之前,必須先在來源資料庫定義通透資料加密 (TDE) 公事包,即使來源資料庫未加密也一樣。
  • 來源和目標資料庫上的 sys 密碼、公事包密碼、資料庫版本以及修正程式層級必須相同。
  • 零停機時間移轉會將容器資料庫 (CDB) 移轉至 CDB ,將非 CDB 移轉至非 CDB

若要使用零停機時間移轉執行實體移轉,請執行下列動作:

  1. 下載並安裝「零停機移轉」軟體到個別的伺服器上。使用 zdmuser ,執行「零停機移轉」軟體。
  2. zdmuser 的身分登入您的 ZDM 伺服器。
  3. 產生 ssh 金鑰組。
  4. 啟用無密碼 ssh,從 zdmuser 到來源 x86 伺服器 (root/privilege-sudoer user),以及目標 Oracle Exadata Database Service on Cloud@Customer 資料庫 (opc user) 上的所有 VM 叢集節點。
  5. 在 Oracle ZFS Storage Appliance (NAS) 上,建立在移轉進行時要用來作為來源資料庫 RMAN 備份的預留位置的網路檔案系統 (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 密碼、公事包密碼、資料庫版本以及修正程式層級必須相同。
    • 請勿選取「備份目的地」或啟用「自動備份」。這些設定值可以在資料庫從來源移轉至目標之後啟用。
  8. 驗證來源資料庫在「存檔日誌模式」中設定。如果未啟用 Archivelog,請參閱下方的啟用 Archivelog 模式
  9. 如果來源資料庫未加密,請參閱下方的設定通透資料加密 (TDE) 金鑰存放區。資料不需要加密,實體移轉只需要使用 TDE 金鑰存放區。確定金鑰存放區 (公事包) 密碼與 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 在來源和目標上掛載網路檔案系統 (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 會將任何來源資料庫變更同步到目標資料庫。
這會完成實體移轉。

啟用 Archivelog 模式

來源資料庫上必須啟用存檔日誌模式,才能進行零停機實體移轉。這些步驟將描述如何在來源資料庫上設定「存檔日誌」模式。

  1. 驗證來源資料庫未在 Archivelog 模式中設定。
    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. 啟用 Archivelog 模式。
    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

設定 Transparent Data Encryption (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