创建 Data Guard 的备用数据库
主数据库准备好用于 Data Guard 后,就可以将其复制到备用站点。以下指南将使用主动复制功能来创建一致的数据库副本。
请注意,本指南使用以下示例:
数据库唯一名称 | 服务器主机名 | RAC 实例名称 | 角色 |
---|---|---|---|
DBDG_SITE1 | site1db2site1db1 | DBDG_SITE12DBDG_SITE11 | 主要 |
DBDG_SITE2 | site2db2site2db1 | DBDG_SITE22DBDG_SITE21 | 备用实例 |
本指南中运行 Oracle 的裸金属解决方案服务器使用以下环境变量进行配置:
环境变量名称 | 值 |
---|---|
ORACLE_BASE | /apps/oracle/oracle_base |
ORACLE_HOME | /apps/oracle/19.0.0/db_home1 |
您可能需要根据您的设置修改环境变量路径。
设置备用数据库
配置数据库连接
登录备用位置中的每个裸金属解决方案服务器,并修改 $ORACLE_HOME/network/admin/tsnames.ora
文件以更新网络服务配置:
DBDG_SITE2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DBDG_SITE2_SCAN_HOSTNAME)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = DBDG_SITE2) (UR=A)
)
)
DBDG_SITE1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DBDG_SITE1_SCAN_HOSTNAME)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = DBDG_SITE1)
)
)
配置临时监听器
为避免重启用于其他数据库连接的监听器,我们会使用临时监听器来执行数据库复制。此示例使用端口 1523,但您可以将任何处于开启状态的端口用于集群之间的通信。完成数据库复制后,便可以删除此临时监听器。
登录备用位置中的第一个裸金属解决方案服务器,以便在数据库复制过程中使用该服务器。修改
$ORACLE_HOME/network/admin/listener.ora
文件以更新网络服务配置:LISTENER_DBDG_SITE2 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = site1db1)(PORT = 1523)) ) ) SID_LIST_LISTENER_DBDG_SITE2 = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = DBDG_SITE2_DGMGRL) (ORACLE_HOME = ORACLE_HOME) (SID_NAME = DBDG_SITE21) ) ) ADR_BASE_LISTENER = /apps/oracle/oracle_base
启动临时监听器:
lsnrctl start LISTENER_DBDG_SITE2
准备备用数据库
每个数据库实例都需要一个目录来存储审核日志。在备用数据库位置中的每个裸金属解决方案服务器上创建审核文件目录:
mkdir -p /apps/oracle/oracle_base/admin/DBDG_SITE2/adump
修改之前复制到备用数据库服务器的
$ORACLE_HOME/dbs/initDBDG_SITE21.ora
文件:- 将
db_unique_name
设置为新的备用数据库名称。 - 修改所有特定于实例的参数,以反映备用数据库的实例名称。以下是一些示例:
instance_number
thread
undo_tablespace
- 设置
audit_file_dest
参数以使用上一步中创建的目录。 - 如果每个位置的 ASM 磁盘组使用不同的名称,请修改
db_file_name_convert
和log_file_name_convert
参数以与新的文件位置匹配。 - 注释掉
control_files
参数。
以下示例展示了使用本指南中提供的示例进行修改后的已更新数据库参数文件。请注意,您的参数文件将包含特定于您的数据库设置的其他参数。下面仅显示需要针对备用实例进行修改的参数:
*.db_unique_name='DBDG_SITE2' DBDG_SITE21.instance_number=1 DBDG_SITE22.instance_number=2 DBDG_SITE21.thread=1 DBDG_SITE22.thread=2 DBDG_SITE21.undo_tablespace='UNDOTBS1' DBDG_SITE22.undo_tablespace='UNDOTBS2' *.audit_file_dest='/apps/oracle/oracle_base/admin/DBDG_SITE2/adump' #*.control_files='+DATA/DBDG_SITE1/CONTROLFILE/current.258.1091317089','+RECO/DBDG_SITE1/CONTROLFILE/current.257.1091317089'
- 将
在
/etc/oratab
文件中添加一个条目,以便oraenv
命令可以为备用数据库设置环境变量:DBDG_SITE21:ORACLE_HOME:N
创建备用数据库
设置
ORACLE_SID
环境变量,以便连接到备用数据库:source oraenv <<< "DBDG_SITE21"
您应该会收到响应
The Oracle base has been set to /apps/oracle/oracle_base
。在复制主数据库之前,您必须先在一个节点上手动启动备用实例。登录备用位置中的第一个裸金属解决方案服务器,启动 SQL*Plus,然后使用
pfile
在nomount mode
下启动备用数据库:sqlplus / as sysdba
STARTUP NOMOUNT PFILE='/apps/oracle/19.0.0/db_home1/dbs/initDBDG_SITE21.ora';
如果成功,您应该会收到类似于以下示例的响应:
ORACLE instance started. Total System Global Area 1.2885E+10 bytes Fixed Size 15988824 bytes Variable Size 1845493760 bytes Database Buffers 1.1006E+10 bytes Redo Buffers 17563648 bytes
启动实例后退出 SQL*Plus:
EXIT;
验证与备用数据库服务的连接。从主数据库位置的每个裸金属解决方案服务器,尝试使用 SQL*Plus 连接到备用实例。手动输入 SYS 远程登录密码以成功连接到实例。
sqlplus sys@DBDG_SITE2_FOR_DUPLICATION as sysdba
如果成功,您应该会收到标准 SQL*Plus 提示符,您可以在其中检查实例参数:
SHOW PARAMETER DB_UNIQUE_NAME;
您应该会收到类似如下所示的响应:
NAME TYPE VALUE ---------------- ----------- ------------------------------ db_unique_name string DBDG_SITE2
检查
DB_UNIQUE_NAME
参数后退出 SQL*Plus:EXIT;
连接到恢复管理器,然后运行
duplicate
命令以从活跃的主数据库复制备用实例:rman TARGET sys@DBDG_SITE1 AUXILIARY sys@DBDG_SITE2_FOR_DUPLICATION
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE NOFILENAMECHECK;
如果成功,您应该会在处理完成后收到类似以下示例的消息:
Finished Duplicate Db at ...
退出恢复管理器:
EXIT;
完成备用数据库创建
在数据库复制期间,ASM 会为备用数据库创建新的控制文件。连接到新的备用实例并获取新的控制文件名。以下示例展示了存储在
+DATA
和+RECO
磁盘组中的两个控制文件:sqlplus / as sysdba
SET LINESIZE 140 COLUMN NAME FORMAT a15 COLUMN VALUE FORMAT a125 SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME='control_files';
控制文件名显示在“值”字段中:
NAME VALUE --------------- ---------------------------------------------------------------------------------------------------- control_files +DATA/DBDG_SITE2/CONTROLFILE/current.258.1091317089, +RECO/DBDG_SITE2/CONTROLFILE/current.257.1091317089
记录上一步中的控制文件名,并将
$ORACLE_HOME/dbs/initDBDG_SITE21.ora
中control_files
参数的所有条目替换为新值。如果有多个控制文件,请用英文单引号封装各个文件,并用英文逗号进行分隔:*.control_files='+DATA/DBDG_SITE2/CONTROLFILE/current.258.1091317089','+RECO/DBDG_SITE2/CONTROLFILE/current.257.1091317089'
使用 SQL*Plus 连接到备用数据库,并通过修改后的
pfile
创建新的spfile
:sqlplus / as sysdba
CREATE SPFILE='+DATA/DBDG_SITE2/spfileDBDG_SITE2' FROM PFILE='/apps/oracle/19.0.0/db_home1/dbs/initDBDG_SITE21.ora';
使用
asmcmd
命令将密码文件复制到 ASM 磁盘组:asmcmd cp /apps/oracle/19.0.0/db_home1/dbs/orapwDBDG_SITE21.ora +DATA/DBDG_SITE2/orapwDBDG_SITE2
关停备用数据库实例并删除临时
pfile
和密码文件:sqplus / as sysdba
SHUTDOWN IMMEDIATE; EXIT;
rm $ORACLE_HOME/dbs/orapwDBDG_SITE21.ora $ORACLE_HOME/dbs/initDBDG_SITE2.ora
停止在备用数据库位置中的第一个裸金属解决方案服务器上用于数据库复制的临时监听器:
lsnrctl stop LISTENER_DBDG_SITE2
移除备用数据库位置中第一个裸金属解决方案服务器上的
$ORACLE_HOME/network/admin/listener.ora
文件中的临时条目。使用
srvctl
命令将新的备用数据库和实例添加到集群注册表:srvctl add database \ -db DBDG_SITE2 \ -oraclehome /apps/oracle/19.0.0/db_home1 \ -spfile +DATA/DBDG_SITE2/spfileDBDG_SITE2 \ -pwfile +DATA/DBDG_SITE2/orapwDBDG_SITE2 \ -role PHYSICAL_STANDBY \ -startoption MOUNT srvctl add instance \ -db DBDG_SITE2 \ -instance DBDG_SITE21 \ -node site2db1 srvctl add instance \ -db DBDG_SITE2 \ -instance DBDG_SITE22 \ -node site2db2
使用
srvctl
命令启动备用数据库:srvctl start database -db DBDG_SITE2
后续步骤
接下来,配置并启用 Data Guard 代理。