將密碼和公事包檔案複製到雲端

將主要資料庫的密碼和公事包檔案複製到 Oracle Cloud Infrastructure 中的待命資料庫。

取得資料庫名稱並驗證公事包

取得 Oracle Cloud Infrastructure (OCI) 執行處理的唯一資料庫名稱和 Oracle 系統 ID (SID),並驗證公事包位置。

在 OCI 上,內部部署資料庫和資料庫系統的資料庫名稱應該相同。
  1. 在 OCI 中,取得「唯一資料庫名稱」和 SID。
    OCI 資料庫系統的 ORACLE_UNQNAMEcurrent db_unique_nameORACLE_SIDONPREMSID。在此範例中,Oracle SID 是 ORCLCDB
    env | grep ORA
  2. 執行 SQL 命令來檢查內部部署公事包檔案的位置。
    select * from V$ENCRYPTION_WALLET;
  3. 請注意 OCI 中待命資料庫的公事包位置。稍後的步驟將需要此項目。
     /opt/oracle/dcs/commonstore/wallets/tde/ORACLE_UNQNAME/

    例如,OCI 的公事包:

    $ ls -lrt
    total 20
    -rw------- 1 oracle oinstall 2555 Aug 27 06:32 ewallet_2020082706324337.p12
    -rw------- 1 oracle oinstall 5467 Aug 27 06:32 ewallet.p12
    -rw------- 1 oracle oinstall 5512 Aug 27 06:32 cwallet.sso

    例如,內部部署公事包位置:

    bash-4.2$ pwd
    /opt/oracle/admin/ORCLCDB/xdb_wallet
    bash-4.2$ ls -lrt
    total 8
    -rw-------. 1 oracle oinstall 3835 Aug 27 02:23 ewallet.p12
    -rw-------. 1 oracle oinstall 3880 Aug 27 02:23 cwallet.sso

移除 OCI 執行處理的資料檔

移除 Oracle Cloud Infrastructure (OCI) 執行處理的資料檔。

  1. 在 OCI 執行處理上,建立要移除資料檔的命令檔。
    以下是範例命令檔:
    SQL> set heading off linesize 999 pagesize 0 feedback off trimspool on
    SQL> spool /tmp/files.lst
    SQL> select 'asmcmd rm '||name from v$datafile union all select 'asmcmd rm '||name from v$tempfile union all select 'asmcmd rm '||member from 	v$logfile;
    SQL> spool off
    SQL> create pfile='/tmp/ ORACLE_UNQNAME.pfile' from spfile;         
    SQL> exit
  2. sysdba 身分,使用 shutdown immediate 命令關閉、卸載及關閉 OCI 上的待命資料庫。
    SQL> shutdown immediate
  3. /tmp 目錄中,開啟 files.lst 檔案並移除第 a. 行與 b. 行,以移除資料檔案。
    a.   SQL> select 'asmcmd rm '||name from v$datafile union all select 'asmcmd rm '||name from v$tempfile union all select 'asmcmd rm '||member from v$logfile;
    b.   SQL> spool off
    c.   If you don’t have ASM disks, then you will have to remove ALL the asmcmd command from the files.lst else the database files won't be deleted.
    d.   Chmod 777 /tmp/files.lst
    e.   Save and Execute the Script. $ ./tmp/files.lst
    f.   All files for the starter database have now been removed.

將密碼複製到待命資料庫

使用 IP 位址將密碼檔從內部部署資料庫複製到待命資料庫主機,以在基礎主機與目標資料庫主機之間開啟 SSH 通道。

  1. 透過基礎主機和複製密碼檔,從您的本機主機通道至待命資料庫執行處理。
    密碼檔案位於下列目錄:$ORACLE_HOME/dbs/orapwORACLE_SID
    在下列範例中,將 id_rsa 取代為您的 SSH 金鑰,並使用基礎主機和 Oracle Cloud Infrastructure (OCI) 資料庫節點的 IP 位址。
    scp -i ~/Keys/id_rsa -o ProxyCommand="ssh -i ~/Keys/id_rsa -W %h:%p opc@IP_address_of_your_bastion_host" orapwORACLE_SID opc@IP address of your OCI DB Node:~/tmp
  2. 將複製的檔案儲存在 OCI 中的待命資料庫執行處理。
    sudo cp orapwORACLE_SID /u01/app/oracle/product/19.0.0/dbhome_1/dbs/
  3. 在內部部署和 OCI 檔案 orapwORACLE_SID 上執行 md5sum 命令,並確認它們具有相同的指紋。
    md5sum /u01/app/oracle/product/19.0.0/dbhome_1/dbs/orapwORACLE_SID
    

將公事包檔案複製到待命資料庫

使用 IP 位址開啟基礎主機和待命資料庫主機之間的 SSH 通道,將密碼公事包複製到 Oracle Cloud Infrastructure (OCI) 中待命資料庫主機上的 /home/oracle/ 目錄。

  1. 在內部部署主機中找出公事包,並讓每個人都可以讀取、寫入及執行這些公事包檔案。
    cd /opt/oracle/admin/$ORCLSID/wallet
    在此範例中,公事包包含兩個檔案:ewallet.p12cwallet.sso。使用 chmod 777 命令,讓所有人都可以讀取、寫入及執行檔。
  2. 在 OCI 資料庫主機上,確認 $ORACLE_HOME/network/admin/sqlnet.ora 檔案包含 sqlnet.ora 中的 ENCRYPTION_WALLET_LOCATION 參數。
    ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE) (METHOD_DATA=(DIRECTORY=/opt/oracle/dcs/commonstore/wallets/tde/$ORACLE_UNQNAME)))
  3. 使用通道命令將公事包檔案複製到 /tmp 資料夾中的 OCI 資料庫主機。
    ~/Keys/id_rsa : Replace it with your Ssh keys
    192.0.2.254: IP address of your bastion host.
    10.10.30.2: IP address of your OCI DB Node.
    
    scp -i ~/Keys/id_rsa -o ProxyCommand="ssh -i ~/Keys/id_rsa -W %h:%p opc@192.0.2.254" ewallet.p12 opc@10.10.30.2:/tmp/
    
    scp -i ~/Keys/id_rsa -o ProxyCommand="ssh -i ~/Keys/id_rsa -W %h:%p opc@192.0.2.254" cwallet.sso opc@10.10.30.2:/tmp/
  4. /opt/oracle/dcs/commonstore/wallets/tde/$ORACLE_UNQNAME 目錄中的 OCI 資料庫主機移除現有的公事包檔案。
  5. 以 OCI 主機上的 OPC 使用者 (不是 Oracle 使用者) 身分,讓每個人都可以讀取、寫入以及執行公事包檔案。
    chmod 777 /tmp/ewallet.p12
    chmod 777 /tmp/cwallet.sso
  6. /tmp 資料夾中的公事包檔案複製到 /opt/oracle/dcs/commonstore/wallets/tde/$ORACLE_UNQNAME