您的位置:首页 > 数据库 > Oracle

oracle-dba- 重做日志管理

2017-03-03 23:20 274 查看
作用数据恢复。

用户更改的信息会暂时存放在数据库高速缓冲区中,是为了提高读写的速度。当达到一定的容量,DBWR就把变化的数据写到数据库中。中间假如出现了down就会数据无法恢复。所以引入重做日志管理,LGWR进程负责把用户更改的数据优先写到重做日志中。称为日志写优先。Down机后,重启时,数据库系统会从重做日志文件中读取变化的数据。

为了提高磁盘效率,并为了防止重做日志文件的损坏。Oracle引入了一种重做日志结构

重做日志文件结构由3个重做日志组组成,每个日志组有2个重做日志成员(文件),可以设置更多。数据库优先使用日志组1,该组写满后,切换到日志组2并为该日志组设置一个日志序列号,在写满后切换到日志组3,然后循环使用日志组1。

Oracle规定每个数据库实例最少要有2个重做日志组,每个重做日志组有一个重做日志成员。每个重做日志成员内容相同。

没有启动归档日志,当一个循环结束,在次使用之前的重做日志组。覆盖形式写入数据。

非归档模式下,重新使用心得联机重做日志前,dbwr进程会将所有的数据写入数据文件中。称为dbwr归档。

归档模式下,日志写满后,oracle会关闭当前的日志文件,ARCH进程把旧的重做日志文件中的数据移动到归档重做日志文件中。寻找下一个可用重做日志组。进行写操作。归档进程并不是一直存在。

再归档模式下, oracle无法使用一个已经关闭的重做日志,所以需要等待arch释放了联机重做日志后,数据库才能工作。

读取重做日志文件信息

Vlog视图
记录当前数据库的日志组号,日志序列号,每个日志文件的大小(字节单位),每个日志组的成员数量,以及日志组的当前状态。
Select group#,sequence#,bytes,members,archived,status from vlog;

输出说明,

当前有3个日志组,每个日志文件对应的日志序列号(全局唯一,同一个日志组中的日志序列号相同),每个日志组成员数量,状态(CURRENT表示当前正在使用),ARChive表示是否归档模式

Vlogfile视图
记录当前日志组号,状态,类型和成员信息
Col mumber for a10
Select group#,status,type,member from vlogfile;

Status参数的含义

 Stale:该文件内容不完整

 空白:该日志组正在使用

 Invalid:该文件不能被访问

 Deleted:该文件不在使用

Type:online表示联机状态

归档模式

查看当前数据库是否处于归档模式

Archive log list;

设置数据库为归档模式

1:关闭数据库,到mount状态

2:修改

Shutdown immediate

Startup nomount;

Alter database mount;

Alter database archivelog;

上述可知,存档终点:USE_DB_RECOVERY_FILE_DEST

查看USE_DB_RECOVERY_FILE_DEST指定的文件目录,与大小

Show parameter db_recovery_file_dest;

Oracle9i设置归档模式

设置相同的步骤,另外修改参数log_archive_start=true

可以修改init.ora,开启log_archive_start=true。

第二个是使用spfile.

重做日志组及其管理

添加重做日志组格式

ALTER DATABASE [database_name]

ADD LOGFILE [GROUP number] filename SIZE n

[,ADD LOGFILE [GROUP number] filename SIZE n…..]

ALTER DATABASE ADD LOGFILE GROUP 6

(‘G:\oracleDB\temp\redo.log’ , ‘G:\oracleDB\temp\redo2.log’)

size 11m;

不选择group参数,默认在原有日志组号的基础上自动增长。

删除重做日志组

ALTER DATABASE [database_name]

DROP LOGFILE{GROUP n|(‘filename’[,’filename’]…)}

{GROUP n|(‘filename’[,’filename’]…)}…

Alter database drop logfile group 4,group 5,group 6;

注意:删除重做日志组后,作为重做日志组成员的操作系统文件还在。

重做日志成员及维护

添加重做日志成员

格式:

ALTER DATABASE [databasename]

ADD LOGFILE MEMBER

[‘filename’ [REUSE] [, ‘filename’ [REUSE]] …

TO {GROUP n | (‘filename’ [ , ‘filename’]…)}…

]…

Alter database add logfile member

‘G:\oracleDB\temp\a1.log’ to group 1,

‘G:\oracleDB\temp\a2.log’ to group 2,

‘G:\oracleDB\temp\a3.log’ to group 3;

查看成员个数

Select group#,sequence#,bytes,members,archived,status from vlog;
查看重做日志组以及对应成员信息
Select group#,status,type,member from vlogfile;

注意:添加日志成员文件已存在,则需要使用reuse参数。日志成员要使用绝对路径,否则oracle数据库会在默认路径下建立该重做日志文件

删除联机重做日志成员

格式如下

ALTER DATABASE [database_name]

DROP LOGFILE MEMBER ‘filename’ [,’filename’]…

只需要知道重做日志成员的目录和文件名,但是操作系统中该成员文件没删除

Alter database drop logfile member ‘A2.LOG’;

删除限制

 删除的日志成员是日志组最后一个有效成员,不能删除

 该日志组正在使用。

 数据库运行在ARCHIVELOG模式,并且要删除的日志成员所属的日志组没有归档

重设联机重做日志的大小

Oracle没有提供直接修改联机重做日志大小的方法。

可以使用删除日志文件所在日志组,新建一个日志文件设置大小,来间接的达到目的

切换日志并删除当前没有使用的日志组

alter system switch logfile;

如果该日志组处于inactive,可以直接删除。如果处于active,继续使用日志切换指令加速重做日志组的归档工作。或者此时强制加入一个检查点。Alter database checkpoint。使得要删除的重做日志组处于inactive状态。因为强制检查点使DBWR将保存在联机重做日志中已经变化的内容写到了数据文件中。

清除联机重做日志

在数据库处于归档模式(ARCHIVELOG)时,如果当前正在使用的重做日志组中的重做日志文件损坏,则该重做日志不能完成归档,导致数据库因无法归档而挂起。

解决方案:通过清除联系机重做日志来重新初始化联机重做日志文件。

ALTER DATABASE CLEAR LOGFILE GROUP n;

注意:使用指令后,已删除的重做日志组中重做日志的序列号变为0,所以此时需要做数据库的全备份。因为oracle在进行数据库恢复时,需要连续的序列号。

日志切换和检查点事件

当一组重做日志组写满或者用户发出alter database switch logfile时,就会触发日志切换。此时oralce寻找下一个可用的重做日志组,如果数据库处于归档模式,则在将当前写满的日志组归档完成前不会使用新的重做日志组。

检查点事件是oracle减少数据库实例恢复时间而设置的一个事件。当该事件发生时LGWR进程将重做日志缓冲区中的数据写入重做日志文件中。而同时通知DBWR进程将数据库高速缓存中的已经提交的数据写到数据文件。所以检查点时间越频繁则用于数据库恢复的重做数据就越少。检查点事件也会修改数据文件头信息和控制文件信息。以记录检查点的SCN

强制启动检查点事件

ALTER DATABASE checkpoint;

如果不是强制性的产生检验点事件,检验点事件由DBWR数据库写进程触发。

归档重做日志

是联机重做日志的脱机备份。当数据库处于归档模式,发生日志切换或者日志写满,就会触发归档进程ARCH把重做日志文件中的数据移动到归档重做日志中。归档完毕,归档进程自动关闭。

归档日志文件存储在参数文件SPFILE或init.ora(log_archive_dest_n)文件参数指定的位置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: