常用数据文件备份与恢复
常用数据文件备份与恢复
普通数据文件备份与恢复:
普通数据文件指 非 system表空间、udo表空间、临时表空间、只读表空间的文件。普通数据文件的恢复可用采用高可用恢复策略,
即能够在OPEN状态下恢复。
1、实例启动时,如果普通数据文件丢失、无法访问、头部损坏,只能启动到 mount 状态
2、实例运行时,普通数据文件头损坏,在发生检查点之后,由于检查点无法在数据文件头部更新,此数据文件的状态在控制文件
中会被自动设置为 离线,同时警告日志中会记录由于检查点失败导致该数据文件离线的记录。
3、实例运行时,如果普通数据文件非头部数据块损坏,将导致需要访问受损数据块的命令失败,数据文件自身不会被自动 离线。
备份的方式 同 关键性数据文件备份一样。
恢复普通数据文件的核心步骤: 令损坏的数据文件 离线、从备份还原(report 或switch)、使用增量备份或重做日志恢复(recovery),
最后令数据文件 上线。普通数据文件的恢复 既可以在 mount 状态下恢复 又可以在 open 状态下恢复。
非数据文件头部损坏修复:低可用恢复策略(mount)、高可用恢复策略(open) 低可用恢复策略: 1、使用 shutdown abort 关闭实例 2、使用 startup mount 进入 MOUNT状态 3、用 restore 或 switch 命令 还原损坏的普通数据文件 4、使用 recover database 命令 利用归档日志和在线日志恢复数据文件 5、执行 alter database open 打开数据库,恢复完成。 RUN { SHUTDOWN ABORT; STARTUP MOUNT; RESTORE DATAFILE 'PATH'; RECOVER DATABASE; ALTER DATABASE OPEN; } 高可用恢复策略: 1、将数据文件 离线 alter database datafile 'path' offline; 2、执行 restore 或 switch 命令还原受损坏的普通数据文件; 3、执行 recover tablespace 或 recover datafile 命令,利用归档日志和在线日志恢复数据文件; 4、执行 alter database datafile 'path' online ;将已恢复完成的数据文件上线,恢复完成。 run { sql 'alter database datafile 5 offline'; restore datafile 5; recover datafile 5; sql 'alter database datafile 5 online'; } 如果实例已停止 则 run { startup mount; sql 'alter database datafile 5 offline'; alter database open; restore datafile 5; recover datafile 5; sql 'alter database datafile 5 on line'; } 文件头部损坏后的恢复 数据文件头部损坏后的恢复步骤为:在低可用恢复策略与 高可用恢复策略的基础上,再根据相关数据文件是否已下线 而进行恢复。 未下线 低可用恢复策略、已下线低可用恢复策略与高可用恢复策略。 未下线低可用恢复策略的步骤: 1、使用 shutdown abort 关闭实例 2、使用 startup mount 启动到 mount 状态; 3、执行 restore 或 switch 命令还原损坏的普通数据文件 4、执行 recover database 命令利用归档日志和在线日志恢复数据文件; 5、执行 alter database open 命令打开数据,恢复完成 RUN { shutdown abort; startup mount; restore datafile 5; recover datafile 5; alter database open; } 已下线低可用恢复策略步骤 1、使用 shutdown abort 关闭实例 2、执行 startup mount 命令将实例带入 mount 状态 3、执行 alter database datafile 'path' online 命令将数据文件在控制文件中的状态修改为 上线 4、执行 restore 或 switch 命令还原损坏的普通数据文件 5、执行 recover database 利用归档日志和在线日志恢复数据文件 6、执行 alter database open 打开数据,恢复完成 run { shutdown abort; startup mount; alter database datafile 5 online; restore datafile 5; recover database; alter database open; } 高可用恢复策略 需要首先删除头部损坏的数据文件才可做 restore 操作。恢复步骤为: 1、删除头部损坏的数据文件; 2、若实例已停止,使用 startup mount 将实例带到mount 状态。如果数据处在 OPEN 状态则忽略该过程。 3、使用 alter database 命令将损坏的数据文件 下线(offline) 4、如果实例已停止,并用 startup mount 带到了mount 状态,使用 alter database open 打开数据。否则忽略该过程 5、执行 restore 或 switch 命令还原损坏的普通数据文件; 6、执行 recover tablespace 或 recover datafile 命令,利用归档日志和在线日志恢复数据文件; 7、执行 alter database 命令将完成恢复的数据文件重新上线,恢复完成 实例未停止 删除 受损坏的数据文件( rm /'path') run { sql 'alter database datafile 5 offline'; restore datafile 5; recover datafile 5; sql 'alter database datafile 5 online'; ) 实例已停止 删除 受损坏的数据文件( rm /'path') run { startup mount; sql 'atler database datafile 5 offline'; alter database open; restore datafile 5 ; recover datafile 5; sql 'alter database datafile 5 online'; } 只读数据文件备份与恢复 只读数据文件是只读表空间的数据文件。 备份: 备份只读数据文件方式 和备份其他数据文件的方式一样。 恢复: 由于只读文件没有 “写(更改)”的操作,所有就不用归档日志和重做日志恢复了。只需 还原即可。 在MOUNT状态下的 低可用恢复策略的恢复 步骤: 1、执行 startup mount 进入 MOUNT 状态 2、执行 restore 或 switch 命令还原数据文件 3、执行 alter database open 命令打开数据库,恢复完成 在OPEN状态下的高可用恢复策略的恢复步骤: 1、执行 alter database 命令让受损坏的只读数据文件下线 2、执行 restore force 或 switch 命令还原数据文件 3、执行 alter database datafile 5 online 命令使数据文件上线。 低可用恢复 需要 参数文件和控制文件必须就位。 高可用恢复 还需要关键数据库文件必须就位。 控制文件无损情况下的恢复 指:只读数据文件损坏时控制文件没有损坏。 ---如果数据块损坏,通道认为只读数据文件还存在,无须还原,这时必须用 restore datafile 5 force命令还原 run {sql 'alter databae datafile 5 offline'; restore datafile 5 force; sql' alter database datafile 5 online'; } 使用镜像复制就不必使用 force关键字 run { sql' alter database datafile 5 offline'; switch datafile 5 to datafilecopy 'path'; sql' alter database datafile 5 online'; } 控制文件损坏情况下的恢复 指:只读数据文件与控制文件一并损坏时的恢复。其恢复步骤包括 恢复控制文件与只读数据文件 1、将数据库启动至 NOMOUNT状态 2、用 restore 命令还原控制文件 3、将数据库启动到 MOUNT 状态 4、用 restore 命令还原只读数据文件 5、用 recover 命令恢复整个数据 6、用 resetlogs 方式打开数据库 run { restore controlfile from autobackup; mount database; restore datafile 5; recover database; ---如果只读数据文件改为 读写状态后,没有备份,这时数据文件和控制文件都损坏,则需再加一次 recover databae,否则不需要 recover database; ---如果只读数据文件改为 读写状态后,没有备份,这时数据文件和控制文件都损坏,则需再加一次 recover databae alter database open resetlogs; }