Oracle 11g OCM考试考点分析 使用SQL和RMAN命令来创建一个物理备库

 本文永久链接地址: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

*

沪ICP备14014813号-2

沪公网安备 31010802001379号