将口令和 Wallet 文件复制到云中

将口令和 Wallet 文件从主数据库复制到 Oracle Cloud Infrastructure 中的备用数据库。

获取数据库名并验证 Wallet

获取 Oracle Cloud Infrastructure (OCI) 实例的唯一数据库名称和 Oracle 系统 ID (SID), 并验证 wallet 位置。

内部部署数据库和 OCI 上的数据库系统的数据库名称应相同。
  1. 在 OCI 中,获取唯一数据库名和 SID。
    ORACLE_UNQNAME 是 OCI 数据库系统的 current db_unique_nameORACLE_SIDONPREMSID。在此示例中,Oracle SID 为 ORCLCDB
    env | grep ORA
  2. 通过执行 SQL 命令检查内部部署 Wallet 文件的位置。
    select * from V$ENCRYPTION_WALLET;
  3. 请注意 OCI 中备用数据库的 wallet 位置。稍后再说一遍你需要这个
     /opt/oracle/dcs/commonstore/wallets/tde/ORACLE_UNQNAME/

    例如,OCI 上的 Wallet:

    $ 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

    例如,内部部署 Wallet 位置:

    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
    

将 Wallet 文件复制到备用数据库

使用 IP 地址在堡垒主机和备用数据库主机之间打开 SSH 隧道,将口令 Wallet 复制到 Oracle Cloud Infrastructure (OCI) 中的备用数据库主机上的 /home/oracle/ 目录。

  1. 在内部部署主机中找到 Wallet,并使每个人都可以读取、写入和执行 Wallet 文件。
    cd /opt/oracle/admin/$ORCLSID/wallet
    在此示例中,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. 使用隧道命令将 wallet 文件复制到 /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 数据库主机中删除现有 Wallet 文件。
  5. 作为 OCI 主机上的 OPC 用户(不是 Oracle 用户),使每个人都可以读取、写入和执行 Wallet 文件。
    chmod 777 /tmp/ewallet.p12
    chmod 777 /tmp/cwallet.sso
  6. 将 Wallet 文件从 /tmp 文件夹复制到 /opt/oracle/dcs/commonstore/wallets/tde/$ORACLE_UNQNAME