1)recover恢复:
① 归档模式:完全恢复和不完全恢复
② 非归档模式:只能还原到最后一次备份状态(restore)
2)执行rman备份脚本先对数据库做一个备份(如果是archived模式可以做热备)
3)实现完全恢复,需要自备份以来的归档日志和当前日志文件完整,保证日志的连续性
热备脚本
vi /u01/backup/rman/hot.sql
写入:
run{ allocate channel c1 device type disk; allocate channel c2 device type disk; backup database format ‘/u01/backup/rman/db_%d_%T_%U.bak‘ plus archivelog format ‘/u01/backup/rman/ar_%d_%T_%U.bak‘; backup current controlfile format ‘/u01/backup/rman/ctl_%d_%T_%U.bak‘; release channel c1; release channel c2; }
此实验在上一节RMAN备份介绍处已有
因非关键数据文件介质损坏,需要将其表空间恢复到一个新的物理位置
create table scott.t1 (id number); insert into scott.t1 values(10); insert into scott.t1 values(20); insert into scott.t1 values(30); commit; conn / as sysdba alter system checkpoint; select * from scott.t1;
查看t1表所存在表空间
select table_name,tablespace_name from dba_tables where table_name=‘T1‘;
rm /u01/app/oracle/oradata/ORCL/users01.dbf
清除后session要重新登录,实验中为防备rman登录不正常,可以尝试先做个检查点切换
alter system flush buffer_cache; select * from scott.t1;
假设介质损坏了,更换需要时间,先把数据文件恢复到一个新的目录下(不同的物理位置)
mkdir -p /u01/tempfile/ORCL
run{ sql ‘alter database datafile 7 offline‘; set newname for datafile 7 to ‘/u01/tempfile/ORCL/users01.dbf‘; restore tablespace users; switch datafile 7; recover tablespace users; sql ‘alter database datafile 7 online‘; }
说明:
① set newname for告诉RMAN还原数据文件的新位置在哪里。这个命令在restore前出现
② switch datafile更新controlfile,让控制文件使用这个新位置恢复数据。这个命令要在recover前出现
select * from scott.t1;
select tablespace_name,file_name from dba_data_files;
alter tablespace users offline;
mv /u01/tempfile/ORCL/users01.dbf /u01/app/oracle/oradata/ORCL/
更新控制文件和数据字典
alter tablespace users rename datafile ‘/u01/tempfile/ORCL/users01.dbf‘ to ‘/u01/app/oracle/oradata/ORCL/users01.dbf‘; alter tablespace users online; select tablespace_name,file_name from dba_data_files;
create tablespace test datafile ‘/u01/app/oracle/oradata/ORCL/test01.dbf‘ size 5m; create table scott.t2 (id number) tablespace test; insert into scott.t2 values(1000); insert into scott.t2 values(1001); insert into scott.t2 values(1002); commit; alter system checkpoint;
rm /u01/app/oracle/oradata/ORCL/test01.dbf
alter system flush buffer_cache;
注意:rman备份里没有test01.dbf
run { sql ‘alter database datafile 5 offline‘; restore datafile 5; recover datafile 5; sql ‘alter database datafile 5 online‘; }
select * from scott.t2;
删除表空间
drop tablespace test including contents and datafiles;
select file#,status,name from v$datafile;
backup as copy datafile 7 format ‘/u01/backup/rman/df7.bak‘; list datafilecopy all;
删除datafile7
alter system checkpoint;
rm /u01/app/oracle/oradata/ORCL/users01.dbf
alter database datafile 7 offline;
switch datafile 7 to copy;
col file_name for a80 select file_id,file_name from dba_data_files;
recover datafile 7; sql ‘alter database datafile 7 online‘;
alter tablespace users offline;
mv /u01/backup/rman/df7.bak /u01/app/oracle/oradata/ORCL/users01.dbf
alter tablespace users rename datafile ‘/u01/backup/rman/df7.bak‘ to ‘/u01/app/oracle/oradata/ORCL/users01.dbf‘;
alter tablespace users online; select file_id,file_name from dba_data_files;
也可以再次使用backup as copy、switch
原文:https://www.cnblogs.com/jsxxd/p/14980664.html