??xml version="1.0" encoding="utf-8" standalone="yes"?>
4.ALTER DATABASE OPEN RESETLOGS;
代码如下:
SQL> shutdown abort
ORACLE 例程已经关闭?br />
SQL> host del D:\oracle\product\10.2.0\oradata\suredd\control*.ctl
/** 在此先将备䆾的控制文件和数据文gq原*/
SQL> startup mount
ORACLE 例程已经启动?br />
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 230689668 bytes
Database Buffers 373293056 bytes
Redo Buffers 7135232 bytes
数据库装载完毕?br />
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE
ORA-00279: 更改 873855 (?nbsp;05/05/2011 15:47:47 生成) 对于U程 1 是必需?br />
ORA-00289: :
D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00001_0750352730.001
ORA-00280: 更改 873855 (用于U程 1) 在序?nbsp;#1 ?br />
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 无法打开归档日志
'D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00001_0750352730.001'
ORA-27041: 无法打开文g
OSD-04002: 无法打开文g
O/S-Error: (OS 2) pȝ找不到指定的文g?br />
ORA-00308: 无法打开归档日志
'D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00001_0750352730.001'
ORA-27041: 无法打开文g
OSD-04002: 无法打开文g
O/S-Error: (OS 2) pȝ找不到指定的文g?br />
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE
ORA-00279: 更改 873855 (?nbsp;05/05/2011 15:47:47 生成) 对于U程 1 是必需?br />
ORA-00289: :
D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00001_0750352730.001
ORA-00280: 更改 873855 (用于U程 1) 在序?nbsp;#1 ?br />
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
E:\oracletest\backup\suredd\REDO01.LOG
ORA-00339: 归档日志未包含Q何重?br />
ORA-00334: 归档日志: 'E:\ORACLETEST\BACKUP\SUREDD\REDO01.LOG'
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE
ORA-00279: 更改 873855 (?nbsp;05/05/2011 15:47:47 生成) 对于U程 1 是必需?br />
ORA-00289: :
D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00001_0750352730.001
ORA-00280: 更改 873855 (用于U程 1) 在序?nbsp;#1 ?br />
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
E:\ORACLETEST\BACKUP\SUREDD\REDO02.LOG
ORA-00339: 归档日志未包含Q何重?br />
ORA-00334: 归档日志: 'E:\ORACLETEST\BACKUP\SUREDD\REDO02.LOG'
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE
ORA-00279: 更改 873855 (?nbsp;05/05/2011 15:47:47 生成) 对于U程 1 是必需?br />
ORA-00289: :
D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00001_0750352730.001
ORA-00280: 更改 873855 (用于U程 1) 在序?nbsp;#1 ?br />
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
E:\ORACLETEST\BACKUP\SUREDD\REDO03.LOG
已应用的日志?br />
完成介质恢复?br />
SQL> ALTER DATABASE OPEN RESETLOGS;
数据库已更改?br />
SQL> select * from dd.t1;
ID NAME
---------- ----------
1 test1
2 test2
SQL>
The following commands will create a new control file and use it to open the database.
Data used by Recovery Manager will be lost.
Additional logs may be required for media recovery of offline.
Use this only if the current versions of all online logs are available.
2.Set RESETLOGS case
The following commands will create a new control file and use it to open the database.
Data used by Recovery Manager will be lost.
The contents of online logs will be lost and all backups will be invalidated.
Use this only if online logs are damaged.
2.以alter database open resetlogs打开数据?br />
2.1如果当初关闭数据库时是非正常关闭,那么在打开数据库之前应该先RECOVER DATABASE USING BACKUP CONTROLFILE
3.dtemp文g
代码如下:
SQL> shutdown immediate
数据库已l关闭?br />
已经卸蝲数据库?br />
ORACLE 例程已经关闭?br />
SQL> host del D:\oracle\product\10.2.0\oradata\suredd\control*.ctl
SQL> host del D:\oracle\product\10.2.0\oradata\suredd\redo*.log
SQL> startup nomount
ORACLE 例程已经启动?br />
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 226495364 bytes
Database Buffers 377487360 bytes
Redo Buffers 7135232 bytes
SQL> edit
已写?nbsp;file afiedt.buf
1 CREATE CONTROLFILE REUSE DATABASE "SUREDD" RESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\REDO01.LOG' SIZE 50M,
9 GROUP 2 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\REDO02.LOG' SIZE 50M,
10 GROUP 3 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\REDO03.LOG' SIZE 50M
11 DATAFILE
12 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\SYSTEM01.DBF',
13 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\SYSAUX01.DBF',
14 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\USERS01.DBF',
15 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\EXAMPLE01.DBF',
16 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF',
17 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\UNTOTBS_NEW_01.DBF'
18* CHARACTER SET ZHS16GBK
SQL> /
控制文g已创建?br />
SQL> ALTER DATABASE OPEN RESETLOGS;
数据库已更改?br />
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\TEMP01.DBF'
2 SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
表空间已更改?br />
SQL> select * from dd.t1;
ID NAME
---------- ----------
1 test1
2 test2
SQL>
4.再找重做联机日志恢复数据
5.alter database open resetlogs
代码如下:
SQL> alter database backup controlfile to 'c:\CONTROL01.CTL';
数据库已更改?br />
SQL> shutdown immediate
数据库已l关闭?br />
已经卸蝲数据库?br />
ORACLE 例程已经关闭?br />
SQL> host del D:\oracle\product\10.2.0\oradata\suredd\CONTROL*.CTL;
SQL> host copy c:\CONTROL01.CTL D:\oracle\product\10.2.0\oradata\suredd\
SQL> startup mount
ORACLE 例程已经启动?br />
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 213912452 bytes
Database Buffers 390070272 bytes
Redo Buffers 7135232 bytes
ORA-00205: ?????????, ??????, ???????
SQL> shutdown immediate
ORA-01507: ??????
ORACLE 例程已经关闭?br />
============在此应该备份的控制文g按照初始化文仉面设|的那样copy N份到指定的位|?/span>===================
SQL> startup mount
ORACLE 例程已经启动?br />
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 213912452 bytes
Database Buffers 390070272 bytes
Redo Buffers 7135232 bytes
数据库装载完毕?br />
SQL> alter database open;
alter database open
*
W?nbsp;1 行出现错?
ORA-01589: 要打开数据库则必须使用 RESETLOGS ?nbsp;NORESETLOGS 选项
SQL> recover database using backup controlfile ;
ORA-00279: 更改 761661 (?nbsp;05/05/2011 09:18:58 生成) 对于U程 1 是必需?br />
ORA-00289: :
D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00011_0750250093.001
ORA-00280: 更改 761661 (用于U程 1) 在序?nbsp;#11 ?br />
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 无法打开归档日志
'D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00011_0750250093.001'
ORA-27041: 无法打开文g
OSD-04002: 无法打开文g
O/S-Error: (OS 2) pȝ找不到指定的文g?br />
ORA-00308: 无法打开归档日志
'D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00011_0750250093.001'
ORA-27041: 无法打开文g
OSD-04002: 无法打开文g
O/S-Error: (OS 2) pȝ找不到指定的文g?br />
=======以上p|的原因是:当前controlfile丢失,使用备䆾的controlfile打开数据库时,Z完全恢复,所以要使用until============
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 761661 (?nbsp;05/05/2011 09:18:58 生成) 对于U程 1 是必需?br />
ORA-00289: :
D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00011_0750250093.001
ORA-00280: 更改 761661 (用于U程 1) 在序?nbsp;#11 ?br />
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 无法打开归档日志
'D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00011_0750250093.001'
ORA-27041: 无法打开文g
OSD-04002: 无法打开文g
O/S-Error: (OS 2) pȝ找不到指定的文g?br />
ORA-00308: 无法打开归档日志
'D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00011_0750250093.001'
ORA-27041: 无法打开文g
OSD-04002: 无法打开文g
O/S-Error: (OS 2) pȝ找不到指定的文g?br />
ORA-01547: 警告: RECOVER 成功?nbsp;OPEN RESETLOGS 出现如下错?br />
ORA-01152: 文g 1 没有从过旧的备䆾中恢?br />
ORA-01110: 数据文g 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\SYSTEM01.DBF'
/**׃使用了备份的控制文gQ备份之后的归档日志信息丢失Q?br />
因此Q这旉要手工输入需要恢复的联机重做日志文g*/
SQL> SELECT GROUP#, SEQUENCE#, STATUS FROM V$LOG;
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 11 CURRENT
3 10 INACTIVE
2 9 INACTIVE
SQL> recover database using backup controlfile until cancel
ORA-00279: 更改 761661 (?nbsp;05/05/2011 09:18:58 生成) 对于U程 1 是必需?br />
ORA-00289: :
D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00011_0750250093.001
ORA-00280: 更改 761661 (用于U程 1) 在序?nbsp;#11 ?br />
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
D:\oracle\product\10.2.0\oradata\suredd\REDO03.LOG
ORA-00328: 归档日志在更?nbsp;759772 l束, 需要稍后的更改 761661
ORA-00334: 归档日志: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\REDO03.LOG'
ORA-01547: 警告: RECOVER 成功?nbsp;OPEN RESETLOGS 出现如下错?br />
ORA-01152: 文g 1 没有从过旧的备䆾中恢?br />
ORA-01110: 数据文g 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\SYSTEM01.DBF'
SQL> recover database using backup controlfile until cancel
ORA-00279: 更改 761661 (?nbsp;05/05/2011 09:18:58 生成) 对于U程 1 是必需?br />
ORA-00289: :
D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00011_0750250093.001
ORA-00280: 更改 761661 (用于U程 1) 在序?nbsp;#11 ?br />
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
D:\oracle\product\10.2.0\oradata\suredd\REDO01.LOG
已应用的日志?br />
完成介质恢复?br />
SQL> alter database open resetlogs;
数据库已更改?br />
SQL> select * from dd.t1;
ID NAME
---------- ----------
1 test1
2 test2
SQL>
3.解决Ҏ:归档日志copy回原来的位置,恢复时指定新的位|?或者用SET LOGSOURCE,指向新的归档位置
代码如下:
SQL> recover tablespace ddtest;
ORA-00279: 更改 589779 (?nbsp;05/04/2011 14:46:43 生成) 对于U程 1 是必需?br />
ORA-00289: :
D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00004_0750250093.001
ORA-00280: 更改 589779 (用于U程 1) 在序?nbsp;#4 ?br />
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 无法打开归档日志
'D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00004_0750250093.001'
ORA-27041: 无法打开文g
OSD-04002: 无法打开文g
O/S-Error: (OS 2) pȝ找不到指定的文g?br />
ORA-00308: 无法打开归档日志
'D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00004_0750250093.001'
ORA-27041: 无法打开文g
OSD-04002: 无法打开文g
O/S-Error: (OS 2) pȝ找不到指定的文g?br />
SQL> recover tablespace ddtest;
ORA-00279: 更改 589779 (?nbsp;05/04/2011 14:46:43 生成) 对于U程 1 是必需?br />
ORA-00289: :
D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00004_0750250093.001
ORA-00280: 更改 589779 (用于U程 1) 在序?nbsp;#4 ?br />
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 更改 609885 (?nbsp;05/04/2011 15:13:08 生成) 对于U程 1 是必需?br />
ORA-00289: :
D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00005_0750250093.001
ORA-00280: 更改 609885 (用于U程 1) 在序?nbsp;#5 ?br />
ORA-00278: 此恢复不再需要日志文?br />
'D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00004_0750250093.001'
已应用的日志?br />
完成介质恢复?br />
SQL> alter tablespace ddtest online;
表空间已更改?br />
SQL> select * from dd.t1;
ID NAME
---------- ----------
1 test1
2 test2
SQL>
?
(1)或者将归档日志攑ֈ其他的地?然后在指定日志时不用auto,而写新的路径
(2)SET LOGSOURCE '归档日志的放的位|?/span>',再recover ,然后使用auto
4.recover数据?br />
5.归档所有日?br />
6.open数据?br />
7.dtemp表空间的数据文g
q程如下:
SQL> show parameter control
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string D:\ORACLE\PRODUCT\10.2.0\ORADA
TA\SUREDD\CONTROL01.CTL, D:\OR
ACLE\PRODUCT\10.2.0\ORADATA\SU
REDD\CONTROL02.CTL, D:\ORACLE\
PRODUCT\10.2.0\ORADATA\SUREDD\
CONTROL03.CTL
======================此时破坏所有控制文?=====================
SQL> alter system checkpoint;
alter system checkpoint
*
W?nbsp;1 行出现错?
ORA-00227: 控制文g中检到损坏的块: (?nbsp;, # ?nbsp;)
SQL> select status from v$instance;
ERROR:
ORA-03114: 未连接到 ORALCE
SQL> conn / as sysdba
已连接到I闲例程?br />
SQL> startup nomount
ORACLE 例程已经启动?br />
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 201329540 bytes
Database Buffers 402653184 bytes
Redo Buffers 7135232 bytes
SQL> edit
已写?nbsp;file afiedt.buf
1 CREATE CONTROLFILE REUSE DATABASE "SUREDD" NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\REDO01.LOG' SIZE 50M,
9 GROUP 2 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\REDO02.LOG' SIZE 50M,
10 GROUP 3 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\REDO03.LOG' SIZE 50M
11 DATAFILE
12 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\SYSTEM01.DBF',
13 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\UNDOTBS01.DBF',
14 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\SYSAUX01.DBF',
15 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\USERS01.DBF',
16 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\EXAMPLE01.DBF',
17 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF'
18* CHARACTER SET ZHS16GBK
SQL> /
控制文g已创建?br />
SQL> RECOVER DATABASE;
完成介质恢复?br />
SQL> ALTER SYSTEM ARCHIVE LOG ALL;
pȝ已更攏V?br />
SQL> ALTER DATABASE OPEN;
数据库已更改?br />
SQL> edit
已写?nbsp;file afiedt.buf
1 ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\TEMP01.DBF'
2* SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M
SQL> /
表空间已更改?br />
SQL> select * from dd.t1;
ID NAME
---------- ----------
1 test1
2 test2
SQL>
2.startup
W二U情?损坏的控制文件的盘位置不可?br />
1.在新的位|将好的控制文gcopyq去
2.修改spfile,使得里面的控制文件的路径指向正确
3.startup
4.∴可以利用create datafile来进行恢?br />
具体参看代码:
SQL> shutdown abort
ORACLE 例程已经关闭?br />
==============在这儿破坏数据文?=================
SQL> startup
ORACLE 例程已经启动?br />
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 180358020 bytes
Database Buffers 423624704 bytes
Redo Buffers 7135232 bytes
数据库装载完毕?br />
ORA-01157: 无法标识/锁定数据文g 6 - 请参?nbsp;DBWR 跟踪文g
ORA-01110: 数据文g 6: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS01.DBF'
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- -------------------------------------------
6 ONLINE ONLINE FILE NOT FOUND 0
SQL> select * from v$backup;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- --------------
1 NOT ACTIVE 0
2 NOT ACTIVE 0
3 NOT ACTIVE 0
4 NOT ACTIVE 0
5 NOT ACTIVE 0
6 FILE NOT FOUND 0
已选择6行?br />
SQL> edit
已写?nbsp;file afiedt.buf
1 SELECT D.NAME, T.NAME AS TABLESPACE_NAME
2 FROM V$DATAFILE D, V$TABLESPACE T
3 WHERE T.TS# = D.TS#
4* AND D.FILE# = 6
SQL> /
NAME
----------------------------------------------------------------------------------------------------
TABLESPACE_NAME
------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS01.DBF
DDTEST
SQL> alter database create datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF'
2 as 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS01.DBF';
数据库已更改?br />
SQL> recover datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS01.DBF';
完成介质恢复?br />
SQL> select * from dd.t1;
select * from dd.t1
*
W?nbsp;1 行出现错?
ORA-01219: 数据库未打开: 仅允许在固定?/span>/视图中查?br />
SQL> alter tablespace ddtest online;
alter tablespace ddtest online
*
W?nbsp;1 行出现错?
ORA-01109: 数据库未打开
SQL> alter database open;
数据库已更改?br />
SQL> select * from dd.t1;
ID NAME
---------- ----------
1 test1
2 test2
SQL>
注意:在这个地方要?需要表I间创徏后所有的归档日志Q且控制文g中必d含受损文件名
如果不是q样子的?则会出现下面的情?
SQL> select status from v$instance;
STATUS
------------
OPEN
SQL> SELECT * FROM V$RECOVER_FILE;
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- ----------------------------------------------------------------- -------
6 OFFLINE OFFLINE FILE NOT FOUND 0
SQL> alter database create datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF'
2 as 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS01.DBF';
alter database create datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF'
*
W?nbsp;1 行出现错?
ORA-01178: 文g 6 在最后一?nbsp;CREATE CONTROLFILE 之前创徏, 无法重新创徏
ORA-01110: 数据文g 6: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF'
查询联机文档:
Cause: Attempted to use ALTER DATABASE CREATE DATAFILE to recreate a datafile that existed at the last CREATE CONTROLFILE command. The information needed to recreate the file was lost with the control file that existed when the file was added to the database.
Action: Find a backup of the file, and recover it. Do incomplete recovery to time before file was originally created.
SQL> alter database create datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF'
2 as 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS01.DBF';
alter database create datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF'
*
W?nbsp;1 行出现错?
ORA-01178: 文g 6 在最后一?nbsp;CREATE CONTROLFILE 之前创徏, 无法重新创徏
ORA-01110: 数据文g 6: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF'
SQL> host copy E:\oracletest\backup\suredd\DDTESTTBS02.DBF D:\oracle\product\10.2.0\oradata\suredd\
SQL> recover datafile 'D:\oracle\product\10.2.0\oradata\suredd\DDTESTTBS02.DBF';
完成介质恢复?br />
SQL> select status from v$instance;
STATUS
------------
OPEN
SQL> alter tablespace ddtest online;
表空间已更改?br />
SQL> select * from dd.t1;
ID NAME
---------- ----------
1 test1
2 test2
SQL>
由此可见,有备份是多么的重要啊!!!SQL> select file_name,tablespace_name from dba_data_files;
FILE_NAME TABLESPACE_NAME
------------------------------------------------------------ -----------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF DDTEST
D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\EXAMPLE01.DBF EXAMPLE
D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\USERS01.DBF USERS
D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\SYSAUX01.DBF SYSAUX
D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\UNDOTBS01.DBF UNDOTBS1
D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\SYSTEM01.DBF SYSTEM
SQL> alter tablespace ddtest begin backup;
表空间已更改?br />
SQL> alter tablespace ddtest end backup;
表空间已更改?/span>
2.用UEddtest对应的数据文件破?br />
3.直接shutdown abort,再startup
SQL> shutdown abort;
ORACLE 例程已经关闭?br />
SQL> startup
ORACLE 例程已经启动?br />
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 197135236 bytes
Database Buffers 406847488 bytes
Redo Buffers 7135232 bytes
数据库装载完毕?br />
ORA-01157: 无法标识/锁定数据文g 6 - 请参?nbsp;DBWR 跟踪文g
ORA-01110: 数据文g 6: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF'
SQL>
4.查找需要恢复的数据文g
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- ----------------------------------------------------------------- -------
6 ONLINE ONLINE FILE NOT FOUND 0
SQL> select * from v$backup;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- --------------
1 NOT ACTIVE 0
2 NOT ACTIVE 0
3 NOT ACTIVE 0
4 NOT ACTIVE 0
5 NOT ACTIVE 0
6 FILE NOT FOUND 0
已选择6行?br />
SQL> edit
已写?nbsp;file afiedt.buf
1 SELECT D.NAME, T.NAME AS TABLESPACE_NAME
2 FROM V$DATAFILE D, V$TABLESPACE T
3 WHERE T.TS# = D.TS#
4* AND D.FILE# = 6
SQL> /
NAME
----------------------------------------------------------------------------------------------------
TABLESPACE_NAME
------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF
DDTEST
SQL>
5.备份的数据文g直接copy到原位置(因ؓ此时为mount状?所以可以直接copy,不用offline),再recover,再打开数据库。如果是打开的,(此时做了alter system checkpoint 也能使得表空间不可用),那就对应的表空间先offlineQ再执行recoverQ执行完recover后,再将表空间online?br />
SQL> recover datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF';
完成介质恢复?br />
SQL> alter database open;
数据库已更改?br />
SQL> select * from dd.t1;
ID NAME
---------- ----------
1 test1
2 test2
SQL>
x恢复完成.
ALTER TABLESPACE BEGIN BACKUP 和ALTER TABLESPACE END
BACKUP 命o之间的间隔时间应量~短Q因Z改后的块写入重做日志文g
导致生成更多的重做信息。因此徏议每ơ执行一个表I间的联机备份?/p>
2.备䆾状态信?查询的视?
(1)V$BACKUP:以确定哪些文件处于备份模式。发出ALTER TABLESPACE BEGIN BACKUP 命o后,状态将更改为ACTIVE。备份文件后Q?#8220;状?#8221; (STATUS) 列的值将更改为NOT ACTIVE?br />
(2)V$DATAFILE_HEADERQ表I间的数据文件的FUZZY 列中的值将更改为YESQ表明相应的文g处于备䆾模式?br />
ALTER TABLESPACE END BACKUP 命o后,FUZZY 列的值将更改为NULL
3.联机表空间备份过E中出现故障
查询V$BACKUP 以检查备份状?/p>
4.只读表空间备?br />
ALTER TABLESPACE query_data READ ONLY;
(1)发出ALTER TABLESPACE 命o后,会对所有与表空间相兌的数据文件执行检查点。然后用当前SCN ȝ文g头?br />
(2)使表I间成ؓ只读状态之后,必须备䆾该表I间的所有数据文件?br />
DBW0 q程只写入其表空间处于读写模式的数据文gQ正常的查点也只对这些文件执行?/p>
5.只读表空间备份问?br /> (1)在将表空间更改ؓ只读后,只需要一个备份?br /> (2)在表空间成写状态之后,应恢复按照正常备份日E对该表I间q行备䆾?br /> (3)控制文g必须能正标识处在只L式下的表I间Q否则,必须恢复该表I间?/p>
6.手动备䆾控制文g
(1)创徏二进制映?/p>
(2)创徏文本跟踪文g
(3)以下命o更改数据库配|ƈD控制文g更改Q?/p>
7.使用DBVERIFY 实用E序验证备䆾
(1)用于保备䆾数据库或数据文g在还原之前是有效?br />
(2)遇到数据损坏问题时可作ؓ有用的诊断辅助工?br />
(3)使用:%dbv file=/ORADATA/u03/users01.dbf logfile=dbv.log
也可以是q程归档:log_archive_dest_2 = "SERVICE=standby_db1"
指定的服务名通过使用本地的tnsnames.ora 文gq行解析
2.LOG_ARCHIVE_DEST_n 选项
(1)归档位|设|ؓMANDATORY 或OPTIONAL?br />
MANDATORY:表示必须成功完成归档到该目标的操作才可以覆盖联机重做日志文g?br />
OPTIONAL:表示即联机重做日志文g未成功地归档到该目标,也可以重C用。这是缺省设|?br />
(2)在出现故障之后、重试之前定义时?br />
REOPEN:REOPEN 属性定义发生故障时是否必须重新试归档到目标。如果ؓ关键字REOPEN指定了|如REOPEN=600Q则若发生故障,在经q指定时_以秒计)后,归档E序尝试写入该目标。缺省gؓ300 U。归档到目标的尝试次数没有限制。归档中的所有错误将在主站点的警报文件中报告?br />
如果未指定REOPENQ则可选目标上的错误将被记录ƈ忽略。不再将重做日志发送到q些目标。在归档成功之前Q强制目标上的错误将D无法重新使用联机重做日志。只要归档不成功Q归档目标的状态就讄为ERROR?/p>
1.在NOARCHIVELOG 模式下操作数据库时有以下Ҏ:
(1)重做日志文g以@环的方式使用?br />
(2)重做日志文g可以在检查点发生之后立即重新使用?br />
(3)重做日志被覆盖后Q介质恢复将只能恢复C一ơ完全备份?/p>
2.NOARCHIVELOG 模式的含?br /> (1)如果某个表空间由于故障而不可用Q将无法l箋Ҏ据库q行操作Q除非删除了该表I间或从备䆾q原了整个数据库?br /> (2)只能在数据库关闭时对数据库执行操作系l备份。而且Q必M用NORMAL、IMMEDIATE 或TRANSACTIONAL 选项关闭数据库?br /> (3)必须在每ơ备份时完整备䆾所有的数据文g和控制文件。尽也可以备䆾联机重做日志文gQ但q是不必要的。由于此cd份中日志文g是一致的Q无需恢复Q因此,不需要备份联机日志?br /> (4)如果联机重做日志文g已被覆盖Q则丢׃ơ完全备份后的所有数据?/p>
3.NOARCHIVELOG 模式下的介质恢复选项
必须从数据库的完全备份中q原数据文g和控制文件。如果用导出实用程序来备䆾?br />
据库Q则可用导入实用程序还原丢q数据。但是,通过q种Ҏ恢复的数据ƈ不完
_在导出后执行的事务处理工作将丢失?/p>
ARCHIVELOG 模式
在发生检查点q且已经通过ARCn 后台q程备䆾重做日志文g之前Q不能重C用填满的重做日志文g。控制文件中有一个条目记录归档日志文件的日志序列受?br />
Ҏ据库的最新更改在M时候均可用于例E恢复,而归档重做日志文件可以用于介质恢复?/p>
1.归档要求
(1)数据库必d于ARCHIVELOG 模式。通过发出命o数据库|于ARCHIVELOG 模式可以更新控制文g。可以启用ARCn 后台q程来实现自动归档?br />
(2)应该有够的资源来存攄成的归档重做日志文g?/p>
2.数据库讄为ARCHIVELOG 模式的含?br /> (1)出现介质故障Ӟ可以防止数据库丢失数据?br /> (2)可以在数据库联机时对其进行备份?br /> (3)׃介质故障D表空_非SYSTEMQ脱机时Q数据库的其余部分仍可用Q因I间Q非SYSTEMQ可以在数据库打开时恢复?/p>
3.介质恢复选项
(1)无论数据库处于联机或脱机状态,都可以还原损坏文件的备䆾副本Qƈ使用归档日志文g数据文件更Cؓ当前的版本?br />
(2)可以数据库恢复至特定的旉炏V?br />
(3)可以数据库恢复x定归档日志文件的末尾?br />
(4)可以数据库恢复至特定的pȝ更改?SCN)?br />
4.在设|归档日志模式时Q应该考虑以下因素Q?br />
下述情况中,NOARCHIVELOG 模式可能比较合适:
(1)容许备䆾之间的数据损失(在开发、培训期间等Q?br />
(2)重新应用事务处理Q从批处理文Ӟ的速度更快
(3)数据极少更改Q非OLTPQ?br />
下述情况中,ARCHIVELOG 模式则更合适:
(1)无法关闭数据库以执行关闭的数据库的备?br />
(2)不允许数据损?br />
(3) 使用归档重做日志文g比重新应用事务处?OLTP) 更易于恢?/p>