准备部署拓扑
为了使 Data Guard 正常工作,不同区域中的两个数据库必须进行通信。因此,您需要通过 OCI 中的两个区域各自的 DRG 在它们之间设置远程对等连接。DRG 由 OracleDB for Azure 设置创建,因此您只需在现有 DRG 之间建立远程对等连接。
设置网络
要设置网络,请执行以下步骤
- 为 Azure VM 和 OracleDB(适用于 Azure 数据库系统)设置网络连接。
- 确保在 Azure VM 上具有可用于 Oracle DB 系统的 ssh 私有密钥。
- 测试 Azure VM 与 Azure 数据库系统的 OracleDB 之间的连接。
- 为 OCI 中的数据库系统设置网络。
- 首先,导航到区域 1 中数据库系统的 VCN 详细信息,选择动态路由网关附加,然后选择 DRG 名称,将 DRG 的详细信息加载到区域 1 中。然后,选择 Remote Peering Connection Attachments 。在第二个浏览器窗口中,对区域 2 执行完全相同的操作。
- 接下来,在两个区域中,选择创建远程对等连接以创建 RPC。
- 创建两个 RPC 后,在区域 1 中选择 RPC 名称并复制 OCID。
- 在区域 2 中,选择 RPC 名称并选择建立连接。为区域 1 选择正确的区域名称(我们连接到的区域),并为区域 1 中的 RPC 提供 OCID,在上一步中已复制该 OCID。建立连接几分钟后,对等方状态应为“已对等”。
- 接下来,允许两个区域中的 VCN 之间的通信。导航到 VCN 详细信息并选择默认安全列表。选择添加入站规则以允许来自相反 VCN CIDR 范围的流量。
- 最后,从 Azure 中的 VM 连接到相应的 OCI 基本数据库系统。编辑两个基本数据库系统的
tnsnames.ora
文件,以便与其他数据库建立连接。 - 确认
tnsping
在从两个数据库系统到另一数据库均正常工作。
设置 Oracle Database for Azure DR 配置
要为 Azure DR 配置设置 Oracle 数据库,您需要准备主数据库和辅助数据库,如下所述。
注意:
单击复制可将命令示例保存到剪贴板,以便粘贴到命令行中。请务必将任何variables
替换为特定于实施的值。
准备主数据库
要准备主数据库,需要配置静态监听程序,更新 tnsnames.ora 文件,以及配置各种数据库设置和参数。
- 在
SQL>
提示符下,验证以下信息:- 检查是否已启用数据库闪回
- 检查是否已启用强制数据库日志记录
- 检查数据库是否处于归档日志模式下
- 检查数据库是否处于打开模式
- 检查数据库是否具有主数据库角色
select log_mode, FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE from v$database ;
输出应如下所示:LOG_MODE FORCE_LOGGING FLASHBACK_ON OPEN_MODE DATABASE_ROLE ---------------- ------------------------ ---------------------- -------------------- ----------------------- ARCHIVELOG YES YES READ WRITE PRIMARY
- 通过运行以下命令检查自动备用文件管理是否设置为自动:
show parameter standby_file_management
输出应如下所示:NAME TYPE VALUE ------------------------------------ ----------- ---------- standby_file_management string AUTO
- 设置中介配置文件:
show parameter dg_broker_config_file1;
输出应如下所示:NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ dg_broker_config_file1 string /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/dr1dbuks_898_lhr.dat
然后输入以下命令:
show parameter dg_broker_config_file2;
输出应如下所示:NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ dg_broker_config_file2 string /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/dr2dbuks_898_lhr.dat
- 启用 Data Guard 中介:
show parameter dg_broker_start
输出应如下所示:NAME TYPE VALUE ------------------------------------ ----------- -------------- dg_broker_start boolean FALSE
然后输入以下命令:alter system set dg_broker_start=true scope=both;
show parameter dg_broker_start
输出应如下所示:NAME TYPE VALUE ------------------------------------ ----------- -------------- dg_broker_start boolean TRUE
- 在命令提示符(例如
[oracle@ldbuksdr ]$
)中,记下指示灯状态:lsnrctl status
- 附注数据库配置详细资料:
srvctl config database -d db_unique_name
- 请注意
tns
项:cat $ORACLE_HOME/network/admin/tnsnames.ora
- 附注
sqlnet.ora
输出:cat $ORACLE_HOME/network/admin/sqlnet.ora
- 通过输入以下命令,将口令文件复制到
/tmp
位置的备用数据库系统:cd .ssh
scp -i private_key /tmp/orapw<sid> opc@ip_standby_vm:/tmp/orapwsid
- 在
/tmp
位置中找到 wallet 文件并将其复制到备用数据库系统:select CON_ID, WRL_PARAMETER, WRL_TYPE, STATUS, WALLET_TYPE from V$ENCRYPTION_WALLET;
输出应如下所示:CON_ID WRL_PARAMETER STATUS WALLET_TYPE ---------- ------------------------------------------------------------------------------ ------------ ------------ ---------------------------- 1 /opt/oracle/dcs/commonstore/wallets/dbuks_898_lhr/tde/ OPEN AUTOLOGIN 2 OPEN AUTOLOGIN 3 OPEN AUTOLOGIN
输入:cd /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde ls -ltra
您应看到如下内容:-rw------- 1 oracle asmadmin 5467 Jun 19 18:59 ewallet.p12 -rw------- 1 oracle asmadmin 5512 Jun 19 18:59 cwallet.sso
然后输入以下命令(其中db_unique_name
是 wallet 数据库的唯一名称):[oracle@ ~]$ cp /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/ewallet.p12/tmp/cwallet.p12
cp /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/cwallet.sso/tmp/cwallet.sso
chmod 777 /tmp/ewallet.p12
chmod 777 /tmp/cwallet.sso
scp -i private_key /tmp/ewallet.p12 opc@ip_standby_vm:/tmp/ewallet.p12
scp -i private_key /tmp/cwallet.sso opc@ip_standby_vm:/tmp/cwallet.sso.
- 配置静态监听程序。备用数据库的初始实例化需要静态监听程序。数据库关闭时,静态监听程序将启用与实例的远程连接,从而允许您使用 Oracle Data Guard 启动实例。确保
listener.ora
文件中没有换行符或空格。在主数据库上,附加
listener.ora
文件中的SID_LIST_LISTENER
文件以包括主数据库的数据库唯一名称、Oracle 主目录和 Oracle 系统标识符 (System Identifier,SID)。
将以下项添加到lsnrctl status vi listener.ora
listener.ora
,其中:DB_UNIQUE_NAME
是主数据库的唯一名称。ORACLE_HOME
是主数据库的本地 Oracle 主目录。ORACLE SID
是主数据库的 SID。
该项应类似于以下内容(SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=DB_UNIQUE_NAME)(ORACLE_HOME=ORACLE_HOME) (SID_NAME = ORACLE SID)))
GLOBAL_DBNAME
、ORACLE_HOME
和SID_NAME
的项会有所不同):SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=dbuks_898_lhr.odsp129521.cvcn.oraclevcn.com) (ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1)(SID_NAME=dbuks)))
重新加载监听程序并检查其状态。lsnrctl reload lsnrctl status
- 配置
tns
条目。需要为主和备用tnsnames.ora
文件中的每个数据库输入条目,以确保正确传输重做。由于数据库之间没有用于将服务器名称解析为 IP 地址的 DNS,因此将使用 IP 地址。使用以下示例替换与配置相关的值。Oracle Real Application Clusters (Oracle RAC) 配置无法解析扫描监听程序名称;因此,您必须使用地址列表定义所有节点。稍后将添加这些 IP 地址,初始实例应在 tns 条目中仅列出一个 IP 地址,以确保 Oracle Recovery Manager (RMAN) 始终连接到相同的节点。[oracle@~]$ cd $ORACLE_HOME/network/admin [oracle@~]$ vi tnsnames.ora
tnsnames.ora
文件中的条目应如下所示:DBUKS_R2J_AMS=(DESCRIPTION=(SDU=65536)(RECV_BUF_SIZE=134217728)(SEND_BUF_SIZE=134217728)(ADDRESS_LIST=(FAILOVER=on)(CONNECT_TIMEOUT=3) (RETRY_COUNT=3)(ADDRESS=(PROTOCOL=TCP)(HOST=10.91.0.177)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED) (SERVICE_NAME=dbuks_r2j_ams.odsp083156.cvcn.oraclevcn.com)(UR=A))) DBUKS_898_LHR=(DESCRIPTION=(SDU=65535)(RECV_BUF_SIZE=134217728)(SEND_BUF_SIZE=134217728)(ADDRESS_LIST=(FAILOVER=on)(CONNECT_TIMEOUT=3) (RETRY_COUNT=3)(ADDRESS=(PROTOCOL=TCP)(HOST=10.90.0.246)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED) (SERVICE_NAME=dbuks_898_lhr.odsp129521.cvcn.oraclevcn.com)(UR=A)))
准备备用数据库
接下来,准备备用数据库。
- 手动删除由 Oracle Database for Azure 工具创建的数据库。 在删除备用数据库之前,请保存当前 db_unique_name 并记下以后将使用的 wallet 位置。以下查询提供了 wallet 位置的详细信息。
- 在 sqlplus 命令提示符中,输入::
select * from V$ENCRYPTION_WALLET;
- 接下来,准备
rm_dbfiles.sql
脚本以删除数据库相关文件:srvctl config database -d db_unique_name
- 运行以下脚本以关闭作为备用数据库构建的数据库并删除数据库文件:
vi rm_dbfiles.sql set heading off linesize 999 pagesize 0 feedback off trimspool on spool /home/oracle/demo/files.lst 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; spool off create pfile='/home/oracle/demo/ORACLE_UNQNAME.pfile' from spfile; exit
- 然后以系统 DBA 的身份转到 sqlplus 提示符:
sqlplus "/ as sysdba"
并运行以下命令:@rm_dbfiles.sql
exit
- 接下来,授予读取、写入和执行权限(其中
db_unique_name
是受影响数据库的唯一名称):chmod 777 files.lst
srvctl stop database -d db_unique_name
- 保存并执行脚本:
./files.lst
- 在 sqlplus 命令提示符中,输入::
- 将
/tmp
中收到的密码文件和 wallet 文件从主数据库复制到备用数据库数据库系统上的相应位置。- 将数据库密码文件和 /tmp 中收到的 wallet 文件从主数据库复制到备用数据库数据库系统上的相应位置(其中 orapwsid 是 SID 密码):
例如:sudo cp /tmp/orapwsid $ORACLE_HOME/dbs/orapwsid
输出应如下所示:sudo ls -ltra /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwdbuks
-rw-r-----1 oracle oinstall 2048 Jul3 13:42 /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwdbuks
- 验证口令文件的 md5sum 输出在主数据库和备用数据库上是否匹配(其中 orapwsid 是 SID 口令):
主数据库的输出应类似于以下内容(其中 orapwsid 为md5sum /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwsid
orapwdbuks
):
对于备用数据库:b3895fa6357471f80c6e0f4ac16fdc23 /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwdbuks
b3895fa6357471f80c6e0f4ac16fdc23 /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwdbuks
- 删除现有 wallet 文件并将 wallet 文件从
/tmp
复制到 TDE 位置(其中db_unique_name
是受影响数据库的唯一名称):[oracle@ ~]$ cd /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/
rm ewallet.p12 cwallet.sso
sudo cp /tmp/ewallet.p12 /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/ewallet.p12
sudo cp /tmp/cwallet.sso /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/cwallet.ss
chown oracle:asmadmin /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/ewallet.p12
sudo chown oracle:asmadmin /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/cwallet.sso
- 将数据库密码文件和 /tmp 中收到的 wallet 文件从主数据库复制到备用数据库数据库系统上的相应位置(其中 orapwsid 是 SID 密码):
- 配置静态监听程序:
- 在 OCI 中的备用数据库上,附加
SID_LIST_LISTENER
文件以包括数据库唯一名称、OCI 的 Oracle 主目录和主数据库的 Oracle 系统标识符 (System Identifier,SID)。lsnrctl status
vi listener.ora
- 将以下项添加到
listener.ora
文件中,其中:- DB_UNIQUE_NAME 是主数据库的名称。
- ORACLE_HOME 是主数据库的本地 Oracle 主目录。
- ORACLE SID 是主数据库的 SID。
例如,该条目应类似于以下内容:SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=DB_UNIQUE_NAME)(ORACLE_HOME=ORACLE_HOME) (SID_NAME = ORACLE_SID)))
SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME= dbuks_r2j_ams. odsp083156.cvcn.oraclevcn.com) (ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1)(SID_NAME=dbuks)))
- 重新加载监听程序并检查状态:
lsnrctl reload
lsnrctl status
- 在 OCI 中的备用数据库上,附加
- 配置
tns
条目:cd $ORACLE_HOME/network/admin
vi tnsnames.ora
tnsnames.ora
文件中的条目应如下所示:DBUKS_R2J_AMS=(DESCRIPTION=(SDU=65536)(RECV_BUF_SIZE=134217728)(SEND_BUF_SIZE=134217728)(ADDRESS_LIST=(FAILOVER=on)(CONNECT_TIMEOUT=3) (RETRY_COUNT=3)(ADDRESS=(PROTOCOL=TCP)(HOST=10.91.0.177)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED) (SERVICE_NAME=dbuks_r2j_ams.odsp083156.cvcn.oraclevcn.com)(UR=A))) DBUKS_898_LHR=(DESCRIPTION=(SDU=65535)(RECV_BUF_SIZE=134217728)(SEND_BUF_SIZE=134217728)(ADDRESS_LIST=(FAILOVER=on)(CONNECT_TIMEOUT=3) (RETRY_COUNT=3)(ADDRESS=(PROTOCOL=TCP)(HOST=10.90.0.246)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED) (SERVICE_NAME=dbuks_898_lhr.odsp129521.cvcn.oraclevcn.com)(UR=A)))