ORACLE 9I DATAGUARD实施和维护总结
1、DATAGUARD原理
STANDBY一旦创建,DATAGUARD就会通过将主数据库的REDO传递给STANDBY数据库,然后在STANDBY中应用REDO实现数据库的同步。
有两种类型的STANDBY:物理STANDBY和逻辑STANDBY 物理STANDBY提供与主数据库完全一样的拷贝(块到块),数据库SCHEMA,包括索引都是一样的。它是直接应用REDO实现同步的。
逻辑STANDBY则不是这样,在逻辑STANDBY中,逻辑信息是相同的,但物理组织和数据结构可以不同,它和主库保持同步的方法是将接收的REDO转换成SQL语句,然后在STANDBY上执行SQL语句。逻辑STANDBY除灾难恢复外还有其它用途,比如用于用户进行查询和报表。
DATAGUARD包含三个服务(日志传输、日志应用和角色转换) 日志传输服务控制REDO数据的传输(传输日志,实施数据库保护模式)--------------STANDBY上通过起用RFS进程接收REDO数据。
日志应用服务则一方面自动应用日志,另一方面自动检测STANDBY缺少的REDO,并从主数据库或其它STANDBY中自动查询出丢失的REDO。
DATAGUARD的几种保护模式:最大保护,最大可用,最大性能
最大保护是指除非REDO在至少一个STANDBY中可用,否则事务不能提交。如果在某个STANDBY中不可用,则主数据库的操作被停止。
最大可用是指如果STANDBY不可用,主数据库仍然可以处理事务,只是在问题被纠正后,STANDBY和主数据库进行再同步。这样的一个问题是:当再同步之前有必要FAILOVER时,有些数据可能会丢失。
最大性能是指主数据库的提交操作不等待STANDBY。
物理STANDBY可能的模式:只读模式(OPEN READONLY)和恢复模式(MANANGED RECOVERY)
2、物理DATAGUARD实施
主数据库的准备工作:FORCE LOGGING,ENABLE ARCHIVING,一个本地归档目的地。
创建STANDBY数据库:
a.关闭主库,冷备份主库数据文件、日志文件和密码文件,然后启动主库,在主库上创建STANDBY的控制文件:alter database create standby controlfile as '文件名'
b.准备参数文件,将参数文件、备份的主库文件和STANDBY控制文件拷贝到STANDBY系统。
需要更改的参数有:standby_archive_dest-----接收的归档日志存放处
db_file_name_convert和log_file_name_convert-----仅当主库和STANDBY库在同一系统下时用
log_archive_dest_1-----本地归档目的地
log_archive_dest_2='service=standby'-----归档到STANDBY的目的地
standby_file_management=auto remote_archive_enable=true fal_server fal_client
instance_name-----当主库和STANDBY库在同一系统下时该参数用于区分主库
lock_name_space-----当主库和STANDBY库在同一系统下时指定STANDBY的实例名和INSTANCE_NAME相同
c.如果是WINDOWS系统,需要创建WINDOWS服务。 d.配置两台机器的tnsnames.ora,双方都能tnsping通 e.在主库和STANDBY库上配置监听
f.起用STANDBY系统上的死连接检测:sqlnet.ora中设置sqlnet.expire_time=2
g.在STANDBY上创建SPFILE h.启动STANDBY: startup nomount
alter database mount standby database i.初始化日志应用服务
alter database recover managed standby database disconnect
from session;
3、DATAGUARD维护 a.日志传送服务
有些情况下,你可能需要在归档日志和应用日志之间有个时间间隔,此时可以通过在STANDBY上指定参数log_archive_dest_n中指定delay=minutes属性。
STANDBY上的日志应该与主库上的日志大小相同,另外STANDBY上的日志组应该比主库多,因为这样归档操作才有时间完成。也就是RFS(日志接收)进程在使用STANDBY的日志前,不用等待该日志被归档。最简单判断日志组是否够的方法是查看警告日志和RFS的TRACE文件。
增加STANDBY日志文件的方法:
alter database 语句中使用add standby logfile子句。相关视图v$standby_log,v$logfile
增加STANDBY日志组的方法:
alter database add standby logfile group 10 ('文件名1','文件名2') size 100M对于多个 STANDBY共享归档日志文件目的地,有些情况下需要指定log_archive_dest_n参数的dependency属性,该属性的作用是说明该目的地依赖于父目的地的成功归档。
参数log_archive_dest_n还可以指定reopen、max_failures、sync、async属性。通过给该参数指定LGWR或者ARCH属性以选择是用LGWR还是ARCH进程传送日志。
用于日志接收的几个进程是:LGWR,ARCH,RFS,FAL。FAL进程用于解决日志缝。
设置数据保护模式的语句为:alter database set standby database to maximun(protection|availability|performance)
b.日志应用服务
对于物理STANDBY,日志应用服务涉及到下面几个进程:RFS,ARC,MRP。MRP是管理恢复进程。
启动STANDBY的恢复操作的几个命令:alter database recover managed standby database(启动前台会话);alter database recover managed standby database disconnect from session(启动后台会话,也就是说会话可以继续干别的事情);alter database recover managed standby database cancel(停止日志应用).
可以通过查询视图v$managed_standby查看日志应用情况。 c.数据文件管理
当主库新创建数据文件,可定义参数standby_file_management为auto,让standby也自动创建数据文件。如果主库和 standby的数据文件的目录结构不一样,可以设定db_file_name_convert将主库上的文件名转换成standby上的文件名。如果 standby_file_management设为auto,则不能在standby上重命名或创建数据文件、日志文件。
每分钟主库会询问standby是否有gap,该行为被称为heartbeat.