创建Oracle Data Guard 物理备用数据库(physical standby database)

1. 准备主数据库

1.1 启用合适的日志记录模式

在创建物理备数据库时,需要配置主数据库适合于Data Guard配置的日志记录模式(注意日志记录模式与归档模式的区别,归档模式是指对系统产生的日志是否进行归档或不归档)。数据库缺省的日志模式允许数据在load过程中采取nologged的方式,可能会导致在备数据库中遗失数据,需要手工干涉来纠正,因此不适合含有备数据库的数据库。可以将主数据库的日志模式配置成以下模式:
1) FORCE LOGGING模式,禁止所有load操作采用nonlogged方式。由于加载数据需要复制到redo日志,会导致载入过程变慢。使用以下命令启用FORCE LOGGING模式:
SQL> ALTER DATABASE FORCE LOGGING;
SQL> SELECT FORCE_LOGGING FROM V$DATABASE;

2) STANDBY NOLOGGING FOR DATA AVAILABILITY模式,load操作会将载入数据通过它自己的连接发送到各个备数据库。commit操作将会延迟直到所有备数据库作为Active Data Guard环境中运行管理恢复的一部分操作已经将数据应用完成为止。
SQL> ALTER DATABASE SET STANDBY NOLOGGING FOR DATA AVAILABILITY;
SQL> SELECT FORCE_LOGGING FROM V$DATABASE;

3)STANDBY NOLOGGING FOR LOAD PERFORMANCE模式,与上面的模式类似,不过在load的过程中如果网络速度不能跟上将数据载入到主数据库的速度时将停止将数据发送到备数据库。在这种模式下,备数据库可能会遗失数据,但是各个备数据库作为Active Data Guard环境中运行管理恢复的一部分操作会自动从主数据库获取数据。
SQL> ALTER DATABASE SET STANDBY NOLOGGING FOR LOAD PERFORMANCE;
SQL> SELECT FORCE_LOGGING FROM V$DATABASE;


1.2. 配置Redo传输认证

Oracle Data Guard使用Oracle Net会话在成员之间进行redo数据和控制信息的传输。Redo传输会话通过SSL(Secure Sockets Layer)协议或远程登录密码文件进行认证。

在以下条件下,使用SSL在两个数据库之间来认证redo传输会话:
1)数据库属于相同的Oracle Internet Directory(OID)企业域成员,允许使用当前的用户数据库链接
2)数据库的初始化参数LOG_ARCHIVE_DEST_n和FAL_SERVER使用SSL的Oracle Net连接描述符
3)每个数据库有一个Oracle wallet或包含一个DN(distinguished name)与数据库的OID条目中的DN相匹配的用户认证的支持的硬件安全模块

如果以上SSL认证要求不满足,那么Oracle Data Guard的每个成员之间必须配置使用远程的登录密码文件,同时每个物理备数据库在配置中必须包含有主数据库最新的密码文件副本。

启用密码文件认证用户步骤:
1) 创建密码文件(当密码文件存储在ASM磁盘组中时,可以在多个数据库实例之间共享,可选:RAC安装时默认已在ASM组上创建密码文件)
#orapwd FILE=filename FORMAT=12.2
2) 设置REMOTE_LOGIN_PASSWORDFILE初始化参数为exclusive(缺省值,更改需要重启数据库)。
3) 使用SYS用户连接数据库,创建相应的用户和密码,给用户分配相应的权限
SQL> GRANT SYSDBA to mydba;
4) 使用密码文件进行验证
SQL> CONNECT mydba as SYSDBA

注:从Oracle 12.2.0.1版本开始,主数据库的密码文件更改会自动传送到备数据库。唯一的例外是far sync实例,更新的密码文件必须手动复制到far sync实例,因为far sync实例只接收redo数据,不会应用它。一旦far sync实例中的密码文件获得更新,redo数据将会自动传送到far sync实例配置的接收redo日志的所有备数据库。密码文件在应用redo数据时会在备数据库上更新。


1.3. 配置主数据库接收redo数据

最佳实践是将备数据库第一次加到Oracle Data Guard配置中时配置主数据库接收redo数据,这样在需要的情况下主数据库可以快速转换为备数据库的角色和开始接收redo数据。

在主数据库上创建standby redo log步骤:
SQL> ALTER DATABASE ADD STANDBY LOGFILE (‘/oracle/dbs/slog1.rdo’) SIZE 500M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE (‘/oracle/dbs/slog2.rdo’) SIZE 500M;


1.4. 配置主数据库的初始化参数

在主数据库中,需要定义当数据库处于主数据库角色时控制redo传输服务的初始化参数,还需要增加当数据库转换成备数据库角色时用来控制接收redo数据和apply服务的其他参数。
下面的示例列出了主数据库作为主角色的初始化参数,示例中主数据库位于Chicago,备数据库位于Boston。示例是Chicago数据库的参数,既适用于其作为主数据库的角色也适用于作为备数据库的角色。示例使用的名称如下表所示:
在这里插入图片描述

DB_NAME=chicago
DB_UNIQUE_NAME=chicago
LOG_ARCHIVE_CONFIG=’DG_CONFIG=(chicago,boston)’
CONTROL_FILES=‘/arch1/chicago/control1.ctl’, ‘/arch2/chicago/control2.ctl’
LOG_ARCHIVE_DEST_1=
‘LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=chicago’
LOG_ARCHIVE_DEST_2=
‘SERVICE=boston ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=boston’
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc

下面列出了主数据库的额外的备数据库角色的初始化参数,这些参数在主数据库转换为备数据库时生效:
FAL_SERVER=boston
#OMF格式或ASM类型文件建议设置DB_CREATE_FILE_DEST参数,以下两个参数主要是进行文件系统非OMF格式的数据文件的名称转换
DB_FILE_NAME_CONVERT=‘/boston/’,‘/chicago/’
LOG_FILE_NAME_CONVERT=‘/boston/’,‘/chicago/’
STANDBY_FILE_MANAGEMENT=AUTO

下表简单解释了前面列出的各个参数的设置。

参数建议设置
DB_NAME在主数据库上,指定数据库创建时使用的名称。在物理备数据库上,使用主数据库的DB_NAME。
DB_UNIQUE_NAME指定每个数据库的唯一的名称。这个名称一直属于该数据库,并且不会更改,即使在主备数据库角色发生转换时也不会变化。
LOG_ARCHIVE_CONFIG参数的属性DG_CONFIG必须明确地设置为Oracle Data Guard配置中的各个数据库后才可以启用Oracle Data Guard的功能。将DG_CONFIG设置为包含各个数据库的DB_UNIQUE_NAME的文本字符串,每个名称以逗号进行分隔。
CONTROL_FILES指定主数据库的控制文件的路径和名称。建议配置控制文件为两份拷贝,这样出现故障时使用完整的控制文件覆盖损坏的控制文件后实例就可以轻易地重启。
LOG_ARCHIVE_DEST_n指定redo数据在主备数据库上的归档位置:
1)LOG_ARCHIVE_DEST_1指定主数据库产生的本地在线redo log文件归档到本地的目录。
2)LOG_ARCHIVE_DEST_2 只对主数据库角色有效。指定将redo数据传输到远程的目标物理备数据库。
注:如果使用参数DB_RECOVERY_FILE_DEST配置了fast recovery area,同时没有使用LOCATION属性明确指定本地归档目标路径,Oracle Data Guard将会自动使用LOG_ARCHIVE_DEST_1初始化参数作为本地归档的缺省目标路径。
REMOTE_LOGIN_PASSWORDFILE如果使用远程登录密码文件来认证管理用户或redo传输会话,这个参数必须设置为EXCLUSIVE或SHARED。
LOG_ARCHIVE_FORMAT指定归档日志文件的格式,thread(%t),sequence number(%s),resetlogs ID(%r)。
FAL_SERVER指定FAL Server的Oracle Net服务名称(一般是主数据库的名称)。当数据库chicago处于备数据库的角色时,它使用boston数据库作为FAL Server,在boston数据库不能自动发送缺失的日志文件时用来获取缺失的归档日志文件
DB_FILE_NAME_CONVERT指定备数据库的数据文件的路径,后面跟随着主数据库文件的位置。这个参数用来转换主数据库数据文件的路径为备数据库数据文件的路径。参数只用来转换物理备数据库的路径名称。可以使用参数指定多个配对的路径。
LOG_FILE_NAME_CONVERT指定备数据库的在线redo log文件的路径,后面跟随着主数据库文件的位置。这个参数用来转换主数据库日志文件的路径为备数据库日志文件的路径。可以使用参数指定多个配对的路径。
STANDBY_FILE_MANAGEMENT当在主数据库上添加或删除数据文件时相应的变化也会自动在备数据库上更新时设置为AUTO。

1.5. 启用日志归档

如果没有启用归档,那么必须将主数据库置于ARCHIVELOG模式,启用自动归档。
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;


2. 创建物理备数据库详细步骤

2.1. 创建主数据库数据文件的备份拷贝

建议使用RMAN来创建主数据库的数据文件的备份拷贝。


2.2. 为备数据库创建控制文件

主数据库至少为mount的状态下时,为备数据库创建控制文件
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS ‘/tmp/boston.ctl’;

命令指定数据库运行在备数据库角色下,上面的例子中数据库名称为boston。不能让主备数据库使用同一个控制文件,主备数据库必须各自有独立的控制文件。

注:复制数据库过程中会从备份中还原控制文件,所以这个步骤不是必须的。


2.3. 为备数据库创建参数文件

1) 从主数据库的SPFILE中创建PFILE:
SQL> CREATE PFILE= ‘tmp/initboston.ora’ FROM SPFILE;

2)更改PFILE中的黑色粗体显示的参数:
DB_NAME=chicago
DB_UNIQUE_NAME=boston
LOG_ARCHIVE_CONFIG=’DG_CONFIG=(chicago,boston)’
CONTROL_FILES=‘/arch1/boston/control1.ctl’, ‘/arch2/boston/control2.ctl’
LOG_ARCHIVE_DEST_1=
'LOCATION=USE_DB_RECOVERY_FILE_DEST
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=boston’
LOG_ARCHIVE_DEST_2=
'SERVICE=chicago ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=chicago’
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc
FAL_SERVER=chicago

#OMF格式或ASM类型文件建议设置DB_CREATE_FILE_DEST参数,以下两个参数主要是进行文件系统非OMF格式的数据文件的名称转换
DB_FILE_NAME_CONVERT=‘/chicago/’, ‘/boston/’
LOG_FILE_NAME_CONVERT=‘/chicago/’, ‘/boston/’

STANDBY_FILE_MANAGEMENT=AUTO

#如果主数据库是RAC数据库,则在单节点备数据库上设置参数
CLUSTER_DATABASE=“FALSE”

确保主备数据库的COMPATIBLE初始化参数设置成为相同的值。如果该值不相同,redo传输服务可能会无法将redo数据从主数据库传输到备数据库。


2.4. 从主系统复制文件到备系统

确认备系统上所有要求的目录已经创建好,然后使用系统命令将数据库备份,备数据库控制文件,备数据库参数文件等二进制文件从主系统复制到备系统上。


2.5. 设置备数据库的环境

创建基于Windows的服务(可选),密码文件,SPFILE和Oracle Net环境。
1) 如果备数据库运行在Windows系统中,使用ORADIM工具创建Windows服务。例如:
oradim -NEW -SID boston -STARTMODE manual

ORADIM工具会自动决定创建服务的用户名和提示输入用户密码,详细参考文档《Oracle Database Platform Guide for Microsoft Windows》。

配置完成后,在Windows管理工具的“服务”窗口中将OracleServiceORACLE_SID的启动类型设置为“自动”,否则下次服务器重启时需要手动启动服务以连接到实例。

2) 将主数据库系统的远程登录密码文件复制到备数据库。

如果管理用户使用操作系统认证,并且使用SSL来进行redo传输认证,这个步骤是可选的。

3) 在备数据库上配置和启动listener。

参考《Oracle Database Net Services Administrator’s Guide》。

4) 创建Oracle Net服务名称。
在主备数据库系统上,使用Oracle Net Manager为主备数据库创建用来进行redo传输服务的网络服务名称。在这个示例中网络服务名称是chicago和boston。

网络服务名称的连接描述符需要指定为dedicated server。

5)在备数据库上,使用前面创建的参数文件创建备数据库的SPFILE
SQL> CREATE SPFILE FORM PFILE=’ initboston.ora’;

6)如果主数据库有一个数据库加密wallet,那么将它复制到备数据库系统,然后配置备数据库使用它。


2.6. 启动物理备数据库

按照以下步骤启动物理备数据库和Redo Apply。
1) 在备数据库上,启动数据库到NOMOUNT状态。
SQL> STARTUP NOMOUNT;

注:如果要使用用户通过密码远程连接NOMOUNT状态下的辅助实例,在tnsnames.ora的连接描述符中增加(UR=A)行,否则会报“ORA-12528: TNS:listener: all appropriate instances are blocking new connections”的错误。

示例:
LXORCL =
 (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = oracle19c.mdcl.com.cn)(PORT = 1522))
  (CONNECT_DATA =
  (SERVER = DEDICATED)
  (SERVICE_NAME = lxorcl.mdcl.com)
  (UR=A)
 )
)

2) 在备数据库系统上,使用在主数据库上备份的数据文件进行恢复。具体步骤可参考另一篇文章“使用RMAN复制数据库”。

当使用RMAN来创建备数据库时,必须选择使用活动复制还是基于备份的复制。
1)如果指定FROM ACTIVE DATABASE选项,那么RMAN直接从主数据库拷贝数据文件到备数据库,主数据库必处于挂载或打开状态。

活动数据库复制示例:
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER;

2)如果不指定FROM ACTIVE DATABASE选项,那么RMAN执行基于备份的复制。RMAN恢复主数据库的数据文件的备份到备数据库。需要用来创建和恢复备数据库的所有备份和归档redo日志文件必须能够被备主机的服务器会话访问。RMAN恢复最近的数据文件除非执行SET UNTIL命令。

基于备份的复制示例:
DUPLICATE TARGET DATABASE FOR STANDBY BACKUP LOCATION ‘+DATA/BACKUP’ DORECOVER;
(注:基于备份的复制会由于缺少最新的归档redo日志在介质恢复时报错,因此建议不加DORECOVER选项)

使用活动数据库复制步骤示例:
a.在auxiliary数据库实例上按照文档准备。
由于使用活动数据库复制,必须为auxiliary实例创建一个密码文件和建立Oracle Net连接。这是一个临时的密码文件,在复制的操作中会被覆盖。
b. 决定如何为备数据库的控制文件,数据文件,在线日志文件和临时文件命名。
c.启动RMAN,分别连接到TARGET数据库和AUXILIARY实例

% rman
RMAN> CONNECT TARGET sys@srcdb;
RMAN> CONNECT AUXILIARY sys@dupdb;
#进行活动数据库复制
RMAN> DUPLICATE TARGET DATABASE
FOR STANDBY
FROM ACTIVE DATABASE
DORECOVER

RMAN自动恢复备份的控制文件,复制所有必要的数据库文件和归档日志文件到备主机。RMAN恢复备数据库,但不将其置于手动或管理恢复模式下。


备数据库恢复
缺省情况下,RMAN在创建备数据库后不会进行恢复。RMAN让备数据库处于mounted状态,不会将其放置于手动或管理恢复模式。RMAN退出连接,不会进行备数据库的介质恢复。

为了让RMAN在创建后恢复备数据库,备数据库的控制文件必须可以用来进行恢复。下面的条件必须要满足:
1) 备数据库的截止恢复时间必须大于或等于备控制文件的检查点SCN;
2) 包含备控制文件的检查点SCN的归档日志必须在备节点上可用。

让以上两个条件可以得到满足的一种方法是在主数据库备份控制文件后运行“ALTER SYSTEM ARCHIVE LOG CURRENT”命令归档在线日志文件。然后,再使用RMAN备份最近的归档日志文件或将归档日志文件移到备节点上。

使用RMAN DUPLICATE命令的DORECOVER选项进行备数据库恢复,RMAN在创建备数据库后的文件后进行以下操作:
1) 进行介质恢复。如果恢复需要归档日志文件,而日志文件不在磁盘上,RMAN就会尝试进行备份还原。
2) RMAN恢复备数据库到指定的时间,SCN或日志文件序列号,如果没有指定前面的选项,将会恢复到最近的归档日志文件。
3) 在介质恢复完成后RMAN把备数据库留在mounted状态,不会将其置于手工或管理恢复模式下。


备数据库redo日志文件
RMAN会在备数据库上自动创建备redo日志文件。日志文件创建后,备数据库对日志文件进行维护和按照日志文件的规则进行归档。

如果使用基于备份的复制,在备数据库上唯一可以命名备redo日志文件的选项是在备控制文件中指定日志文件的文件名。如果在备数据库的日志文件名称必须与主数据库不同,其中一个选项是在备初始化参数文件中设置LOG_FILE_NAME_CONVERT指定备redo日志的文件名。

在备数据库上指定备redo日志文件的文件名有以下限制:
1)如果主备数据库要的日志文件要使用不同的名称,必须使用LOG_FILE_NAME_CONVERT参数指定备redo日志文件的名称
2)不能使用SET NEWNAME和CONFIGURE AUXNAME命令来重命名备redo日志文件。
3)不能使用DUPLICATE命令的LOGFILE子语句指定备日志文件的文件名
4)对于主备数据库的redo日志文件相同的情况,必须指定DUPLICATE的NOFILENAMECHECK子语句,否则即使在不同的主机上创建的备数据库,RMAN也会提示错误。


备数据库的密码文件
如果使用活动数据库的复制,RMAN会复制密码文件到备数据库,因为备数据库的密码文件必须是目标数据库(target database)的精确复制。在这种情况下,PASSWORD FILE子语句不是必要的。RMAN会覆盖辅助实例(auxiliary instance)的密码文件。
如果使用基于备份的数据库复制,那么必须从主数据库手工复制密码文件到备数据库,从而让Oracle Data Guard进行日志传输。


2.7. 启动Redo Apply

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

“DISCONNECT FROM SESSION”选项让Redo Apply在后台会话中运行。


2.8. 确认物理备数据库运行正常

在备数据库上,查询视图V$DATAGUARD_PROCESS 来确认redo数据正从主数据库传输到备数据库并且应用到备数据库。

SQL> SELECT ROLE, THREAD#, SEQUENCE#, ACTION FROM V$DATAGUARD_PROCESS;
ROLE THREAD# SEQUENCE# ACTION

ROLE                        THREAD#  SEQUENCE# ACTION
------------------------ ---------- ---------- ------------
recovery apply slave              0          0 IDLE
recovery apply slave              0          0 IDLE
recovery apply slave              0          0 IDLE
recovery apply slave              0          0 IDLE
managed recovery                  0          0 IDLE
RFS sync                          1        565 IDLE
RFS sync                          2        550 IDLE
archive local                     0          0 IDLE
sync                              0          0 IDLE
RFS ping                          2        550 IDLE
RFS archive                       0          0 IDLE
RFS archive                       0          0 IDLE
redo transport timer              0          0 IDLE
archive redo                      0          0 IDLE
gap manager                       0          0 IDLE
archive redo                      0          0 IDLE
RFS archive                       0          0 IDLE
recovery logmerger                1        565 APPLYING_LOG
archive redo                      0          0 IDLE
RFS archive                       0          0 IDLE
RFS ping                          1        565 IDLE
RFS archive                       0          0 IDLE
redo transport monitor            0          0 IDLE
log writer                        0          0 IDLE
RFS archive                       0          0 IDLE

recovery logmerger 角色显示redo数据正在应用到备数据库上。


3. 后续步骤

在物理备数据库运行后,可以更改Oracle Data Guard的数据保护模式(参考文章Oracle Data Guard 19c 数据保护模式介绍)和启用数据库闪回功能。

Flashback Database功能使得failover操作后不再需要重新创建主数据库。Flashback Database 可以让数据库比传统的时间点恢复更快地回到最近的运行状态,因为它不需要从备份中恢复数据,也不需要再应用redo数据。可以在主备数据库上都启用数据库闪回功能,详情可参考文档《Oracle Database Backup and Recovery User’s Guide》。




来源:《Oracle Data Guard Concepts and Administration, 19c》

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值