标签:
1、损坏或丢失文件从备份中还原
2、从归档和在线日志文件必要的被应用来改变数据,回滚块也在这时生成,这个称为前滚或恢复缓存
3、数据库可能包含提交、不提交的改变数据
4、回滚块被使用于任何未提交的数据被回滚,这个称为回滚或事务恢复
5、数据库现在为恢复状态
A、好处:
执行简单,出错率低
恢复时间就是还原所有的文件花费的时间
B、不利:
数据丢失,必须手工应用
整个数据库被还原到关闭备份的最后一个时间点
SQL>SHUTDOWN ABORT
还原数据:
UNIX: cp /BACKUP/* /databases/db01/ORADATA
NT: copy d:\disk1\backup\*.* d:\disk1\data\
复制完成,开启实例
CONN /AS SYSDBA
STARTUP
关闭数据库
shutdown immediate
还原数据文件和控制文件
数据文件的恢复 cp /db01/backup/*dbf /ORADATA/*
控制文件恢复 cp /db01/backup/*.ctl /ORADTA
没有备份在线日志,无法应用在线日志
recover database until cancel
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 239078276 bytes
Database Buffers 364904448 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-00338: 日志 1 (用于线程 1) 比控制文件更新
ORA-00312: 联机日志 1 线程 1: ‘D:\ORADATA\ORCL\REDO01.LOG‘
SQL> recover database until cancel;
完成介质恢复。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
SQL> alter database open restlogs;
alter database open restlogs
*
第 1 行出现错误:
ORA-02288: 无效的 OPEN 模式
SQL> alter database open resetlogs;
数据库已更改。
V$RECOVER_FILE决定哪个文件需要恢复
V$ARCHIVED_LOG罗列全部的归档日志
V$RECOVERY_LOG罗列全部归档日志需要恢复的
SQL> create tablespace tbs datafile ‘/u01/test01.dbf‘ size 100M;
表空间已创建。
#在归档模式下
alter DATABASE datafile ‘/u01/test01.dbf‘ offline;
#不在归档下
alter DATABASE datafile ‘/u01/test01.dbf‘ offline DROP ;
SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_STA ERROR CHANGE# TIME
---------- ---------- ---------- ---------- ---------- ---------------
5 OFFLINE OFFLINE 1093567 05-4月 -15
ERROR列有两种可能
为NULL错误为止
如果恢复不需要OFFLINE NORMAL
CHANGE#列返回SCN从恢复开始
例子阐述:归档模式下
SQL> alter system switch logfile;
系统已更改。
SQL> alter system switch logfile;
系统已更改。
SQL> alter system switch logfile;
系统已更改。
我只有3组日志组,最旧的会被替换掉。
在查看v$recovery_log
SQL> select * from v$recovery_log;
THREAD# SEQUENCE# TIME ARCHIVE_NAME
---------- ---------- -------------- ------------------------------
1 3 02-4月 -15 D:\FLASH_RECOVERY_AREA\ORCL\AR
CHIVELOG\2015_04_06\O1_MF_1_3_
BL4WZX0Z_.ARC
说明:v$log之前sequence=3的已经被替换了,只能在归档在恢复
SQL> alter database datafile 7 online;
alter database datafile 7 online
*
第 1 行出现错误:
ORA-01113: 文件 7 需要介质恢复
ORA-01110: 数据文件 7: ‘D:\ORADATA\ORCL\GULL01.DBF‘
SQL> recover datafile 7;
ORA-00279: 更改 1129093 (在 04/02/2015 21:26:50 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2015_04_06\O1_MF_1_3_%U_.ARC
ORA-00280: 更改 1129093 (用于线程 1) 在序列 #3 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
已应用的日志。
完成介质恢复。
SQL> alter database datafile 7 online;
数据库已更改。
备注说明:
也可以使用 直接使用recover automatic datafile 7;
再次把归档备份的另外的目录下,可以采用指定归档文件的位置恢复
SQL> recover automatic datafile 7;
ORA-00279: 更改 1143303 (在 04/06/2015 20:11:52 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2015_04_06\O1_MF_1_6_%U_.ARC
ORA-00280: 更改 1143303 (用于线程 1) 在序列 #6 中
ORA-00278: 此恢复不再需要日志文件
‘D:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2015_04_06\O1_MF_1_6_BL4Y290Z_.ARC‘
ORA-00308: 无法打开归档日志
‘D:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2015_04_06\O1_MF_1_6_BL4Y290Z_.ARC‘
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
filename
ORA-00308: 无法打开归档日志 ‘filename‘
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
D:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\O1_MF_1_6_BL4Y290Z_.ARC
已应用的日志。
完成介质恢复。
SQL>
可以通过v$datafile_header的checkpoint_change#到v$archived_log.FIRST_CHANGE#和next_change#,确定需要恢复那些归档
A、在mount状态下
recover [AUTOMATIC] database或recover [AUTOMATIC] datafile ‘/u01/test01.dbf‘;
B、数据库打开下的恢复
recover [AUTOMATIC] tablespace users或recover [AUTOMATIC] datafile 3;
AUTOMATIC自动应用归档日志和重做日志文件,不使用AUTOMATIC只会应用重做日志
SQL> alter database datafile 7 offline; 数据库已更改。 SQL> alter database rename file ‘D:\ORADATA\ORCL\GULL01.DBF‘ to ‘D:\ORADATA\GULL 01.DBF‘ 2 ; 操作系统中拷贝文件的指定的目录 SQL> recover datafile 7; 完成介质恢复。 SQL> alter database datafile 7 online; 数据库已更改。
在使用过程无法使系统数据文件脱机
SQL> alter database datafile 1 offline; alter database datafile 1 offline * 第 1 行出现错误: ORA-01541: 系统表空间无法脱机; 如有必要请关闭
需要更改系统文件system的路径,只能在mount状态下进行。
SQL> shutdown immediate; 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 操作系统数据文件拷贝 SQL> startup mount; ORACLE 例程已经启动。 Total System Global Area 612368384 bytes Fixed Size 1250428 bytes Variable Size 234883972 bytes Database Buffers 369098752 bytes Redo Buffers 7135232 bytes 数据库装载完毕。 SQL> alter database datafile 1 offline; 数据库已更改。 SQL> alter database rename file ‘D:\ORADATA\ORCL\SYSTEM01.DBF‘ to ‘D:\ORADATA\SY STEM01.DBF‘; 数据库已更改。 SQL> alter database datafile 1 oNline; 数据库已更改。 SQL> alter database open; 数据库已更改。 SQL>
如数据库关闭状态下,数据库MOUNT状态下,使数据文件(无备份)OFFLINE,打开数据库,用户只能使用这个表空间。
如数据库在打开状态,立即把对应的表空间offline状态
SQL> alter TABLESPACE GULL OFFLINE IMMEDIATE;
表空间已更改。
SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- -------------------- ---------- --------------
7 OFFLINE OFFLINE FILE NOT FOUND 0
8 OFFLINE OFFLINE 1147508 06-4月 -15
SQL> alter database create datafile ‘D:\ORADATA\GULL01.DBF‘;
数据库已更改。
SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- -------------------- ---------- --------------
7 OFFLINE OFFLINE UNKNOWN ERROR 579936 03-3月 -15
8 OFFLINE OFFLINE 1147508 06-4月 -15
归档文件需要都在才能恢复
SQL> recover automatic tablespace gull;
表空间在线
alter tablespace gull online;
1、备份之前的表空间是read-only,现在还是read-only。
这样恢复不需要任何的redo log
SQL> alter tablespace gull read only; 表空间已更改。 把表空间的数据文件gull01备份 SQL> alter system switch logfile; 系统已更改。 SQL> alter system switch logfile; 系统已更改。 SQL> alter system switch logfile; 系统已更改。 把之前备份的gull01直接替换 不需要做任何恢复就可以使用
2、表空间现在是read-wirte,备份是通过read-only,需要应用redo和归档
SQL> create tablespace gull datafile ‘d:\oradata\gull01.dbf‘ size 20M;
表空间已创建。
SQL> alter tablespace gull read only;
表空间已更改。
备份数据文件gull01
SQL> alter tablespace gull read write;
表空间已更改。
SQL> conn gull/oracle
已连接。
SQL> create table test0408 as select *from dba_objects;
表已创建。
SQL> alter system checkpoint;
系统已更改。
SQL> alter system checkpoint;
系统已更改。
SQL> alter system checkpoint;
系统已更改。
SQL> alter system switch;
alter system switch
*
第 1 行出现错误:
ORA-01900: 需要 LOGFILE 关键字
SQL> alter system switch logfile;
系统已更改。
SQL> alter system switch logfile;
系统已更改。
SQL> alter system switch logfile;
系统已更改。
SQL> alter database datafile 7 online;
alter database datafile 7 online
*
第 1 行出现错误:
ORA-01113: 文件 7 需要介质恢复
ORA-01110: 数据文件 7: ‘D:\ORADATA\GULL01.DBF‘
SQL> recover automatic datafile 7;
完成介质恢复。
SQL> alter database datafile 7 online;
数据库已更改。
SQL> select count(*) from test0408;
COUNT(*)
----------
50365
SQL>
3、现在为read-only,之前为read-write
先要把对应的文件改为offline,在恢复
SQL> create table test040801 as select *from dba_objects;
表已创建。
SQL> alter tablespace gull read only;
表空间已更改。
SQL> create table test040802 as select *from dba_objects;
create table test040802 as select *from dba_objects
*
第 1 行出现错误:
ORA-01647: 表空间 ‘GULL‘ 是只读, 无法在其中分配空间
SQL> alter tablespace gull read write;
alter tablespace gull read write
*
第 1 行出现错误:
ORA-01122: 数据库文件 7 验证失败
ORA-01110: 数据文件 7: ‘D:\ORADATA\GULL01.DBF‘
ORA-01208: 数据文件是旧的版本 - 不能访问当前版本
SQL> recover datafile 7;
ORA-00283: 恢复会话因错误而取消
ORA-01124: 无法恢复数据文件 7 - 文件在使用中或在恢复中
ORA-01110: 数据文件 7: ‘D:\ORADATA\GULL01.DBF‘
SQL> alter database datafile 7 offline;
数据库已更改。
SQL> recover automatic datafile 7;
完成介质恢复。
SQL> alter tablespace gull read write;
alter tablespace gull read write
*
第 1 行出现错误:
ORA-01135: DML/query 访问的文件 7 处于脱机状态
ORA-01110: 数据文件 7: ‘D:\ORADATA\GULL01.DBF‘
SQL> alter database datafile 7 online;
数据库已更改。
SQL> alter tablespace gull read write;
表空间已更改。
SQL> select count(*) from test040801;
COUNT(*)
----------
50366
SQL>
标签:
原文地址:http://www.cnblogs.com/gull/p/4382293.html