Oracle笔记

** 第四章 ** ** ** ** 重做日志 ** ** **

** 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;

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus