所有控制文件损坏,掉电(shutdown abort),无归档,无备份的成功恢复

[复制链接]
查看11 | 回复9 | 2005-2-28 12:57:00 | 显示全部楼层 |阅读模式
一个例子希望给大家以帮助
注意创建控制文件的时候,正常的话使用 红色部分的 reuse and noresetlogs,这样就不用手工apply日志而是 直接就可以自动恢复了 
连接到:
Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production

SQL> drop table rn;
表已丢弃。
SQL> alter system checkpoint;
系统已更改。
SQL> drop table test_group;
表已丢弃。
SQL> conn / as sysdba
已连接。
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 31229980 bytes
Fixed Size 75804 bytes
Variable Size 14299136 bytes
Database Buffers 16777216 bytes
Redo Buffers 77824 bytes
SQL> CREATE CONTROLFILE SET/reuse DATABASE "billy" RESETLOGS/NOresetlogs NOARCHIVELOG
2 MAXLOGFILES 64
3 MAXLOGMEMBERS 2
4 MAXDATAFILES 254
5 MAXINSTANCES 32
6 MAXLOGHISTORY 113
7 LOGFILE
8 GROUP 1 'E:\ORACLE\ORADATA\BILLY\REDO01.LOG' SIZE 1048576 ,
9 GROUP 2 'E:\ORACLE\ORADATA\BILLY\REDO02.LOG' SIZE 1048576 ,
10 GROUP 3 'E:\ORACLE\ORADATA\BILLY\REDO03.LOG' SIZE 1048576
11 DATAFILE
12 'E:\ORACLE\ORADATA\BILLY\SYSTEM01.DBF',
13 'E:\ORACLE\ORADATA\BILLY\RBS01.DBF',
14 'E:\ORACLE\ORADATA\BILLY\USERS01.DBF',
15 'E:\ORACLE\ORADATA\BILLY\TEMP01.DBF',
16 'E:\ORACLE\ORADATA\BILLY\TOOLS01.DBF',
17 'E:\ORACLE\ORADATA\BILLY\INDX01.DBF',
18 'E:\ORACLE\ORADATA\BILLY\DR01.DBF',
19 'E:\ORACLE\ORADATA\BILLY\DB4K.DBF'
20 CHARACTER SET ZHS16GBK
21 ;
数据簇已更改。
SQL> shutdown
ORA-01109: ??????

已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 31229980 bytes
Fixed Size 75804 bytes
Variable Size 14299136 bytes
Database Buffers 16777216 bytes
Redo Buffers 77824 bytes
数据库装载完毕。
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 25526706 (? 03/20/2003 09:45:25 ??) ???? 1 ????
ORA-00289: ??: E:\ORACLE\ORA81\RDBMS\ARC00001.001
ORA-00280: ?? 25526706 ???? 1 ???? # 1 ???

指定日志: {=suggested | filename | AUTO | CANCEL}
'E:\ORACLE\ORADATA\BILLY\REDO01.LOG'
ORA-00339: ???????????
ORA-00334: ????: 'E:\ORACLE\ORADATA\BILLY\REDO01.LOG'

ORA-01547: ??: RECOVER ??? OPEN RESETLOGS ???????
ORA-01194: ??1?????????????
ORA-01110: ???? 1: 'E:\ORACLE\ORADATA\BILLY\SYSTEM01.DBF'

SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 25526706 (? 03/20/2003 09:45:25 ??) ???? 1 ????
ORA-00289: ??: E:\ORACLE\ORA81\RDBMS\ARC00001.001
ORA-00280: ?? 25526706 ???? 1 ???? # 1 ???

指定日志: {=suggested | filename | AUTO | CANCEL}
'E:\ORACLE\ORADATA\BILLY\REDO03.LOG'
已应用的日志。
完成介质恢复。
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 25526718 (? 03/20/2003 09:45:38 ??) ???? 1 ????
ORA-00289: ??: E:\ORACLE\ORA81\RDBMS\ARC00001.001
ORA-00280: ?? 25526718 ???? 1 ???? # 1 ???

指定日志: {=suggested | filename | AUTO | CANCEL}
'E:\ORACLE\ORADATA\BILLY\REDO01.LOG'
ORA-00339: ???????????
ORA-00334: ????: 'E:\ORACLE\ORADATA\BILLY\REDO01.LOG'

SQL> alter database open resetlogs;
数据库已更改。
SQL>
在最后一步注意日志文件选择的正确,一个一个试都没有关系
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
biti,你怎么完成介质恢复后还做恢复啊?


回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
就是告诉大家,日志文件可以随便试
其实还有一点注意的就是:
假设当前 日志是 3
前一个是 2,
但是,日志2中的内容却还没有checkpoint 完毕,我想这个时候是不是应该多试几下?



回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
恩,


回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
alter system checkpoint 是否表示日志文件会进行切换?
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
CREATE CONTROLFILE SET DATABASE "billy" RESETLOGS NOARCHIVELOG ??
应该不要resetlogs吧 redo log file做shut abort之前的数据不就全没有了吗?
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
能全部恢复数据,你看看!

SQL> conn rainy/rainy
已连接。
SQL> truncate table trans;
表已截掉。
SQL> alter system checkpoint;
系统已更改。
SQL> insert into trans values(1);
已创建 1 行。
SQL> commit;
提交完成。
SQL> conn / as sysdba
已连接。
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 31229980 bytes
Fixed Size
75804 bytes
Variable Size
14299136 bytes
Database Buffers 16777216 bytes
Redo Buffers
77824 bytes
SQL> CREATE CONTROLFILE SET DATABASE "billy" NORESETLOGS NOARCHIVELOG
2 MAXLOGFILES 64
3 MAXLOGMEMBERS 2
4 MAXDATAFILES 254
5 MAXINSTANCES 32
6 MAXLOGHISTORY 113
7 LOGFILE
8 GROUP 1 'E:\ORACLE\ORADATA\BILLY\REDO01.LOG' SIZE 1048576 ,
9 GROUP 2 'E:\ORACLE\ORADATA\BILLY\REDO02.LOG' SIZE 1048576 ,
10 GROUP 3 'E:\ORACLE\ORADATA\BILLY\REDO03.LOG' SIZE 1048576
11 DATAFILE
12 'E:\ORACLE\ORADATA\BILLY\SYSTEM01.DBF',
13 'E:\ORACLE\ORADATA\BILLY\RBS01.DBF',
14 'E:\ORACLE\ORADATA\BILLY\USERS01.DBF',
15 'E:\ORACLE\ORADATA\BILLY\TEMP01.DBF',
16 'E:\ORACLE\ORADATA\BILLY\TOOLS01.DBF',
17 'E:\ORACLE\ORADATA\BILLY\INDX01.DBF',
18 'E:\ORACLE\ORADATA\BILLY\DR01.DBF',
19 'E:\ORACLE\ORADATA\BILLY\DB4K.DBF'
20 CHARACTER SET ZHS16GBK
21 ;
CREATE CONTROLFILE SET DATABASE "billy" NORESETLOGS NOARCHIVELOG
*
ERROR 位于第 1 行:
ORA-01503: CREATE CONTROLFILE ??
ORA-01223: ???? RESETLOGS ?????????

SQL> CREATE CONTROLFILE SET DATABASE "billy" RESETLOGS NOARCHIVELOG
2 MAXLOGFILES 64
3 MAXLOGMEMBERS 2
4 MAXDATAFILES 254
5 MAXINSTANCES 32
6 MAXLOGHISTORY 113
7 LOGFILE
8 GROUP 1 'E:\ORACLE\ORADATA\BILLY\REDO01.LOG' SIZE 1048576 ,
9 GROUP 2 'E:\ORACLE\ORADATA\BILLY\REDO02.LOG' SIZE 1048576 ,
10 GROUP 3 'E:\ORACLE\ORADATA\BILLY\REDO03.LOG' SIZE 1048576
11 DATAFILE
12 'E:\ORACLE\ORADATA\BILLY\SYSTEM01.DBF',
13 'E:\ORACLE\ORADATA\BILLY\RBS01.DBF',
14 'E:\ORACLE\ORADATA\BILLY\USERS01.DBF',
15 'E:\ORACLE\ORADATA\BILLY\TEMP01.DBF',
16 'E:\ORACLE\ORADATA\BILLY\TOOLS01.DBF',
17 'E:\ORACLE\ORADATA\BILLY\INDX01.DBF',
18 'E:\ORACLE\ORADATA\BILLY\DR01.DBF',
19 'E:\ORACLE\ORADATA\BILLY\DB4K.DBF'
20 CHARACTER SET ZHS16GBK
21 ;
数据簇已更改。
SQL>
SQL> shutdown
ORA-01109: ??????

已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 31229980 bytes
Fixed Size
75804 bytes
Variable Size
14299136 bytes
Database Buffers 16777216 bytes
Redo Buffers
77824 bytes
数据库装载完毕。
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 25546853 (? 03/20/2003 11:51:40 ??) ???? 1 ????
ORA-00289: ??: E:\ORACLE\ORA81\RDBMS\ARC00002.001
ORA-00280: ?? 25546853 ???? 1 ???? # 2 ???

指定日志: {=suggested | filename | AUTO | CANCEL}
'E:\ORACLE\ORADATA\BILLY\REDO03.LOG'
ORA-00310: ???????? 1????? 2
ORA-00334: ????: 'E:\ORACLE\ORADATA\BILLY\REDO03.LOG'

ORA-01547: ??: RECOVER ??? OPEN RESETLOGS ???????
ORA-01194: ??1?????????????
ORA-01110: ???? 1: 'E:\ORACLE\ORADATA\BILLY\SYSTEM01.DBF'

SQL>recover database using backup controlfile until cancel;
ORA-00279: ?? 25546853 (? 03/20/2003 11:51:40 ??) ???? 1 ????
ORA-00289: ??: E:\ORACLE\ORA81\RDBMS\ARC00002.001
ORA-00280: ?? 25546853 ???? 1 ???? # 2 ???

指定日志: {=suggested | filename | AUTO | CANCEL}
'E:\ORACLE\ORADATA\BILLY\REDO01.LOG'
已应用的日志。
完成介质恢复。
SQL> alter database open resetlogs;
数据库已更改。
SQL> conn rainy/rainy
已连接。
SQL> select * from trans;
A
----------
1
SQL>
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
SQL> insert into trans values(1);
设想一下,这个 1 shutdownabort时候 还在redo log file里面没有写入到文件,那么下次重新建立控制文件resetlog的时候 redo log里面都应该是空的吧? redo log里面的这个1 就丢了再怎么指定'E:\ORACLE\ORADATA\BILLY\REDO03.LOG'也没有用呀
或者create controlfile with resetlogs 不会清空原先的redologfile的内容?
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
这种情况只有redo还没有被覆盖才能完全恢复,否则的话就只能不完全恢复了


回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
我想是你误会了
重新创建控制文件的时候不会清空日志文件内容
resetlogs 打开数据库的时候才清空
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行