delete obsolete
1.完全恢复练习
create tablespace rectest datafile '/home/oracle/rectest.dbf' size 2m;
create table t_recover (c1 varchar2(1)) tablespace rectest;
backup database;
mv /home/oracle/rectest.dbf /home/oracle/rectest2.dbf --linux4.8:使用RM,如果不重启DB,不报错
insert into t_recover values('a');
commit;
run {
sql "alter tablespace rectest offline immediate";
restore tablespace rectest;
recover tablespace rectest delete archivelog;
sql "alter tablespace rectest onlin";
}
2.不完全恢复的原因
(1)丢失了某个归档或当前联机重做日志的所有副本
(2)出现用户错误后,我们有意地丢失某些数据
(3)不完全恢复的一个特例是控制文件的恢复
3.不完全恢复的步骤
用SQLPLUS或RMAN恢复的步骤:
(1)加载数据库
(2)还原所有数据文件、同时可以选择还原控制文件
(3)将数据库恢复至某个时间点、序列或系统改变号
(4)使用resetlogs关键字打开数据库
4.不完全恢复与完全恢复的不同点
(1)只要受损文件不是关键文件就可以进行不完全恢复;不完全恢复只能在加载模式中进行。关键文件是指SYSTEM表空间及当前活动的撤消表空间的数据文件。
(2)所有不完全恢复操作都会首先还原所有的数据文件,数据文件不必从相同的备份中还原。
(3)数据库的物理结构如果有变化,例如删除了某个表空间,控制文件中没有表空间的记录。那么,还要还原控制文件。还原控制文件相关复杂
(4)使用RESETLOGS关键字打开数据库,重新初始化重做日志文件,从而创建数据库的一个新场景。
5.补充的注意事项
(1)不完全恢复必须作为SYSDBA用户进行连接。
(2)认定需要进行不完全恢复时就关闭数据库是至关重要的
(3)成功能完成不完全恢复后,应当进行另一个全部备份操作
startup restrict --仅限于执行此命令的SESSION能够连接数据库
6.使用用户托管的备份进行不完全恢复(使用SQLPLUS)
shutdown immediate;
startup mount;
--此步使用操作系统命令还原所有数据文件
recover databae until time '2004-12-10:18:31:00';--until time的格式是固定的,与nls_date_format设置无关;
--recover database until cancel;--如果归档或联机丢失,until cancel会恢复到不丢失的归档
--recover database until change 309121;--until change相当于rman中的until scn
alter database open resetlogs;
7.使用RMAN的不完全全恢复
run {
allocate channel d1 type disk;
allocate channel t1 type sbt_tape;
shutdown immediate;
startup mount;
sql "alter session st nls_date_format=''yyyy-mm-dd hh24:mi:ss''";--与SQLPLUS进行不完全恢复不同的是,RMAN知道参数NLS_DATE_FORMAT的设置
set until time '2004-12-31 18:31:00';
--set until sequence 10305 thread 1;--使用日志的序列号恢复(10305之前的,不包括10305)
--set until scn 309121;--使用scn恢复
resotre database;
recover database;
alter database open resetlogs;
}
8.练习:使用RMAN执行不完全恢复
select log_mode from v$datebase;
select archiver from v$instance;
--连接SQLPLUS
set time on;
create table test_rec as select * from all_users;
--使用rman
rman target /
backup database;
--SQLPLUS
drop table test_rec;
select count(*) from test_rec;
--RMAN
run{
shutdown immediate;
startup mount;
sql "alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''";
set until time '2012-09-26 17:32:00';
restore database;
recover database;
alter database open resetlogs;
}
--sqlplus
select count(*) from test_rec;
select * from v$log;
--执行一次备份
drop table test_rec;
9.使用手工备份还原控制文件
(1)备份
alter database backup controlfile to '';--备份二进制文件
--在操作系统上COPY控制文件,必须关闭数据库
--alter database backup controlfile to trace;--备份到文本形式的跟踪文件
(2)恢复控制文件
shutdown immediate
将备份复制到control_files指定的位置
STARTUP MOUNT
sqlplus: recover database until cancel using backup controlfile;--此时会提示输入归档日志
alter database open resetlogs;
--* resetlogs打开后,要做全库备份。ORACLE不允许跨场景恢复,一个场景(incarnation)具有专用的备份和归档日志。不同场景的备份和归档日志应该分离。
附:不完全恢复的语法
recover database until ... using backup controlfile;--此时必须还原控制文件以及所有的数据文件
ORA-19909错误是原执行了跨场景恢复控制文件
10.使用RMAN还原控制文件
(1)备份
backup as copy current controlfile;
backup as backupset current controlfile;
backup tablespace system include current controlfile;
configure controlfile autobackup on;--RMAN在运行其他备份时,自动备份控制文件和服务器参数文件
(2)恢复
run {
startup nomount;
set dbid 33388383;--多个数据库共享一个备份目的地时使用;select dbid from v$database;
restore controlfile from autobackup;
alter database mount;
recover database;
alter database open resetlogs;
}
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7901922/viewspace-1059526/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7901922/viewspace-1059526/