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: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: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发送,那么备库必须创建备库日志。
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:查看当前主库保护模式及主库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:查看备库是否创建备库日志在备库通过v$log是看不出来的。备库创建的standby log 是不会显示出来的。必须到ASM中查看备库(这里我的备库是RAC)的物理文件的个数。因为我的主库每个实例有两个日志组,也就是说我的备库应该至少有10个日志组。日志创建规则参考我的经验:dataguard之备库添加日志根据主库和备库图片可以确定。备库的standby log 已经创建。注意:只有创建了standby log,才能进行切换保护模式
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:主库执行DDL验证验证发现主库执行DDL无需切换日志,备库即可apply data。这里在主库创建一个表,备库立即能够看到表。
5:主库执行DML验证验证发现主库执行DML无需切换日志,备库即可apply data。这里在主库插入数据,备库立即能够表中的数据。
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:设置主库每个实例各自发送日志主库节点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:重启主库之后发现修改无效发现log_archive_dest_2没有变。
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:修改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:将文件传输进程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='*';