多语言展示
当前在线:1481今日阅读:27今日分享:41

5 Data Guard Protection Modes

数据保护模式分为三种,以下所有实验都是在Physical Standby Databases 基础下。(1)Data Guard Protection Modes:1:Maximum Availability2:Maximum Performance—默认3:Maximum Protection(2)Setting the Data Protection Mode of a Primary Database1:Setting the Data Protection Mode of a Primary Database实验:将最大性能模式更改为最大可用模式1:查看当前主库保护模式及主库log传输进程2:查看备库是否创建备库日志3:将主库最大性能模式改为最大可用模式4:主库执行DDL验证5:主库执行DML验证实验:主库实例分别配置备库的实例1:主库和备库都是RAC2:设置主库每个实例各自发送日志3:重启主库之后发现修改无效4:主库执行DDL和DML备库apply data 正常实验:将最大可用模式切换回最大性能模式
(1)Data Guard Protection Modes:
1

1:Maximum Availability最大可用保护模式primary database每个事务必须等待事务写入本地联机日志和standby database 日志才能提交,如果primary database 日志流不能同步到备库日志中,primary database 会自动切换到maximum performance mode 来保护primary database 直到故障解决。最大可用模式保证数据不会丢失。只能通过lgwr进程将redo 文件同步发送到备库。log_archive_dest_2='SERVICE=备库Oracle_Net  LGWR SYNC AFFIRM  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=备库 db_unique_name'注意:最大可用模式必须采用LGWR 发送日志且同步发送,意味着主库发送DDL和DML,备库都会立即apply data。如果采用LGWR发送,那么备库必须创建备库日志。

2

2:Maximum Performance—默认最大性能保护模式primary database事务只需要写入本地联机日志中就可提交,Primary Database的Redo流可以异步的发送到Standby Database,所以性能不受standby database影响。可以通过lgwr进程异步发送redo文件到备库,也可以通过archn进程异步发送归档文件到备库。log_archive_dest_2='SERVICE=备库Oracle_Net  LGWR ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=备库 db_unique_name'或者:log_archive_dest_2='SERVICE=备库Oracle_Net  ARCH ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=备库 db_unique_name'     这种发送时默认方式注意:如果是采用lgwri异步发送日志,意味着主库发送DDL和DML,备库都会立即apply data。如果采用LGWR发送,那么备库必须创建备库日志。如果是采用archnyi'异步发送归档,意味着主库日志归档后才能将归档文件发送给备库,主库和备库之间数据存在current log的数据差。如果采用arch发送,那么备库不必创建备库日志。

3

3:Maximum Protection最大安全保护模式primary database每个事务必须等待事务写入本地联机日志和standby database 日志才能提交,如果primary database 日志流不能同步到备库日志中,primary database 直接自动关闭。建议至少配置两个备库来确保日志同步失败导致primary database 自动关闭照成的麻烦。只能通过lgwr进程将redo 文件同步发送到备库。log_archive_dest_2='SERVICE=备库Oracle_Net  LGWR SYNC AFFIRM  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=备库 db_unique_name'注意:最大可用模式必须采用LGWR 发送日志且同步发送,意味着主库发送DDL和DML,备库都会立即apply data。如果采用LGWR发送,那么备库必须创建备库日志。

(2)Setting the Data Protection Mode of a Primary Database:

1:Setting the Data Protection Mode of a Primary DatabaseStep 1   Select a data protection mode that meets your availability, performance, and data protection requirements.Step 2   Verify that at least one standby database meets the redo transport requirements for the desired data protection mode.LOG_ARCHIVE_DEST_n ------------------------------------------------------------------------------Table 5-1 Required Redo Transport Attributes for Data Protection ModesMaximum Availability  Maximum Performance  Maximum ProtectionAFFIRM                        NOAFFIRM                                    AFFIRMSYNC                             ASYNC                                         SYNCDB_UNIQUE_NAME     DB_UNIQUE_NAME        DB_UNIQUE_NAME-------------------------------------------------------------------------------Step 3   Verify that the DB_UNIQUE_NAME database initialization parameter has been set to a unique value on the primary database and on each standby database.  主库和备库的DB_UNIQUE_NAME必须唯一(不一样)Step 4   Verify that the LOG_ARCHIVE_CONFIG database initialization parameter has been defined on the primary database and on each standby database, and that its value includes a DG_CONFIG list that includes the DB_UNIQUE_NAME of the primary database and each standby database.log_archive_config='DG_CONFIG=(orcl,orcl_standby)'  配置主备库的db_unique_name  Oracle建议使用这个参数Step 5   Set the data protection mode.SQL> ALTER DATABASE  SET STANDBY DATABASE TO MAXIMIZE {AVAILABILITY | PERFORMANCE | PROTECTION};Step 6   Confirm that the primary database is operating in the new protection mode.SQL> SELECT PROTECTION_MODE FROM V$DATABASE;SQL> SELECT PROTECTION_MODE FROM V$DATABASE;PROTECTION_MODE--------------------MAXIMUM PERFORMANCE   该参数属于内存参数

实验:将最大性能模式更改为最大可用模式
1

1:查看当前主库保护模式及主库log传输进程SQL> SELECT PROTECTION_MODE FROM V$DATABASE; PROTECTION_MODE--------------------MAXIMUM PERFORMANCE SQL> show parameter log_archive_dest_2NAME     TYPE VALUE------------------------------------ ----------- ------------------------------log_archive_dest_2     string SERVICE=standby_orcl ARCH NOAF FIRM ASYNC VALID_FOR=(ONLINE_L OGFILES,PRIMARY_ROLE) DB_UNIQU E_NAME=orcl_standbySQL> show parameter service_name; NAME                                        TYPE        VALUE------------------------------------ ----------- ------------------------------service_names                                 string      orcl

2

2:查看备库是否创建备库日志在备库通过v$log是看不出来的。备库创建的standby log 是不会显示出来的。必须到ASM中查看备库(这里我的备库是RAC)的物理文件的个数。因为我的主库每个实例有两个日志组,也就是说我的备库应该至少有10个日志组。日志创建规则参考我的经验:dataguard之备库添加日志根据主库和备库图片可以确定。备库的standby log 已经创建。注意:只有创建了standby log,才能进行切换保护模式

3

3:将主库最大性能模式改为最大可用模式alter system set log_archive_dest_2='SERVICE=standby_orcl LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_standby' scope=spfile sid='*'; 更改传输方式,采用lgwr同步发送日志文件 ALTER DATABASE  SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY;更改之后需要重启主库。

4

4:主库执行DDL验证验证发现主库执行DDL无需切换日志,备库即可apply data。这里在主库创建一个表,备库立即能够看到表。

5

5:主库执行DML验证验证发现主库执行DML无需切换日志,备库即可apply data。这里在主库插入数据,备库立即能够表中的数据。

实验:主库实例分别配置备库的实例
1

1:主库和备库都是RAC主库信息:172.18.37.6 ednns1     172.18.37.21 ednns1vip192.168.56.6 ednns1priv172.18.37.8 ednns2172.18.37.22 ednns2vip192.168.56.8 ednns2priv172.18.37.23 scanip备库信息:172.18.37.4 wiscom1172.18.37.24 wiscom1vip192.168.56.4 wiscom1priv172.18.37.5 wiscom2172.18.37.25 wiscom2vip192.168.56.5 wiscom2priv172.18.37.26 scanip--------------------------------------------------------------主库tns:ORCL =  (DESCRIPTION =    (ADDRESS = (PROTOCOL = TCP)(HOST = scanip)(PORT = 1521))    (CONNECT_DATA =      (SERVER = DEDICATED)      (SERVICE_NAME = orcl)    )  )standby_orcl =  (DESCRIPTION =    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.18.37.26)(PORT = 1521))    (CONNECT_DATA =      (SERVER = DEDICATED)      (SERVICE_NAME = orcl_standby)    )  )wiscom1 =  (DESCRIPTION =    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.18.37.24)(PORT = 1521))    (CONNECT_DATA =      (SERVER = DEDICATED)      (SERVICE_NAME = orcl_standby)    )  )wiscom2 =  (DESCRIPTION =    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.18.37.25)(PORT = 1521))    (CONNECT_DATA =      (SERVER = DEDICATED)      (SERVICE_NAME = orcl_standby)    )  )备库TNS:ORCL =  (DESCRIPTION =    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.18.37.23)(PORT = 1521))    (CONNECT_DATA =      (SERVER = DEDICATED)      (SERVICE_NAME = orcl)    )  )standby_orcl =  (DESCRIPTION =    (ADDRESS = (PROTOCOL = TCP)(HOST = scanip)(PORT = 1521))    (CONNECT_DATA =      (SERVER = DEDICATED)      (SERVICE_NAME = orcl_standby)    )  )ednns1 =  (DESCRIPTION =    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.18.37.21)(PORT = 1521))    (CONNECT_DATA =      (SERVER = DEDICATED)      (SERVICE_NAME = orcl)    )  )ednns2 =  (DESCRIPTION =    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.18.37.22)(PORT = 1521))    (CONNECT_DATA =      (SERVER = DEDICATED)      (SERVICE_NAME = orcl)    )  )

2

2:设置主库每个实例各自发送日志主库节点1:alter system set log_archive_dest_2='SERVICE=wiscom1 LGWR AFFIRM SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_standby' scope=spfile sid='rocl1';主库节点2:alter system set log_archive_dest_2='SERVICE=wiscom2 LGWR AFFIRM SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_standby' scope=spfile sid='rocl2';

3

3:重启主库之后发现修改无效发现log_archive_dest_2没有变。

4

4:主库执行DDL和DML备库apply data 正常在主库节点1执行:SQL> create table zxx3 as select * from zxx2; 无需切换日志即可在备库看到zxx3表在主库节点2执行:SQL> create table zxx4 as select * from zxx2; 无需切换日志即可在备库看到zxx4表

实验:将最大可用模式切换回最大性能模式
1

1:修改log_archive_dest_2并切换成最大性能模式alter system set log_archive_dest_2='SERVICE=standby_orcl LGWR NOAFFIRM ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_standby' scope=spfile sid='*';ALTER DATABASE  SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE  ;[oracle@ednns1 ~]$ srvctl stop database -d orcl[oracle@ednns1 ~]$ srvctl start database -d orcl注意:主库还是差用LGWR 发送日志到备库。重启主库之后,发现主库不用切换日志即可同步DDL和dml语句

2

2:将文件传输进程lgwr更改为arch如果将发送进程更改arch,则发现主库需要切换日志才能同步alter system set log_archive_dest_2='SERVICE=standby_orcl ARCH NOAFFIRM ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_standby' scope=spfile sid='*';

推荐信息