Oracle笔记

发表于:2007-06-22来源:作者:点击数: 标签:
第四章 重做日志 1.基本概念 1. 重做线程(Redo Thread) 在OPS(Oracle Parallel Server)中,每个实例都有一套自己的重做日志文件。 重做线程与实例是一一对应的。 2. SCN(System Change Number) SCN是用于标识 数据库 变化的惟一标识号,其数值是顺序递增

   
  
第四章  重做日志

1.基本概念 

1.  重做线程(Redo Thread)

在OPS(Oracle Parallel Server)中,每个实例都有一套自己的重做日志文件。

重做线程与实例是一一对应的。

2.  SCN(System Change Number)

SCN是用于标识数据库变化的惟一标识号,其数值是顺序递增的。

3.  重做入口(Redo Entry)

4.  日志序列号

日志序列号是重做日志的使用标识号。当进行日志切换时,日志序列会自动增一,并将其信息写入控制文件中。

 

当执行了resetlogs操作后,日志序列号自动复位为1;当数据库处于archivelog模式时,系统会将日志序列号作为归档日志名称的一部分;在恢复数据库时,系统正是按日志序列号来引用归档日志和重做日志的。

 

2.归化重做日志

1.  多元化重做日志

多元化重做日志即镜像日志成员,通过把同一个日志组的不同日志成员放到不同磁盘是一个好主意,避免磁盘损坏导致实例终止。

应该将使不同日志组成员个数保持相同。

2.  合理设置重做日志尺寸

必须合理设置重做日志尺寸,避免日志切换频繁增加检查点次数而降低系统性能。(20~30min切换一次为宜,过大的话有可能导致实例恢复时间太长)

同一日志组成员尺寸必须相同。

3.  选择合适的日志组个数

选择不会妨碍LGWR进程工作的最少日志组个数。

当警告文件和LGWR跟踪文件中出现: 

checkpoint not complete或redo log group not archived时应该增加日志组。

 

3.日志切换

   当日志组写满之后Oracle Server会自动进行日志切换;另外也可以通过alter system switch logfile进行强制日志切换

 

4.检查点

   当启动Oracle Server时,后台进程SMON总会检查控制文件、数据文件和重做日志文件的一致性(即三种文件的SCN值是否相同)。

    a.当数据文件、控制文件、重做日志文件的当前SCN值完全一致,系统会直接打开有数据文件和重做日志。

    b.如果控制文件和数据文件的当前SCN值完全一致,并小于重做日志的当前SCN值,此时需要进行实例恢复(例如shutdown abort;突然断电等)

    c.如果控制文件和数据文件的当前SCN值不匹配,则表示数据文件或控制文件存在损坏,此时就需要进行介质恢复,以恢复损坏的物理文件。

  5.增加重做日志

1.  增加日志组

当警告文件出现了checkpoint not complete时,应该增加日志组。增加日志组的目的是为了确保DBWR进程和ARCH进程不会妨碍LGWR进程的工作,进而提高系统性能。

alter database add logfile

('E:\oracle\oradata\lgtest\newREDO01.LOG', 'F:\oracle\oradata\lgtest\newREDO01.LOG') size 30m;

2.  增加日志成员

增加日志成员即多元化重做日志,避免某个日志组的某个成员损坏后系统不能正常运转。

Alter database add logfile member

‘F:\oracle\oradata\lgtest\newREDO02.LOG'’ to group 2;

 

6.改变重做日志位置或名称

1.  复制重做日志到目标位置

copy E:\oracle\oradata\lgtest\newREDO01.LOG  f:\ newREDO01.LOG

2.  改变控制文件所记载的重做日志指针

alter database rename file ‘E:\oracle\oradata\lgtest\newREDO01.LOG’

  to ‘f:\ newREDO01.LOG’;

      但是不能改变当前正在使用的日志组成员。

 

 7.删除重做日志

1.  删除日志成员

alter database drop logfile member 'F:\oracle\oradata\lgtest\newREDO01.LOG'

不能删除日志组的惟一成员;

当数据库处于archivelog模式下,确保日志成员所在组已经归档;

不能删除当前日志组的日志成员

2.  删除日志组

alter database drop logfile group 3;

3.  清除重做日志

alter database clear unarchived logfile group 2;

 

    8.相关的一些脚本

1.  获取重做线程信息

   select thread#, groups, current_group#, sequence# from v$thread

2.  获取日志组信息或获取日志组的SCN信息

select * from v$log

3.  获取重做日志文件名

select * from v$logfile

4.  获取控制文件所记载的检查点信息

select checkpoint_change#, name from v$datafile

5.  获取数据文件所记载的检查点信息

    select checkpoint_change#, name from v$datafile_header

第五章  归档日志

归档日志即重做日志的备份,使用归档日志的目的是为了实现介质恢复。

1.日志操作模式

1.  Noarchivelog(非归档模式)

不保存重做日志。

不能在open状态下进行物理备份;要定期执行完全数据库备份;只能将数据库恢复到上次的完全备份点。

2.  Archivelog

当进行日志切换时,ARCH进程会将重做日志的内容复制到归档日志中。

在归档重做日志前,新事务变化不能覆盖旧事务变化。

可以在open 状态下进行物理备份。

可以将数据库恢复到失败前的状态。

可以是用备份数据库与主数据库保持同步。

 

2.开启归档

1.  改变日志操作模式

shutdown immediate;

startup mount;

alter database archivelog;

alter database open;

修改日志操作模式后,必须重新备份数据库

2.  归档重做日志

1.  手工归档

alter system archive log all;

2.  自动归档

设置初始化参数:log_archive_start=true

shutdown immediate;

startup pfile=.

3.  检查日志操作模式

archive log list;

 

3.指定归档位置

1.  使用log_archive_dest

1.  设置归档目录

log_archive_dest   log_archive_duplex_dest

2.  设置归档日志格式

2.  使用log_archive_dest_n

1.  指定归档位置

log_archive_dest_1=’location=f:\arc1’

log_archive_dest_3=’service=standby’

2.  设置其他初始化参数

log_archive_dest_state_1=enable

log_archive_dest_state_3=defer

4.相关的一些脚本

1.  显示日志操作模式

select log_mode from v$database

2.  显示归档日志信息

select name,sequence#,first_change# from v$archived_log

3.  显示归档日志位置

select destination from v$arvhive_dest

4.  显示日志历史信息

select * from v$loghist;

原文转自:http://www.ltesting.net