第四部分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 数据库保护级别切换为待同步。