Oracle重做日志文件

系统 1699 0

    重做日志文件(redo log file) 对于Oracle数据库至关重要。它们是数据库的事务日志。通常只用于恢复,不过也可以用于以下工作:

     1.系统崩溃后的实例恢复;

     2.通过备份恢复数据文件之后恢复介质;

     3.备用(standby)数据库处理;

 

一.简介

 

Oracle 引入重做日志的目的:数据库的恢复。

 

Oracle 相关进程:重做日志写进程( LGWR )。

 

重做日志性质:联机日志文件, oracle 服务器运行时需要管理它们。

 

相关数据字典: v$log ; v$logfile

 

操作者权限:具有 sys 用户或 system 用户权限。

 

二.获取重做日志的信息

 

1. 获得数据库中有多少个重做日志组,每个组中有多少个成员、日志大小及状态。

 

SELECT GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED

 

FROM V$LOG;

 

结果如下图:

 

Oracle重做日志文件

 

 

 

状态列( status )所显示常用状态的含义:

 

  • inactive :表示实例恢复已不再需要这组联机重做日志组了。
  • active :表示该组是活动的但不是当前组,实例恢复时需要这组日志。
  • current :表示该组日志是当前组,该联机重做日志组是活动的。
  • unused :表示该日志组从未写过,是重做日志刚刚添加到状态。

 

2. 获得数据库中每个重做日志组的成员所在目录、文件名及状态。

 

    SELECT GROUP#,STATUS,TYPE,MEMBER

FROM V$LOGFILE;

 

结果如下图:

 

    Oracle重做日志文件

 

 

 

状态列( status )所显示常用状态的含义:

 

  • 空白:表示该文正在使用。
  • stale :表示该文件中的内容是不完全的。
  • invalid :表示该文件是不可以被访问的。
  • deleted :表示该文件已不在有用了。

 

 

 

三.日志切换

 

联机重做日志文件是以一种循环的方式来使用,当一组联机重做日志文件被写满时, LGWR 将开始写下一组日志文件,这被称为日志切换。可以在任何时候强制性的进行重做日志切换操作。

 

强制重做日志切换命令: ALTER SYSTEM SWITCH LOGFILE;

 

日志切换前,正在写的日志组是 3

 

Oracle重做日志文件

 

执行命令 ALTER SYSTEM SWITCH LOGFILE 后,在写日志组变为 1

 

Oracle重做日志文件

 


 

四.添加和删除联机重做日志文件组

 

1. 添加联机重做日志组

 

创建新的重做日志组 SQL 命令格式:

 

ALTER DATABASE [ 数据库名 ]

 

ADD LOGFILE [GROUP 正整数 ] 文件名

 

[, [GROUP 正整数 ] 文件名 ] ……]

 

 

 

创建新的重做日志组例子:

 

ALTER DATABASE ADD LOGFILE ('d:\logfile\redo 04a.log','e:\logfile\redo04b.log')

 

SIZE 15M;

 

 

 

注意: 由于没有使用 GROUP 选项,所有 oracle 系统会自动地在最大的组号上加 1 来产生新的组号。

 

显示结果如下,创建一组新的日志组,组号是 4 ,有两个成员,成员大小为 15M

 

SELECT GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED

 

FROM V$LOG;

 

 

 

Oracle重做日志文件

 

下面的结果显示了新建日志的文件路径和文件名。

 

SELECT GROUP#,STATUS,TYPE,MEMBER

 

FROM V$LOGFILE;

 

Oracle重做日志文件

 

 

2. 删除联机重做日志组

 

删除重做日志组 SQL 命令格式:

 

ALTER DATABASE [ 数据库名 ]

 

DROP LOGFILE {GROUP 正整数 | (‘ 文件名 ’[, ‘ 文件名 ’]……)}

 

[,{GROUP 正整数 | (‘ 文件名 ’[, ‘ 文件名 ’]……)}]…….

 

 

 

删除重做日志组例子:

 

ALTER DATABASE DROP LOGFILE GROUP 4;

 

 

 

显示结果如下,可以看出 GROUP 4 的日志组已经不存在。

 

SELECT GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED

 

FROM V$LOG;

 

Oracle重做日志文件

 

SELECT GROUP#,STATUS,TYPE,MEMBER

 

FROM V$LOGFILE;

 

Oracle重做日志文件

 

 

 

注意:

 

当前的重做日志组不能删除。如果要删除,先使用日志强制切换命令 ALTER SYSTEM SWITCH LOGFILE 进行切换。当一组重做日志被删除后,它的操作系统文件依然存在,只能用操作系统命令删除,否则会留下一些无用的垃圾文件。

 

 

 

五.添加和删除联机重做日志成员(文件)

 

1. 添加联机重做日志成员

 

创建新的重做日志成员(文件) SQL 格式:

 

ALTER DATABASE [ 数据库名 ]

 

ADD LOGFILE MEMBER

 

[ ‘ 文件名 ’ [REUSE] [, ’ 文件名 ’ [REUSE]]]……

 

TO {GROUP 正整数 | (‘ 文件名 ’[, ‘ 文件名 ’]……)}

 

 

 

添加重做日志成员例子:

 

ALTER DATABASE ADD LOGFILE MEMBER

 

'd:\logfile\redo01b.log' TO GROUP 1,

 

'd:\logfile\redo02b.log' TO GROUP 2,

 

'e:\logfile\redo03b.log' TO GROUP 3;

 

 

 

显示结果如下,可以看出每个日志组增加了一个日志成员,有原来的 2 个增加到 3 个。

 

SELECT GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED

 

FROM V$LOG;

 

Oracle重做日志文件

 

下面的结果,显示了新增日志文件的路径和文件名。

 

SELECT GROUP#,STATUS,TYPE,MEMBER

 

FROM V$LOGFILE;

 

Oracle重做日志文件

 

 

 

2. 删除联机重做日志成员

 

删除联机重做日志成员(文件) SQL 命令格式:

 

ALTER DATABASE [ 数据库 ]

 

DROP LOGFILE MEMBER ‘ 文件名 ’ [, ‘ 文件名 ’] ……

 

 

 

删除重做日志成员例子:

 

ALTER DATABASE DROP LOGFILE MEMBER 'd:\logfile\redo02b.log';

 

 

 

结果显示如下,可以看出删除了组 2 一个日志成员。

 

SELECT GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED

 

FROM V$LOG;

 

Oracle重做日志文件

 

SELECT GROUP#,STATUS,TYPE,MEMBER

 

FROM V$LOGFILE;

 

 

 

Oracle重做日志文件

 

注意:

 

当前的重做日志组不能删除,否则会报如下错误:

 

Oracle重做日志文件

 

 

 

如果要删除,应该先使用 ALTER SYSTEM SWITCH LOGFILE 命令进行切换。

 

如果数据库运行在归档模式,而要删除的成员还没有被归档完,那也无法删除它。

 

当一个重做日志成员被删除后,它的操作系统文件依然存在,只能用操作系统命令删除。

Oracle重做日志文件


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论