第四部分Standby之选择数据保护模式 2007.12.18
关于有三模同学的光荣事迹大家应该都听说了,有不认识的请自觉重温"名词先混个脸熟"篇,下面让三思就有三模同学的高超本领为大家做个展示。
为了便于大家更好的理解,我们先画一个表,表中描述了不同保护模式下LOG_ARCHIVE_DEST_n 参数应该设置的属性:
|
最大保护
|
最高可能用
|
最高性能
|
REDO 写进程
|
LGWR
|
LGWR
|
LGWR 或ARCH
|
网络传输模式
|
SYNC
|
SYNC
|
LGWR 进程时SYNC 或ASYNC,ARCH 进程时SYNC
|
磁盘写操作
|
AFFIRM
|
AFFIRM
|
AFFIRM 或NOAFFIRM
|
是否需要standby redologs
|
YES
|
YES
|
可没有但推荐有
|
提示:
上面中的各项需求都是满足该保护模式的最低需求,这些需求都是据其特性而定的,同时你也一定要理解,这些需求仅只是保证你完成data guard 保护模式的设置,如果你真正理解其特性的需求所希望满足的原因,你还需要做不少其它必要的工作。比如对于最高可用性而言,其根本目地是为了在某一台甚至多台主或备库瘫痪时,数据库仍能够在极短时间内恢复服务,这就不仅需要你将最高可用性保护模式的参数配置正确,还需要你拥有足够多的standby 数据库。听明白了没?啥,木有?555555555,你在打击俺语言描述的能力~~~
另外再强调一遍:最大保护和最高可用性都要求standby 数据库配置standby redo logs(当然如果考虑角色切换的话,主库肯定也是需要配置的),关于standby redo logs 的故事你可以参考第二部分的第一章1.3。
下面我们进入实践将一个data guard 配置从最高性能模式改为最高可用性模式:
1、首先查看当前的保护模式---primary 数据库操作
SQL> select protection_mode,protection_level from v$database;
PROTECTION_MODE PROTECTION_LEVEL
-------------------- --------------------
MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
2、修改初始化参数--primary 数据库操作
SQL> alter system set log_archive_dest_2='SERVICE=jsspdg
2 OPTIONAL LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
3 DB_UNIQUE_NAME=jsspdg';
系统已更改。
3、设置新的数据保护模式并重启数据库--primary 数据库操作
语句非常简单,如下:
SQL> alter database set standby database to maximize availability;
数据库已更改。
提示:maximize 后可跟{PROTECTION | AVAILABILITY | PERFORMANCE},分别对应最大保护,最高可用性及最高性能。
Down 掉数据库,重新启动
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1289484 bytes
Variable Size 121635572 bytes
Database Buffers 37748736 bytes
Redo Buffers 7098368 bytes
数据库装载完毕。
数据库已经打开。
4、看一下当前的保护模式--primary 数据库操作
SQL> select protection_mode,protection_level from v$database;
PROTECTION_MODE PROTECTION_LEVEL
-------------------- --------------------
MAXIMUM AVAILABILITY MAXIMUMAVAILABILITY
5、修改standby 初始化参数设置(主要考虑角色切换,如果只测试的话本步可跳过) ---standby 数据库操作
SQL> alter system set log_archive_dest_2='SERVICE=jssweb OPTIONAL LGWR SYNC AFFIRM
2 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=jssweb';
系统已更改。
查看当前的保护模式
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
jsspdg
SQL> select protection_mode,protection_level from v$database;
PROTECTION_MODE PROTECTION_LEVEL
-------------------- --------------------
MAXIMUM AVAILABILITY MAXIMUMAVAILABILITY
配置成功,正面顺便再测试一下。
6、停掉standby 数据库,再查看primary 数据库状态
SQL> select protection_mode,protection_level from v$database;
PROTECTION_MODE PROTECTION_LEVEL
-------------------- --------------------
MAXIMUM AVAILABILITY RESYNCHRONIZATION
Standby 数据库shutdown 后,primary 数据库保护级别切换为待同步。