2010年成都温江房价:Oracle学习笔记(5)日志文件
日志文件
1、日志文件:在线日志文件和重做日志文件(在线日志文件备份)
sql> archive log list
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;
在发生日志switch之前,后台会完成一个Checkpoint操作,用来实现数据库的同步,它会写控制文件,同时还会写数据文件。
sql>alter system checkpoint;
sql>show parameter fast
sql>show parameter log_checkpoint
3、添加日志组:(建议每组大小size相同)
sql>select * from v$log;
sql>alter database add logfile group 6
sql>alter database add logfile member
sql> c /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;
sql> alter database drop logfile group 5;
sql> alter database clear unarchived logfile group 5;
7、获取日志组和组成员的信息:v$log ,v$logfile
v$log (查询日志组info)->
v$logfile(查询日志组成员)-> status:blank(in use 在使用),stale(incomplete不完整),delete(被删除了)
8、归档日志文件[Archived]:备份在线日志的文件
用途:(1)帮助数据恢复Recovery.(2)在线备份(database is open)
默认情况下 database 是被运行在NoArchivelog (非归档)模式,这种模式下相当于日志未作历史备份,不可以借助日志来进行数据恢复。非归档模式只能做全备,而且只能做离线备份(冷备),在数据恢复时只能全恢复。而归档模式可以做部分备份、部分恢复、在线备份(数据库不需要关闭也能恢复,即热备)
9、如何在归档模式和非归档模式之间的转换步骤:
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
sql> select * from v$archived_log;
【注意】一旦在线日志组被写满了,它还没有完成归档,那么这个日志组是不能被重写的,系统会等待这个完成归档的过程。因此,DBA要规划系统中有多少个归档日志组,每个组成员有多大,才能满足系统需求,不至于导致归档过程影响系统操作。归档日志文件可以被多工。
sql> show parameter log_archive //显示归档参数
11、Oracle中实现日志挖掘logmnr分析(分区过程)步骤:
(1)设定日志分析目录 set directory utl_file_dir
(2)重启oracle
sql>desc dbms_logmnr
sql>desc dbms_logmnr_d
sql>update kong.sales set qty=10 where stor_id=6380
sql>delete kong.sales where stor_id=7066
sql>commit;
sql>select * from v$log; //查询当前日志组编号 为group 2(即redo02)
sql>execute dbms_logmnr_d.build('foxdict.ora','d:\oracle\admin\fox\cdump');
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;