1、最大保护
这种保护模式在主库出现问题时不会有数据的丢失,为了提供这种保护模式,一个事物必须同时写本地的online redo log,和至少一个备库的redo log同步,才能commit;
为了确保数据不会丢失,如果备库至少有一个日志不能写入,那么主库不会继续处理其他事物,而是关闭。
在主库上的事物会尽快写入到备库上的日志后,会立刻通知主库,继续处理其他的事物,最大可能的减小主库同步的吞吐和响应时间。为了在备库上通过完整的验证,最好用real time apply
这样备库在接受到日志后,会尽可能快的应用日志,dataguard会通知他所遇到的损坏,并快速处理
这种数据保护模式比最高可用的数据保护模式要优先一些,oracle推荐最少有两个备库保护主库在最大保护模式,来阻止单备库故障,导致主库关闭
2、最大可用
这种保护模式提供了最高模式,不会影响主库的可用性,但是事物在主库写本地的online redo log和至少一个备库的redo log同步才会commit;如果主库的日志不能同步到至少一个备库,为了最大可用,那么就会转换成最大性能,
直到主库可以同步日志到至少一个备库,那么会恢复到最大可用
这种模式,确定没有数据丢失,如果主库的出的故障,但是几秒的故障不会阻止主库完全的数据集发送的备库去
3、最大性能
这种模式提供了最高级别的数据保护,他不会影响主库的性能,他是通过事物提交后快速写日志,这些日志会通过异步传输到一个多个备库中去,所以主库的性能是不会受到影响
最大性能保护模式比最大可用在数据保护略显不足,可能会有数据丢失,但是不会影响主库的性能,这是默认的保护模式
三种保护模式的不同:
日志同步方式不同:
maximum Availability Maximum Performance Maximum Protection
磁盘写操作 AFFIRM NOAFFIRM AFFIRM
SYNC ASYNC SYNC
DB_UNIQUE_NAME DB_UNIQUE_NAME DB_UNIQUE_NAME
standby log 无 ,推荐最好有 standby log
commit条件不同:
最大保护:Primary Database上的每个事务的Redo日志必须在本地和Standby Database上都写入日志文件后才能提交(如果不能写入STANDBY DATABASE,PRIMARY DATABASE 自动挂起,防止丢数据)
最高可用:Primary Database每个事务的Redo日志要写到本地和Standby Database中才能提交(与最大保护不同的是:写入STANDBY DATABASE失败,PRIMARY DATABASE不会挂起,会自动转成最大性能模式,等待问题解决后自动转成最大可用模式)
最大性能:Primary Database上的事务的Redo日志只要写到本地日志文件就可以提交,不必等待到Standby Database的传递完成
数据一致性不同:
最大保护:完全一致
最高可用:尽可能的避免数据的丢失,但不能绝对保证数据完全一致
最大性能:可以异步同步日志,可能有数据的丢失
默认是最大性能是模式保护模式
日志的传输模式:
arch:这是默认的传输日志的模式,主库在日志切换后,完成归档,才能通过arch进程传输给standby的RFS进程,这种传输日志的模式只能在最大性能模式使用
lgwr:使用lgwr方式即时传输日志给standby,主库产生事物后,会通过lgwr进程去写本地的redo和本地的lns进程,通过本地的lns进程传输日志给standby的lns进程,然后通过RFS进程写standby redo,MPR进程应用日志。
这种方式不需要等到归档才传输日志,减少了数据的丢失,这种日志传输方式适合三种模式,但是备库必须有standby redo log
主库查看使用哪种方式进行日志传输:
SQL> select dest_name,archiver from v$archive_dest;
DEST_NAME ARCHIVER
-------------------- ----------
LOG_ARCHIVE_DEST_1 ARCH
LOG_ARCHIVE_DEST_2 LGWR
LOG_ARCHIVE_DEST_3 ARCH
LOG_ARCHIVE_DEST_4 ARCH
LOG_ARCHIVE_DEST_5 ARCH
LOG_ARCHIVE_DEST_6 ARCH
LOG_ARCHIVE_DEST_7 ARCH
LOG_ARCHIVE_DEST_8 ARCH
LOG_ARCHIVE_DEST_9 ARCH
LOG_ARCHIVE_DEST_10 ARCH
LOG_ARCHIVE_DEST_11 ARCH
LOG_ARCHIVE_DEST_12 ARCH
LOG_ARCHIVE_DEST_13 ARCH
LOG_ARCHIVE_DEST_14 ARCH
LOG_ARCHIVE_DEST_15 ARCH
LOG_ARCHIVE_DEST_16 ARCH
LOG_ARCHIVE_DEST_17 ARCH
LOG_ARCHIVE_DEST_18 ARCH
LOG_ARCHIVE_DEST_19 ARCH
LOG_ARCHIVE_DEST_20 ARCH
LOG_ARCHIVE_DEST_21 ARCH
LOG_ARCHIVE_DEST_22 ARCH
LOG_ARCHIVE_DEST_23 ARCH
LOG_ARCHIVE_DEST_24 ARCH
LOG_ARCHIVE_DEST_25 ARCH
LOG_ARCHIVE_DEST_26 ARCH
LOG_ARCHIVE_DEST_27 ARCH
LOG_ARCHIVE_DEST_28 ARCH
LOG_ARCHIVE_DEST_29 ARCH
LOG_ARCHIVE_DEST_30 ARCH
LOG_ARCHIVE_DEST_31 ARCH
31 rows selected.
一般而言,standby redo 日志文件组数要比primary 数据库的online redo 日志文件组数至少多一个。推荐standby redo 日志组数量基于primary 数据库的线程数(这里的线程数可以理解为rac 结构中的rac节点数)。
有一个推荐的公式可以做参考:(每线程的日志组数+1)*最大线程数
备库添加standby log:
SQL> alter database drop standby logfile '/archive/1_0_815224926.arc';
Database altered.
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- ---------------------------------------- ---
3 ONLINE /u01/app/oracle/oradata/redo03.log NO
2 ONLINE /u01/app/oracle/oradata/redo02.log NO
1 ONLINE /u01/app/oracle/oradata/redo01.log NO
SQL> alter database add standby logfile '/u01/app/oracle/oradata/standby01.log' size 50M;
Database altered.
SQL> alter database add standby logfile '/u01/app/oracle/oradata/standby02.log' size 50M;
Database altered.
SQL> alter database add standby logfile '/u01/app/oracle/oradata/standby03.log' size 50M;
Database altered.
SQL> alter database add standby logfile '/u01/app/oracle/oradata/standby04.log' size 50M;
Database altered.
SQL> select * From v$logfile;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- ---------------------------------------- ---
3 ONLINE /u01/app/oracle/oradata/redo03.log NO
2 ONLINE /u01/app/oracle/oradata/redo02.log NO
1 ONLINE /u01/app/oracle/oradata/redo01.log NO
4 STANDBY /u01/app/oracle/oradata/standby01.log NO
5 STANDBY /u01/app/oracle/oradata/standby02.log NO
6 STANDBY /u01/app/oracle/oradata/standby03.log NO
7 STANDBY /u01/app/oracle/oradata/standby04.log NO
7 rows selected.
为了防止出现什么切换过程中的问题,所以开启了闪回
SQL> alter database FLASHBACK ON;
Database altered.
SQL> select FLASHBACK_ON from v$database;
FLASHBACK_ON
------------------
YES
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
2337163
从低到高:
最大性能----》 最大可用-----》最最大保护
需要在mount状态一步的切换,但是反过来不需要在mount下切换,open状态就可以
1、查看参数文件
*.DB_NAME=rac
*.DB_UNIQUE_NAME=rac
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(rac,orcl)'
*.LOG_ARCHIVE_DEST_1='LOCATION=/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=rac'
*.LOG_ARCHIVE_DEST_2='SERVICE=orcl lgwr ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
*.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
*.LOG_ARCHIVE_MAX_PROCESSES=30
*.FAL_SERVER=rac
*.fal_client=orcl
*.DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/','/u01/app/oracle/oradata/rac/'
*.LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/','/u01/app/oracle/oradata/rac/'
*.STANDBY_FILE_MANAGEMENT=AUTO
*.STANDBY_ARCHIVE_DEST='/archive'
2、修改参数文件
*.LOG_ARCHIVE_DEST_2='SERVICE=orcl lgwr ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'
参数没有问题,是lgwr async affirm或者lgwr sync affirm都可以
通过动态修改: 在主库
alter system set LOG_ARCHIVE_DEST_2='SERVICE=orcl lgwr SYNC affirm VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl' scope=both
三种保护模式的切换:
SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(rac,orcl)';
在主库执行:只需要在主库执行,备库就会跟这改变
SQL> ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE {AVAILABILITY | PERFORMANCE | PROTECTION};
SQL> select open_mode, protection_mode,protection_level ,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
-------------------- -------------------- -------------------- --------------------
READ WRITE MAXIMUM AVAILABILITY RESYNCHRONIZATION TO STANDBY
正常情况下 PROTECTION_LEVEL 是 MAXIMUM AVAILABILITY
出了点问题 , RESYNCHRONIZATION ,需要重新同步
SQL> select thread#, sequence#, status from v$log;
THREAD# SEQUENCE# STATUS
---------- ---------- ----------------
1 412 INACTIVE
1 413 ACTIVE
1 414 CURRENT
在备库执行:
SQL> select thread#, max(sequence#) from v$archived_log where applied='YES' group by thread#;
THREAD# MAX(SEQUENCE#)
---------- --------------
1 410
SQL> alter database recover managed standby database disconnect from session;
Database altered.
最后发现参数文件让我给修改错误了,DB_UNIQUE_NAME是备库的名称
alter system set LOG_ARCHIVE_DEST_2='SERVICE=orcl lgwr SYNC affirm VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl' scope=both
SQL> select open_mode, protection_mode,protection_level ,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
-------------------- -------------------- -------------------- --------------------
READ WRITE MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY TO STANDBY
查看备库:
SQL> select open_mode, protection_mode,protection_level ,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
-------------------- -------------------- -------------------- --------------------
MOUNTED MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY NOT ALLOWED
主库查看产生的最大归档号:
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
422
备库查看产生的归档:
SQL> select sequence#,thread#,resetlogs_id from v$archived_log;
SEQUENCE# THREAD# RESETLOGS_ID
---------- ---------- ------------
403 1 815224926
404 1 815224926
405 1 815224926
406 1 815224926
407 1 815224926
408 1 815224926
409 1 815224926
410 1 815224926
411 1 815224926
412 1 815224926
413 1 815224926
414 1 815224926
415 1 815224926
416 1 815224926
417 1 815224926
418 1 815224926
419 1 815224926
420 1 815224926
421 1 815224926
422 1 815224926
20 rows selected.
SQL>
从高到低:
最大性能-《--- 最大可用《-----最最大保护
直接在主库进行切换,不用修改参数文件
在主库执行:
SQL> alter database set standby database to maximize availability;
Database altered.
SQL> select open_mode, protection_mode,protection_level ,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
-------------------- -------------------- -------------------- --------------------
READ WRITE MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY TO STANDBY
SQL> alter database set standby database to maximize performance;
Database altered.
SQL> select open_mode, protection_mode,protection_level ,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
-------------------- -------------------- -------------------- --------------------
READ WRITE MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE TO STANDBY
这种保护模式在主库出现问题时不会有数据的丢失,为了提供这种保护模式,一个事物必须同时写本地的online redo log,和至少一个备库的redo log同步,才能commit;
为了确保数据不会丢失,如果备库至少有一个日志不能写入,那么主库不会继续处理其他事物,而是关闭。
在主库上的事物会尽快写入到备库上的日志后,会立刻通知主库,继续处理其他的事物,最大可能的减小主库同步的吞吐和响应时间。为了在备库上通过完整的验证,最好用real time apply
这样备库在接受到日志后,会尽可能快的应用日志,dataguard会通知他所遇到的损坏,并快速处理
这种数据保护模式比最高可用的数据保护模式要优先一些,oracle推荐最少有两个备库保护主库在最大保护模式,来阻止单备库故障,导致主库关闭
2、最大可用
这种保护模式提供了最高模式,不会影响主库的可用性,但是事物在主库写本地的online redo log和至少一个备库的redo log同步才会commit;如果主库的日志不能同步到至少一个备库,为了最大可用,那么就会转换成最大性能,
直到主库可以同步日志到至少一个备库,那么会恢复到最大可用
这种模式,确定没有数据丢失,如果主库的出的故障,但是几秒的故障不会阻止主库完全的数据集发送的备库去
3、最大性能
这种模式提供了最高级别的数据保护,他不会影响主库的性能,他是通过事物提交后快速写日志,这些日志会通过异步传输到一个多个备库中去,所以主库的性能是不会受到影响
最大性能保护模式比最大可用在数据保护略显不足,可能会有数据丢失,但是不会影响主库的性能,这是默认的保护模式
三种保护模式的不同:
日志同步方式不同:
maximum Availability Maximum Performance Maximum Protection
磁盘写操作 AFFIRM NOAFFIRM AFFIRM
SYNC ASYNC SYNC
DB_UNIQUE_NAME DB_UNIQUE_NAME DB_UNIQUE_NAME
standby log 无 ,推荐最好有 standby log
commit条件不同:
最大保护:Primary Database上的每个事务的Redo日志必须在本地和Standby Database上都写入日志文件后才能提交(如果不能写入STANDBY DATABASE,PRIMARY DATABASE 自动挂起,防止丢数据)
最高可用:Primary Database每个事务的Redo日志要写到本地和Standby Database中才能提交(与最大保护不同的是:写入STANDBY DATABASE失败,PRIMARY DATABASE不会挂起,会自动转成最大性能模式,等待问题解决后自动转成最大可用模式)
最大性能:Primary Database上的事务的Redo日志只要写到本地日志文件就可以提交,不必等待到Standby Database的传递完成
数据一致性不同:
最大保护:完全一致
最高可用:尽可能的避免数据的丢失,但不能绝对保证数据完全一致
最大性能:可以异步同步日志,可能有数据的丢失
默认是最大性能是模式保护模式
日志的传输模式:
arch:这是默认的传输日志的模式,主库在日志切换后,完成归档,才能通过arch进程传输给standby的RFS进程,这种传输日志的模式只能在最大性能模式使用
lgwr:使用lgwr方式即时传输日志给standby,主库产生事物后,会通过lgwr进程去写本地的redo和本地的lns进程,通过本地的lns进程传输日志给standby的lns进程,然后通过RFS进程写standby redo,MPR进程应用日志。
这种方式不需要等到归档才传输日志,减少了数据的丢失,这种日志传输方式适合三种模式,但是备库必须有standby redo log
主库查看使用哪种方式进行日志传输:
SQL> select dest_name,archiver from v$archive_dest;
DEST_NAME ARCHIVER
-------------------- ----------
LOG_ARCHIVE_DEST_1 ARCH
LOG_ARCHIVE_DEST_2 LGWR
LOG_ARCHIVE_DEST_3 ARCH
LOG_ARCHIVE_DEST_4 ARCH
LOG_ARCHIVE_DEST_5 ARCH
LOG_ARCHIVE_DEST_6 ARCH
LOG_ARCHIVE_DEST_7 ARCH
LOG_ARCHIVE_DEST_8 ARCH
LOG_ARCHIVE_DEST_9 ARCH
LOG_ARCHIVE_DEST_10 ARCH
LOG_ARCHIVE_DEST_11 ARCH
LOG_ARCHIVE_DEST_12 ARCH
LOG_ARCHIVE_DEST_13 ARCH
LOG_ARCHIVE_DEST_14 ARCH
LOG_ARCHIVE_DEST_15 ARCH
LOG_ARCHIVE_DEST_16 ARCH
LOG_ARCHIVE_DEST_17 ARCH
LOG_ARCHIVE_DEST_18 ARCH
LOG_ARCHIVE_DEST_19 ARCH
LOG_ARCHIVE_DEST_20 ARCH
LOG_ARCHIVE_DEST_21 ARCH
LOG_ARCHIVE_DEST_22 ARCH
LOG_ARCHIVE_DEST_23 ARCH
LOG_ARCHIVE_DEST_24 ARCH
LOG_ARCHIVE_DEST_25 ARCH
LOG_ARCHIVE_DEST_26 ARCH
LOG_ARCHIVE_DEST_27 ARCH
LOG_ARCHIVE_DEST_28 ARCH
LOG_ARCHIVE_DEST_29 ARCH
LOG_ARCHIVE_DEST_30 ARCH
LOG_ARCHIVE_DEST_31 ARCH
31 rows selected.
一般而言,standby redo 日志文件组数要比primary 数据库的online redo 日志文件组数至少多一个。推荐standby redo 日志组数量基于primary 数据库的线程数(这里的线程数可以理解为rac 结构中的rac节点数)。
有一个推荐的公式可以做参考:(每线程的日志组数+1)*最大线程数
备库添加standby log:
SQL> alter database drop standby logfile '/archive/1_0_815224926.arc';
Database altered.
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- ---------------------------------------- ---
3 ONLINE /u01/app/oracle/oradata/redo03.log NO
2 ONLINE /u01/app/oracle/oradata/redo02.log NO
1 ONLINE /u01/app/oracle/oradata/redo01.log NO
SQL> alter database add standby logfile '/u01/app/oracle/oradata/standby01.log' size 50M;
Database altered.
SQL> alter database add standby logfile '/u01/app/oracle/oradata/standby02.log' size 50M;
Database altered.
SQL> alter database add standby logfile '/u01/app/oracle/oradata/standby03.log' size 50M;
Database altered.
SQL> alter database add standby logfile '/u01/app/oracle/oradata/standby04.log' size 50M;
Database altered.
SQL> select * From v$logfile;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- ---------------------------------------- ---
3 ONLINE /u01/app/oracle/oradata/redo03.log NO
2 ONLINE /u01/app/oracle/oradata/redo02.log NO
1 ONLINE /u01/app/oracle/oradata/redo01.log NO
4 STANDBY /u01/app/oracle/oradata/standby01.log NO
5 STANDBY /u01/app/oracle/oradata/standby02.log NO
6 STANDBY /u01/app/oracle/oradata/standby03.log NO
7 STANDBY /u01/app/oracle/oradata/standby04.log NO
7 rows selected.
为了防止出现什么切换过程中的问题,所以开启了闪回
SQL> alter database FLASHBACK ON;
Database altered.
SQL> select FLASHBACK_ON from v$database;
FLASHBACK_ON
------------------
YES
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
2337163
从低到高:
最大性能----》 最大可用-----》最最大保护
需要在mount状态一步的切换,但是反过来不需要在mount下切换,open状态就可以
1、查看参数文件
*.DB_NAME=rac
*.DB_UNIQUE_NAME=rac
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(rac,orcl)'
*.LOG_ARCHIVE_DEST_1='LOCATION=/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=rac'
*.LOG_ARCHIVE_DEST_2='SERVICE=orcl lgwr ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
*.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
*.LOG_ARCHIVE_MAX_PROCESSES=30
*.FAL_SERVER=rac
*.fal_client=orcl
*.DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/','/u01/app/oracle/oradata/rac/'
*.LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/','/u01/app/oracle/oradata/rac/'
*.STANDBY_FILE_MANAGEMENT=AUTO
*.STANDBY_ARCHIVE_DEST='/archive'
2、修改参数文件
*.LOG_ARCHIVE_DEST_2='SERVICE=orcl lgwr ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'
参数没有问题,是lgwr async affirm或者lgwr sync affirm都可以
通过动态修改: 在主库
alter system set LOG_ARCHIVE_DEST_2='SERVICE=orcl lgwr SYNC affirm VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl' scope=both
三种保护模式的切换:
SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(rac,orcl)';
在主库执行:只需要在主库执行,备库就会跟这改变
SQL> ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE {AVAILABILITY | PERFORMANCE | PROTECTION};
SQL> select open_mode, protection_mode,protection_level ,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
-------------------- -------------------- -------------------- --------------------
READ WRITE MAXIMUM AVAILABILITY RESYNCHRONIZATION TO STANDBY
正常情况下 PROTECTION_LEVEL 是 MAXIMUM AVAILABILITY
出了点问题 , RESYNCHRONIZATION ,需要重新同步
SQL> select thread#, sequence#, status from v$log;
THREAD# SEQUENCE# STATUS
---------- ---------- ----------------
1 412 INACTIVE
1 413 ACTIVE
1 414 CURRENT
在备库执行:
SQL> select thread#, max(sequence#) from v$archived_log where applied='YES' group by thread#;
THREAD# MAX(SEQUENCE#)
---------- --------------
1 410
SQL> alter database recover managed standby database disconnect from session;
Database altered.
最后发现参数文件让我给修改错误了,DB_UNIQUE_NAME是备库的名称
alter system set LOG_ARCHIVE_DEST_2='SERVICE=orcl lgwr SYNC affirm VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl' scope=both
SQL> select open_mode, protection_mode,protection_level ,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
-------------------- -------------------- -------------------- --------------------
READ WRITE MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY TO STANDBY
查看备库:
SQL> select open_mode, protection_mode,protection_level ,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
-------------------- -------------------- -------------------- --------------------
MOUNTED MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY NOT ALLOWED
主库查看产生的最大归档号:
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
422
备库查看产生的归档:
SQL> select sequence#,thread#,resetlogs_id from v$archived_log;
SEQUENCE# THREAD# RESETLOGS_ID
---------- ---------- ------------
403 1 815224926
404 1 815224926
405 1 815224926
406 1 815224926
407 1 815224926
408 1 815224926
409 1 815224926
410 1 815224926
411 1 815224926
412 1 815224926
413 1 815224926
414 1 815224926
415 1 815224926
416 1 815224926
417 1 815224926
418 1 815224926
419 1 815224926
420 1 815224926
421 1 815224926
422 1 815224926
20 rows selected.
SQL>
从高到低:
最大性能-《--- 最大可用《-----最最大保护
直接在主库进行切换,不用修改参数文件
在主库执行:
SQL> alter database set standby database to maximize availability;
Database altered.
SQL> select open_mode, protection_mode,protection_level ,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
-------------------- -------------------- -------------------- --------------------
READ WRITE MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY TO STANDBY
SQL> alter database set standby database to maximize performance;
Database altered.
SQL> select open_mode, protection_mode,protection_level ,SWITCHOVER_STATUS from v$database;
OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
-------------------- -------------------- -------------------- --------------------
READ WRITE MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE TO STANDBY