先简单说明两种用户治理的备份方式 1.冷备份 shutdown immediate/normal/transactional copy/cp备份所有的文件 alter database open 2.热备份--必须在归档模式下 alter tablespace tbs_name begin backup
备份(copy/cp)tbs_name表空间对应的所有文件 alter tablespace tbs_name end backup 或者 alter database datafile 文件号 或 '<file_name>' begin backup 备份对应的数据文件 alter database datafile 文件号 或 '<file_name>' end backup
下面具体说明几种场景的恢复 1)关闭数据库的恢复 a)系统表空间坏了,会自动关闭数据库 b)undo表空间坏了,会自动关闭数据库 c)所有数据文件坏了 这三种情况只能关闭数据库恢复,同时可以考虑:是不是归档模式,有没有归档模式的备份,否则就有数据丢失了 模拟: shutdown immediate,删除system表空间对应的文件 startup; --报错,查看状态为mount,select status from v$instance select * from v$backup --可以查询哪个文件丢失(status=active) restore(copt/cp)丢失的文件 --在mount状态下执行 recover datafile 文件号 或 '文件名' alter database open
2)Open 状态下数据文件恢复,必须在归档模式下 a)某个普通数据文件损坏 b)shutdown以后出现普通文件损坏 模拟a: 创建一个表空间test,备份,alter system switch logfile alter tablespace test offline 删除test对应的文件 --查看那些文件需要恢复 select * from v$recover_file; --字段ERROR,'OFFLINE NORMAL'表示不要恢复,NULL表示未知原因, 'FILE NOT FOUNT'等 select * from v$backup; //Status = Active --不用关闭数据库,直接将备份文件复制到数据文件目录下 recover tablespace test; alter tablespace test online;
b)先启动,使坏了的表空间offline,再恢复
3)没有任何备份的恢复 条件:必须是在归档模式起用后再创建的文件和所有之后的归档都存在 模拟:已起用归档模式 create tablespace test datafile '.... est.dbf' size 5M; create table t(id int, mc varchar2(10)) tablespace test; insert into values(1,'test'); commit; alter system switch logfile; alter system switch logfile; --多做几次,确保归档 --破坏数据文件,没有备份 alter tablespace test offline; 删除文件 test.dbf alter tablespace test online; 报错 --恢复 alter database create datafile 文件号 或 '文件名' recover datafile 文件号 或 '文件名' --或recover tablespace test; alter tablespace test online --假如是drop了,就只能做不完全恢复了(时间点等)
4)将文件移到另一个磁盘 只要rename (比如文件存放的磁盘损坏时使用) alter tablespace test offline 将备份的文件复制到另一个地方 alter database rename file '文件名' to '新文件夹文件名' recover datafile 文件号 或 '文件名' alter tablespace test online
|