Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1115728
  • 博文数量: 227
  • 博客积分: 6860
  • 博客等级: 准将
  • 技术积分: 2688
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-02 16:06
文章分类

全部博文(227)

文章存档

2015年(7)

2014年(8)

2012年(5)

2011年(62)

2010年(145)

分类: Oracle

2010-09-09 23:08:33

######################################################                                                
# [1.5.3]  控制文件损坏,如果trace不是最新的数据库结构,如少了个数据文件
######################################################    

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

表已创建。

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;

提交完成。

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

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          2 NO  ACTIVE
         2          1 YES ACTIVE
         3          3 NO  CURRENT    
SQL> alter tablespace tools add datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.dbf'
size 10m;

表空间已更改。

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

模拟控制文件丢失

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 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 --这个文件现在是recover状态

已选择6行。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我们发现C:\ORACLE\ORA92\DATABASE\MISSING00006并不存在,只不过是个标记而已
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SQL> alter database rename file 'MISSING00006' to 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.dbf';  --MISSING00006不要加路径


数据库已更改。

SQL> recover datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.dbf';
完成介质恢复。

SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.dbf' online;

数据库已更改。

~~~~~~~~~~~~~~~~~~~~~~~~~
如果用备份控制文件,且备份
控制文件少了新增加的两个文件
,恢复时会提示错误,我们可以
用rename来解决
~~~~~~~~~~~~~~~~~~~~~~~~~
使用备份控制文件
recover AUTOMATIC   database using backup controlfile until cancel
...       
ORA-00283: recovery session canceled due to errors                   
ORA-01244: unnamed datafile(s) added to controlfile by media recovery
ORA-01110: data file 3: '/oracle/dbs/db2.f'                          
ORA-01110: data file 2: '/oracle/dbs/db3.f'                          

~~~~~~~~~~~~~~~~~~~~
这是因为前滚时发现file#中
有两个文件,但控制文件没有
我们可以在v$datafile中看到
所以恢复中断
~~~~~~~~~~~~~~~~~~~~
SELECT FILE#,NAME
FROM V$DATAFILE;

FILE#           NAME
--------------- ----------------------
1               /oracle/dbs/db1.f
2               /oracle/dbs/UNNAMED00002
3               /oracle/dbs/UNNAMED00003

这时对文件进行改名就可以了

ALTER DATABASE RENAME FILE '/db/UNNAMED00002' TO '/oracle/dbs/db3.f';
ALTER DATABASE RENAME FILE '/db/UNNAMED00003' TO '/oracle/dbs/db2.f';

RECOVER AUTOMATIC DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL




######################################################                                
# [1.5.4] 控制文件损坏,如果trace不是最新的数据库结构,如少了个只读数据文件
######################################################  


SQL> alter tablespace tools add datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.dbf'
size 10m ;

表空间已更改。                  
SQL> alter tablespace tools read only;

表空间已更改。
    
    SQL> select name,ENABLED
  2   from v$datafile;

NAME                                            ENABLED
---------------------------------------         ----------   
C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF                READ WRITE
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF                READ WRITE
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF                READ WRITE
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF                READ ONLY
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF                READ WRITE
C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF                READ ONLY

已选择6行。
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  CHARACTER SET ZHS16GBK
20  ;

控制文件已创建
SQL> select name from v$datafile;

NAME
---------------------------------------------------------------------------

C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
SQL> alter database open;

数据库已更改。

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------

C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
C:\ORACLE\ORA92\DATABASE\MISSING00006  --OPEN时增加了不认识的文件名

已选择6行。

SQL> alter database rename file 'MISSING00006' to 'C:\ORACLE\ORA92\DATABASE\TOOL
S02.DBF';
alter database rename file 'MISSING00006' to 'C:\ORACLE\ORA92\DATABASE\TOOLS02.D
BF'
*
ERROR 位于第 1 行:
ORA-01511: 重命名日志/数据文件时出错
ORA-01141: 重命名数据文件 6 时出错 - 未找到新文件
'C:\ORACLE\ORA92\DATABASE\TOOLS02.DBF'
ORA-01111: 数据文件 6 名称未知 - 请重命名以更正文件
ORA-01110: 数据文件 6: 'C:\ORACLE\ORA92\DATABASE\MISSING00006'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
*
ERROR 位于第 1 行:
ORA-01113: ?? 4 ??????
ORA-01110: ???? 4: 'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF'


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

数据库已更改。

SQL> alter database datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF' offline;
alter database datafile 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF' offline
*
ERROR 位于第 1 行:
ORA-01516: ????????, ????????? 'C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF'


SQL> alter database open ;

数据库已更改。

SQL> alter database datafile 'MISSING00006' offline;  -->>注意只读表空间必须先offline,而且注意MISSING00006不能写全路径

数据库已更改。


SQL> alter database rename file  'MISSING00006' to 'C:\ORACLE\ORADATA\TESTDB\TOO
LS02.DBF';

数据库已更改。
SQL> alter tablespace tools online;

表空间已更改。

方法2
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\TOOLS02.DBF',  --创建语句中加入该数据文件
19    'C:\ORACLE\ORADATA\testdb\USERS01.DBF'
20  CHARACTER SET ZHS16GBK
21  ;

控制文件已创建

SQL> SELECT NAME FROM V$DATAFILE;

NAME
---------------------------------------------------------------------------

C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
C:\ORACLE\ORADATA\TESTDB\TOOLS02.DBF

已选择6行。

SQL> ALTER DATABASE OPEN;
ALTER DATABASE OPEN
*
ERROR 位于第 1 行:
ORA-01113: ?? 4 ??????
ORA-01110: ???? 4: 'C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF'


SQL> RECOVER TABLESPACE TOOLS;
完成介质恢复。
SQL> ALTER DATABASE OPEN;

数据库已更改。


##################################             
# [1.6] 使用备份的控制文件进行恢复
#                    
##################################

前面有很多例子




 
  
UID393 帖子3566 精华23 积分3803 流通积分3803 点 金钱0 O元 阅读权限225 在线时间173 小时 注册时间2003-1-21 最后登录2008-8-27 查看详细资料
 TOP
 

fly115
超级版主



个人空间 发短消息 加为好友 当前离线  5楼 大 中 小 发表于 2005-3-19 18:03  只看该作者


################################################                                                    
# [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:\oracle\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:\oracle\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:\oracle\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:\oracle\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:\oracle\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:\oracle\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:\oracle\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:\oracle\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:\oracle\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:\oracle\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:\oracle\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:\oracle\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:\oracle\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:\oracle\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:\oracle\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:\oracle\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,那么就可以打开,因为数据文件一直是完整的
 
  
UID393 帖子3566 精华23 积分3803 流通积分3803 点 金钱0 O元 阅读权限225 在线时间173 小时 注册时间2003-1-21 最后登录2008-8-27 查看详细资料
 TOP
 

fly115
超级版主



个人空间 发短消息 加为好友 当前离线  6楼 大 中 小 发表于 2005-3-19 18:04  只看该作者


##############################################################################          
# [1.13] 在resetlogs前的RMAN备份如何应用到resetlogs后的 
##############################################################################          
                                                          
   


SQL> alter database open;

数据库已更改。

SQL> select count(*) from arch;
select count(*) from arch
                     *
ERROR 位于第 1 行:
ORA-00942: ???????


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行。


已创建24664行。

SQL> /

已创建49328行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> /

系统已更改。

SQL> /

系统已更改。

SQL> /

系统已更改。

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

已创建6166行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

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

-->>模拟一个resetlogs
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 until cancel;
完成介质恢复。  -->>这里我们后面可以注意到
SQL> alter database open resetlogs;

数据库已更改。

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

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

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

已创建6166行。

SQL> alter system switch logfile;

系统已更改。

SQL> archive log list
数据库日志模式            存档模式
自动存档             启用
存档终点            C:\oracle\oradata\testdb\archive
最早的概要日志序列     1
下一个存档日志序列   2
当前日志序列           2
SQL> shutdown
ORA-01097: 无法在事务处理过程中关闭 - 首先提交或返回
SQL> commit;

提交完成。

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

-->>此时模拟删除了users01.dbf
我们没有resetlogs后的备份,想把resetlogs前备份的数据文件恢复数据库到resetlogs后的状态

关键步骤.还原resetlogs前备份的数据文件和控制文件,不包括在线日志(我们后面可以看到在线日志包括了SCN 69628 - 69459)
SQL> select resetlogs_change# - 1 from v$database;

RESETLOGS_CHANGE#-1
-------------------
              68658

SQL> recover database using backup controlfile until change 69639;
ORA-00279: 更改 69257 (在 02/28/2005 11:08:18 生成) 对于线程 1 是必需的
ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF
ORA-00280: 更改 69257 对于线程 1 是按序列 # 3 进行的


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

ORA-00279: 更改 69582 (在 03/02/2005 10:28:34 生成) 对于线程 1 是必需的
ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: 更改 69582 对于线程 1 是按序列 # 4 进行的
ORA-00278: 此恢复不再需要日志文件 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF'


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

ORA-00279: 更改 69628 (在 03/02/2005 10:28:35 生成) 对于线程 1 是必需的
ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: 更改 69628 对于线程 1 是按序列 # 5 进行的
ORA-00278: 此恢复不再需要日志文件 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF'


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

ORA-00308: 无法打开存档日志 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


SQL> recover database using backup controlfile until change 69639;
ORA-00279: 更改 69628 (在 03/02/2005 10:28:35 生成) 对于线程 1 是必需的
ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: 更改 69628 对于线程 1 是按序列 # 5 进行的


指定日志: {=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> select CONTROLFILE_CHANGE# from v$database;

CONTROLFILE_CHANGE#
-------------------
              69628
             
我们看到没有恢复到69639,因为我还原的时候没有把resetlogs前的在线日志备份给还原,所以没法前滚69628到69639             

SQL> shutdown
ORA-01109: 数据库未打开

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


-->>这里还原resetlogs后的控制文件
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> select resetlogs_change# - 1,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE# CONTROLFILE_CHANGE#
----------------- -------------------
            69639               69795


SQL> recover database;
ORA-00283: 恢复会话因错误而取消
ORA-01190: 控制文件或数据文件1来自于最后一个 RESETLOGS 之前
ORA-01110: 数据文件 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'


那我们只能不完全恢复
SQL> recover database until cancel;
ORA-00279: ?? 69452 (? 03/01/2005 17:45:23 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_9.DBF
ORA-00280: ?? 69452 ???? 1 ???? # 9 ???


指定日志: {=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> recover database using backup controlfile until cancel;
ORA-00279: ?? 69452 (? 03/01/2005 17:45:23 ??) ???? 1 ????
ORA-00289: ??: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_9.DBF
ORA-00280: ?? 69452 ???? 1 ???? # 9 ???


指定日志: {=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> select count(*),status from arch group by status;
select count(*),status from arch group by status
                            *
ERROR 位于第 1 行:
ORA-01219: ??????: ???????????


SQL> alter database open resetlogs;

数据库已更改。

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

  COUNT(*) ST
---------- --
      6166 no
     98656 ok  --我们没有看到af状态的

我们看到这里需要在线日志恢复,无法越过resetlogs恢复

好那我们在关键步骤那步把在线日志也还原的话是否可以越过69628到69639 一直到69795
   

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
数据库装载完毕。
数据库已经打开。
SQL> select count(*) from arch;
select count(*) from arch
                     *
ERROR 位于第 1 行:
ORA-00942: 表或视图不存在


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>
SQL> shutdown
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>
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 until cancel;
完成介质恢复。
SQL> shutdown immediate
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> select resetlogs_change#,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE# CONTROLFILE_CHANGE#
----------------- -------------------
            68659               69884

SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项


SQL> alter database open resetlogs;

数据库已更改。

SQL> select resetlogs_change#,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE# CONTROLFILE_CHANGE# 
----------------- -------------------
            69889               69932

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

已创建6166行。

SQL> commit;

提交完成。

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>
SQL>
SQL> recover database using backup controlfile until change 69888;     -->>这里我们看到until change 69888与RESETLOGS_CHANGE#接上头了,就是以为我们有备份的在线日志
ORA-00279: 更改 69888 (在 03/02/2005 11:11:40 生成) 对于线程 1 是必需的
ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: 更改 69888 对于线程 1 是按序列 # 5 进行的


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

ORA-00308: 无法打开存档日志 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


SQL> select resetlogs_change#,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE# CONTROLFILE_CHANGE#
----------------- -------------------
            68659               69888

SQL>
SQL> shutdown
ORA-01109: 数据库未打开


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

-->>这里我们将resetlogs后的控制文件备份还原(不包括resetlogs后的在线日志)
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> select resetlogs_change#,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE# CONTROLFILE_CHANGE#
----------------- -------------------
            69889               69932

SQL> recover database ;
ORA-00283: 恢复会话因错误而取消
ORA-00314: 日志 1 (线程 1),预计序号 1 与 5 不匹配
ORA-00312: 联机日志 1 线程 1: 'C:\ORACLE\ORADATA\TESTDB\REDO01.LOG'  -->>我们这里看到恢复仍然到69889截止,而没有恢复到69932

原因就是我们resetlogs后的在线日志也要做备份.
#################################################################
#[测试1] 那我们在看看resetlogs前的数据文件控制文件和在线日志都做了备份,
#        然后resetlogs后的控制文件在线日志都做备份的情况下,是不是能越过resetlogs
#################################################################

SQL> shutdown
数据库已经关闭。
已经卸载数据库。
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
数据库装载完毕。
数据库已经打开。
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> shutdown
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>

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
数据库装载完毕。

-->>模拟resetlogs
SQL> recover database until cancel;
完成介质恢复。
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-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项


SQL> alter database open resetlogs;

数据库已更改。

SQL> select resetlogs_change# -1,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE# CONTROLFILE_CHANGE#
----------------- -------------------
            69808               69850

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

已创建6166行。

SQL> commit;

提交完成。

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

--这时我们备份控制文件和在线日志,因为我们需要69808 到 69850的数据
-->>这时我们把users01.dbf删除
-->>还原resetlogs前的所有数据文件控制文件和在线日志
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>
SQL>  select resetlogs_change#,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE# CONTROLFILE_CHANGE#
----------------- -------------------
            68659               69804

SQL> recover database using backup controlfile until change 69808;
ORA-00279: 更改 69808 (在 03/02/2005 11:35:33 生成) 对于线程 1 是必需的
ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: 更改 69808 对于线程 1 是按序列 # 5 进行的


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

ORA-00308: 无法打开存档日志 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


SQL> recover database using backup controlfile until change 69808;
ORA-00279: 更改 69808 (在 03/02/2005 11:35:33 生成) 对于线程 1 是必需的
ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_5.DBF
ORA-00280: 更改 69808 对于线程 1 是按序列 # 5 进行的


指定日志: {=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL>  select resetlogs_change#,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE# CONTROLFILE_CHANGE#   --已经应用到了69808
----------------- -------------------
            68659               69808

SQL>
SQL>
SQL> shutdown
ORA-01109: 数据库未打开

-->>好这时我们就需要应用69808 到 69850的数据
-->>这时我们要想恢复69808 到 69850的数据就必须要resetlogs后的控制文件,
我们从前面的CONTROLFILE_CHANGE#和ESETLOGS_CHANGE#就可以看的出来,只有他才能进行完全恢复到69850

-->>还原resetlogs后的控制文件和在线日志文件
已经卸载数据库。
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>  select resetlogs_change#,CONTROLFILE_CHANGE# from v$database;

RESETLOGS_CHANGE# CONTROLFILE_CHANGE#
----------------- -------------------
            69809               69850

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

SQL> alter database open;

数据库已更改。

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

  COUNT(*) ST
---------- --
      6166 af
      6166 no
     98656 ok
     --这一次是真的越过resetlogs正确的完全恢复了
            
-->>注意切换归档是不是的序列号是不是当前序列号







~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
必须使用TEMPORARY(一些数据文件对检查点不可用)或IMMEDIATE(所有数据文件对
检查点不可用)选项。在表空间再现联机之前,那些数据文件需要被恢复(数据文件恢复或
表空间恢复)。如果文件修复之后,重新联机之前发生了数据库崩溃,而该崩溃又要求执行不
完全的介质恢复的话,其后用来恢复数据库的RESETLOGS选项将致使该脱机表空间无效。恢
复该表空间的唯一方法是将以前的备份还原到另外一台机器上,用存档重作日志实施恢复,
直到数据库失败前为止,这样做显然会浪费大量的时间和资源。因此在恢复之前,应当切记
检查v$datafile确定所有的关键表空间是联机的。但是,允许只读表空间的数据文件或通过
NORMAL选项脱机的表空间,保持不变(因为它们已经是一致的了,不希望它们隶属于恢复
操作)。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


###############################################################################################
#                                  [2]. 非归档模式下的恢复(rman和常规恢复)                    #
###############################################################################################
~~~~~~~~~~~~~~~~~~
准备工作
~~~~~~~~~~~~~~~~~~ 


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 noarchivelog;

数据库已更改。

SQL> alter database open;

数据库已更改。

SQL>
SQL> archive log list
数据库日志模式             非存档模式
自动存档             启用
存档终点            C:\oracle\oradata\testdb\archive
最早的概要日志序列     0
当前日志序列           1
SQL>
SQL>
SQL>
SQL>
SQL> shutdown
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup -->>是spfile启动的,所以不需要修改初始化参数就已经启动了非存档模式
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL> archive log list
数据库日志模式             非存档模式
自动存档             启用
存档终点            C:\oracle\oradata\testdb\archive
最早的概要日志序列     0
当前日志序列           1
SQL>




###############################################
# [测试1] 数据库在非归档模式,数据库打开
###############################################
SQL> startup -->>是spfile启动的,所以不需要修改初始化参数就已经启动了非存档模式
ORACLE 例程已经启动。

Total System Global Area  101784276 bytes
Fixed Size                   453332 bytes
Variable Size              75497472 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL> archive log list
数据库日志模式             非存档模式
自动存档             启用
存档终点            C:\oracle\oradata\testdb\archive
最早的概要日志序列     0
当前日志序列           1
SQL>

C:\Documents and Settings\lifeng.fang>rman nocatalog target "sys/sunsdl"

恢复管理器: 版本9.2.0.1.0 - Production

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

连接到目标数据库: TESTDB (DBID=2334768642)
正在使用目标数据库控制文件替代恢复目录

RMAN> show all;

RMAN 配置参数为:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'C:\ORACLE\ORA92\DATABASE\SNCFTESTDB.ORA'
; # default

RMAN> backup database include current controlfile;

启动 backup 于 03-3月 -05
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=16 devtype=DISK
通道 ORA_DISK_1: 正在启动 full 数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
在备份集中包含当前的 SPFILE
备份集中包括当前控制文件
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 03/03/2005 09:46:
04
ORA-19602: 无法按 NOARCHIVELOG 模式备份或复制活动文件

~~~~~~~~~~~~~~~~~~~~~~~~~~
我们看到如果是NOARCHIVELOG 模式,
数据库如果打开则不能做RMAN备份
~~~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我们可以用RMAN拷贝控制文件
RMAN> copy CURRENT CONTROLFILE TO 'c:\cf.cpy';

启动 copy 于 03-3月 -05
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=16 devtype=DISK
通道 ORA_DISK_1: 已复制当前的控制文件
输出文件名=C:\CF.CPY
完成 copy 于 03-3月 -05
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
###############################################
# [测试2] 数据库在非归档模式,数据库MOUNT,备份整个数据库
###############################################
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>

RMAN> backup database include current controlfile;

启动 backup 于 03-3月 -05
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=14 devtype=DISK
通道 ORA_DISK_1: 正在启动 full 数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
在备份集中包含当前的 SPFILE
备份集中包括当前控制文件
输入数据文件 fno=00001 name=C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
输入数据文件 fno=00002 name=C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
输入数据文件 fno=00003 name=C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
输入数据文件 fno=00005 name=C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
输入数据文件 fno=00004 name=C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
输入数据文件 fno=00006 name=C:\ORACLE\ORADATA\TESTDB\USERS02.DBF
通道 ORA_DISK_1: 正在启动段 1 于 03-3月 -05
通道 ORA_DISK_1: 已完成段 1 于 03-3月 -05
段 handle=C:\ORACLE\ORA92\DATABASE\02GECED4_1_1 comment=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:27
完成 backup 于 03-3月 -05

RMAN> backup tablespace users;

启动 backup 于 03-3月 -05
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在启动 full 数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00005 name=C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 03-3月 -05
通道 ORA_DISK_1: 已完成段 1 于 03-3月 -05
段 handle=C:\ORACLE\ORA92\DATABASE\03GECEG5_1_1 comment=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 03-3月 -05

###############################################
# [测试3] 数据库在非归档模式,数据库MOUNT,备份表空间
###############################################
RMAN> backup tablespace users;

启动 backup 于 03-3月 -05
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在启动 full 数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00005 name=C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 03-3月 -05
通道 ORA_DISK_1: 已完成段 1 于 03-3月 -05
段 handle=C:\ORACLE\ORA92\DATABASE\03GECEG5_1_1 comment=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 03-3月 -05

~~~~~~~~~~~~~~~~~~~~~~~~
注意表空间是逻辑概念,常规备份,
必须open数据库后才能看到表空间
但是RMAN可以在mount下备份表空间
~~~~~~~~~~~~~~~~~~~~~~~~

###############################################
# [测试4] 数据库在非归档模式,数据库MOUNT,备份的表空间是常规OFFLINE的
###############################################
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果使用TEMPORARY选项对表空间进行脱机,则数据库仍然会对该表空间
的所有文件进行一个检查点,其中如果有个文件IO损坏,那么他对该文件
不会执行检查点,但是normal方式脱机的话就会强制写检查点,所以如果
io物理损坏了,那么NORMAL方式可能就脱机不了了.假设表空间两个文件
T1,T2,如果T1写错误而被脱机.如果使用temporary选项,则ORACLE在使T1
脱机前设检查点检查文件D2.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL> shutdown
数据库已经关闭。
已经卸载数据库。
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
数据库装载完毕。
数据库已经打开。
SQL> alter  tablespace users offline immediate;
alter  tablespace users offline immediate
*
ERROR 位于第 1 行:
ORA-01145: 除非启用了介质恢复,否则不允许紧急脱机


SQL> alter  tablespace users offline TEMPORARY;

表空间已更改。

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
数据库装载完毕。


RMAN> backup tablespace users;

启动 backup 于 03-3月 -05
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=14 devtype=DISK
通道 ORA_DISK_1: 正在启动 full 数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00005 name=C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 03-3月 -05
通道 ORA_DISK_1: 已完成段 1 于 03-3月 -05
段 handle=C:\ORACLE\ORA92\DATABASE\09GECGJ0_1_1 comment=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:03
完成 backup 于 03-3月 -05

SQL> alter database open;

数据库已更改。

SQL> insert into arch select 'af' from dba_objects;
insert into arch select 'af' from dba_objects
            *
ERROR 位于第 1 行:
ORA-00376: 此时无法读取文件 5
ORA-01110: 数据文件 5: 'C:\ORACLE\ORADATA\TESTDB\USERS01.DBF'


SQL> alter  tablespace users online;

表空间已更改。

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

已创建6166行。

SQL> commit;

提交完成。

SQL> alter  tablespace users offline TEMPORARY;

表空间已更改。

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
数据库装载完毕。

RMAN> backup tablespace users;

启动 backup 于 03-3月 -05
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=14 devtype=DISK
通道 ORA_DISK_1: 正在启动 full 数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00005 name=C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 03-3月 -05
通道 ORA_DISK_1: 已完成段 1 于 03-3月 -05
段 handle=C:\ORACLE\ORA92\DATABASE\0AGECGNM_1_1 comment=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:03
完成 backup 于 03-3月 -05


###############################################
# [测试5] 数据库在非归档模式,数据库MOUNT,shutdown abort,备份的表空间
###############################################

SQL> alter  tablespace users online;

表空间已更改。

SQL> alter system switch logfile;

系统已更改。

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

已创建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select * from arch;

已创建123320行。

SQL> /

已创建246640行。

SQL> /

已创建493280行。

SQL> /

已创建986560行。

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          2 NO  ACTIVE
         2          1 NO  ACTIVE
         3          3 NO  CURRENT

SQL> shutdown abort
ORACLE 例程已经关闭。
SQL>
SQL>
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
 
阅读(1507) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~