第六章 维护重做日志文件

第六章 维护重做日志文件

注意以下两点:

利用重做日志文件,在数据库发生故障时,可以重新处理事务。

记录对数据所做的所有更改,提供恢复机制,可以划分成组,至少需要两个组。

第六章 维护重做日志文件_第1张图片

redo日志文件管理

  • 规划原则:分散分开到不同的硬盘,日志所在盘的io要足够,io读写都要快
  • 增加减少日志组或成员
  • 日志状态与监视
  • 处理日志一场[日志不一致、日志丢失、日志损坏]

增加减少日志成员或组

添加组
alter database add logfile [group n] ('','') size <>//组可以省略,系统自动分配

alter database add logfile [group n] ('','') size<>,[group n] ('','') size <> 	//添加多个组
添加成员
alter database add logfile member '' to group <>;
alter database add logfile member '' to group <>'' to group <>;//同时给不同组添加成员
删除组

active\current状态下不能删除

可以用切换日志的方式将状态切走

alter system switch logfile;
alter database drop logfile group<>; //删除一个
alter database drop logfile group<>,logfile group<>;//删除多个
删除成员

每个组下必须有一个成员,当组内只有一个成员时不可以删除

alter database drop logfile member '';
alter database drop logfile member '','';  //删除不同组下的成员
成员重命名

curren状态下不能改名

数据库open\mount状态且在归档模式才可以改名

查看是否归档:archive log list

alter database rename file '' to ''; 

非归档模式下如何改名?

  1. 一致性关闭数据库
  2. 启动到mount状态进行改名操作

日志状态与监视

redo日志文件的状态有四种,常见有三种

日志文件状态
  • CURRENT当前的日志文件,该日志文件是活动的,当前正在被使用的,在进行崩溃恢复时Current 的日志文件是必须的。
  • ACTIVE 日志是活动的非当前日志,该日志可能已经完成归档也可能没有归档,活动的日志文件在Crash 恢复时会被用到。
  • INACTIVE非活动日志,该日志在实例恢复时不再需要,但是在介质恢复时可能会用到。
  • UNUSED 表示该日志从未被写入,这类日志可能是刚被添加到数据库或者在RESETLOGS 之后被重置。被使用之后,该状态会被改变。
监视:位置再哪里,是否存在
select 'ho ls '||member from v$logfile;	执行返回结果查看文件是否存在

监视:磁盘空间是否足够

df -H
监视:日志自动切换间隔时间
desc v$log
select to_char(first_time,'yyyy-mm-dd hh24:mi:ss'),group# from v$log;
查看日志文件位置、组成员
select * from v$logfile;
col member for a40
/select * from v$log 

切换日志文件

alter system switch logfile;

处理日志异常

不一致处理

当启动数据库时报日志错误时,通过清除日志文件解决不一致问题

如果想清除日志文件需要考虑以下问题:

  • 报错文件是否是current状态
  • 关闭数据库是是否为一致性关闭(一致性关闭数据库可以清除)

确定不能清除日志文件,可以使用隐藏参数方式打开数据库

alter system set "_allow_resetlogs_corruption"=true scope=spfile;
recover database using backup controlfile; //欺骗性恢复,实际没有用到过去的备份文件恢复
alter database open resetlogs; 			   //报错是正常的
shutdown immediate
startup									   //会提示用resetlogs打开
alter database open resetlogs;
alter system reset "_allow_resetlogs_corruption" scope=spfile sid='*'; 		//取消隐藏参数

不能清除active、current状态的文件

alter database clear log file group n;
alter database clear unarchived logfile group n;	//这个指令可以清除active状态的文件

清理完的文件会变为UNUSED状态

你可能感兴趣的:(oracle,数据库)