###############################################
# [测试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@]
# [测试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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/257699/viewspace-815192/