新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > 数据库 > Oracle教程 > 正文:如何使用备份的控制文件来恢复数据库?

如何使用备份的控制文件来恢复数据库?

新客网 XKER.COM 2008-02-02 来源:赛迪网 秦凯 收藏本文

问:如何使用备份的控制文件来恢复数据库?

答:你可以使用备份的控制文件(db物理结构已经变化)来恢复数据库。具体的示例请参考下文:

SQL> alter database backup controlfile to 'E:oracleproduct10.2.0oradataORCL
ctl_bakcontrol01.ctl';

Database altered.

SQL> create tablespace test datafile 'E:oracleproduct10.2.0oradataORCL est
.dbf' size 5m;

Tablespace created.

SQL> select group# , sequence# , status from v$log;

GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 2 CURRENT
2 0 UNUSED
3 1 INACTIVE

SQL> create table t1(id int) tablespace test;

Table created.

SQL> insert into t1 values(1);

1 row created.

SQL> commit;

Commit complete.

SQL> alter system switch logfile;

System altered.

SQL> select group# , sequence# , status from v$log;

GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 2 ACTIVE
2 3 CURRENT
3 1 INACTIVE

SQL> insert into t1 values(2);

1 row created.

SQL> commit;

Commit complete.

SQL> alter system switch logfile;

System altered.

SQL> select group# , sequence# , status from v$log;

GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 2 ACTIVE
2 3 ACTIVE
3 4 CURRENT

SQL> insert into t1 values(3);

1 row created.

SQL> commit;

Commit complete.

SQL> alter database backup controlfile to trace;

Database altered.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
--删除当前所有控制文件
--拷贝最上面备份的控制文件回来,注重备份的控制文件中并没有记录test.dbf
SQL> startup mount
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE instance started.

Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 71304548 bytes
Database Buffers 92274688 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
SQL> alter database open ;
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项


SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出现错误:
ORA-01152: 文件 1 没有从过旧的备份中恢复
ORA-01110: 数据文件 1: 'E:ORACLEPRODUCT10.2.0ORADATAORCLSYSTEM01.DBF'


SQL> recover database using backup controlfile;
ORA-00279: 更改 244868 (在 09/16/2007 16:00:16 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG2007_09_16O1_MF_1_

2_%U_.ARC
ORA-00280: 更改 244868 (用于线程 1) 在序列 #2 中


指定日志: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00283: 恢复会话因错误而取消
ORA-01244: 未命名的数据文件由介质恢复添加至控制文件
ORA-01110: 数据文件 2: 'E:ORACLEPRODUCT10.2.0ORADATAORCLTEST.DBF'


ORA-01112: 未启动介质恢复


SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出现错误:
ORA-01113: 文件 1 需要介质恢复
ORA-01110: 数据文件 1: 'E:ORACLEPRODUCT10.2.0ORADATAORCLSYSTEM01.DBF'

--我认为之所以能恢复过来的原因是执行了recover datafile 1;
SQL> recover datafile 1;
ORA-00283: 恢复会话因错误而取消
ORA-01610: 使用 BACKUP CONTROLFILE 选项的恢复必须已完成

在执行了recover datafile 1;之后再执行
recover database using backup controlfile; oracle提示出

“'E:ORACLEPRODUCT10.2.0DB_1DATABASEUNNAMED00002”信息,
这是能恢复回来的要害!

SQL> recover database using backup controlfile;
ORA-00283: 恢复会话因错误而取消
ORA-01111: 数据文件 2 名称未知 - 请重命名以更正文件
ORA-01110: 数据文件 2: 'E:ORACLEPRODUCT10.2.0DB_1DATABASEUNNAMED00002'
ORA-01157: 无法标识/锁定数据文件 2 - 请参阅 DBWR 跟踪文件
ORA-01111: 数据文件 2 名称未知 - 请重命名以更正文件
ORA-01110: 数据文件 2: 'E:ORACLEPRODUCT10.2.0DB_1DATABASEUNNAMED00002'


SQL> alter database rename file 'E:ORACLEPRODUCT10.2.0DB_1DATABASEUNNAMED0
0002' to 'E:ORACLEPRODUCT10.2.0ORADATAORCLTEST.DBF';

数据库已更改。

SQL> recover database using backup controlfile;
ORA-00279: 更改 244905 (在 09/16/2007 16:08:37 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG2007_09_16O1_MF_1_

2_%U_.ARC
ORA-00280: 更改 244905 (用于线程 1) 在序列 #2 中


指定日志: {=suggested | filename | AUTO | CANCEL}
E:ORACLEPRODUCT10.2.0ORADATAORCLREDO01.LOG
ORA-00279: 更改 244983 (在 09/16/2007 16:10:25 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG2007_09_16O1_MF_1_

3_%U_.ARC
ORA-00280: 更改 244983 (用于线程 1) 在序列 #3 中
ORA-00278: 此恢复不再需要日志文件
'E:ORACLEPRODUCT10.2.0ORADATAORCLREDO01.LOG'


指定日志: {=suggested | filename | AUTO | CANCEL}
E:ORACLEPRODUCT10.2.0ORADATAORCLREDO02.LOG'
ORA-01756: 引号内的字符串没有正确结束


SQL> recover database using backup controlfile;
ORA-00279: 更改 244983 (在 09/16/2007 16:10:25 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG2007_09_16O1_MF_1_

3_%U_.ARC
ORA-00280: 更改 244983 (用于线程 1) 在序列 #3 中


指定日志: {=suggested | filename | AUTO | CANCEL}
E:ORACLEPRODUCT10.2.0ORADATAORCLREDO02.LOG
ORA-00279: 更改 244992 (在 09/16/2007 16:10:47 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG2007_09_16O1_MF_1_

4_%U_.ARC
ORA-00280: 更改 244992 (用于线程 1) 在序列 #4 中
ORA-00278: 此恢复不再需要日志文件
'E:ORACLEPRODUCT10.2.0ORADATAORCLREDO02.LOG'


指定日志: {=suggested | filename | AUTO | CANCEL}
E:ORACLEPRODUCT10.2.0ORADATAORCLREDO03.LOG'
ORA-01756: 引号内的字符串没有正确结束


SQL> recover database using backup controlfile;
ORA-00279: 更改 244992 (在 09/16/2007 16:10:47 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG2007_09_16O1_MF_1_

4_%U_.ARC
ORA-00280: 更改 244992 (用于线程 1) 在序列 #4 中


指定日志: {=suggested | filename | AUTO | CANCEL}
E:ORACLEPRODUCT10.2.0ORADATAORCLREDO03.LOG
已应用的日志。
完成介质恢复。
SQL> alter database open resetlogs;

数据库已更改。

SQL> select * from t1;

ID
----------
1
2
3

...
SQL>
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐