且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

备份控制文件之后,添加数据文件,数据文件无备份丢失后的恢复

更新时间:2022-09-11 21:01:03

Oracle document:
Re-Creating Datafiles When Backups Are Unavailable: Scenario
If a datafile is damaged and no backup of the file is available, then you can still recover the datafile if:
1 .All archived log files written after the creation of the original datafile are available
2. The control file contains the name of the damaged file (that is, the control file is current, 
    or is a backup taken after the damaged datafile was added to the database)
如果不满足第二个条件会怎么样呢:
测试过程:
备份控制文件:
SQL> alter database backup controlfile to 'D:\oracle\product\10.2.0\exper_data\w
rite4.ctl'
  2  /
数据库已更改。
为表空间添加数据文件
SQL> alter tablespace users add datafile size 5m;
表空间已更改。
SQL> create table test(name varchar2(20)) tablespace users;
表已创建。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
删除刚才添加的数据文件(这是OMF方法,找到5M大小的那个,其他的都大),
并恢复备份的控制文件。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area  603979776 bytes
Fixed Size                  1298112 bytes
Variable Size             163578176 bytes
Database Buffers          432013312 bytes
Redo Buffers                7090176 bytes
数据库装载完毕。
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项

SQL> recover database using backup controlfile
ORA-00279: 更改 891467 (在 07/20/2010 22:47:57 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\ORACLE\PRODUCT\10.2.0\ARCH02\ARC00001_0724891677.001
ORA-00280: 更改 891467 (用于线程 1) 在序列 #1 中

指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
D:\oracle\product\10.2.0\oradata\PRIMARY\ONLINELOG\O1_MF_1_63XPWQ0D_.LOG
ORA-00283: 恢复会话因错误而取消
ORA-01244: 未命名的数据文件由介质恢复添加至控制文件
ORA-01110: 数据文件 6:
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\PRIMARY\DATAFILE\O1_MF_USERS_64CH5VWS_.DBF'

ORA-01112: 未启动介质恢复

SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\PRIMARY\DATAFILE\O1_MF_SYSTEM_63XPX1S6_.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\PRIMARY\DATAFILE\O1_MF_UNDOTBS1_63XPXGWY_.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\PRIMARY\DATAFILE\O1_MF_SYSAUX_63XPXMOL_.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\PRIMARY\DATAFILE\O1_MF_USERS_63XPXTN1_.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\PRIMARY\DATAFILE\O1_MF_USERS_64CF8DGN_.DBF
D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNNAMED00006
已选择6行。
更改文件名:
SQL> alter database rename file 'D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNNAMED0
0006' to 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\PRIMARY\DATAFILE\O1_MF_USERS_64CH5VWS
_.DBF'
  2  /
alter database rename file 'D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNNAMED00006'
 to 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\PRIMARY\DATAFILE\O1_MF_USERS_64CH5VWS_.DBF
'
*
第 1 行出现错误:
ORA-01511: 重命名日志/数据文件时出错
ORA-01141: 重命名数据文件 6 时出错 - 未找到新文件
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\PRIMARY\DATAFILE\O1_MF_USERS_64CH5VWS_.DBF'
ORA-01111: 数据文件 6 名称未知 - 请重命名以更正文件
ORA-01110: 数据文件 6: 'D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNNAMED00006'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
SQL> alter database create datafile 'D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNNA
MED00006' as 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\PRIMARY\DATAFILE\O1_MF_USERS_64CH
5VWS_.DBF'
  2  /
alter database create datafile 'D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNNAMED00
006' as 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\PRIMARY\DATAFILE\O1_MF_USERS_64CH5VWS_
.DBF'
*
第 1 行出现错误:
ORA-01276: 无法添加文件
D:\ORACLE\PRODUCT\10.2.0\ORADATA\PRIMARY\DATAFILE\O1_MF_USERS_64CH5VWS_.DBF。相
应文件具有一个 Oracle Managed Files 文件名。
提示文件具有一个 Oracle Managed Files 文件名,按三思的说法改一下文件名:
SQL> alter database create datafile 'D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNNA
MED00006' as 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\PRIMARY\DATAFILE\O1_MF_USERS.DBF'
2  /
数据库已更改。
SQL> recover database using backup controlfile
ORA-00279: 更改 892717 (在 07/20/2010 23:11:56 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\ORACLE\PRODUCT\10.2.0\ARCH02\ARC00001_0724891677.001
ORA-00280: 更改 892717 (用于线程 1) 在序列 #1 中

指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
D:\oracle\product\10.2.0\oradata\PRIMARY\ONLINELOG\O1_MF_3_63XPWZ47_.LOG
ORA-00339: 归档日志未包含任何重做
ORA-00334: 归档日志:
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\PRIMARY\ONLINELOG\O1_MF_3_63XPWZ47_.LOG'

SQL> recover database using backup controlfile
ORA-00279: 更改 892717 (在 07/20/2010 23:11:56 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\ORACLE\PRODUCT\10.2.0\ARCH02\ARC00001_0724891677.001
ORA-00280: 更改 892717 (用于线程 1) 在序列 #1 中

指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
D:\oracle\product\10.2.0\oradata\PRIMARY\ONLINELOG\O1_MF_1_63XPWOSS_.LOG
已应用的日志。
完成介质恢复。
SQL> alter database open resetlogs
  2  /
alter database open resetlogs
*
第 1 行出现错误:
ORA-01153: 激活了不兼容的介质恢复
文档上说:ORA-01153, Attempted to start an incompatible media recovery or open resetlogs
 during media recovery or RMAN backup.这里怎么用有另外进程呢,我只打开一个窗口.
waiting再打开:
SQL> alter database open resetlogs
  2  /
alter database open resetlogs
*
第 1 行出现错误:
ORA-01153: 激活了不兼容的介质恢复
错误一样.试着关闭再打开:
SQL> shutdown immediate;
ORA-01109: 数据库未打开

已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area  603979776 bytes
Fixed Size                  1298112 bytes
Variable Size             163578176 bytes
Database Buffers          432013312 bytes
Redo Buffers                7090176 bytes
数据库装载完毕。
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项

SQL> alter database open resetlogs
  2  /
数据库已更改。
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\PRIMARY\DATAFILE\O1_MF_SYSTEM_63XPX1S6_.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\PRIMARY\DATAFILE\O1_MF_UNDOTBS1_63XPXGWY_.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\PRIMARY\DATAFILE\O1_MF_SYSAUX_63XPXMOL_.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\PRIMARY\DATAFILE\O1_MF_USERS_63XPXTN1_.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\PRIMARY\DATAFILE\O1_MF_USERS_64CF8DGN_.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\PRIMARY\DATAFILE\O1_MF_USERS.DBF
已选择6行。
完成恢复.
在这里ORA-01153是什么原因呢,大伙指点一下.


本文转自 anranran 51CTO博客,原文链接:http://blog.51cto.com/guojuanjun/353990