最后一个情人原唱:Oracle学习笔记(5)日志文件

来源:百度文库 编辑:中财网 时间:2024/04/30 15:52:52

日志文件

 

1、日志文件:在线日志文件和重做日志文件(在线日志文件备份)

sql> archive log list  //归档日志列表(d:\oracle\ora90\RDBMS)


2、log buffer内存区域中发生数据改变的动作都是记录在日志中;日志记录的动作类型、动作发生时间和动作发生数据改变的新址旧址等等信息记录在重做日志中,重做日志最终通过后台进程LGWR写到在线日志里。重做日志作用:recovery 机制(维护基于介质错误的系统恢复),维护数据完整性(维持recovery历史数据恢复过程)。

重做日志文件被组织为日志组,每个组可以有多个日志文件,每个日志文件叫成员。
Oracle database要求至少2个日志组,按照有序的循环使用的方式使用它。

组1写满写组2,组2写满写组3,组3写满再回来写组1,有序循环环路方式使用。当组3写入组1时,做一个backup备份工作。

重做日志文件多工:容错机制。当组1写满想写组2,但当前组2中所有成员坏掉了,这时系统就会报错。在Oracle环境中假定当前组2中还有1个成员,即便其他成员都坏掉了,Oracle还可以继续跑。

【建议】对日志文件做多工,而不同的成员放在不同的物理hard disk(D盘中不同区域),而不是逻辑的分区。

 

sql>alter system archive log start;  //启动自动存档过程
sql>alter system switch logfile;    //LGWR停止写旧组转而写新组的过程(强制):日志的switch

在发生日志switch之前,后台会完成一个Checkpoint操作,用来实现数据库的同步,它会写控制文件,同时还会写数据文件。

sql>alter system checkpoint;  //强制同步

sql>show parameter fast   //(也可以设置FAST_START_MTTR_TARGET参数可以控制同步的频率) MTTR:mean time to recovery  [MTTR:meantime to recovery],同步频率越高发生系统错误所需要的recovery时间就越少。除了fast_start_mttr_target外还有一个参数:fast_start_io_target(8i中使用,9i以后不建议使用)

sql>show parameter log_checkpoint  //log_checkpoint_interval、log_checkpoint_timeout

 

3、添加日志组:(建议每组大小size相同)
 Alter database add logfile group 3
 ('$HOME/ORADATA/u01/log3a.rdo','$HOME/ORADATA/u01/log3b.rdo')
  SIZE 1M;

sql>select * from v$log;
sql>alter database add logfile group 6               //增加日志组6
  2 'd:\oracle\oradata\fox\redo06.ora' size 10m;
sql>alter database add logfile member                 //增加组成员
  2 'd:\oracle\oradata\fox\redo06a.ora' size 20m;(报错)//不可以带size参数,Oracle自动对应已经有的member的大小


sql> c /size 10m/   //取消size 10m参数
sql> run

【注意】每个组可以不同大小,但每个组成员一定是大小一致的。

 

4、删除日志文件组:
ALTER DATABASE DROP LOGFILE GROUP 3;

sql>alter database drop logfile group 6;

在删除的时候,只是改变控制文件的信息,不会对底层的OS文件造成删除(只能手工去删除数据文件和日志文件:D:\oracle\oradata\fox中的REDO06.ora、REDO06A.ora等)。

【注意】日志组的删除限制:当前日志组不能删;active 活动日志组不能删;未归档的日志组不能删。

删除日志组成员: ALTER DATABASE DROP LOGFILE MEMBER '$HOME/ORADATA/u04/log3c.rdo';

【注意】日志组成员的删除限制:保留最后一个日志组成员(每组中至少有一个成员不能删)。
sql>select * from v$logfile;
sql>alter database drop logfile member 'D:\oracle\oradata\fox\redo04A.ora'
sql>c /redo04a/redo04/   //修改以上语句的参数
sql>run 
提示:无法删除最后一个日志成员

 

5、日志清空、移动和重命名
日志清空:reinit(重新初始化) ALTER DATABASE CLEAR LOGFILE '$HOME/ORADATA/u01/log2a.rdo';
sql>alter database clear logfile group 2; (当前日志文件的清空无法进行)
sql>alter database clear unarchived logfile group 5; (可以进行未归档清空日志,造成日志历史记录断点,做完此事一定不要忘记做系
统完全备份。)


移动或重命名方式:(1)可以通过添加新成员,删除旧成员的方式(2)也可以通过copy OS文件并重命名的方式,然后执行:ALTER DATABASE RENAME '旧名' TO '新名'
sql>alter database rename file 'D:\oracle\oradata\fox\redo05.ora' to 'D:\oracle\oradata\fox\redo05a.ora'

 

6、在线重做日志文件使用OMF方式:
sql> show parameter db_create_log
sql> alter system set db_create_online_log_dest_q='d:\oracle\oralog';
sql> alter database add logfile group 6;  //默认100m大小的日志文件被生成
sql> alter database drop logfile group 5;  //会删除包括OS文件在内的该日志组的所有文件
sql> alter database clear unarchived logfile group 5;

 

7、获取日志组和组成员的信息:v$log ,v$logfile
v$log (查询日志组info)->  status:current/active/inactive/unused
v$logfile(查询日志组成员)-> status:blank(in use 在使用),stale(incomplete不完整),delete(被删除了)

 

8、归档日志文件[Archived]:备份在线日志的文件
用途:(1)帮助数据恢复Recovery.(2)在线备份(database is open)
默认情况下 database 是被运行在NoArchivelog (非归档)模式,这种模式下相当于日志未作历史备份,不可以借助日志来进行数据恢复。非
归档模式只能做全备,而且只能做离线备份(冷备),在数据恢复时只能全恢复。而归档模式可以做部分备份、部分恢复、在线备份(数据库不需要关闭也能恢复,即热备)


9、如何在归档模式和非归档模式之间的转换步骤:
  (1)关闭数据库 shutdown immediate 
  (2)重启数据库 startup mount
   (3) alter database archivelog/noarchivelog 归档/非归档模式
   (4) 打开数据库 alter database open
   (5) 对数据库进行全备 alter system archive log all

sql>shutdown immediate
sql>startup pfile=d:\oracle\ora90\database\initfox.ora mount  //启动例程
sql>alter database noarchivelog; 或 alter database archivelog 
sql>alter databse open

 

10、自动归档:archive log start
    手工归档:alter system archive log all  //归档所有日志文件

sql> select * from v$archived_log;  //查询归档日志文件信息。

【注意】一旦在线日志组被写满了,它还没有完成归档,那么这个日志组是不能被重写的,系统会等待这个完成归档的过程。因此,DBA要规划系统中有多少个归档日志组,每个组成员有多大,才能满足系统需求,不至于导致归档过程影响系统操作。归档日志文件可以被多工。

sql> show parameter log_archive //显示归档参数


11、Oracle中实现日志挖掘logmnr分析(分区过程)步骤:
(1)设定日志分析目录 set directory utl_file_dir
(2)重启oracle   restartup
 (3) 建立目录文件 create directory file   (dbms_logmnr_d.build)
 (4) 添加/移除日志文件到目录文件:(dbms_logmnr.add_logfile/dbms_logmnr.removefile)
 (5) 启动日志挖掘分析(logmnr)   start logmnr  (dbms_logmnr.start_logmnr)
 (6) 分析的内容进行查询   v$logmnr_content (sqlredo/sqlundo)

sql>desc dbms_logmnr
sql>desc dbms_logmnr_d
sql>update kong.sales set qty=10 where stor_id=6380  //模拟操作1
sql>delete kong.sales where stor_id=7066  //模拟操作2
sql>commit; 
sql>select * from v$log; //查询当前日志组编号 为group 2(即redo02)
sql>execute dbms_logmnr_d.build('foxdict.ora','d:\oracle\admin\fox\cdump');  //建立支点目录文件,前一个参数是文件名,后一个参
数文件路径是init中utl_file_dir所指定的路径。

sql>desc dbms_logmnr
sql>execute dbms_logmnr.add_logfile('d:\oracle\oradata\fox\redo02.log',dbms_logmnr.new); //添加要分析的日志文件加到目录文件
sql>execute dbms_logmnr.add_logfile('d:\oracle\oradata\fox\redo03.log',dbms_logmnr.new);
sql>execute dbms_logmnr.start_logmnr(dictfilename=>'d:\oracle\admin\fox\cdump\foxdict.ora');END;  //启动日志挖掘分析
sql>select * from v$logmnr_content;  //查询分析的内容