日志文件管理(联机重做)
1.日志文件作用
记录用户做的DML,部分DDL操作
主要用做数据库的恢复
2.日志文件的工作原理
通过lgwr 进程将我们日志缓冲区的内容,顺序的写入到日志文件中
状态:
a.current ---当前正在使用的日志组
缓冲区的内容写到这个状态下的日志,此状态下的文件丢失,必定丢数据
b.active ---活动状态,记录在这种日志组下的信息有可能没有写入到数据文件,数据库恢复时还要使用
还未写入到数据文件中,此状态下的文件丢失,也会丢数据
c.inactive ---非活动状态,记录在这种状态日志组下信息全部记录在数据文件
信息已全部写入数据文件中,丢失不会导致丢数据
d.unused ---没有使用过的
日志组:一个数据库中至少要有两个日志组,一个日志组下的成员为日志文件
日志文件:一个日志组下至少要有一个日志文件,一个组下的成员记录的内容是一样的,互为镜像关系。一个组下的成员的大小必须一样。
lsn:(log system number) 日志系统变更编号 用来区分每一个日志成员的信息
>>>desc v$log
>>>select group#,status from v$log; //查看有几个日志组
>>>select group#,member from v$logfile
3.日志文件在项目中的规划
至少3个组
一个组下至少有两个日志成员,且要分开存放,不在同一个文件夹或磁盘
disk1 | disk2 | disk3 | |
---|---|---|---|
group1 | r1.log | r11.log | r12.log |
group2 | r2.log | r21.log | r22.log |
group3 | r3.log | r31.log | r32.log |
日志在15-30分钟切换一次才正常
>>>desc v$log_history //查看切换日志的时间
4.日志文件的管理
a.日志组增加
alter database add logfile group <名字为number型,且系统中不存在> ('/',‘/’ 增加两个日志文件) size <单个日志文件的大小>;
>>>alter system switch logfile ; //手动切换日志
b.日志组删除
current----不能被删除
active-----不能被删除
一个数据库中只有最后两个日志组,不能被删除
>>> alter database drop logfile group 1/2/.... //删除日志组,物理文件需要rm删除
c.日志组下增加成员
alter database add logfile member '/' to group <>; //项目中保证两个以上,一般是三个
d.日志组下删除成员
alter database drop logfile member '/';
1.一个日志组下只有最后一个日志成员时不能删除
2.current,active日志成员不能被删除
怎样将日志组从50m-100m
新建100m的日志组,手动切到100m的日志组,然后删掉50m的组
日志丢失的处理:
数据库在打开情况下:
1.inactive ---物理文件被其他人删掉
alter database clear logfile group<>; //这条命令会重现建会日志文件,但是是清空的方式建回来
2.active ---物理文件被其他人删掉
alter system checkpoint; //手动触发ckpt,让数据缓冲区的文件写入到日志文件中,切换我们的active数据库为inactive
alter database clear logfile group <>
3.current---物理文件被其他人删掉
alter system switch logfile;
alter system checkpoint;
alter database clear logfile group<>
数据库关闭情况下:
1.active --在数据开启的情况下删掉active的日志文件,然后马上关机,重启数据库,无法正常重启,只能到mount这一步
>>>show parameter ground查看告警日志
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
background_core_dump string partial
background_dump_dest string /opt/u01/oracle/diag/rdbms/maxdb/maxdb/trace //日志存放的地方
[oracle@up12 maxdb]$ cd /opt/u01/oracle/diag/rdbms/maxdb/maxdb/trace
[oracle@up12 trace]$ vim alert_maxdb.log
>>>recover database until cancel; //表示不使用日志文件恢复实例
>>>alter database open resetlogs;//重新开始编日志序列号
>>>select sequence# from v$log
>>>select sequence# from v$log_history
5.日志文件相关的视图
v$log
v$logfile
v$log_history
归档日志archivelog
inactive----触发arc-----写入到归档日志中----current
归档日志为日志文件的备份
arc 进程中一般使用1-3个
db_recovery_file_dest= //默认放到该目录下,即闪回区
log_archived_dest= //指定归档日志往哪里放
验证是否打开归档功能
archive log list; //archive mode 为归档功能已开
select log_mode from v$database; //查看归档功能是否打开,archivelog为打开
select sequence# from v$log;//序列号小的inactive 下一次成为current
打开归档
startup mount //数据库启动到mount 下
alter database archivelog; //启动归档
alter database noarchivelog; //关闭归档
alter database open; //设置好后,打开数据库,项目中一定要打开归档
show parameter db_recovery_file_dest ;//查看归档信息
select name from v$archived_log; //可以查看归档日志的详细信息