Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1262751
  • 博文数量: 1211
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 14340
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-09 11:20
文章分类

全部博文(1211)

文章存档

2011年(1)

2008年(1210)

我的朋友

分类: 服务器与存储

2008-06-16 19:12:46

################################################                                                    
# [1.7] 数据文件损坏,且没有备份,没有备份控制文件,
#       且其他数据文件备份中都是在该数据文件创建后
#       的备份
################################################                                                            

################################################                                                    
# [测试1](resetlogs前创建的数据文件),数据文件丢失,没有备份,控制文件损坏,有备份控制文件,但备份控制文件后于该文件重建日期
#         使用resetlogs打开数据库,所以没有数据文件自创建以来所有的日志,
#         因为前面的日志被截取了,(所以resetlog后必须要有备份,
#         除非是resetlogs后创建的数据文件,可以通过create datafile来恢复)
#         当然如果有resetlogs后的控制文件及相关的数据,也可以完全恢复,参见1.12
#################################################
还原原来的数据文件和控制文件
然后SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。  

SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 1069386 (在 02/25/2005 15:47:59 生成) 对于线程 1 是必需的
ORA-00289: 建议: C:\ORACLE\ORA92\RDBMS\ARC00013.001
ORA-00280: 更改 1069386 对于线程 1 是按序列 # 13 进行的


指定日志: {=suggested | filename | AUTO | CANCEL}
auto -->>使用auto恢复也是成功
ORA-00308: 无法打开存档日志 'C:\ORACLE\ORA92\RDBMS\ARC00013.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


ORA-00308: 无法打开存档日志 'C:\ORACLE\ORA92\RDBMS\ARC00013.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


SQL> recover database using backup controlfile until cancel; -->>这个cancel是表示每次应用一个日志时都提示一下,直到输入cancel后结束
ORA-00279: 更改 1069386 (在 02/25/2005 15:47:59 生成) 对于线程 1 是必需的
ORA-00289: 建议: C:\ORACLE\ORA92\RDBMS\ARC00013.001
ORA-00280: 更改 1069386 对于线程 1 是按序列 # 13 进行的


指定日志: {=suggested | filename | AUTO | CANCEL} 
cancel  --输入cancel恢复成功 -->>cancel选项允许每次前滚一个日志文件,当需要停止恢复时,输入cancel
                                 ,在这种方式下不会自动运用联机日志文件.
介质恢复已取消。
SQL> alter database open resetlogs;

数据库已更改。


SQL> select name,status from v$datafile;

NAME                                                         STATUS
------------------------------------------------------------ -------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF                        SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF                       ONLINE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF                          ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF                         ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF                         ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF                         ONLINE

已选择6行。
SQL> create table arch (status varchar(2)) tablespace users;

表已创建。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into arch select 'ok' from dba_objects;

已创建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select 'ok' from dba_objects;

已创建6166行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into arch select 'no' from dba_objects;

已创建6166行。

SQL> commit;

提交完成。

在数据库打开的状况下用ULTRAEDIT破坏文件USERS01.DBF

SQL> shutdown abort
ORACLE 例程已经关闭。

SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\\ora92\DATABASE\PWDtestdb.ORA'


SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF' offline;

数据库已更改。

SQL> alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF' ;
alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF'
*
ERROR 位于第 1 行:
ORA-01181: ??5????? RESETLOGS ???????????
ORA-01110: ???? 5: 'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF'

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
因为使用resetlogs打开数据库,所以没有数据文件自创建以来所有的日志,因为前面的日志被截取了
(所以resetlog后必须要有备份,除非是resetlogs后创建的数据文件,可以通过create datafile来恢复)
换句话说,因为数据文件在创建的时候的创建时间点和相关信息保存在控制文件中!控制文件丢失的话
数据文件的创建时候的信息丢失,则数据库无从知道要 从创建文件创建时候开始recover datafile
需要从哪个归档日志开始。也就无法知道该数据文件是否可以从现有归档日志恢复
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

################################################                                                    
# (resetlog是在数据文件创建前或者控制文件包含了创建该数据文件的起始信息)
          那我们测试resetlogs后创建的数据文件被丢失,没有备份的恢复方法
          假设前面的users01没有破坏,数据库被打开
################################################         
分两种
#####################################################################################################
# [测试2] 控制文件正常,数据文件丢失,数据文件丢失没有备份,
#         也就说丢失的数据文件创建在该控制文件中的,该控制文件也没有被trace刷新,那控制文件就包含了该数据文件自创建以来的所有信息
#####################################################################################################

SQL> shutdown
ORA-01109: ??????

已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\\ora92\DATABASE\PWDtestdb.ORA'


SQL> alter database open;

数据库已更改。

SQL>
SQL>
SQL> alter tablespace users add datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
size 25M;

表空间已更改。

SQL> create table arch (status varchar(2)) tablespace users;

表已创建。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into arch select 'ok' from dba_objects;

已创建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select * from arch;

已创建6166行。

SQL> /

已创建12332行。

SQL> /

已创建24664行。

SQL> /

已创建49328行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into arch select 'no' from dba_objects;

已创建6166行。

SQL> commit;

提交完成。

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          5 NO  CURRENT
         2          3 YES INACTIVE
         3          4 YES ACTIVE

SQL> select file# ,name from v$datafile;

     FILE#            NAME
----------        ---------------------------------
         1        C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
         2        C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
         3        C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
         4        C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
         5        C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
         6        C:\ORACLE\ORADATA\TESTDB\USERS02.DBF
已选择6行。

SQL> select segment_name from dba_extents where FILE_ID=6;

SEGMENT_NAME
--------------------------------------------------------------------------------
ARCH

SQL> shutdown abort
ORACLE 例程已经关闭。

用ultraedit编辑文件USERS02.DBF

SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\\ora92\DATABASE\PWDtestdb.ORA'


SQL> select name ,status from v$datafile;

NAME                                                STATUS
---------------------------------------             -------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF                SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF                ONLINE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF                ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF                ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF                ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS02.DBF                ONLINE
已选择6行。

SQL> alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'; --online也可以create

数据库已更改。 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
system tablespace 的第一个datafile 是不能用 alter database create datafile 命令
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SQL> recover datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF';

完成介质恢复。
SQL> alter database open;

数据库已更改。

SQL> select count(*) ,status from arch group by status;

  COUNT(*) ST
---------- --
      6166 no
     98656 ok


完全恢复了

 

#####################################################################################################
# [测试3] 控制文件没有丢失,数据文件丢失,数据文件丢失没有备份
####################################################################################################
-->>那我们看看在offline情况下,recover database 会不会丢失数据

alter tablespace users add datafile 'C:\ORACLE\ORADATA\TESTDB\USERS03.DBF' size 25M;

SQL> select file#,name from v$datafile;

     FILE# NAME
---------- --------------------------------------------------
         1 C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
         2 C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
         3 C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
         4 C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
         5 C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
         6 C:\ORACLE\ORADATA\TESTDB\USERS02.DBF
         7 C:\ORACLE\ORADATA\TESTDB\USERS03.DBF
        
SQL> select segment_name from dba_extents where FILE_ID= 7;

未选定行        
        
SQL> insert into arch select * from arch;

已创建104822行。

SQL> commit;

提交完成。

SQL> select segment_name from dba_extents where FILE_ID= 7;

SEGMENT_NAME
-------------------------------------------------------------------
ARCH
用ultraedit编辑文件USERS03.DBF迫害该文件
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> startup
Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\\ora92\DATABASE\PWDtestdb.ORA'

SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01157: ????/?????? 7 - ??? DBWR ????
ORA-01110: ???? 7: 'C:\ORACLE\ORADATA\TESTDB\USERS03.DBF'

SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\USERS03.DBF' offline;

数据库已更改。

SQL> alter database create datafile  'C:\ORACLE\ORADATA\TESTDB\USERS03.DBF';

数据库已更改。

SQL> recover datafile  'C:\ORACLE\ORADATA\TESTDB\USERS03.DBF';
完成介质恢复。
SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\USERS03.DBF' online;

数据库已更改。

SQL> alter database open;

数据库已更改。

SQL> select count(*) ,status from arch group by status;

  COUNT(*) ST
---------- --
     12332 no
    197312 ok
   
    --数据没有丢失

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
那我们如果使用recover database 方式恢复offline的数据文件呢
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SQL> alter tablespace users add datafile 'C:\ORACLE\ORADATA\TESTDB\USERS04.DBF' size 25M;

表空间已更改。

SQL> select file#,name from v$datafile;

     FILE# NAME
---------- --------------------------------------------------
         1 C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
         2 C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
         3 C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
         4 C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
         5 C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
         6 C:\ORACLE\ORADATA\TESTDB\USERS02.DBF
         7 C:\ORACLE\ORADATA\TESTDB\USERS03.DBF
         8 C:\ORACLE\ORADATA\TESTDB\USERS04.DBF

已选择8行。

SQL> insert into arch select * from arch;

已创建209644行。

SQL> select segment_name from dba_extents where FILE_ID= 8;

SEGMENT_NAME
----------------------------------------------------------------------------

ARCH

SQL> commit;

提交完成。

SQL>
SQL>
SQL> shutdown abort
ORACLE 例程已经关闭。

删除文件USERS04
SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\\ora92\DATABASE\PWDtestdb.ORA'


SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\USERS04.DBF' offline;

数据库已更改。

SQL> recover datafile 'C:\ORACLE\ORADATA\TESTDB\USERS04.DBF';
ORA-00283: ??????????
ORA-01110: ???? 8: 'C:\ORACLE\ORADATA\TESTDB\USERS04.DBF'
ORA-01157: ????/?????? 8 - ??? DBWR ????
ORA-01110: ???? 8: 'C:\ORACLE\ORADATA\TESTDB\USERS04.DBF'


SQL> alter database create datafile  'C:\ORACLE\ORADATA\TESTDB\USERS04.DBF';

数据库已更改。

SQL> select name,status from v$datafile;

NAME                                               STATUS
-------------------------------------------------- -------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF              SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF             ONLINE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF                ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF               ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF               ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS02.DBF               ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS03.DBF               ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS04.DBF               RECOVER

已选择8行。

SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\USERS04.DBF' offline;

数据库已更改。

SQL> recover database;   --我们看到offline的数据文件恢复无效,到后来还是要在online之后再恢复一把
完成介质恢复。
SQL>  select count(*) ,status from arch group by status;
select count(*) ,status from arch group by status
                              *
ERROR 位于第 1 行:
ORA-01219: ??????: ???????/?????


SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\USERS04.DBF' online;

数据库已更改。

SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01113: ?? 8 ??????
ORA-01110: ???? 8: 'C:\ORACLE\ORADATA\TESTDB\USERS04.DBF'


SQL> recover database;
完成介质恢复。
SQL> alter database open;

数据库已更改。

SQL> select count(*) ,status from arch group by status;

  COUNT(*) ST
---------- --
     24664 no
    394624 ok
   
#####################################################################################################
# [测试4] 控制文件丢失,数据文件丢失,没有备份,有trace,那我们看看为什么trace会造成控制文件的头中数据文件创建的信息被修改
# 无法实现create datafile功能
#################################################################
SQL> startup
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\\ora92\DATABASE\PWDtestdb.ORA'


SQL> alter database open;

数据库已更改。

SQL> alter tablespace users add datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
size 25m;

表空间已更改。

SQL> alter database backup controlfile to trace;

数据库已更改。

SQL> shutdown
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup nomount
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "TESTDB" NORESETLOGS  ARCHIVELOG
  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226
  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'  SIZE 100M,
10    GROUP 2 'C:\ORACLE\ORADATA\TESTDB\REDO02.LOG'  SIZE 100M,
11    GROUP 3 'C:\ORACLE\ORADATA\TESTDB\REDO03.LOG'  SIZE 100M
12  -- STANDBY LOGFILE
13  DATAFILE
14    'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF',
15    'C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF',
16    'C:\ORACLE\ORADATA\TESTDB\INDX01.DBF',
17    'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF',
18    'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF',
19    'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
20  CHARACTER SET ZHS16GBK
21  ;

控制文件已创建

SQL> alter database open;

数据库已更改。

SQL> shutdown
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
SQL> alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF' ;
alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
*
ERROR 位于第 1 行:
ORA-01178: 文件 6 在最后一个 CREATE CONTROLFILE 之前创建,无法重新创建
ORA-01110: 数据文件 6: 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
所以执行了create controlfile后一定要先做个全备份

#####################################################################################################
# [测试5]控制文件没有创建数据文件的起始信息,使用不同trace的方法
#####################################################################################################
SQL> alter database open;

数据库已更改。

SQL>
SQL>
SQL>
SQL>
SQL> col name format a50
SQL> select name ,status from v$datafile;

NAME                                               STATUS
-------------------------------------------------- -------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF              SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF             ONLINE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF                ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF               ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF               ONLINE

SQL> alter tablespace users add datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
size 25m;

表空间已更改。

SQL> create table arch (status varchar(2)) tablespace users;

表已创建。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into arch select 'ok' from dba_objects;

已创建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select * from arch;

已创建6166行。

SQL> /

已创建12332行。

SQL> /

已创建24664行。

SQL> /

已创建49328行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into arch select 'no' from dba_objects;

已创建6166行。

SQL> commit;

提交完成。

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          5 NO  CURRENT
         2          3 YES ACTIVE
         3          4 YES ACTIVE

SQL> select name ,status from v$datafile;

NAME                                               STATUS
-------------------------------------------------- -------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF              SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF             ONLINE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF                ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF               ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF               ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS02.DBF               ONLINE

已选择6行。

SQL> alter database backup controlfile to 'C:\\oradata\testdb\controlfile
ak.ctl';  --该控制文件包含了USERS02的头信息

数据库已更改。

SQL> alter database backup controlfile to trace;

数据库已更改。
此时用ultraedit破坏文件USERS02

SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> exit
从Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production中断开

删除3个控制文件


SQL> startup nomount;
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "TESTDB" NORESETLOGS  ARCHIVELOG
  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226
  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'  SIZE 100M,
10    GROUP 2 'C:\ORACLE\ORADATA\TESTDB\REDO02.LOG'  SIZE 100M,
11    GROUP 3 'C:\ORACLE\ORADATA\TESTDB\REDO03.LOG'  SIZE 100M
12  -- STANDBY LOGFILE
13  DATAFILE
14    'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF',
15    'C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF',
16    'C:\ORACLE\ORADATA\TESTDB\INDX01.DBF',
17    'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF',
18    'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF',
19    'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
20  CHARACTER SET ZHS16GBK
21  ;
CREATE CONTROLFILE REUSE DATABASE "TESTDB" NORESETLOGS  ARCHIVELOG
*
ERROR 位于第 1 行:
ORA-01503: CREATE CONTROLFILE ??
ORA-01565: ????'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'???
ORA-27047: ??????????
OSD-04006: ReadFile() J'0\, N^7(6AH!ND<~
O/S-Error: (OS 38) 5=4oND<~=aN2!#


SQL> CREATE CONTROLFILE REUSE DATABASE "TESTDB" NORESETLOGS  ARCHIVELOG
  2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
  3      MAXLOGFILES 5
  4      MAXLOGMEMBERS 3
  5      MAXDATAFILES 100
  6      MAXINSTANCES 1
  7      MAXLOGHISTORY 226
  8  LOGFILE
  9    GROUP 1 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'  SIZE 100M,
10    GROUP 2 'C:\ORACLE\ORADATA\TESTDB\REDO02.LOG'  SIZE 100M,
11    GROUP 3 'C:\ORACLE\ORADATA\TESTDB\REDO03.LOG'  SIZE 100M
12  -- STANDBY LOGFILE
13  DATAFILE
14    'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF',
15    'C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF',
16    'C:\ORACLE\ORADATA\TESTDB\INDX01.DBF',
17    'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF',
18    'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF'
19  CHARACTER SET ZHS16GBK
20  ;

控制文件已创建

SQL> alter database mount
  2  ;
alter database mount
*
ERROR 位于第 1 行:
ORA-01100: ??????


SQL> shutdown
ORA-01109: ??????


已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
SQL> col name format a60
SQL> select name ,status from v$datafile;

NAME                                                         STATUS
------------------------------------------------------------ -------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF                        SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF                       RECOVER
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF                          RECOVER
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF                         RECOVER
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF                         RECOVER

SQL> alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF';
alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
*
ERROR 位于第 1 行:
ORA-01516: 不存在的日志文件, 数据文件或临时文件
'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'


SQL> alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF' as 'C
:\ORACLE\ORADATA\TESTDB\USERS02.DBF' reuse ;
alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF' as 'C:\ORA
CLE\ORADATA\TESTDB\USERS02.DBF' reuse
*
ERROR 位于第 1 行:
ORA-01516: 不存在的日志文件, 数据文件或临时文件
'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'


SQL> recover database;
完成介质恢复。
SQL> alter database open;

数据库已更改。

SQL> select name,status from v$datafile;

NAME                                                         STATUS
------------------------------------------------------------ -------
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF                        SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF                       ONLINE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF                          ONLINE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF                         ONLINE
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF                         ONLINE
C:\ORACLE\ORA92\DATABASE\MISSING00006                        RECOVER

已选择6行。

SQL> alter database rename file 'MISSING00006' to 'C:\ORACLE\ORADATA\TESTDB\USER
S02.DBF';
alter database rename file 'MISSING00006' to 'C:\ORACLE\ORADATA\TESTDB\USERS02.D
BF'
*
ERROR 位于第 1 行:
ORA-01511: 重命名日志/数据文件时出错
ORA-01141: 重命名数据文件 6 时出错 - 未找到新文件
'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
ORA-01111: 数据文件 6 名称未知 - 请重命名以更正文件
ORA-01110: 数据文件 6: 'C:\ORACLE\ORA92\DATABASE\MISSING00006'
ORA-27047: 无法读取文件的标题块
OSD-04006: ReadFile() 失败, 无法读取文件
O/S-Error: (OS 38) 到达文件结尾。


SQL> alter database datafile 'MISSING00006' offline;

数据库已更改。

SQL> alter database rename file 'MISSING00006' to 'C:\ORACLE\ORADATA\TESTDB\USER
S02.DBF';
alter database rename file 'MISSING00006' to 'C:\ORACLE\ORADATA\TESTDB\USERS02.D
BF'
*
ERROR 位于第 1 行:
ORA-01511: 重命名日志/数据文件时出错
ORA-01141: 重命名数据文件 6 时出错 - 未找到新文件
'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
ORA-01111: 数据文件 6 名称未知 - 请重命名以更正文件
ORA-01110: 数据文件 6: 'C:\ORACLE\ORA92\DATABASE\MISSING00006'
ORA-27047: 无法读取文件的标题块
OSD-04006: ReadFile() 失败, 无法读取文件
O/S-Error: (OS 38) 到达文件结尾。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
数据库打开了,但数据文件USERS02无法恢复,因为控制文件无法记录该文件创建时的信息,所以也无法实现rename file 'MISSING00006'
我们再来验证一下控制文件信息与数据文件头信息的关系
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

###################################################################################
# [测试6]  数据文件损坏,且没有备份,控制文件使用备份控制文件,且控制文件是在该数据文件创建后的控制文件
###################################################################################

那我们用刚开始的备份的控制文件可不可以呢?

SQL> startup
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\\ora92\DATABASE\PWDtestdb.ORA'


SQL>
SQL>
SQL>
SQL> alter database open;

数据库已更改。

SQL> create table arch (status varchar(2)) tablespace users;

表已创建。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into arch select 'ok' from dba_objects;

已创建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select * from arch;

已创建6166行。

SQL> /

已创建12332行。

SQL> /

已创建24664行。

SQL> /

已创建49328行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into arch select 'no' from dba_objects;

已创建6166行。

SQL> commit;

提交完成。

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          5 NO  CURRENT
         2          3 YES ACTIVE
         3          4 NO  ACTIVE

SQL>
SQL> alter tablespace tools add datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
ize 10m;

表空间已更改。

SQL> insert into arch select 'af' from dba_objects;

已创建6166行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> shutdown
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>
SQL>
SQL> startup
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\\ora92\DATABASE\PWDtestdb.ORA'


SQL> alter database open;

数据库已更改。

SQL> alter database backup controlfile to 'c:\control01.ctl';

数据库已更改。

SQL> insert into arch select 'af' from dba_objects;

已创建6166行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> shutdown
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL> exit
从Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production中断开

C:\Documents and Settings\lifeng.fang>
C:\Documents and Settings\lifeng.fang>
C:\Documents and Settings\lifeng.fang>sqlplus "sys/sunsdl as sysdba"

SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 3月 2 18:17:11 2005

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

已连接到空闲例程。

SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\\ora92\DATABASE\PWDtestdb.ORA'


SQL>
SQL>
SQL> alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF';

数据库已更改。

SQL> recover database using backup controlfile ;
ORA-00279: ?? 69456 (? 03/02/2005 10:26:30 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF
ORA-00280: ?? 69456 ???? 1 ???? # 3 ???


指定日志: {=suggested | filename | AUTO | CANCEL}

ORA-00279: ?? 69563 (? 03/02/2005 18:12:22 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: ?? 69563 ???? 1 ???? # 4 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF'


指定日志: {=suggested | filename | AUTO | CANCEL}

ORA-00279: ?? 69606 (? 03/02/2005 18:12:22 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: ?? 69606 ???? 1 ???? # 5 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF'


指定日志: {=suggested | filename | AUTO | CANCEL}

ORA-00279: ?? 69672 (? 03/02/2005 18:13:24 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_6.DBF
ORA-00280: ?? 69672 ???? 1 ???? # 6 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'


指定日志: {=suggested | filename | AUTO | CANCEL}

ORA-00279: ?? 69834 (? 03/02/2005 18:15:40 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_7.DBF
ORA-00280: ?? 69834 ???? 1 ???? # 7 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_6.DBF'


指定日志: {=suggested | filename | AUTO | CANCEL}

ORA-00308: ???????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_7.DBF'
ORA-27041: ??????
OSD-04002: N^7(4r?*ND<~
O/S-Error: (OS 2) O5M3UR2;5=V86(5DND<~!#


SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 69834 (? 03/02/2005 18:15:40 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_7.DBF
ORA-00280: ?? 69834 ???? 1 ???? # 7 ???


指定日志: {=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> alter database open resetlogs;

数据库已更改。
SQL> select count(*),status from arch group by status;

  COUNT(*) ST
---------- --
     12332 af
      6166 no
     98656 ok
#############################################################################################        
[1.8] 数据文件损坏,且没有备份,控制文件使用备份控制文件,且控制文件是在该数据文件创建前的控制文件 
    参见1.7的测试1
############################################################################################# 

###################################################################################
# [1.9]  数据文件损坏,且没有备份,控制文件使用备份控制文件,且控制文件是在该数据文件创建后的控制文件
###################################################################################
SQL> startup
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\\ora92\DATABASE\PWDtestdb.ORA'


SQL>
SQL>
SQL>
SQL> alter database open;

数据库已更改。

SQL> create table arch (status varchar(2)) tablespace users;

表已创建。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into arch select 'ok' from dba_objects;

已创建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select * from arch;

已创建6166行。

SQL> /

已创建12332行。

SQL> /

已创建24664行。

SQL> /

已创建49328行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into arch select 'no' from dba_objects;

已创建6166行。

SQL> commit;

提交完成。

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          5 NO  CURRENT
         2          3 YES ACTIVE
         3          4 NO  ACTIVE

SQL>
SQL> alter tablespace tools add datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF'
ize 10m;

表空间已更改。

SQL> insert into arch select 'af' from dba_objects;

已创建6166行。

SQL> commit;

提交完成。

SQL> alter system switch logfile; --一定要归档

系统已更改。

SQL> shutdown
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>
SQL>
SQL> startup
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\\ora92\DATABASE\PWDtestdb.ORA'


SQL> alter database open;

数据库已更改。

SQL> alter database backup controlfile to 'c:\control01.ctl';  --该控制文件有数据文件头信息

数据库已更改。

SQL> insert into arch select 'af' from dba_objects;

已创建6166行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> shutdown
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL> exit
从Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production中断开

C:\Documents and Settings\lifeng.fang>
C:\Documents and Settings\lifeng.fang>

模拟控制文件破坏,删除控制文件,还原备份的控制文件,还原老的所有的数据文件,出了users02.dbf

C:\Documents and Settings\lifeng.fang>sqlplus "sys/sunsdl as sysdba"

SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 3月 2 18:17:11 2005

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

已连接到空闲例程。

SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\\ora92\DATABASE\PWDtestdb.ORA'


SQL>
SQL>
SQL> alter database create datafile 'C:\ORACLE\ORADATA\TESTDB\USERS02.DBF';

数据库已更改。

SQL> recover database using backup controlfile ;
ORA-00279: ?? 69456 (? 03/02/2005 10:26:30 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF
ORA-00280: ?? 69456 ???? 1 ???? # 3 ???


指定日志: {=suggested | filename | AUTO | CANCEL}

ORA-00279: ?? 69563 (? 03/02/2005 18:12:22 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: ?? 69563 ???? 1 ???? # 4 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF'


指定日志: {=suggested | filename | AUTO | CANCEL}

ORA-00279: ?? 69606 (? 03/02/2005 18:12:22 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: ?? 69606 ???? 1 ???? # 5 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF'


指定日志: {=suggested | filename | AUTO | CANCEL}

ORA-00279: ?? 69672 (? 03/02/2005 18:13:24 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_6.DBF
ORA-00280: ?? 69672 ???? 1 ???? # 6 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'


指定日志: {=suggested | filename | AUTO | CANCEL}

ORA-00279: ?? 69834 (? 03/02/2005 18:15:40 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_7.DBF
ORA-00280: ?? 69834 ???? 1 ???? # 7 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_6.DBF'


指定日志: {=suggested | filename | AUTO | CANCEL}

ORA-00308: ???????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_7.DBF'
ORA-27041: ??????
OSD-04002: N^7(4r?*ND<~
O/S-Error: (OS 2) O5M3UR2;5=V86(5DND<~!#


SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 69834 (? 03/02/2005 18:15:40 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_7.DBF
ORA-00280: ?? 69834 ???? 1 ???? # 7 ???


指定日志: {=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> alter database open resetlogs;

数据库已更改。 
SQL> select count(*),status from arch group by status;

  COUNT(*) ST
---------- --
     12332 af
      6166 no
     98656 ok
##############################################################################################    
# [1.10] 数据文件损坏,且没有备份,没有备份控制文件,且其他数据文件备份中都是在该数据文件创建后的备份
##############################################################################################      


##############################################################################################
# [1.11] 损坏单个控制文件
#        将好的控制文件覆盖损坏的控制文件
##############################################################################################

##############################################################################################
# [1.12] 当前控制文件做为备份控制文件恢复,在当前在线日志中有业务数据时的恢复    (通常没有太大意义,只是想做一下resetlogs)
##############################################################################################
SQL> startup
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\\ora92\DATABASE\PWDtestdb.ORA'


SQL>
SQL>
SQL> alter database open;

数据库已更改。

SQL> create table arch (status varchar(2)) tablespace users;

表已创建。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into arch select 'ok' from dba_objects;

已创建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select * from arch;

已创建6166行。

SQL> /

已创建12332行。

SQL> /

已创建24664行。

SQL> /

已创建49328行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into arch select 'no' from dba_objects;

已创建6166行。

SQL> commit;

提交完成。

SQL> select GROUP#,SEQUENCE#,archived, STATUS from v$log;

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          5 NO  CURRENT
         2          3 YES ACTIVE
         3          4 NO  ACTIVE

SQL>
SQL> select count(*),status from arch group by status;

  COUNT(*) ST
---------- --
      6166 no
     98656 ok

SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\\ora92\DATABASE\PWDtestdb.ORA'


SQL> recover database using backup controlfile;
ORA-00279: ?? 69399 (? 03/01/2005 15:58:22 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: ?? 69399 ???? 1 ???? # 4 ???


指定日志: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: ?? 69444 (? 03/01/2005 15:58:23 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: ?? 69444 ???? 1 ???? # 5 ???
ORA-00278: ??????????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF'


ORA-00308: ???????? 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'
ORA-27041: ??????
OSD-04002: N^7(4r?*ND<~
O/S-Error: (OS 2) O5M3UR2;5=V86(5DND<~!#


SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01113: ?? 1 ??????
ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'


SQL> shutdown
ORA-01109: ??????


已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01991: ???????'C:\\ora92\DATABASE\PWDtestdb.ORA'


SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 69444 (? 03/01/2005 15:58:23 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: ?? 69444 ???? 1 ???? # 5 ???


指定日志: {=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: ??: RECOVER ??? OPEN RESETLOGS ???????
ORA-01194: ??1?????????????
ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'


ORA-01112: ???????


SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01194: ??1?????????????
ORA-01110: ???? 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'


SQL> shutdown
ORA-01109: ??????


已经卸载数据库。
ORACLE 例程已经关闭。

这里我们看到是shutdown abort的,所以需要在线日志恢复,但是使用备份控制文件恢复则是不应用在线日志的

如果不是shutdown abort,那么就可以打开,因为数据文件一直是完整的

阅读(461) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~