Redo丢失的4种情况是什么

59次阅读
没有评论

共计 5269 个字符,预计需要花费 14 分钟才能阅读完成。

这篇文章将为大家详细讲解有关 Redo 丢失的 4 种情况是什么,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

一. 说明:
1. 以下所说的当前日志指日志状态为 CURRENT,ACTIVE, 非当前日志指日志状态为 INACTIVE
2. 不用考虑归档和非归档模式,2 种模式下的 Redo 丢失情况一样。

二. 丢失 Redo 的 4 种情况:
第一种情况:非当前日志,正常关闭。
第二种情况:非当前日志,非正常关闭。
第三种情况:当前日志,正常关闭。
第四种情况:当前日志,非正常关闭。

三. 处理方法:
第一、二种情况的处理方法一样,直接把日志文件 clear 即可。
SQL alter database clear logfile group 3;
SQL alter database clear unarchived logfile group 3;// 如果 INACTIVE 状态的在线 Redo 还未归档,增加关键字 unarchived 完成 clear 操作。(ACTIVE,INACTIVE 都有可能未完成归档,归档是否完成可以查看 v$log.archived 字段)。

例子:

SQL startup mount

ORACLE 例程已经启动。

Total System Global Area  263639040 bytes

Fixed Size                  1384012 bytes

Variable Size             167772596 bytes

Database Buffers           88080384 bytes

Redo Buffers                6402048 bytes

数据库装载完毕。

SQL select group#,thread#,status,archived from v$log;

    GROUP#    THREAD# STATUS                           ARCHIV

———- ———- ——————————– ——

         1          1 CURRENT                          NO

         3          1 ACTIVE                           NO

         2          1 INACTIVE                         YES

SQL alter database clear logfile group 3;

alter database clear logfile group 3

*

第 1 行出现错误:

ORA-01624: 日志 3 是紧急恢复实例 orcl (线程 1) 所必需的

ORA-00312: 联机日志 3 线程 1: E:\APP\ORADATA\ORCL\REDO03.LOG

SQL alter database clear logfile group 2;

数据库已更改。

第三种情况的处理办法:
SQL startup mount;
SQL recover database until cancel;
SQL alter database open resetlogs;

例子 1:

SQL shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL startup mount

ORACLE 例程已经启动。

Total System Global Area  263639040 bytes

Fixed Size                  1384012 bytes

Variable Size             167772596 bytes

Database Buffers           88080384 bytes

Redo Buffers                6402048 bytes

数据库装载完毕。

SQL alter database open resetlogs;

alter database open resetlogs

*

第 1 行出现错误:

ORA-01139: RESETLOGS 选项仅在不完全数据库恢复后有效

SQL recover database until cancel;

完成介质恢复。

SQL alter database open resetlogs;

数据库已更改。

例子 2(第三种情况的第二个处理方法):

SQL shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL startup mount

ORACLE 例程已经启动。

Total System Global Area  263639040 bytes

Fixed Size                  1384012 bytes

Variable Size             167772596 bytes

Database Buffers           88080384 bytes

Redo Buffers                6402048 bytes

数据库装载完毕。

SQL select group#,thread#,status,archived from v$log;

    GROUP#    THREAD# STATUS                           ARCHIV

———- ———- ——————————– ——

         1          1 CURRENT                          NO

         3          1 INACTIVE                         YES

         2          1 INACTIVE                         YES

SQL alter database clear logfile group 2;

数据库已更改。

SQL alter database clear logfile group 3;

数据库已更改。

SQL alter database clear unarchived logfile group 1;

数据库已更改。

    这里 CURRENT 的 Redo 日志文件组能被 clear unarchived。

SQL alter database open;

数据库已更改。

    如果 Redo 日志文件丢失,clear 操作完成之后将在原有位置创建新的 Redo 日志文件。

第四种情况的处理方法:

1. 通过备份来还原、恢复数据。
2. 通过修改参数文件中的参数
_allow_resetlogs_corruption=TRUE
来强制启动数据库。  虽然能够启动数据库到 open 状态,但是启动后的数据库数据字典、数据有可能导致不一致的情况出现,故需要在 open 下把整个数据库 export,然后删除库,重建,再将 export 的数据 import 到新的数据库中。

四. 验证数据库是否正常关闭的方法

SQL select open_mode from v$database;

OPEN_MODE

——————–

READ WRITE

SQL select status from v$instance;

STATUS

————

OPEN

SQL select file#,checkpoint_change#,fuzzy from v$datafile_header;

   FILE# CHECKPOINT_CHANGE# FUZ

———- —————— —

         1            1165820 YES

         2            1165820 YES

         3            1165820 YES

         4            1165820 YES

   FUZZY bit in datafile header means that there may have been writes into a datafile after the last checkpoint. E.g. there may be changes written to datafile with higher SCN than checkpoint_change# stored in datafile header (seen from v$datafile_header.checkpoint_change#).
        FUZYY 表示模糊性,意思是,该数据文件处于模糊状态,在最近一次 CHECKPOINT 后,该文件上的数据可能被修改过了,但没来得及更新到该文件上(或者该文件不知道),需要读取日志信息来判断。

SQL select file#,checkpoint_change#,last_change# from v$datafile;

   FILE# CHECKPOINT_CHANGE# LAST_CHANGE#

———- —————— ————

         1            1165820

         2            1165820

         3            1165820

         4            1165820

    由于数据库是打开的状态,所以终止 SCN 是空,SCN 的内容可参考文章:http://space.itpub.net/23135684/viewspace-627343

SQL shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL startup mount

ORACLE 例程已经启动。

Total System Global Area  313860096 bytes

Fixed Size                  1384352 bytes

Variable Size             155189344 bytes

Database Buffers          150994944 bytes

Redo Buffers                6291456 bytes

数据库装载完毕。

SQL select file#,checkpoint_change#,fuzzy from v$datafile_header;

   FILE# CHECKPOINT_CHANGE# FUZ

———- —————— —

         1            1166324 NO

         2            1166324 NO

         3            1166324 NO

         4            1166324 NO

    在正常关闭数据库的情况下,FUZZY 字段都应该是 NO,表示没有模糊不清的 SCN 存储在数据文件中。

SQL select file#,checkpoint_change#,last_change# from v$datafile;

   FILE# CHECKPOINT_CHANGE# LAST_CHANGE#

———- —————— ————

         1            1166324      1166324

         2            1166324      1166324

         3            1166324      1166324

         4            1166324      1166324

    正常关闭数据库的终止 SCN 应该和启动 SCN 相同。FUZZY 等于 NO,且数据库的终止 SCN 等于启动 SCN 等于数据文件 SCN,那么可以认为数据库是正常关闭,且在打开数据库之前不需要执行实例恢复或 Crash 恢复。

SQL alter database open;

数据库已更改。

SQL shutdown abort

ORACLE 例程已经关闭。

SQL startup mount

ORACLE 例程已经启动。

Total System Global Area  313860096 bytes

Fixed Size                  1384352 bytes

Variable Size             155189344 bytes

Database Buffers          150994944 bytes

Redo Buffers                6291456 bytes

数据库装载完毕。

SQL select file#,checkpoint_change#,fuzzy from v$datafile_header;

   FILE# CHECKPOINT_CHANGE# FUZ

———- —————— —

         1            1166327 YES

         2            1166327 YES

         3            1166327 YES

         4            1166327 YES

    非正常关闭数据库实例,FUZZY 字段的值是 YES。

SQL select file#,checkpoint_change#,last_change# from v$datafile;

   FILE# CHECKPOINT_CHANGE# LAST_CHANGE#

———- —————— ————

         1            1166327

         2            1166327

         3            1166327

         4            1166327

    非正常关闭数据库实例,终止 SCN 依然为空。那么,在数据库被打开之前必须使用归档 Redo 日志完成实例恢复或 Crash 恢复。

关于“Redo 丢失的 4 种情况是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-24发表,共计5269字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)