RAC环境中。每个实例对应相应的redolog集(至少2个)和相应的undo表空间。



实例恢复:

单实例数据库的实例恢复:

redo:所有已经提交和未提交的操作做前滚

undo:所有未提交的操作做回滚


RAC环境的实例恢复:

当节点A实例崩溃后,则节点B自动根据redolog前滚在undo回滚(立即进行),无需等待节点A的实例正常恢复。(实例恢复由剩余节点进行,如果实例都崩溃了,则有第一个启动的实例节点进行恢复

eg:在alarmlog中可以看到

Post SMON to Start 1st pass IR

-------------------------------

Instance recovery:look for dead threads

———————————————

Beginning instance recovery of 1 threads

———————————————

Start first pass scan

———————————————

Completed first pass scan

3941 redo blocks read,165 data blocks need recovery

-----------------------------

开始实例恢复。。。



介质恢复:

介质恢复指数据库文件或数据文件(集)损坏,需要手动操作。


分类:

  1. RAC某一个实例的数据文件的介质恢复

  2. 整个数据库的介质恢复:关闭所有其他实例,将数据库安装到选择进行恢复的节点上。

  3. 不影响数据库的文件:需要该文件脱机。


重做线程:

Alter database add logfile thread 2 group 5 '/ocfs/oradata/.../redo02_05.log' size 300M

实例线程号:在spfile参数为<sid>.THREAD = n


不同存储设备的归档方式

1.使用RAW设备作为文件系统进行归档

RAW:每个文件必须对应一个raw磁盘片,因为归档日志较多,所以不适合存放在RAW上。所以,一般归档日志存放于各节点的驱动器上。且因为RAC环境,介质恢复需要所有实例的所有归档日志,一般双实例(仅双实例rac)采用  节点A的驱动器上有本地归档目录,节点B通过nfs目标目录把B的归档日志指向A,同理作用于B。所以当任何一个节点崩溃或归档日志损坏时,可以保证另一个节点有所有节点的所有归档日志来进行介质恢复。


2.使用OCFS(集群文件系统)下的归档

所有节点把各自的归档日志存放在OCFS上的同一归档目录下。

但是!因为在共享的归档目录下,则当一个新的归档日志创建时,其他实例会有一定的延时。所以常见方法是不同实例在OCFS上有单独的归档目录,需要介质恢复时候,把所有的归档日志放进同一归档目录中。


3.ASM环境中的归档

ASM可创建归档日志闪回区(默认保存7天所有实例的归档日志),其他同OCFS


注,即使某一点的实例已经关闭,但没有禁用重做线程,redolog还是会做日志切换,生成归档日志(避免实例SCN与日志间隙过大)


禁用线程号 alter database disable/enable public thread 3;



RAC中的undo:每个实例的单独undo_tablespace 位于共享磁盘上。

参数:<instance_name>.UNDO_TABLESPACE

eg:Alter system set undo_tablespace = <undo_tablespace> scope = both sid = 'test3';