先简单说明两种用户治理的备份方式
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