ITPub博客

首页 > 数据库 > 数据库开发技术 > 数据库备份与恢复测试 6

数据库备份与恢复测试 6

原创 数据库开发技术 作者:scoreking 时间:2006-02-15 18:28:00 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:ORACLEORADATATESTDBUSERS01.DBF
通道 ORA_DISK_1: 已恢复备份段 1
段 handle=C:ORACLEORA92DATABASEAGECGNM_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:oracleora92DATABASEPWDtestdb.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:ORACLEORADATATESTDBSYSTEM01.DBF
输入数据文件 fno=00002 name=C:ORACLEORADATATESTDBUNDOTBS01.DBF
输入数据文件 fno=00003 name=C:ORACLEORADATATESTDBINDX01.DBF
输入数据文件 fno=00005 name=C:ORACLEORADATATESTDBUSERS01.DBF
输入数据文件 fno=00004 name=C:ORACLEORADATATESTDBTOOLS01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 03-3月 -05
通道 ORA_DISK_1: 已完成段 1 于 03-3月 -05
段 handle=C:ORACLEORA92DATABASE1GECMF4_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:ORACLEORADATATESTDBARCHIVE1_4.DBF
ORA-00280: 更改 69868 对于线程 1 是按序列 # 4 进行的


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

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


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

ORA-00308: 无法打开存档日志 'C:ORACLEORADATATESTDBARCHIVE1_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:ORACLEORADATATESTDBSYSTEM01.DBF'


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


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

数据库已更改。

SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 C:oracleoradatatestdbarchive
最早的概要日志序列 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 Settingslifeng.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:ORACLEORADATATESTDBSYSTEM01.DBF
输入数据文件 fno=00002 name=C:ORACLEORADATATESTDBUNDOTBS01.DBF
输入数据文件 fno=00003 name=C:ORACLEORADATATESTDBINDX01.DBF
输入数据文件 fno=00005 name=C:ORACLEORADATATESTDBUSERS01.DBF
输入数据文件 fno=00004 name=C:ORACLEORADATATESTDBTOOLS01.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:oracleoradatatestdbarchive
最早的概要日志序列 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:ORACLEORADATATESTDBUSERS01.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:oracleoradatatestdbarchive
最早的概要日志序列 1
当前日志序列 3

C:Documents and Settingslifeng.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:ORACLEORADATATESTDBSYSTEM01.DBF
输入数据文件 fno=00002 name=C:ORACLEORADATATESTDBUNDOTBS01.DBF
输入数据文件 fno=00003 name=C:ORACLEORADATATESTDBINDX01.DBF
输入数据文件 fno=00005 name=C:ORACLEORADATATESTDBUSERS01.DBF
输入数据文件 fno=00004 name=C:ORACLEORADATATESTDBTOOLS01.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:ORACLEORADATATESTDBUSERS01.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:ORACLEORADATATESTDBUSERS01.DBF
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到C:ORACLEORADATATESTDBSYSTEM01.DBF
正将数据文件00002恢复到C:ORACLEORADATATESTDBUNDOTBS01.DBF
正将数据文件00003恢复到C:ORACLEORADATATESTDBINDX01.DBF
正将数据文件00004恢复到C:ORACLEORADATATESTDBTOOLS01.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:ORACLEORADATATESTDBARCHIVE1_3.DBF
ORA-00280: 更改 69456 对于线程 1 是按序列 # 3 进行的


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


ORA-00308: 无法打开存档日志 'C:ORACLEORADATATESTDBARCHIVE1_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:ORACLEORADATATESTDBARCHIVE1_3.DBF
ORA-00280: 更改 69456 对于线程 1 是按序列 # 3 进行的


指定日志: {=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 ;

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:ORA81ORA81ORADATATESTREDO04.LOG
','C:ORA81ORA81ORADATATESTREDO041.LOG') size 20M;

数据库已更改。

SQL> ALTER DATABASE ADD LOGFILE GROUP 5 ('C:ORA81ORA81ORADATATESTREDO05.LOG
','C:ORA81ORA81ORADATATESTREDO051.LOG') size 20M;

数据库已更改。

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


SQL> l
1* ALTER DATABASE ADD LOGFILE GROUP 6 ('C:ORA81ORA81ORADATATESTREDO06.LOG
','C:ORA81ORA81ORADATATESTREDO061.LOG') size 20M
SQL> ALTER DATABASE ADD LOGFILE GROUP 6 ('C:ORA81ORA81ORADATATESTREDO06.LOG
','C:ORA81ORA81ORADATATESTREDO061.LOG') size 20M;
ALTER DATABASE ADD LOGFILE GROUP 6 ('C:ORA81ORA81ORADATATESTREDO06.LOG','C:
ORA81ORA81ORADATATESTREDO061.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:ORA81ORA81ORADATATESTREDO01.LOG
2 ONLINE C:ORA81ORA81ORADATATESTREDO02.LOG
3 ONLINE C:ORA81ORA81ORADATATESTREDO03.LOG
1 INVALID ONLINE C:ORA81ORA81ORADATATESTREDO011.LOG
2 INVALID ONLINE C:ORA81ORA81ORADATATESTREDO021.LOG
3 INVALID ONLINE C:ORA81ORA81ORADATATESTREDO031.LOG
4 ONLINE C:ORA81ORA81ORADATATESTREDO04.LOG
4 ONLINE C:ORA81ORA81ORADATATESTREDO041.LOG
5 ONLINE C:ORA81ORA81ORADATATESTREDO05.LOG
5 ONLINE C:ORA81ORA81ORADATATESTREDO051.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:ORA81ORA81ORADATATESTREDO04.LOG
4 ONLINE C:ORA81ORA81ORADATATESTREDO041.LOG
5 ONLINE C:ORA81ORA81ORADATATESTREDO05.LOG
5 ONLINE C:ORA81ORA81ORADATATESTREDO051.LOG

SQL> ALTER DATABASE ADD LOGFILE GROUP 1 ('C:ORA81ORA81ORADATATESTREDO01.LOG

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

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

数据库已更改。

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


SQL> ALTER DATABASE ADD LOGFILE GROUP 2 ('C:ORA81ORA81ORADATATESTREDO02.LOG
','C:ORA81ORA81ORADATATESTREDO021.LOG') size 20M;

数据库已更改。

SQL> ALTER DATABASE ADD LOGFILE GROUP 3 ('C:ORA81ORA81ORADATATESTREDO03.LOG
','C:ORA81ORA81ORADATATESTREDO031.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:ORA81ORA81ORADATATESTREDO01.LOG
1 ONLINE C:ORA81ORA81ORADATATESTREDO011.LOG
2 ONLINE C:ORA81ORA81ORADATATESTREDO02.LOG
2 ONLINE C:ORA81ORA81ORADATATESTREDO021.LOG
3 ONLINE C:ORA81ORA81ORADATATESTREDO03.LOG
3 ONLINE C:ORA81ORA81ORADATATESTREDO031.LOG
4 ONLINE C:ORA81ORA81ORADATATESTREDO04.LOG
4 ONLINE C:ORA81ORA81ORADATATESTREDO041.LOG
5 ONLINE C:ORA81ORA81ORADATATESTREDO05.LOG
5 ONLINE C:ORA81ORA81ORADATATESTREDO051.LOG


已选择10行。

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

删除C:ORA81ORA81ORADATATESTREDO01.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:ORA81ORA81ORADATATESTREDO01.LOG'
ORA-00312: 联机日志 1 线程 1: 'C:ORA81ORA81ORADATATESTREDO011.LOG'


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


SQL> alter database clear logfile group 1;

数据库已更改。

这时会自动增加 'C:ORA81ORA81ORADATATESTREDO01.LOG'
'C:ORA81ORA81ORADATATESTREDO011.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:ORA81ORA81ORADATATESTREDO05.LOG'
ORA-00312: 联机日志 5 线程 1: 'C:ORA81ORA81ORADATATESTREDO051.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:ORA81ORA81ORADATATESTREDO05.LOG'
ORA-00312: 联机日志 5 线程 1: 'C:ORA81ORA81ORADATATESTREDO051.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:ORA81ORA81ORADATATESTREDO011.LOG'
ORA-00316: 日志 1 (线程 1),标题中的类型 0 不是日志文件
ORA-00312: 联机日志 1 线程 1: 'C:ORA81ORA81ORADATATESTREDO01.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:ORA81ORA81ORADATATESTREDO01.LOG'
ORA-00312: 联机日志 1 线程 1: 'C:ORA81ORA81ORADATATESTREDO011.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:ORA81ORA81ORADATATESTREDO01.LOG'
ORA-00312: 联机日志 1 线程 1: 'C:ORA81ORA81ORADATATESTREDO011.LOG'


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


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


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

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


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


SQL> show parameter spfile

NAME TYPE VALUE
------------------------------------ ----------- -----------------------------
spfile string %ORACLE_HOME%DATABASESPFILE
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:ORACLEORADATATESTDBREDO01.LOG' SIZE 1M, --修改在线日志为1M
10 GROUP 2 'C:ORACLEORADATATESTDBREDO02.LOG' SIZE 1M,
11 GROUP 3 'C:ORACLEORADATATESTDBREDO03.LOG' SIZE 1M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'C:ORACLEORADATATESTDBSYSTEM01.DBF',
15 'C:ORACLEORADATATESTDBUNDOTBS01.DBF',
16 'C:ORACLEORADATATESTDBINDX01.DBF',
17 'C:ORACLEORADATATESTDBTOOLS01.DBF',
18 'C:ORACLEORADATATESTDBUSERS01.DBF'
19 CHARACTER SET ZHS16GBK
20 ;

控制文件已创建

SQL> alter database open resetlogs;

数据库已更改。

SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 C:oracleoradatatestdbarchive
最早的概要日志序列 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:oracleoradatatestdbarchive
最早的概要日志序列 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:oracleoradatatestdbarchive
最早的概要日志序列 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:ORACLEORADATATESTDBREDO01.LOG
Thread 1 advanced to log sequence 3
Current log# 2 seq# 3 mem# 0: C:ORACLEORADATATESTDBREDO02.LOG
Thread 1 cannot allocate new log, sequence 4 --第4个日志无法被分配,因为日志1不能被覆盖
Checkpoint not complete
Current log# 2 seq# 3 mem# 0: C:ORACLEORADATATESTDBREDO02.LOG
Thread 1 cannot allocate new log, sequence 4
All online logs needed archiving -->>所有的在线日志需要归档
Current log# 2 seq# 3 mem# 0: C:ORACLEORADATATESTDBREDO02.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:ORACLEORADATATESTDBREDO01.LOG
Thread 1 cannot allocate new log, sequence 6
Checkpoint not complete
Current log# 1 seq# 5 mem# 0: C:ORACLEORADATATESTDBREDO01.LOG
Thread 1 advanced to log sequence 6
Current log# 2 seq# 6 mem# 0: C:ORACLEORADATATESTDBREDO02.LOG
Thread 1 cannot allocate new log, sequence 7
All online logs needed archiving
Current log# 2 seq# 6 mem# 0: C:ORACLEORADATATESTDBREDO02.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:ORACLEORADATATESTDBREDO01.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:ORACLEORADATATESTDBREDO02.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:ORACLEORADATATESTDBREDO02.LOG
Thread 1 advanced to log sequence 136
Current log# 3 seq# 136 mem# 0: C:ORACLEORADATATESTDBREDO03.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:oracleoradatatestdbarchive
最早的概要日志序列 208
当前日志序列 210

Thread 1 advanced to log sequence 237
Current log# 2 seq# 237 mem# 0: C:ORACLEORADATATESTDBREDO02.LOG
Thread 1 advanced to log sequence 238
Current log# 3 seq# 238 mem# 0: C:ORACLEORADATATESTDBREDO03.LOG
Thread 1 advanced to log sequence 239
Current log# 1 seq# 239 mem# 0: C:ORACLEORADATATESTDBREDO01.LOG
Thread 1 advanced to log sequence 240
Current log# 2 seq# 240 mem# 0: C:ORACLEORADATATESTDBREDO02.LOG
Thread 1 advanced to log sequence 241
Current log# 3 seq# 241 mem# 0: C:ORACLEORADATATESTDBREDO03.LOG
Thread 1 advanced to log sequence 242
Current log# 1 seq# 242 mem# 0: C:ORACLEORADATATESTDBREDO01.LOG
Thread 1 advanced to log sequence 243
Current log# 2 seq# 243 mem# 0: C:ORACLEORADATATESTDBREDO02.LOG
Thread 1 advanced to log sequence 244
Current log# 3 seq# 244 mem# 0: C:ORACLEORADATATESTDBREDO03.LOG
Thread 1 advanced to log sequence 245
Current log# 1 seq# 245 mem# 0: C:ORACLEORADATATESTDBREDO01.LOG
Thread 1 advanced to log sequence 246
Current log# 2 seq# 246 mem# 0: C:ORACLEORADATATESTDBREDO02.LOG
Thread 1 advanced to log sequence 247
Current log# 3 seq# 247 mem# 0: C:ORACLEORADATATESTDBREDO03.LOG
Thread 1 advanced to log sequence 248
Current log# 1 seq# 248 mem# 0: C:ORACLEORADATATESTDBREDO01.LOG
Thread 1 advanced to log sequence 249
Current log# 2 seq# 249 mem# 0: C:ORACLEORADATATESTDBREDO02.LOG
Thread 1 advanced to log sequence 250
Current log# 3 seq# 250 mem# 0: C:ORACLEORADATATESTDBREDO03.LOG
Thread 1 advanced to log sequence 251
Current log# 1 seq# 251 mem# 0: C:ORACLEORADATATESTDBREDO01.LOG
Thread 1 advanced to log sequence 252
Current log# 2 seq# 252 mem# 0: C:ORACLEORADATATESTDBREDO02.LOG
Thread 1 cannot allocate new log, sequence 253
Checkpoint not complete
Current log# 2 seq# 252 mem# 0: C:ORACLEORADATATESTDBREDO02.LOG
Thread 1 advanced to log sequence 253
Current log# 3 seq# 253 mem# 0: C:ORACLEORADATATESTDBREDO03.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行。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我们看到最终还是可以删除


[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/257699/viewspace-815192/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-11-04

  • 博文量
    40
  • 访问量
    209277