运行全然恢复:在 ARCHIVELOG 模式下 丢失了系统重要数据文件:
假设某个数据文件丢失或损坏。且该文件属于 SYSTEM 或 UNDO 表空间,请运行下面步骤:
1.
实例可能会也可能不会自己主动关闭。
2.假设未自己主动关闭。请使用 SHUTDOWN ABORT 关闭实例。
3.
装载数据库。
4.
还原并恢复缺失的数据文件。
5.打开数据库。
1.归档模式丢失非重要数据文件 全然恢复
第一种方法:
shutdown abort;
startup mount;
alter database create datafile '/home/oracle/test.dbf' as '/home/oracle/test.dbf';
recover datafile;
另外一种方法:
create tablespace test datafile '/home/oracle/test.dbf' size 10m;
rman target /
backup datafile 5;
rm test.dbf
sq> alter database datafile 5 offline;
restore datafile 5;
recover datafile 5;
sq> alter database datafile 5 online;
select FILE#,STATUS from v$datafile;
2. 归档模式丢失重要数据文件 全然恢复
利用备份,同上另外一种方法。
--------------------------------------------------------------------------------------------------------------
恢复映像副本:
RMAN> recover copy of database with tag 'daily_inc';
RMAN> backup incremental level 1 for recover of copy
with tag 'daily_inc' database;
RECOVER BACKUP
第 1 天 无 创建映像副本
第 2 天 无 创建 1 级增量备份
第 3 天和以后 依据增量备份恢复副本 创建 1 级增量备份
恢复映像副本:演示样例
假设每天都执行以上命令,则能够随时获得全部数据库数据文件的连续更新的映像副本。
图表显示了每次执行所发生的操作。请注意,这样的算法须要一段准备期间;到第 3 天后策略才会起作用。
第 1 天
RECOVER 命令没有运行不论什么操作。尚不存在要恢复的映像副本。BACKUP 命令可用于创建映像副本。
第 2 天
RECOVER 命令仍没有运行不论什么操作。由于尚不存在增量备份。
由于已在第 1 天创建了基准映像副本,BACKUP 命令会创建增量备份。
第 3 天
RECOVER 命令将增量备份中的更改应用于映像副本。
BACKUP 命令将运行还有一个增量备份,该备份将在第 4 天用于恢复映像副本,依此进行循环。
运行到映像副本的高速切换
运行下面步骤
能够使用数据文件的映像副本进行高速恢复:
1.使数据文件脱机。
2.使用 SWITCH TO ...COPY 命令指向这些文件的映像副本。
3.恢复数据文件。
4.使数据文件联机。
此时,数据库是可用的,且数据文件已恢复。可是,假设您希望将数据文件放回其原始位置。请继续运行下面步骤:
5.使用 BACKUP AS COPY 命令在原始位置创建数据文件的映像副本。
6.使数据文件脱机。
7.使用 SWITCH TO COPY 命令切换到在步骤 5 中创建的副本。
8.恢复数据文件。
9.使数据文件联机。
能够使用此命令来恢复数据文件、表空间、暂时文件或整个数据库。
切换到的目标文件必须为映像副本。
3. 映像副本的高速切换
backup as copy datafile 6;
rm a.dbf
sql:alter database datafile 6 offline;
rman >switch datafile '/home/oracle/test.dbf' to copy;
recover datafile 6;
--回复后数据文件的路径和名称为 '/home/oracle/test.dbf'。
alter database datafile 4 online;
select FILE#,STATUS from v$datafile;
select file_name from dba_data_files;
backup as copy datafile 4 format '/u01/app/oracle/oradata/orcln/users01.dbf';
alter database datafile 4 offline;
switch datafile ' /home/oracle/backup/db_data_D-ORCL_I-4115975543_TS-TEST_FNO-6_38otbf5q.bak' to copy;
switch datafile 4 to copy;
recover datafile 4;
alter database datafile 4 online;
select file_name from dba_data_files;
-----------------------------------------------------------------------------------------------------------------
4. set newname 改名字
backup as copy datafile 6;
list copy of datafile 6;
select FILE#,STATUS from v$datafile;
run{
allocate channel c1 device type disk;
sql "alter database datafile 6 offline";
set newname for datafile '/home/oracle/test.dbf' to '/home/oracle/test_new.dbf';
restore datafile 6;
switch datafile all;
recover datafile 6;
sql "alter database datafile 6 online";
}
--------------------------------------------------------------------------------------------------------------
从自己主动备份还原控制文件:
RMAN> STARTUP NOMOUNT;
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
RMAN> ALTER DATABASE MOUNT;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN RESETLOGS;
7. 丢失控制文件,參数文件 --数据库必须在nomount状态
查看文件信息:
SQL>select name from v$controlfile;
SQL>show parameter spfile;
SQL> select name from v$datafile;
配置控制文件自己主动备份恢复控制文件
rman target /
connected to target database: ORCL (DBID=1353286769)
RMAN>show all;
RMAN>CONFIGURE CONTROLFILE AUTOBACKUP ON;
数据库全备份:
RMAN>backup as compressed backupset full database;
删除,參数文件。控制文件,数据文件
rm /opt/oracle/oradata/orcl/control01.ctl
rm /opt/oracle/flash_recovery_area/orcl/control02.ctl
rm /opt/oracle/oradata/orcl/control03.ctl
rm /opt/oracle/product/11.2.2/dbs/spfileorcl.ora
rm /opt/oracle/oradata/orcl/system01.dbf
rm /opt/oracle/oradata/orcl/sysaux01.dbf
rm /opt/oracle/oradata/orcl/undotbs01.dbf
rm /opt/oracle/oradata/orcl/users01.dbf
rm /home/oracle/tbs_ctl01.dbf
rman target /
RMAN> set dbid 1353286769 --假设备份在
startup nomount --尽管没有參数文件可是也能够启动实例
恢复參数文件:
restore spfile from '/data/backup/ctl_c-1353286769-20131102-04.bak';
/* 从高速恢复区恢复參数文件:
run {
restore spfile from autobackup
recovery area = 'flash recovery area destination'
db_name = 'db_name';
}
*/
查看是否有须要改的參数:主要看文件位置
SQL> create pfile from spfile;
恢复控制文件:
restore controlfile to '/opt/oracle/oradata/orcl/control01.ctl' from '/data/backup/ctl_c-1353286769-20131102-04.bak';
恢复数据文件:
RMAN> shutdown immediate
RMAN> startup mount
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 11/02/2013 12:10:46
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
RMAN> alter database open resetlogs;
--------------------------------------------------------------------------------------------------------------
使用增量备份恢复处于 NOARCHIVELOG 模式的数据库:
STARTUP FORCE NOMOUNT;
RESTORE CONTROLFILE;
ALTER DATABASE MOUNT;
RESTORE DATABASE;
RECOVER DATABASE NOREDO;
ALTER DATABASE OPEN RESETLOGS;
8. 使用增量备份恢复处于NOARCHIVELOG 模式的数据库
1) 撤销数据库archivelog模式
SQL>shutdown immediate;
SQL>startup mount;
SQL>alter database noarchivelog;
SQL>alter database open;
SQL>archive log list;
2) 创建測试用表及数据
conn zhuxy/zhuxy
create table c (id number);
insert into c values(1);
commit;
3) 在noarchivelog模式下,0级备份
RMAN> run{
shutdown immediate;
startup mount;
backup as backupset incremental level 0 database;
alter database open;
}
4) 在noarchivelog模式下,1级备份
insert into c values(2);
commit;
RMAN> run{
shutdown immediate;
startup mount;
backup as backupset incremental level 1 database;
alter database open;
}
6) 删除全部日志文件, 某些数据文件
7) 运行恢复
rman target /
RMAN>startup mount;
--运行全库的还原
RMAN> restore database;
-- 使用noredo子句进行恢复
RMAN> recover database noredo;
--恢复完毕,resetlogs方式打开数据库,完毕全部文件丢失的恢复
RMAN> alter database open resetlogs;
8)验证在測试前(增量备份前)插入的数据
select * from c;
6.非归档丢失文件
不全然恢复: SCN, 时间,还原点,或日志序列号
1确定目标还原点:SCN、时间、还原点或日志序列号。
2设置 NLS 环境变量。
3装载数据库。
4使用 SET UNTIL、RESTORE 和 RECOVER 命令准备并执行 RUN 块。
5用 RESETLOGS 打开数据库。
-----不全然恢复之--基于时间的恢复
1) 准备环境:RMAN全库备份
RMAN> backup as compressed backupset full database;
2) 准备环境:測试表及数据
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
create table d (c date);
insert into d values(sysdate);
commit;
create table ff (c date);
insert into ff values(sysdate);
commit;
启动到mount模式,进行基于时间的恢复
shutdown immediate;
startup mount;
run
{sql 'alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss"';
set until time = ' 2014-03-30 00:39:34';
restore database;
recover database;
alter database open resetlogs;
}
时间也能够这么写:
set until time="to_date('2013-11-01 15:29:34','yyyy-mm-dd hh24:mi:ss')";
-----还原点:
select count(*) from copy_emp;
创建还原点:
create restore point before_delete;
delete from copy_emp where ID >=10;
commit;
alter table copy_emp enable row movement;
flashback table copy_emp to restore point b;
--------------------------------------------------------------------------------------------------------------
将数据库还原到新主机:
为了还原数据库。请在还原主机上运行下面步骤:
1.配置 ORACLE_SID 环境变量。
2.启动 RMAN 并在 NOCATALOG 模式下连接到目标实例。
3.设置数据库标识符 (DBID)。
4.在 NOMOUNT 模式下启动实例。
5.
从备份集中还原server參数文件。
6.关闭实例。
7.
编辑还原的初始化參数文件。
8.
在 NOMOUNT 模式下启动实例
9.创建 RUN 块以运行下列任务:
--还原控制文件
--
装载数据库
10.创建 RMAN 恢复脚本以还原和恢复数据库。
11.运行 RMAN 脚本。
12.使用 RESETLOGS 选项打开数据库。
9 利用备份将数据库还原到新主机:目标库须要有oracle软件
1)准备工作
源库数据库全备及控制文件自己主动备份,当然也包含參数文件
RMAN> backup as backupset database;
2)拷贝RMAN备份文件到目标库
能够用scp
3)配置目标库
目标库环境变量设置
export ORACLE_SID=new_orcl
启动rman到nomount状态,设置dbid(即源库dbid)
$ rman target /
RMAN> set dbid 1357901988
RMAN> startup nomount; --没有參数文件。会报错,可是能够启动实例
4)恢复參数文件
RMAN> restore spfile to pfile '' from '';
编辑pfile參数文件:文件位置。数据库实例名..,创建对应的文件夹
5) 启动数据库到nomount模式
SQL> create spfile from pfile;
SQL> startup nomount;
6)还原控制文件
$ rman target /
RMAN> restore controlfile to '' from '';
RMAN> alter database mount;
7) 还原数据文件
run{
SET NEWNAME FOR DATAFILE 1 TO '/u01/app/oracle/oradata/orcl/system01.dbf';
SET NEWNAME FOR DATAFILE 2 TO '/u01/app/oracle/oradata/orcl/sysaux01.dbf';
SET NEWNAME FOR DATAFILE 3 TO '/u01/app/oracle/oradata/orcl/undotbs01.dbf';
SET NEWNAME FOR DATAFILE 4 TO '/u01/app/oracle/oradata/orcl/users01.dbf';
SET NEWNAME FOR DATAFILE 5 TO '/u01/app/oracle/oradata/orcl/example01.dbf';
SET NEWNAME FOR DATAFILE 6 TO '/u01/app/oracle/oradata/orcl/test.dbf';
RESTORE DATABASE;
SWITCH DATAFILE ALL;
RECOVER DATABASE;}
--rename日志文件
run{
SQL "ALTER DATABASE RENAME FILE ''/u01/app/oracle/oradata/ENMOEDU/redo01.log'' TO
''/u01/app/oracle/oradata/orcl/redo01.log'' ";
SQL "ALTER DATABASE RENAME FILE ''/u01/app/oracle/oradata/ENMOEDU/redo02.log'' TO
''/u01/app/oracle/oradata/orcl/redo02.log'' ";
SQL "ALTER DATABASE RENAME FILE ''/u01/app/oracle/oradata/ENMOEDU/redo03.log'' TO
''/u01/app/oracle/oradata/orcl/redo03.log'' ";
}
RMAN> alter database open resetlogs;
8)暂时文件位置不正确
SQL> select file_name from dba_temp_files;
SQL>create temporary tablespace tempa tempfile
'/u01/app/oracle/oradata/orcl/tempa01.dbf' size 10m reuse autoextend on maxsize 200m;
SQL>alter database default temporary tablespace tempa;
SQL>drop tablespace temp;
SQL>select file_name from dba_temp_files;
注:这个測试改变了实例名
--------------------------------------------------------------------------------------------------------------
运行灾难恢复 :
灾难意味着丢失了整个目标数据库、恢复文件夹数据库、全部当前控制文件、全部联机重做日志文件和全部參数文件。
灾难恢复包含还原和恢复目标数据库。
备份集的最低要求:
1.数据文件的备份
2.
对应的归档重做日志文件
3.
至少一个控制文件自己主动备份
基本过程:
1.
还原server參数文件的自己主动备份。
2.启动目标数据库实例。
3.从自己主动备份还原控制文件。
4.装载数据库。
5.还原数据文件。
6.恢复数据文件。
7.使用 RESETLOGS 选项打开数据库。