ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 对归档模式下CLEAR 未归档日志后恢复数据库的一点看法

对归档模式下CLEAR 未归档日志后恢复数据库的一点看法

原创 Linux操作系统 作者:space6212 时间:2019-07-20 19:06:02 0 删除 编辑

在资料上看到过如果不是当前联机日志出问题,且如果日志未归档,可以用clear unarchived 命令清空归档日志,达到打开数据库的目的。
然而,很少资料提到clear后应该做一些什么后续工作来保证数据的安全。


根据恢复的理论,要想完全恢复数据库,从备份某一个文件后的日志不能出现断点,否则将恢复不成功。下面用试验来证明clear不做备份的严重后果:

试验步骤:
(1)关闭数据库,备份某数据文件,把自动归档关闭
(2)往数据库中insert一批数据,查看当前日志,记录下来,并切换日志,此时可使insert数据时对于的日志是未归档
(3)关闭数据库,破坏步骤2中未被归档的日志
(4)startup mount、clear unarchived logfile
(5)打开数据库后重新往数据库中插入一批记录,并切换几次日志,最后将所有日志手工归档
(6)关闭数据库,还原文件
(7)recover文件


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

-----备份数据文件-----


SQL> startup
ORACLE 例程已经启动。

Total System Global Area 135339388 bytes
Fixed Size 454012 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL> archive log list
数据库日志模式 存档模式
自动存档 禁用
存档终点 D:oracleoradataarc
最早的概要日志序列 11
下一个存档日志序列 11
当前日志序列 11
SQL> conn suk/suk
已连接。
SQL> create table a as select * from dba_users;

表已创建。

SQL> select * from a;
行将被截掉


USERNAME USER_ID PASSWORD ACCOUNT_STATUS LOCK_DATE EXP
------------------------------ ---------- ------------------------------ -------------------------------- ---------- ---
SYS 0 DAD94A5D1B6405DC OPEN
SYSTEM 5 3EC1CAE40BBBC728 OPEN
DBSNMP 19 E066D214D5421CCC OPEN
SUK 61 DD5C4BF6D7A511DE OPEN

SQL> conn / as sysdba
已连接。
SQL> select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
4 1 11 10485760 1 NO CURRENT 1391287 12-12月-05
5 1 0 10485760 1 YES UNUSED 1391143 12-12月-05
6 1 0 10485760 1 YES UNUSED 1391024 12-12月-05

SQL> alter system switch logfile;

系统已更改。

SQL> archive log list
数据库日志模式 存档模式
自动存档 禁用
存档终点 D:oracleoradataarc
最早的概要日志序列 11
下一个存档日志序列 11
当前日志序列 12
SQL> select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
4 1 11 10485760 1 NO ACTIVE 1391287 12-12月-05
5 1 12 10485760 1 NO CURRENT 1408674 12-12月-05
6 1 0 10485760 1 YES UNUSED 1391024 12-12月-05

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

------------删除redo04----------------

SQL> startup
ORACLE 例程已经启动。

Total System Global Area 135339388 bytes
Fixed Size 454012 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-00313: 无法打开日志组 4 (线程 1) 的成员
ORA-00312: 联机日志 4 线程 1: 'D:ORACLEORADATAORACLE9IREDO04.ORA'


SQL> alter database clear unarchived logfile group 4;

数据库已更改。

SQL> alter database open;

数据库已更改。

SQL> conn suk/suk
已连接。

SQL> create table b as select * from user_users;

表已创建。

SQL> select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
4 1 0 10485760 1 YES UNUSED 1391287 12-12月-05
5 1 12 10485760 1 NO CURRENT 1408674 12-12月-05
6 1 0 10485760 1 YES UNUSED 1391024 12-12月-05

SQL> alter system switch logfile;

系统已更改。


SQL> alter system switch logfile;

系统已更改。

SQL> alter system switch logfile;

系统已更改。

SQL> conn / as sysdba
已连接。
SQL> archive log all;
已存档一个日志。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。

----------将最初备份的文件拷贝回来------------------

SQL> startup
ORACLE 例程已经启动。

Total System Global Area 135339388 bytes
Fixed Size 454012 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-01113: 文件 11 需要介质恢复
ORA-01110: 数据文件 11: 'D:ORACLEORADATAORACLE9ISUK_UNIF01.DBF'


SQL> recover datafile 11;
ORA-00279: 更改 1407900 (在 12/12/2005 15:24:08 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:ORACLEORADATAARCARC00011.001
ORA-00280: 更改 1407900 对于线程 1 是按序列 # 11 进行的


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


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


从过程可以看出,数据文件恢复失败。也就是说,如果对日志执行clear操作,则clear前的备份是没有意义的(只能做不完全恢复到clear前的状态)
因此,我们做完clear操作后,应立刻对数据库做一次全备。

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

下一篇: LMT下extent的分配
请登录后发表评论 登录
全部评论

注册时间:2005-01-25

  • 博文量
    245
  • 访问量
    165963