本文永久链接地址:https://www.askmac.cn/archives/oracle-11g-ocm-create-dg.html
11 使用SQL和RMAN命令来创建一个物理备库
11.1 目标
在完成这个课程之后,你应该能完成下列事情:
- 配置物理备库,和来支持创建物理于角色转换的ORACLE 网络服务。
- 使用RMAN命令DUPLICATE TARGET DATABASE FOR STANDBY FROM
ACTIVE DATABASE来创建一个物理备库
11.2 创建一个物理备库的步骤
概述:
1.准备主库
2.设置物理备库上的参数
3.配置oracle 网络服务
4.启动备份实例
5.执行RMAN 命令:DUPLICATE TARGET DATABASE FOR
STANDBY FROM ACTIVE DATABASE
6.开启redo的传输和应用
准备主库:
- 在数据库层面启用FORCE LOGGING
- 如果需要的话创建一个密码文件
- 创建备份日志组(standby redo log)
- 设置初始化参数
SHUTDOWN IMMEDIATE;STARTUP MOUNT;ALTER DATABASE ARCHIVELOG;ALTER DATABASE OPEN; |
FORCE LOGGING模式决定数据库会将所有的变化写进日志(除了临时表空间和临时段的改变)
除非你已经配置了oracle 高级安全和公钥基础证书,否则每个在Data gurad 配置的数据库必须使用一个密码文件,并且每个系统中的sys用户的密码必须相同使得redo数据传输成功。
standby redo log用来存储从其他oracle数据库接收的redo
在主库上,你定义初始化参数来控制redo传输服务。当主库被切换到备份角色时,这里有另外的参数你需要增加来控制redo数据的接收和应用日志服务。
注:Data Guard broker 需要使用参数文件
如果归档没开启,使用ALTER DATABASE ARCHIVELOG 命令来将主库置为ARCHIVELOG模式,开启自动归档。
FORCE LOGGING 模式:
- FORCE LOGGING模式用来确保数据一致性
- FORCE LOGGING会强制生成redo,即使执行中使用了NOLOGGING选项
- 临时表空间和临时段不会记录日志
- 建议在物理和逻辑备库上都开启FORCE LOGGING
- 在主库上使用下列命令:
alter database force logging; |
FORCE LOGGING会忽略所有对象上个性化的NOLOGGING配置。所有未完成,不记录日志的操作必须完成之后,force logging才能开始。所以尽管可以在数据库打开的时候启用 FORCE LOGGING,建议在数据库MOUNT 模式启用。
数据库默认在NOFORCE LOGGING模式。如果数据库在FORCE LOGGING模式的话,V$DATABASE中的FORCE_LOGGING字段的值应该是YES。
注:你应该在执行创建备库需要的备份之前启用FORCE LOGGING,并且在Data Gurad配置存在期间,保持FORCE LOGGING 模式。
11.3 配置 standby redo logs
一个standby redo log 被处于备库角色的数据库用来接收主库的redo 数据。standby redo log是一个单独的日志组。
建议在Data Guard 配置中的所有数据库中都设置 standby redo log,来避免角色切换。
下列实现需要standby redo log:
- 实时应用
- 级联redo 日志路径
注:通过在主库上设置standby redo log,当你执行RMAN命令DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE时,standby redo log会自动的在备库上被创建。
11.4 创建standby redo logs
在主库上,你必须创建至少和在线日志组数目相同的standby redo log文件。在主库上建议创建比在线日志组多一个的standby redo log。除此之外,文件的大小必须和主库在线日志大小一致。如果你的在线日志大小不一样,远程RFS进程会自动的使用和在线日志组大小一样的standby redo log 。
如果下列条件发生,RFS 进程会写入一个归档日志文件:
- 没有standby redo log
- 没有发现一个和在线redo 文件大小一样的standby redo日志
- 所有正确大小的standby redo log没有被归档
使用SQL 来创建 Standby Redo logs
在主库创建standby redo log:
ALTER DATABASE ADD STANDBY LOGFILE’/u01/app/oracle/oradata/orcl/srl01.log’SIZE 50M;ALTER DATABASE ADD STANDBY LOGFILE
‘/u01/app/oracle/oradata/orcl/srl02.log’ SIZE 50M; |
可以使用ALTER DATABASE ADD STANDBY LOGFILE语句老创建standby redo文件。虽然standby redo logs 只在备份角色的操作被使用,你也应该在主库上创建standby redo logs,这样在进行却换的时候,就不需要DBA介入。
你可以在主库上创建standby redo log,这样通过RMAN DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE命令会自动在备库创建standby redo log。
查看 standby redo 日志 信息:
验证日志组的创建,可以查询 v$STANDBY_LOG和v$LOG_FILE
SELECT group#, type, member FROM v$logfileWHERE type = ‘STANDBY’;SELECT group#, dbid, thread#, sequence#, statusFROM v$standby_log;
|
11.5 在主库上设置控制redo传输的初始化参数
参数名称 | 描述 |
LOG_ARCHIVE_CONFIG | 为配置中的每个数据库制定唯一的数据库名称 |
LOG_ARCHIVE_DEST_n | 控制redo传输服务 |
LOG_ARCHIVE_DEST_STATE_n | 指定路径的状态 |
ARCHIVE_LAG_TARGET | 在指定多少秒后强制进行日志切换 |
LOG_ARCHIVE_TARCE | 控制归档进程生成的输出 |
设置 LOG_ARCHIVE_COFIG:
指定DG_CONFIG的属性来列出,在Data Gurad配置中,主库上和每个备库上的DB_UNIQUE_NAME
LOG_ARCHIVE_CONFIG=’DG_CONFIG=(pc00prmy,pc00sby1)’ |
指定 LOG_ARCHIVE_CONFIG参数的DG_CONFIG属性。默认情况下,LOG_ARCHIVE_CONFIG 参数允许数据库发生和接收redo。使用V$DATAGURAD_CONFIG视图来查 DB_UNIQUE_NAME和LOG_ARCHIVE_CONFIG初始化参数定义的唯一数据库名,你可以在Data Guarf环境中的所有数据库上查看。视图的第一样列出了当前数据库被DB_UNIQUE_NAME初始化参数指定的唯一数据库名,除此之外的行,反映了其他数据库被LOG_ARCHIVE_CONFIG中DG_config关键字指定的唯一数据库名。
下面是查询v$dataguard_config的例子:
show parameter log_archive_config
SELECT * FROM v$dataguard_config;
设置 LOG_ARCHIVE_DEST_n
- 下列情况指定 LOG_ARCHIVE_DEST_n参数:
-本地归档(日过没使用闪回恢复区)
-备库数据库路径
- 包含下列选项(最少一个):
-LOCATION:指定一个有效的路径名称
-SEREVICE:指定一个有效的ORACLE网络服务名来连接到一个备库
- 为每个定义的路径包含一个LOG_ARCHIVE_DEST_STATE_n参数
LOG_ARCHIVE_DEST_1=’SERVICE=pc00sby1VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=pc00sby1’LOG_ARCHIVE_DEST_STATE_1=ENABLE |
通过使用多个LOG_ARCHIVE_DEST_n属性,你定义了Data Gurad配置的大多数设置。redo 传输服务直接被这些配置控制。你应该为本地归档路径和备份路径设置一个LOG_ARCHIVE_DEST_n参数(n是一个1到10的整数)。如果你为本地的归档路径使用了闪回恢复区,LOG_ARCHIVE_DEST_10被自动设置为USE_DB_RECOVERY_FILE_DEST.查询V$ARCHIVE_DEST视图来查看当前LOG_ARCHIVE_DEST_n初始化参数的配置。
所有定义的LOG_ARCHIVE_DEST_n参数必须最少包含,一个LOCATION属性或者一个SERVICE属性。
除此之外,你必须为每个定义的路径有一个LOG_ARCHIVE_DEST_STATE_n参数。LOG_ARCHIVE_DEST_STATE_n默认是ENABLE
指定角色–基础路径
例如:
log_archive_dest_1 =’service=pc00sby1 asyncvalid_for=(online_logfile,primary_role)
db_unique_name=pc00sby1′
log_archive_dest_1 = ‘service=pc00prmy async valid_for= (online_logfile, primary_role) db_unique_name=pc00prmy’
|
LOG_ARCHIVE_DEST_n初始化参数的VALID_FOR属性可以让你精确的指定使用的归档路径,和日志文件使用的类型。这个属性使用一个关键字对来定义reod日志类型和数据库角色。使用这个属性可以让你设置预计的切换和故障转移。
在上面图示的例子,在备份数据库上有一个目的地,是主库VALID_FOR参数定义的。这个目的地是仅给发生一个切换后的备库使用的,当备份变成一个主库。这个在旧的主库上的目的地当其成为备库的时候被忽略。
VALID_FOR属性支持了二个值:redo_log_type 和 database_role。
redo_log_type关键字是:
- ONLINE_LOGFILE:这个目的地仅被用来给在线redo log 文件归档。
- STANDBY_LOGFILE:这个目的地仅用来归档standby redo日志文件或者从其他数据接收的归档日志。
- ALL_LOGFILES:这个目的地被用来归档在线或者standby日志文件。
database_role关键字如下:
- PRIMARY_ROLE:这个目的地仅用来当数据库是主库角色时。
- STANDBY_ROLE: 这个目的地仅用来当数据库是备库角色时。
- ALL_ROLES:任何角色都可以。
注意:因为关键字是唯一的,这个archival_soutce和database_role值可以被任何顺序指定。
例如VALID_FOR=(PRIMARY_ROLE,ONLINE_LOGFILE) 等价于VALID_FOR=(ONLINE_LOGFILE,PRIMARY_ROLE).
VALID_FOR的组合:
组合 | 主 | 物理 | 逻辑 |
ONLINE_LOGFILE,PRIMARY_ROLE | 有效 | 忽略 | 忽略 |
ONLINE_LOGFILE,PRIMARY_ROLE | 忽略 | 忽略 | 有效 |
ONLINE_LOGFILE,ALL_ROLES | 有效 | 忽略 | 有效 |
STANDBY_LOGFILES,STANDBY_ROLE | 忽略 | 有效 | 有效 |
STANDBY_LOGFILE,ALL_ROLES | 忽略 | 有效 | 有效 |
ALL_LOGFILES,PRIMARY_ROLE | 有效 | 忽略 | 忽略 |
ALL_LOGFILES,STANDBY_ROLE | 忽略 | 有效 | 有效 |
ALL_LOGFILES,ALL_ROLES | 有效 | 有效 | 有效 |
在上表中所示,有效表示归档日志路径可以被这个字段定义的角色数据库使用。忽略表示这个归档日志路径不使用,这个类型的目的地被忽略。一个忽略的目的地不会产生错误。
这里有一个无效的组合:STANDBY_LOGFILE,PRIMARY_ROLE。指定这个组合会导致一个错误。如果这样配置了,在启动的时候你会收到如下错误:
ORA-16026: The parameter LOG_ARCHIVE_DEST_n contains an invalid
attribute value
注意:单一和复数的关键字都是有效的。例如你既可以指定PRIMARY_ROLE或者PRIMARY_ROLES,以及 ONLINE_LOGFILES或者ONLINE_LOGFILES。
定义redo传输模式:
LOG_ARCHIVE_DEST_n初始化参数定义了redo传输模式,被主数据库用来发送redo到备份数据库,其属性如下:
- SYNC:指定在事务可以提交之前,生成的redo数据必须被目的地接收;否则,这个目的地是失败的。在多个配置SYNC目的地中,redo必须被每个描述为SYNC的目的地处理。
- ASYNC(默认):指定一个事务在可以提交之前,生成的redo数据不需要被目的地接收。
- AFFIRM:指定一个redo传输目的地在其写入到standby redo log之后,承认接收到redo数据
- NOAFFIRM: 指定一个redo传输目的地在其写入到standby redo log之前就承认接收到redo数据
如果既不指定AFFIRM也不指定NOAFFIRM属性,当使用SYNC属性时,默认是AFFIRM,当使用ASYNC属性时,默认是NOAFFRIM。
11.6 在主库上设置初始化参数
- 当备份数据库有磁盘或者目录结构于主库不一样的时候指定参数
- 当主库被转换成一个备库的时候使用的参数
参数名称 | 描述 |
DB_FILE_NAME_CONVERT | 转换主库文件名称 |
LOG_FILE_NAME_CONVERT | 转换主库日志名称 |
STANDBY_FILE_MANAGEMENT | 控制自动地备份文件管理 |
在上面列出的参数是需要的,如果主库和备库的磁盘配置不一样。当主库被转换为一个备库时,上面的参数也是适用的。
指定DB_FILE_NAME_CONVERT的值:
- DB_FILE_NAME_CONVERT如果主库和备库上磁盘或目录结构不同的话,这个值必须指定。
- 多个文件名称对可以被DB_FILE_NAME_CONVERT参数列出
- DB_FILE_NAME_CONVERT只适用于物理备库
- DB_FILE_NAME_CONVERT 可以在DUPLICATE RMAN脚本中指定
DB_FILE_NAME_CONVERT =(‘/oracle1/dba/’,’/ora1/stby_dba/’,’/oracle2/dba/’,’/ora2/stby_dba/’) |
当文件被增加到备库的时候,DB_FILE_NAME_CONVERT参数被用来转换主库上的数据文件名到一个在备库上的数据文件名。这个文件必须存在并且在物理备库上是可写的;如果不可写,恢复进程会出现错误而停止。
你可以设置这个参数2个字符串,主库的数据文件路径名和文件名在备库之后。第一个字符串是在主库上找到的数据文件名模式。第二个字符串是在物理备库上找到的数据文件名模式。必要时,你可以使用多个主库和备库替换字符串对。你可以使用单引号或者双引号。括号是可选的。
在上面的例子中,’/oracle1/dba/’和’/ora1/stby_dba/’被用来匹配来自主库的文件名。’/oracle2/dba/’和’/ora2/stby_dba/’为物理备库相应的字符串。一个在主库的文件/oracle1/dba/system01.dbf在备库上被转换为/ora1/stby_dba/system01.dbf。
注意:如果备库使用OMF,就不需要设置DB_FILE_NAME_CONVERT参数。
指定LOG_FILE_NAME_CONVERT的值:
- LOG_FILE_NAME_CONVERT和DB_FILE_NAME_CONVERT类似
- LOG_FILE_NAME_CONVER如果主库和备库上磁盘或目录结构不同的话,这个值必须指定
- LOG_FILE_NAME_CONVERT仅适用于物理备库
- LOG_FILE_NAME_CONVERT可以在DUPLICATE RMAN脚本中设置
LOG_FILE_NAME_CONVERT = (‘/oracle1/logs/’,’/ora1/stby_logs/’) |
LOG_FILE_NAME_CONVERT参数被用来转换在主库上的redo日志文件名称到备库上的redo日志文件名。在主库上增加一个redo日志文件,需要在备库上对应的增加一个文件。当备库被更新时,这个参数被用来转换主库的日志文件名称到备库上的日志文件名称。如果备库和主库在一个系统上,或者其他分离的系统中使用的不同路径名称,这个参数是必须的。
注意:如果备库使用OMF,不用设置LOG_FILE_NAME_CONVERT参数。
指定STANDBY_FILE_MANAGEMENT的值:
- STANDBY_FILE_MANAGEMENT 被用来维护一致性,当你在主库增加或删除一个数据文件。
–MANUAL(默认)
–AUTO
-自动地增加数据文件到备库
-明确ALTER语句不在允许在备库上执行
- STANDBY_FILE_MANAGEMENT适用于主库和物理备库
STANDBY_FILE_MANAGEMENT = auto |
当这个参数设置为AUTO时,你不能在备库执行下列命令:
- ALTER DATABASE RENAME
- ALTER DATABASE ADD/DROP LOGFILE[MEMBER]
- ALTER DATABASE ADD/DROP STANDBY LOGFILE MEMBER
- ALTER DATABASE CREATE DATAFILES AS….
当你想在主库增加一个redo日志文件,并且也想同时在物理备库中增加(或者是删除的场景),你必须做下列事情:
1.在物理备库上设置STANDBY_FILE_MANAGEMENT为MANUAL.
2.在主库增加redo日志文件(或删除)
3.在备库增加它们(或删除)
4.重新在备库上置回AUTO
一个设置例子:
DB_NAME=pc00prmyDB_UNIQUE_NAME=pc00prmyLOG_ARCHIVE_CONFIG=’DG_CONFIG=(pc00prmy,pc00sby1)’CONTROL_FILES=’/u01/app/oracle/oradata/pc00prmy/control1.ctl’,’/u01/app/oracle/oradata/pc00prmy/control2.ctl’
LOG_ARCHIVE_DEST_1= ‘SERVICE=pc00sby1 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=pc00sby1’ LOG_ARCHIVE_DEST_STATE_1=ENABLE REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE LOG_ARCHIVE_FORMAT=%t_%s_%r.arc |
在这个例子中,假设主库的名称为dbdao,备库的名称为dbdaostdby。对此,这里的网络服务名被定义。
当主库被转换为备库角色时,你需要额外的参数来控制redo数据的接收和日志应用服务:
DB_FILE_NAME_CONVERT=’/u01/app/oracle/oradata/pc00sby1/’,’/u01/app/oracle/oradata/pc00prmy/’LOG_FILE_NAME_CONVERT=’/u01/app/oracle/oradata/pc00sby1/’,’/u01/app/oracle/oradata/pc00prmy/’STANDBY_FILE_MANAGEMENT=AUTO |
在主库定义这些初始化参数来解决gaps,转换新数据文件和日志文件名称到一个新的主库,并且当这个数据库在备份角色时,归档这些传入的redo数据。
11.7 为你的物理备库创建网络服务名
更新tnsnames.ora文件如下:
dbdaostdby =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = edt3r17p1.us.oracle.com)
(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = pc00sby1.us.oracle.com) ) ) |
使用ONM来为你的物理备库定义一个服务名。在上面的例子中显示了通过ONM生成的入口tnsname.ora文件。
注:这个入口在调用RMAN执行DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIOVE DATABASE命令时用来连接到备库。
为你的备库创建监听入口:
使用ONM来在listener.ora文件中配置伟哥备库入口:
SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = pc00sby1.us.oracle.com)(ORACLE_HOME =
/u01/app/oracle/product/11.1.0/db_1) (SID_NAME = pc00sby1) ) |
使用Oracle NET Manager来配置一个新的监听(如果必要的话)或者在你的物理备库上更新listener.ora文件。上面的例子显示了由ONM生产的listener.ora文件入口。
注意:这个静态监听是需要的,因为将实例启动到了nomount模式。
11.8 拷贝主库的密码文件到备库主机上
1.将主库的密码文件拷贝到备库的$ORACLE_HOME/dbs目录下。
2.在备库上重名名密码文件:orapw<SID>.
你必须通过拷贝主库密码文件到备库主机上并重命名它,来为你的物理备库创建一个密码文件。
11.9 为物理备库创建一个参数文件
创建一个初始化参数文件包含一个参数:
DB_NAME=dbdaostdby
创建一个文本的初始化参数文件只需要包含一个DB_NAME参数。这个初始化参数文件被物理备库用来,在执行DUPLICATE TARGATE DATABASE FRO STANDBY FROM ACTIVE DATABASE启动实例到NOMOUNT模式。当你执行这个命令时,RMAN为备库创建了一个参数文件。
11.10 为物理备库创建目录
1.创建审计目录:
在备库中的$ORACLE_BASE/admin下创建审计目录。一般名称是adump
2.创建数据文件目录:
在$ORACLE_BASE/oradata目录下为物理备库数据文件创建一个目录
11.11 启动物理备库
设置好环境变量,然后使用之前的初始化参数文件,启动物理备库到nomount模式:
startup nomount pfile=$ORACLE_HOME/dbs/dbdaostdby.ora
注意在参数文件中要配置FLA_CLIENT和FAL_SERVER参数。
Fetch archive log (FAL):
-提供了客户端/服务端机制来解决,主库产生的归档日志范围内于备库接收日志出现的gap
-仅仅适用于物理备库
-进程在需要的时候启动,然后会尽快的完成,其过程非常快,可能看不到进程运行。
FAL_CLIENT:指定了被FAL 服务端使用的FLA客户端名称
FAL_SERVER:指定了备库使用的FAL服务端
上述指定的名称均为 ONS配置的服务名。
11.12 使用RMAN脚本来创建物理备库
RMAN创建物理的脚本包含 DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE 命令。下面是一个例子:
run {allocate channel prmy1 type disk;allocate channel prmy2 type disk;allocate channel prmy3 type disk;allocate channel prmy4 type disk;
allocate auxiliary channel stby type disk; duplicate target database for standby from active database spfile parameter_value_convert ‘pc00prmy’,’pc00sby1′ set db_unique_name=’pc00sby1′ set db_file_name_convert=’/pc00prmy/’,’/pc00sby1/’ set log_file_name_convert=’/pc00prmy/’,’/pc00sby1/’ set control_files= ‘/u01/app/oracle/oradata/pc00sby1.ctl’ set log_archive_max_processes=’5′ set fal_client=’pc00sby1′ set fal_server=’pc00prmy’ set standby_file_management=’AUTO’ set log_archive_config=’dg_config=(pc00prmy,pc00sby1)’ set log_archive_dest_1=’service=pc00prmy ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=pc00prmy’; } |
在这个RMAN脚本正,指定了备库的初始化参数。
然后调用RMAN连接到主库和物理备库,也就是连接到目标和辅助实例,再来运行之前创建的脚本:
RMAN> connect target sys/oracleRMAN> connect auxiliary sys/oracle@pc00sby1RMAN> @cr_phys_standby |
11.13 开启实时应用
当你开启了实时应用特性,日志应用服务会实时的应用standby redo日志文件中的redo数据(在日志文件被写入的同时)。于其对的是当日志切换时,从归档日志文件中恢复redo。如果某些情况导致应用进程不能工作(例如,在一段时间内物理备库是只读模式),那么应用进程会自动地按照需要进行归档日志。应用进程也尝试去捕获和尽可能的快的读取standby redo日志文件。
实时应用日志提供了一些好处,包括更快的切换和故障转移操作,在将一个物理备库变更到只读之后可以得到最新结果,从一个物理备库得到最新的报表,和更大利用日志的能力。实时应用日志希望有更大的日志文件,因为应用服务停留在一个日志的时间越长,切换的时候实时应用日志的影响就越小。
当应用服务运行在实时应用模式时,V$ARCHIVE_DEST_STATUS视图中的RECOVERY_MODE字段包含了MANAGED REAL TIME APPLY的值。
如果在你使用了实时应用日志,然后指定了目标路径延时属性(DELAY),这个延时属性被忽略。
对于物理备库,管理恢复进程(MRP)在 RFS 完成写之后 从standby redo 文件中应用redo。用下列命令来为物理备库开启实时应用日志:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE;
注意:standby redo log 文件被实时应用需要,建议创建和主库一样大小的redo 日志组,并且多一组。在broker中,实时应用时自动被开启的。
可以使用下列命令在备库上开始应用redo:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION; |
这个命令会自动的挂载数据库,另外,DISCONNECT FROM SESSION选项是让redo应用在后台执行
特别要注意的是,如果备库在相同的系统上时:
1.备库数据文件必须在不同的位置
这就意味着必须配置DB_FILE_NAME_CONVERT 和 LOG_FILE_NAME_CONVERT参数
2.每个数据库实例必须使用不用的归档路径,否则备库会覆盖主库的归档。
3.服务名必须唯一,考虑到DB_NAME和DB_DOMAIN参数会影响所有的库
4.备库没有起到容灾的作用
11.14 预防主库数据损坏影响备库
- oracle 数据库进程在redo数据应用到备库之前会进行验证
- 损坏检查发生在主库传输redo和备库应用redo之间
- 在主库和备库哈桑设置DB_LOST_WRITE_PROTECT为TYPICAL来实现丢失写检查
损坏检查发生在下列关键接口:
- 在主库上被LGWR,LNS ARCN进程 传输redo的时候
- 在备库上呗RFS,ARCn,MRP,和DBWn进程应用redo的时候
如果在备库上,redo 应用进程检查到了redo损坏,DG会重新获取到有效日志,这个作为处理归档日志gap的一部分。
一个写丢失发生在,当一个I/O子系统确认完成了写,但是这个写操作没有在持久存储上发生时。在随后的读取中,I/O子系统返回这个数据块的陈旧版本,这个用来更新数据块中其他的块,从而就损坏了数据库。
设置DB_LOST_WRITE_PROTECT参数可以让数据库服务记录buffer cache中从redo log中读的块,这样写可以被检查。
DB_LOST_WRITE_PROTECT可以被设置为下列值:
在主库上TYPICAL:实例的log buffer cache 读取到读写表空间的日志。
主库上的FULL:实例日志会读取只读和读写表空间的日志
NONE:默认值,不开启对丢失写检查功能。
当备库在管理恢复期间应用体制时,其会读取相关的块,并且将其SCN和之前的redo log的SCN比较:
- 如果在主库上块的SCN比在备库上的低,其会在主库上进行丢失写检查,并且返回一个外部错误(ORA-752)
- 如果SCN高,会在备库上进行写检查,并且返回一个错误(ORA-600 3020)
在上面情况中,备库会在其alter 日志和跟踪文件中记录相关的原因。建议的操作来恢复一个丢失写是在主库上,是进行一次故障转移到备库,并重建主库。修复在备库上的丢失写,你必须重建备库或那些被影响的文件。
11.15 总结
在这个课程中,你应该学会如何:
- 开启 FORCE LOGGING
- 创建standby redo logs
- 设置主库上的初始化参数来支持创建物理备库和角色切换
- 配置oracle 网络服务 ONS
- 使用RMAN命令 DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE创建一个物理备库
- 启动redo传输和应用
Comment