第9章 关键数据文件备份与恢复
本章以备份、在线重做日志、归档重做日志没有丢失为前提
什么是关键数据文件?
- SYSTEM表空间的数据文件
- undo_tablespace表空间的数据文件
关键数据文件必须在数据库mount状态下进行。
CKPT进程会因为关键数据文件头部损坏而终止实例,不会因为普通数据文件头部损坏而终止实例
# 查询数据库中的关键数据文件
select file_id,file_name from dba_data_files
where
tablespace_name in
('SYSTEM',
(select value from v$parameter where name = 'undo_tablespace')
);
# 查询撤销段信息,并发事务越多撤销段就越多
# 任意一个撤销段损坏都会导致实例启动失败
select name from v$rollname where name<>'SYSTEM';
dd if=/dev/zero of=undotbs01.dbf count=1 bs=8192 conv=notrunc
# if=/dev/zero 表示输入来自全零设备。
# of=undotbs01.dbf 是目标数据文件的路径。
# count=1 指定只写入一个块。
# bs=8192 设置块大小为8KB,这通常是Oracle数据文件头的大小。
# conv=notrunc 保证不会截断文件,只是覆盖指定的部分。
备份
# 备份整个数据库
run{
allocate channel c1 device type disk to destination '/backup';
allocate channel c2 device type disk to destination '/backup';
allocate channel c3 device type disk to destination '/backup';
backup as copy database;
}
# 备份关键数据表空间
run{
allocate channel c1 device type disk to destination '/backup';
allocate channel c2 device type disk to destination '/backup';
backup as backupset
(tablespace system channel c1)
(tablespace undotbs1 channel c2);
}
# 备份关键数据数据文件
run{
allocate channel c1 device type disk to destination '/backup';
allocate channel c2 device type disk to destination '/backup';
backup as copy
(datafile '/u01/data/TESTDB/system01.dbf' channel c1)
(datafile '/u01/data/TESTDB/undotbs01.dbf' channel c2);
}
恢复
- 启动数据库到mount状态(如果正常途径无法进入则使用操作系统命令kill进程然后startup mount)
- 从备份还原(restore或switch)
- 使用增量备份或重做日志恢复(recover)
- open数据库
rman target /
#恢复3号数据文件
startup mount;
restore datafile 3;
recover database;
alter database open;
#恢复undo表空间
startup mount;
restore tablespace undotbs1;
recover database;
alter database open;
rman target /
# 查询镜像复制信息
list datafilecopy all;
# 使用镜像复制还原,节省恢复时间
run{
switch datafile 1 to datafilecopy
'backup/system01.dbf';
recover database;
alter database open;
}