数据库备份与恢复测试(6)

Posted on 2006-02-10 11:45  白色果树  阅读(801)  评论(0)    收藏  举报

[测试6] 数据库在非归档模式,数据库MOUNT,数据文件丢失,有表空间备份


RMAN> backup tablespace users;

启动 backup 于 03-3月 -05
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=12 devtype=DISK
通道 ORA_DISK_1: 正在启动 full 数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
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 10:27
45
ORA-19602: 无法按 NOARCHIVELOG 模式备份或复制活动文件


RMAN> backup database include current controlfile;

启动 backup 于 03-3月 -05
使用通道 ORA_DISK_1
通道 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 10:30:
06
ORA-19602: 无法按 NOARCHIVELOG 模式备份或复制活动文件

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果是shutdown abort,那么数据需要恢复
此时在mount下表空间数据是不完整的,所以无法备份表空间
同样也不能备份整个数据库,因为他不是一致性的数据库
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

RMAN> restore tablespace users;

启动 restore 于 03-3月 -05

使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00005恢复到C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
通道 ORA_DISK_1: 已恢复备份段 1
段 handle=C:\ORACLE\ORA92\DATABASE\0AGECGNM_1_1 tag=TAG20050303T103534 params=N
LL
通道 ORA_DISK_1: 恢复完成
完成 restore 于 03-3月 -05

RMAN>

RMAN> recover tablespace users;

启动 recover 于 03-3月 -05
使用通道 ORA_DISK_1

正在开始介质的恢复
完成介质的恢复

完成 recover 于 03-3月 -05

RMAN> alter database open;

数据库已打开

 

[测试7] 数据库在归档模式,控制文件损坏,控制文件有备份,使用RMAN恢复

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

提交完成。

RMAN> backup database ;

启动 backup 于 03-3月 -05
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=16 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
通道 ORA_DISK_1: 正在启动段 1 于 03-3月 -05
通道 ORA_DISK_1: 已完成段 1 于 03-3月 -05
段 handle=C:\ORACLE\ORA92\DATABASE\01GECMF4_1_1 comment=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:27
完成 backup 于 03-3月 -05


RMAN> copy CURRENT CONTROLFILE TO 'c:\cf.cpy';

启动 copy 于 03-3月 -05
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 已复制当前的控制文件
输出文件名=C:\CF.CPY
完成 copy 于 03-3月 -05

SQL> select count(*) from arch;

  COUNT(*)
----------
      6166

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> shutdown
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。

模拟控制文件损坏c:\cf.cpy

还原备份的控制文件
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;
ORA-00279: 更改 69868 (在 03/03/2005 12:13:26 生成) 对于线程 1 是必需的
ORA-00289: 建议: C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_4.DBF
ORA-00280: 更改 69868 对于线程 1 是按序列 # 4 进行的


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

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


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

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


SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01113: 文件 1 需要介质恢复
ORA-01110: 数据文件 1: 'C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF'


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


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

数据库已更改。

SQL> archive log list
数据库日志模式            存档模式
自动存档             启用
存档终点            C:\oracle\oradata\testdb\archive
最早的概要日志序列     0
下一个存档日志序列   1
当前日志序列           1

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

  COUNT(*) ST
---------- --
     98656 ok
~~~~~~~~~~~~~~~~~~    
在线日志的数据丢失
使用trace可以不丢失数据


[测试8] 数据库在非归档模式,数据文件损坏,使用RMAN恢复

 

[测试9] 数据库在非归档模式,数据文件损坏,使用RMAN恢复,
#         该文件的日志全部还保留在非当前在线日志和当前在线日志中

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;

数据库已更改。

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> backup format 'c:\noarch_%s%p.bak' database;

启动 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
通道 ORA_DISK_1: 正在启动段 1 于 03-3月 -05
通道 ORA_DISK_1: 已完成段 1 于 03-3月 -05
段 handle=C:\NOARCH_11.BAK comment=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:27
完成 backup 于 03-3月 -05

RMAN> copy CURRENT CONTROLFILE TO 'c:\cf.cpy';

启动 copy 于 03-3月 -05
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 已复制当前的控制文件
输出文件名=C:\CF.CPY
完成 copy 于 03-3月 -05

SQL> archive log list
数据库日志模式             非存档模式
自动存档             启用
存档终点            C:\oracle\oradata\testdb\archive
最早的概要日志序列     1
当前日志序列           3
SQL> alter database open;

数据库已更改。

SQL> create table arch (status varchar(2)) tablespace users;  --日志1

表已创建。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into arch select 'ok' from dba_objects;   --日志2

已创建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; --日志2

已创建6166行。

SQL> commit;

提交完成。

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

    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
         1          5 NO  CURRENT
         2          3 NO  ACTIVE
         3          4 NO  ACTIVE
        
        
SQL> shutdown
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。     

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

RMAN> restore datafile 5;

启动 restore 于 03-3月 -05

分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=14 devtype=DISK
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00005恢复到C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
通道 ORA_DISK_1: 已恢复备份段 1
段 handle=C:\NOARCH_11.BAK tag=TAG20050303T145842 params=NULL
通道 ORA_DISK_1: 恢复完成
完成 restore 于 03-3月 -05

RMAN> recover datafile 5;

启动 recover 于 03-3月 -05
使用通道 ORA_DISK_1

正在开始介质的恢复
完成介质的恢复

完成 recover 于 03-3月 -05

RMAN> alter database open;

数据库已打开

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

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

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
我们看到非归档模式,在备份数据文件后的日志如果都
还存在当前在线日志和者非当前在线日志中, 就可以
实现完全恢复,比如我们最先create table arch的日志在
日志组1中,没有被轮转覆盖,所以可以完全恢复
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

那我们试试如果在线日志被覆盖了的情况下是否可以完全恢复.

 [测试10] 数据库在非归档模式,数据文件损坏,使用RMAN恢复,
#         该文件的日志部分由于日志轮转被覆盖了

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> archive log list
数据库日志模式             非存档模式
自动存档             启用
存档终点            C:\oracle\oradata\testdb\archive
最早的概要日志序列     1
当前日志序列           3

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>  backup format 'c:\noarch_%s%p1.bak' database;

启动 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
通道 ORA_DISK_1: 正在启动段 1 于 03-3月 -05
通道 ORA_DISK_1: 已完成段 1 于 03-3月 -05
段 handle=C:\NOARCH_111.BAK comment=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:26
完成 backup 于 03-3月 -05

SQL> alter database open;

数据库已更改。

SQL> create table arch (status varchar(2)) tablespace users;  --日志序列3在组1

表已创建。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into arch select 'ok' from dba_objects;  --日志序列4在组2

已创建6166行。

SQL> commit;

提交完成。

SQL> insert into arch select * from arch;

已创建6166行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into arch select * from arch;  --日志序列5在组3

已创建12332行。

SQL> /

已创建24664行。

SQL> /

已创建49328行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> insert into arch select 'no' from dba_objects; --日志序列6在组1 ,把前面create table arch给覆盖了

已创建6166行。

SQL> commit;

提交完成。

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

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

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

删除user01.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
数据库装载完毕。
   
RMAN> restore datafile 5;

启动 restore 于 03-3月 -05

分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=14 devtype=DISK
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00005恢复到C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
通道 ORA_DISK_1: 已恢复备份段 1
段 handle=C:\NOARCH_111.BAK tag=TAG20050303T151544 params=NULL
通道 ORA_DISK_1: 恢复完成
完成 restore 于 03-3月 -05

RMAN> recover datafile 5;

启动 recover 于 03-3月 -05
使用通道 ORA_DISK_1

正在开始介质的恢复

无法找到存档日志
存档日志线程 =1 序列=3
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 03/03/2005 15:19:27
RMAN-06054: media recovery requesting unknown log: thread 1 scn 69456


RMAN> restore datafile 1,2,3,4,5;

启动 restore 于 03-3月 -05

使用通道 ORA_DISK_1
正在略过数据文件 5; 已恢复到文件 C:\ORACLE\ORADATA\TESTDB\USERS01.DBF
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到C:\ORACLE\ORADATA\TESTDB\SYSTEM01.DBF
正将数据文件00002恢复到C:\ORACLE\ORADATA\TESTDB\UNDOTBS01.DBF
正将数据文件00003恢复到C:\ORACLE\ORADATA\TESTDB\INDX01.DBF
正将数据文件00004恢复到C:\ORACLE\ORADATA\TESTDB\TOOLS01.DBF
通道 ORA_DISK_1: 已恢复备份段 1
段 handle=C:\NOARCH_111.BAK tag=TAG20050303T151544 params=NULL
通道 ORA_DISK_1: 恢复完成
完成 restore 于 03-3月 -05

RMAN> recover datafile 1,2,3,4,5;

启动 recover 于 03-3月 -05
使用通道 ORA_DISK_1

正在开始介质的恢复

无法找到存档日志
存档日志线程 =1 序列=3
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 03/03/2005 15:25:01
RMAN-06054: media recovery requesting unknown log: thread 1 scn 69456

~~~~~~~~~~~~~~~~~~~
还需要备份的控制文件
~~~~~~~~~~~~~~~~~~~
还原备份的控制文件


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;
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 进行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 无法打开存档日志 'C:\ORACLE\ORADATA\TESTDB\ARCHIVE\1_3.DBF'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


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


SQL> recover database using backup controlfile until cancel;
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 进行的


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

数据库已更改。

SQL> select count(*),status from arch group by status;
select count(*),status from arch group by status
                            *
ERROR 位于第 1 行:
ORA-00942: 表或视图不存在

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
所以如果是非归档模式,且没有所有日志都在
当前在线日志和非当前在线日志中,那么就不
能完全恢复,而且这时要用备份的数据文件还不够
,还要备份的控制文件
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

#####################################################
# [测试1] 修改日志组大小及增加日志组成员
#####################################################
日志处理恢复测试实例
ALTER DATABASE CLEAR LOGFILE GROUP <group_number>;

This statement overcomes two situations where dropping redo logs is not possible:
1.If there are only two log groups
2.The corrupt redo log file belongs to the current group.


SQL> insert into test select * from test;

已创建249744行。

SQL> select value from v$sesstat where STATISTIC#=115 and sid=11;

     VALUE
----------
   7675912

SQL> insert into test select * from test;

已创建499488行。

SQL>  select value from v$sesstat where STATISTIC#=115 and sid=11;

     VALUE
----------
  15258424

SQL> ALTER DATABASE ADD LOGFILE GROUP 4 ('C:\ORA81\ORA81\ORADATA\TEST\REDO04.LOG
','C:\ORA81\ORA81\ORADATA\TEST\REDO041.LOG') size 20M;

数据库已更改。

SQL> ALTER DATABASE ADD LOGFILE GROUP 5 ('C:\ORA81\ORA81\ORADATA\TEST\REDO05.LOG
','C:\ORA81\ORA81\ORADATA\TEST\REDO051.LOG') size 20M;

数据库已更改。

SQL> ALTER DATABASE ADD LOGFILE GROUP 6 ('C:\ORA81\ORA81\ORADATA\TEST\REDO06.LOG
','C:\ORA81\ORA81\ORADATA\TEST\REDO061.LOG') size 20M;
ALTER DATABASE ADD LOGFILE GROUP 6 ('C:\ORA81\ORA81\ORADATA\TEST\REDO06.LOG','C:
\ORA81\ORA81\ORADATA\TEST\REDO061.LOG') size 20M
*
ERROR 位于第 1 行:
ORA-01185: 日志文件组号6无效


SQL> l
  1* ALTER DATABASE ADD LOGFILE GROUP 6 ('C:\ORA81\ORA81\ORADATA\TEST\REDO06.LOG
','C:\ORA81\ORA81\ORADATA\TEST\REDO061.LOG') size 20M
SQL> ALTER DATABASE ADD LOGFILE GROUP 6 ('C:\ORA81\ORA81\ORADATA\TEST\REDO06.LOG
','C:\ORA81\ORA81\ORADATA\TEST\REDO061.LOG') size 20M;
ALTER DATABASE ADD LOGFILE GROUP 6 ('C:\ORA81\ORA81\ORADATA\TEST\REDO06.LOG','C:
\ORA81\ORA81\ORADATA\TEST\REDO061.LOG') size 20M
*
ERROR 位于第 1 行:
ORA-01185: 日志文件组号6无效


SQL> alter database backup controlfile to trace;

数据库已更改。

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
         1          1         94   10485760          2 YES INACTIVE
         2          1         95   10485760          2 YES ACTIVE
         3          1         96   10485760          2 NO  CURRENT
         4          1          0   20971520          2 YES UNUSED
         5          1          0   20971520          2 YES UNUSED
SQL> select * from v$logfile;

    GROUP# STATUS  TYPE     MEMBER
---------- ------- -------  -------------------------------------------------------------------------------
         1         ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO01.LOG
         2         ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO02.LOG
         3         ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO03.LOG
         1 INVALID ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO011.LOG
         2 INVALID ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO021.LOG
         3 INVALID ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO031.LOG
         4         ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO04.LOG
         4         ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO041.LOG
         5         ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO05.LOG
         5         ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO051.LOG

已选择10行。

SQL>

SQL> alter database drop logfile group 1;
                                        
数据库已更改。                          
                                        
SQL> alter database drop logfile group 2;
                                        
数据库已更改。                          
                                        
SQL> alter database drop logfile group 3;
                                        
数据库已更改。                          

SQL> select * from v$logfile;                                                  
                                                                               
    GROUP# STATUS  TYPE     MEMBER
---------- ------- -------  -------------------------------------------------------------------------------                                                                               
         4         ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO04.LOG                                                                                     
         4         ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO041.LOG              
         5         ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO05.LOG              
         5         ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO051.LOG        

SQL> ALTER DATABASE ADD LOGFILE GROUP 1 ('C:\ORA81\ORA81\ORADATA\TEST\REDO01.LOG

  2  ','C:\ORA81\ORA81\ORADATA\TEST\REDO011.LOG') size 20M;
ALTER DATABASE ADD LOGFILE GROUP 1 ('C:\ORA81\ORA81\ORADATA\TEST\REDO01.LOG
*
ERROR 位于第 1 行:
ORA-00301: 添加日志文件 'C:\ORA81\ORA81\ORADATA\TEST\REDO01.LOG
' 时出错 - 无法创建文件
ORA-27040: skgfrcre: 创建错误,无法创建文件
OSD-04002: 无法打开文件
O/S-Error: (OS 123) 文件名、目录名或卷标语法不正确。

这里我把原有的C:\ORA81\ORA81\ORADATA\TEST\REDO01.LOG和C:\ORA81\ORA81\ORADATA\TEST\REDO011.LOG删除,就OK了
SQL> ALTER DATABASE ADD LOGFILE GROUP 1 ('C:\ORA81\ORA81\ORADATA\TEST\REDO01.LOG
','C:\ORA81\ORA81\ORADATA\TEST\REDO011.LOG') size 20M;

数据库已更改。

SQL> ALTER DATABASE ADD LOGFILE GROUP 2 ('C:\ORA81\ORA81\ORADATA\TEST\REDO02.LOG
','C:\ORA81\ORA81\ORADATA\TEST\REDO021.LOG') size 20M;
ALTER DATABASE ADD LOGFILE GROUP 2 ('C:\ORA81\ORA81\ORADATA\TEST\REDO02.LOG','C:
\ORA81\ORA81\ORADATA\TEST\REDO021.LOG') size 20M
*
ERROR 位于第 1 行:
ORA-00301: 添加日志文件 'C:\ORA81\ORA81\ORADATA\TEST\REDO02.LOG' 时出错 -
无法创建文件
ORA-27038: skgfrcre: 文件存在
OSD-04010: 指定了 <create> 选项, 但文件已经存在


SQL> ALTER DATABASE ADD LOGFILE GROUP 2 ('C:\ORA81\ORA81\ORADATA\TEST\REDO02.LOG
','C:\ORA81\ORA81\ORADATA\TEST\REDO021.LOG') size 20M;

数据库已更改。

SQL> ALTER DATABASE ADD LOGFILE GROUP 3 ('C:\ORA81\ORA81\ORADATA\TEST\REDO03.LOG
','C:\ORA81\ORA81\ORADATA\TEST\REDO031.LOG') size 20M;

数据库已更改。                               

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
         4          1        105   20971520          2 NO  CURRENT
         5          1        104   20971520          2 YES INACTIVE

SQL> alter database clear logfile group 5;

数据库已更改。


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
注意如果这个非活动的日志组ARC状态为NO,
也就是说不能被归档,那么,要执行
ALTER DATABASE CLEAR LOGFILE UNARCHIVED GROUP 5;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
注意如果这时有个offline文件需要这个非
活动的日志组ARC状态为NO的日志使这个文件
带到online状态,那么在CLEAR LOGFILE时指定
这个文件的UNRECOVERABLE DATAFILE参数才行
如:
ALTER DATABASE CLEAR LOGFILE UNARCHIVED
GROUP 5 UNRECOVERABLE DATAFILE;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
有时执行ALTER DATABASE CLEAR LOGFILE 会出错
原因是该日志磁盘IO损坏,那么你最好重新部署
该日志到新的路径,如使用修改了的创建控制文件语句
或者ALTER DATABASE RENAME FILE "/oracle/dbs/log_1.rdo"
TO "/temp/log_1.rdo";
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
         1          1          0   20971520          2 YES UNUSED
         2          1          0   20971520          2 YES UNUSED
         3          1          0   20971520          2 YES UNUSED
         4          1        105   20971520          2 NO  CURRENT
         5          1          0   20971520          2 YES UNUSED

SQL> alter system switch logfile;

系统已更改。

SQL> /

系统已更改。

SQL> /

系统已更改。

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
         1          1        106   20971520          2 YES INACTIVE
         2          1        107   20971520          2 YES INACTIVE
         3          1        108   20971520          2 YES INACTIVE
         4          1        105   20971520          2 YES INACTIVE
         5          1        109   20971520          2 NO  CURRENT

#########################################################
# [测试2] 当前在线日志损坏,切没有备份数据文件,使用强制打开的方式
#########################################################
SQL> select * from v$logfile;

    GROUP# STATUS  TYPE     MEMBER
---------- ------- -------  -------------------------------------------------------------------------------
         1         ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO01.LOG
         1         ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO011.LOG
         2         ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO02.LOG
         2         ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO021.LOG
         3         ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO03.LOG
         3         ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO031.LOG
         4         ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO04.LOG
         4         ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO041.LOG
         5         ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO05.LOG
         5         ONLINE   C:\ORA81\ORA81\ORADATA\TEST\REDO051.LOG


已选择10行。

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

删除C:\ORA81\ORA81\ORADATA\TEST\REDO01.LOG
SQL> startup
ORACLE 例程已经启动。

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
ORA-00313: 无法打开日志组 1 (线程 1) 的成员
ORA-00312: 联机日志 1 线程 1: 'C:\ORA81\ORA81\ORADATA\TEST\REDO01.LOG'
ORA-00312: 联机日志 1 线程 1: 'C:\ORA81\ORA81\ORADATA\TEST\REDO011.LOG'


SQL> select count(*) from test;
select count(*) from test
                     *
ERROR 位于第 1 行:
ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询


SQL> alter database clear logfile group 1;

数据库已更改。

这时会自动增加     'C:\ORA81\ORA81\ORADATA\TEST\REDO01.LOG'    
                   'C:\ORA81\ORA81\ORADATA\TEST\REDO011.LOG' 
两个日志文件              

     
SQL> alter database open;

数据库已更改。                                     

SQL>  select GROUP#,THREAD#,SEQUENCE#,MEMBERS,STATUS,ARCHIVED  from v$log;
                                                                         
    GROUP#    THREAD#  SEQUENCE#    MEMBERS STATUS           ARC         
---------- ---------- ---------- ---------- ---------------- ---         
         1          1          0          2 UNUSED           YES         
         2          1        107          2 INACTIVE         YES         
         3          1        108          2 INACTIVE         YES         
         4          1        105          2 INACTIVE         YES         
         5          1        109          2 CURRENT          NO           
        
SQL> /                                                                  
                                                               
    GROUP#    THREAD#  SEQUENCE#    MEMBERS STATUS           ARC
---------- ---------- ---------- ---------- ---------------- ---
         1          1        110          2 CURRENT          NO
         2          1        107          2 INACTIVE         YES
         3          1        108          2 INACTIVE         YES
         4          1        105          2 INACTIVE         YES
         5          1        109          2 ACTIVE           YES             
        
删除日志组5的文件

SQL> shutdown immediate                                                        
数据库已经关闭。                                                      
已经卸载数据库。                                                      
ORACLE 例程已经关闭。                                                 
SQL> startup                                                          
ORACLE 例程已经启动。                                                 
                                                                      
Total System Global Area  135338868 bytes                             
Fixed Size                   453492 bytes                             
Variable Size             109051904 bytes                             
Database Buffers           25165824 bytes                             
Redo Buffers                 667648 bytes                             
数据库装载完毕。                                                      
ORA-00313: 无法打开日志组 5 (线程 1) 的成员                           
ORA-00312: 联机日志 5 线程 1: 'C:\ORA81\ORA81\ORADATA\TEST\REDO05.LOG'
ORA-00312: 联机日志 5 线程 1: 'C:\ORA81\ORA81\ORADATA\TEST\REDO051.LOG'
                                                                      
                                                                      
SQL> alter database clear logfile group 5;                            
                                                                      
数据库已更改。                                                        
                                                                      
SQL> alter database open;                                             
                                                                      
数据库已更改。                                                        
                                                                      
SQL>                                                                  
SQL>                                                                  
SQL>                                                                  
SQL> select count(*) from test;                                       
                                                                      
  COUNT(*)                                                            
----------                                                            
   1997951                            
  
SQL> alter system switch logfile;                                                                           
                                                                         
系统已更改。                                                             
                                                                         
SQL>  select GROUP#,THREAD#,SEQUENCE#,MEMBERS,STATUS,ARCHIVED  from v$log;
                                                                         
    GROUP#    THREAD#  SEQUENCE#    MEMBERS STATUS           ARC         
---------- ---------- ---------- ---------- ---------------- ---         
         1          1        110          2 ACTIVE           YES         
         2          1        107          2 INACTIVE         YES         
         3          1        108          2 INACTIVE         YES         
         4          1        105          2 INACTIVE         YES         
         5          1        111          2 CURRENT          NO          
        
        
                                                                
此时用ultraedit把日志组5的两个文件编辑文件头,使他被破坏
SQL> delete test;         
delete test      
       *         
ERROR 位于第 1 行:
ORA-03113: 通信通道的文件结束

 

C:\>sqlplus "/as sysdba"                                               
                                                                       
SQL*Plus: Release 9.2.0.1.0 - Production on 星期五 12月 31 13:42:01 2004
                                                                       
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.    
                                                                       
已连接到空闲例程。                                                     
                                                                       
SQL>                                                                   
SQL>                                                                   
SQL>                                                                   
SQL> startup                                                           
ORACLE 例程已经启动。                                                  
                                                                       
Total System Global Area  135338868 bytes                              
Fixed Size                   453492 bytes                              
Variable Size             109051904 bytes                              
Database Buffers           25165824 bytes                              
Redo Buffers                 667648 bytes                              
数据库装载完毕。                                                       
ORA-00313: 无法打开日志组 5 (线程 1) 的成员                            
ORA-00312: 联机日志 5 线程 1: 'C:\ORA81\ORA81\ORADATA\TEST\REDO05.LOG' 
ORA-00312: 联机日志 5 线程 1: 'C:\ORA81\ORA81\ORADATA\TEST\REDO051.LOG'  

SQL> alter database clear logfile group 5;虽然是当前数据文件
也可以用clear logfile清理后打开
SQL> alter database clear logfile group 5;
                                         
数据库已更改。                           
                                         
SQL> alter database open;                
                                         
数据库已更改。                           
                                         
SQL>                                     
SQL>                                     
SQL> select count(*) from test;          
                                         
  COUNT(*)                               
----------                               
   1997951                   
  

此时用ultraedit把日志组1的两个文件编辑,清空,使他被破坏  

SQL> conn /as sysdba
已连接。
SQL> insert into test select rownum from dba_tables;

已创建614行。

SQL> insert into test select rownum from dba_tables;

已创建614行。

SQL> insert into test select rownum from dba_tables;

已创建614行。

SQL> insert into test select rownum from test;

已创建1842行。

SQL> /

已创建3684行。

SQL> /

已创建7368行。

SQL> /

已创建14736行。

SQL> /

已创建29472行。

SQL> /

已创建58944行。

SQL> /

已创建117888行。

SQL> /

已创建235776行。

SQL> /

已创建471552行。

SQL> /
insert into test select rownum from test
*
ERROR 位于第 1 行:
ORA-03113: 通信通道的文件结束
这时由于当前日志文件已经损坏,但insert又产生了很多重做造成切换,所以破坏的日志包含了要恢复的数据


SQL> conn /as sysdba
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
ORA-00316: 日志 1 (线程 1),标题中的类型 0 不是日志文件
ORA-00312: 联机日志 1 线程 1: 'C:\ORA81\ORA81\ORADATA\TEST\REDO011.LOG'
ORA-00316: 日志 1 (线程 1),标题中的类型 0 不是日志文件
ORA-00312: 联机日志 1 线程 1: 'C:\ORA81\ORA81\ORADATA\TEST\REDO01.LOG'


SQL> alter database clear logfile group 1;
alter database clear logfile group 1
*
ERROR 位于第 1 行:
ORA-01624: 线程1的紧急恢复需要日志1
ORA-00312: 联机日志 1 线程 1: 'C:\ORA81\ORA81\ORADATA\TEST\REDO01.LOG'
ORA-00312: 联机日志 1 线程 1: 'C:\ORA81\ORA81\ORADATA\TEST\REDO011.LOG'


SQL> alter database clear UNARCHIVED logfile group 1;
alter database clear UNARCHIVED logfile group 1
*
ERROR 位于第 1 行:
ORA-01624: 线程1的紧急恢复需要日志1
ORA-00312: 联机日志 1 线程 1: 'C:\ORA81\ORA81\ORADATA\TEST\REDO01.LOG'
ORA-00312: 联机日志 1 线程 1: 'C:\ORA81\ORA81\ORADATA\TEST\REDO011.LOG'


SQL> recover database;
ORA-00283: 恢复会话因错误而取消
ORA-00316: 日志 1 (线程 1),标题中的类型 0 不是日志文件
ORA-00312: 联机日志 1 线程 1: 'C:\ORA81\ORA81\ORADATA\TEST\REDO011.LOG'


SQL> recover database until cancel;
ORA-00279: 更改 160295 (在 12/31/2004 13:51:38 生成) 对于线程 1 是必需的
ORA-00289: 建议: C:\ORA81\ORA81\ORADATA\TEST\ARCHIVE\1_120.DBF
ORA-00280: 更改 160295 对于线程 1 是按序列 # 120 进行的


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

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


ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01194: 文件1需要更多的恢复来保持一致性
ORA-01110: 数据文件 1: 'C:\ORA81\ORA81\ORADATA\TEST\SYSTEM01.DBF'


SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------------------------
spfile                               string      %ORACLE_HOME%\DATABASE\SPFILE
                                                 ORACLE_SID%.ORA


SQL> create pfile='pfiletest.ora' from spfile;

文件已创建。

SQL> create pfile='c:\pfiletest.ora' from spfile;

文件已创建。
编辑c:\pfiletest.ora
增加三个参数

_allow_resetlogs_corruption=true
_corrupted_rollback_segments=true
_offline_rollback_segments=true

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


已经卸载数据库。
ORACLE 例程已经关闭。
SQL>
SQL>
SQL>
SQL> startup pfile='c:\pfiletest.ora'
ORACLE 例程已经启动。

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项


SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01092: ORACLE 例程终止。强行断开连接


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:\>sqlplus "/as sysdba"

SQL*Plus: Release 9.2.0.1.0 - Production on 星期五 12月 31 14:03:09 2004

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

已连接到空闲例程。

SQL> startup pfile='c:\pfiletest.ora'
ORACLE 例程已经启动。

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL> select count(*) from test;

  COUNT(*)
----------
         0


###############################################
# [测试3] 数据文件损坏,控制文件损坏,有trace ,
#         使用noresetlogs,非在线日志损坏 ,shutdown abort
###############################################

参见控制文件恢复部分    

 

###############################################
# [测试4]      在归档模式下没有设置自动归档下,数据库挂起
###############################################
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" RESETLOGS  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 1M,  --修改在线日志为1M
10    GROUP 2 'C:\ORACLE\ORADATA\TESTDB\REDO02.LOG'  SIZE 1M,
11    GROUP 3 'C:\ORACLE\ORADATA\TESTDB\REDO03.LOG'  SIZE 1M
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 resetlogs;

数据库已更改。

SQL> archive log list
数据库日志模式            存档模式
自动存档             启用
存档终点            C:\oracle\oradata\testdb\archive
最早的概要日志序列     0
下一个存档日志序列   1
当前日志序列           1

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 system archive log stop;

系统已更改。

SQL> archive log list
数据库日志模式            存档模式
自动存档             禁用
存档终点            C:\oracle\oradata\testdb\archive
最早的概要日志序列     0
下一个存档日志序列   1
当前日志序列           1

SQL> alter database open;

数据库已更改。

SQL>  select count(*) from arch;

  COUNT(*)
----------
    838576
   
SQL> select bytes ,segment_name from dba_segments where segment_name ='ARCH';

     BYTES     SEGMENT_NAME
----------     ---------------
  11534336     ARCH 
 
SQL> delete from arch;  删除11M,但是轮转一圈日志只有3M,所以如果不手工去切换日志将挂起数据库

--这里无法删除数据
SQL> archive log list
数据库日志模式            存档模式
自动存档             禁用
存档终点            C:\oracle\oradata\testdb\archive
最早的概要日志序列     1
下一个存档日志序列   1
当前日志序列           3


另一个SESSION也无法插入数据
SQL> insert into arch select * from arch where rownum = 1;

在alertlog中显示
Thread 1 advanced to log sequence 2
  Current log# 1 seq# 2 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO01.LOG
Thread 1 advanced to log sequence 3
  Current log# 2 seq# 3 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO02.LOG
Thread 1 cannot allocate new log, sequence 4 --第4个日志无法被分配,因为日志1不能被覆盖
Checkpoint not complete
  Current log# 2 seq# 3 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO02.LOG
Thread 1 cannot allocate new log, sequence 4
All online logs needed archiving -->>所有的在线日志需要归档
  Current log# 2 seq# 3 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO02.LOG
 
SQL> select count(*) from arch;

查询也被挂气

SQL> alter system switch logfile;   

还是被挂住

SQL> alter system archive log all;

系统已更改。

~~~~~~~~~~~~~~~~~~~~~~~~~~
此时日志1,2,3被归档,
alter system switch logfile;    也执行成功
select count(*) from arch;也执行成功
但是后面的在线仍然需要手工归档
~~~~~~~~~~~~~~~~~~~~~~~~~~

Thread 1 advanced to log sequence 5
  Current log# 1 seq# 5 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO01.LOG
Thread 1 cannot allocate new log, sequence 6
Checkpoint not complete
  Current log# 1 seq# 5 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO01.LOG
Thread 1 advanced to log sequence 6
  Current log# 2 seq# 6 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO02.LOG
Thread 1 cannot allocate new log, sequence 7
All online logs needed archiving
  Current log# 2 seq# 6 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO02.LOG
 
 
##################################################################
# [测试5] 数据库在非归档模式下,设置了自动归档,当一个事务处理的重做量大于
# 所有在线日志的大小总和时
################################################################## 
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> select count(*) from arch;

  COUNT(*)
----------
    838576
SQL> delete from arch; 
被挂起
 
alertlog中的记录
Mon Mar 07 10:30:55 2005
Thread 1 advanced to log sequence 134
  Current log# 1 seq# 134 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO01.LOG
Mon Mar 07 10:30:55 2005
ARC0: Media recovery disabled
Mon Mar 07 10:30:55 2005
Thread 1 advanced to log sequence 135
  Current log# 2 seq# 135 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO02.LOG
Mon Mar 07 10:30:56 2005
ARC0: Media recovery disabled
Mon Mar 07 10:30:56 2005
Thread 1 cannot allocate new log, sequence 136
Checkpoint not complete
  Current log# 2 seq# 135 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO02.LOG
Thread 1 advanced to log sequence 136
  Current log# 3 seq# 136 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO03.LOG
 
SQL> delete from arch; 
已删除838576行。
~~~~~~~~~~~~~~~~~~~~~~~~
在一个事务中可以删除大于所有在线日志的总和的数据
~~~~~~~~~~~~~~~~~~~~~~~~


##################################################################
# [测试6] 数据库在非归档模式下,设置了非自动归档,当一个事务处理的重做量大于
# 所有在线日志的大小总和时
##################################################################
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 system archive log stop;

系统已更改。

SQL> alter database open;

数据库已更改。

SQL> archive log list
数据库日志模式             非存档模式
自动存档             禁用
存档终点            C:\oracle\oradata\testdb\archive
最早的概要日志序列     208
当前日志序列           210

Thread 1 advanced to log sequence 237
  Current log# 2 seq# 237 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO02.LOG
Thread 1 advanced to log sequence 238
  Current log# 3 seq# 238 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO03.LOG
Thread 1 advanced to log sequence 239
  Current log# 1 seq# 239 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO01.LOG
Thread 1 advanced to log sequence 240
  Current log# 2 seq# 240 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO02.LOG
Thread 1 advanced to log sequence 241
  Current log# 3 seq# 241 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO03.LOG
Thread 1 advanced to log sequence 242
  Current log# 1 seq# 242 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO01.LOG
Thread 1 advanced to log sequence 243
  Current log# 2 seq# 243 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO02.LOG
Thread 1 advanced to log sequence 244
  Current log# 3 seq# 244 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO03.LOG
Thread 1 advanced to log sequence 245
  Current log# 1 seq# 245 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO01.LOG
Thread 1 advanced to log sequence 246
  Current log# 2 seq# 246 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO02.LOG
Thread 1 advanced to log sequence 247
  Current log# 3 seq# 247 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO03.LOG
Thread 1 advanced to log sequence 248
  Current log# 1 seq# 248 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO01.LOG
Thread 1 advanced to log sequence 249
  Current log# 2 seq# 249 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO02.LOG
Thread 1 advanced to log sequence 250
  Current log# 3 seq# 250 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO03.LOG
Thread 1 advanced to log sequence 251
  Current log# 1 seq# 251 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO01.LOG
Thread 1 advanced to log sequence 252
  Current log# 2 seq# 252 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO02.LOG
Thread 1 cannot allocate new log, sequence 253
Checkpoint not complete
  Current log# 2 seq# 252 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO02.LOG
Thread 1 advanced to log sequence 253
  Current log# 3 seq# 253 mem# 0: C:\ORACLE\ORADATA\TESTDB\REDO03.LOG
Mon Mar 07 10:38:37 2005
SMON: Parallel transaction recovery tried
Mon Mar 07 10:38:38 2005
Thread 1 cannot allocate new log, sequence 254
Checkpoint not complete

SQL> delete from arch;

已删除838576行。
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我们看到最终还是可以删除 

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3