oracle物理体系结构---联机重做日志文件

---------------
发生重做时,重做会被实际存储在数据库联机重做日志中。
oracle要求至少为一个数据库操作创建两个联机重做日志,这些联机重做日志可以包含有多个保护重做的镜像副本,称为多路重做日志。
考虑到性能和数据保护的因素,每个oracle数据库都必须至少有两个不同的联机重做日志组。
出于保护的目的,每个联机重做日志组都可以拥有多个位于不同磁盘驱动器上的日志。oracle并行写入不同的日志,从而使得写入进程更有效。oracle以轮询方式每次写入一个重做日志组。
就每个数据库而言,要保证其正常运行,至少必须有两个联机重做日志文件组;要保证安全,每组至少要有两个成员。
其中一个组是当前组,LGWR将更改写入当前联机重做日志文件。
LGWR能够确保对所有成员进行并行写操作,从而使这些成员完全相同。如果丢失某个组的一个成员,只要存在其他成员,数据库仍然能够继续运行。
maxlogfiles限制了数据库可以具有的重做日志文件组数 默认16
maxlogmembers限制了每个组可以具有的最大成员数 默认3
每个创建的联机重做日志文件分配给一个联机重做日志组。在非集群配置环境下,oracle在同一时间仅向一个重做日志组写入日志。
联机重做日志组有几个不同的状态:
current正在使用的联机重做日志。
active 它正在等待归档进程将重做日志复制到归档重做日志文件中。
inactive已经被归档的不活跃的联机重做日志。
unused正在被oracle数据库使用的联机重做日志文件

每个联机重做日志文件都有关联的唯一日志序列号。一个日志序列号唯一地标识一个联机重做日志文件,如果这个联机重做日志文件已归档,那么就标识相关联的归档重做日志文件。
(1)在v$LOG视图可以查找到联机重做日志文件的序列号。
(2)在V$ARCHIVED_LOG或V$log_history视图中可以查找给定的归档重做日志序列号。
(3)每个重做日志文件组都具有一条记录的V$LOG视图,以及每个成员都具有一行的V$LOGFILE视图
一个联机重做日志文件(以及一个归档的重做日志文件)包含该日志文件独特的一组数据库系统更改号(SCN),在恢复期间,oracle按日志序列号顺序来应用联机重做日志文件(归档的重做日志)中的撤销操作。
联机重做日志负责数据库中发生的每个原子变化。
重做日志中的记录称为更改矢量。每个更改矢量以scn顺序来代表一个原子数据库更改,这样可以在恢复期间将所以更改记录按顺序应用于数据库,从而实现恢复故障时间点的数据库。
LGWR进程负责将更改矢量从重做日志缓存区写入到联机重做日志中。

当一个联机重做日志写满重做内容时,oracle会切换到下一个联机联机重做日志。这称为日志切换操作。
日志切换是一个串行进程,从性能角度看,该进程开销昂贵。
在日志切换期间,LGWR寻找可写入的联机重做日志文件。如果LGWR不能找到可用文件,则等待可用联机联机重做日志文件,直到有可用为止。
在等待期间,LGWR将不厌其烦地向报警日志和其他地方发送抱怨信息,此时数据库的操作将被挂起,也就是说数据库将暂时停止工作。通常应该尽量避免这种情况发生。

------------联机重做日志文件的操作
alter database 命令可用于增加或删除联机重做日志
(1)为数据库增加一个联机重做日志组
alter database add logfile group 4 ('/u01/app/oracle/oradata/reod01a.log','/mydb/oradata/reod01b.log') size 100m;
由于多路联机重做日志组的多个成员可以并行写入,因此在每个组中尽管由多个日志成员组成也不会带来性能问题。
select group#,sequence#,bytes,members from v$log where group#=4;
select group#,member from v$logfile where group#=4;
(2)将重做日志文件组从数据库删除,这并不能完全删除物理文件。
alter database drop logfile group 4;
<如果使用了fra或db_create_online_log_Dest_n,那么在您发出删除命令后,oracle将删除联机重做日志>
当希望调整日志文件组大小时,需要先删除该日志文件组,然后以希望的大小重新建立该日志文件组。
(3)将多路复用副本添加到联机日志中
alter database add logfile number 'd:\app\oracle\oradata\redo01a.log' to group 1;


arch进程响应LGWR的调用,将在oracle数据库参数LOG_ARCHIVE_DEST_N 定义的地址和/或者定义的闪回恢复区上创建联机重做日志副本,直到arch进程至少创建了一个归档重做日志。
oracle才能重用有关的联机重做日志文件。在创建归档重做日志时,他们将保留分配给父联机重做日志序列号,该序列号在数据库中将保持唯一性,直到resetlogs操作打开数据库为止。
一旦执行resetlogs操作,日志序列号重置为1.
在执行恢复操作期间使用resetlogs命令启动数据库时还需注意一点。如果使用的是oracle10或更高版本。
oracle提供使用执行resetlogs命令时间点前的备份恢复数据库的功能。当执行resetlogs命令时,oracle将会在联机重做日志重置时归档所以未归档的联机重做日志。
该项功能提供使用执行resetlogs命令时间点前的备份恢复数据库的功能。使用备份文件和所有的归档重做日志,可以实现跨越resetlogs命令的数据库恢复,
该功能使dba在使用基于resetlogs命令恢复数据库后不用忙于立即进行备份。该功能减少了平均恢复时间,用户可以在恢复后打开数据库,而不需要首先备份数据库。

----------------------------------联机重做日志丢失的恢复

(1)非活动的联机重做日志文件组成员的丢失
alter database add logfile '' reuse to group 2;
(2)非活动的联机重做日志文件组的丢失
   I:在数据库启动期间
alter database drop logfile group2;
alter database add logfile 1 group 2 '' size 50m;
  II:在数据库运行期间
alter system checkpoint;
alter database clear logfile group 1;
若清楚的日志文件尚未归档,会出现错误ora-00350,ora-00312,在次情况下,使用
alter database clear unarchived logfile '';命令清除未归档的日志文件并在其当前位置重建日志文件
(3)丢失活动但非当前状态的联机重做日志文件组
alter database clear unarchived logfile '';因为活动的联机重做日志未归档。需要提示oracle这种情况时正常的,该命令将重建联机重做日志并允许oracle继续执行正常的操作
(4)丢失当前联机重做日志文件组
如果丢失当前联机重做日志文件组,一般数据库都会关闭而不会处于正常状态。
幸运的话,数据库可能没有关闭,此时应该立即使用alter system checkpoint命令执行检查点检查数据库操作,避免将数据全部丢失,然后快速将数据库关闭。
使用alter system checkpoint 命令将强制数据库将数据库缓冲区缓存中的脏数据块写入到数据库文件中。
不需要任何恢复可能也能打开数据库,按照如下方式重启数据库
startup mount
alter database clear unarchived logfile命令重建丢失的重做日志组
alter database open;
如果幸运的话,数据库将被成功打开。如未打开,需执行不完全恢复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值