归档日志
归档日志
1 归档和非归档的区别
归档会在日志切换时,备份历史日志,对于OLTP系统都应考虑归档模式,以便数据库能支持热备,并提供数据库完全恢复和不完全恢复(基于时间点)
归档会启用arcn的后台进程、也会占用磁盘空间
非归档适用某种静态库、测试库、或者可由远程提供数据恢复的数据库。非归档只能冷备,且仅能还原最后一次全备。归档可以恢复到最后一次commit
2 路径及命名方法
2.1 查看归档模式
archive log list;
select log_mode from v$database;
2.2 归档路径选择
Oracle判断归档目的地时按如下顺序优先择取:
- log_archive_dest_n值或log_archive_dest值优先级最高
- db_recover_file_dest参数指定的位置(快速恢复区)
- $ORACLE_HOME/dbs参数指定的位置
- log_archive_dest、log_archive_duplex_dest两个参数已经弃用了,它们能完成两路复用(镜像),但只能指定本机location,无法指定远程
注意:一旦使用log_archive_dest_n,log_archive_dest参数就失效了
show parameter log_archive_dest
show parameter db_recovery_file_dest
!echo $ORACLE_HOME/dbs
2.3 log_archive_dest_1
把历史日志归档到本机目录下location 代表本机
show parameter log_archive_dest_1
(service 代表远程),配置DG时有用
alter system set log_archive_dest_2='service=standby';
远程备份, 把历史日志备份到网络连接符为 standby 的数据库上
2.4 log_archive_format
log_archive_format是定义命名格式的,一般考虑使用下面三个内置符号(模板)
%t thread# 日志线程号
%s sequence 日志序列号
%r resetlog 代表数据库的周期
参数默认设定的格式如下:
show parameter log_archive_format;
3 开归档 设置归档模式
3.1 创建目录 赋予权限
mkdir /u01/app/oracle/arch
3.2 修改初始化参数文件
指定归档路径
alter system set log_archive_dest_1='location=/u01/app/oracle/arch';
show parameter log_archive_dest_1
设置归档文件命名格式(静态参数,scope=spfile,重启后生效)
alter system set log_archive_format='arch_ORCL_%t_%s_%r.dbf' scope=spfile;
3.3 将归档模式切换为非归档模式
shutdown immediate
startup mount
alter database noarchivelog;
alter database open;
3.4 将非归档模式切换为归档模式
shutdown immediate
startup mount
alter database archivelog;
alter database open;
4 归档进程和手动切换
4.1 归档进程
ps -ef | grep arc | grep -v grep
ARCn就是归档进程,n最多可达30个,由log_archive_max_processes参数指定
show parameter log_archive_max_processes
4.2 手动切换日志
第一种:仅切换当前实例,适用归档和非归档
alter system switch logfile;
第二种:在RAC下切换所有实例,仅适用于归档模式
alter system archive log current;
5. 查看归档相关视图
select name from v$archived_log;
select group#,sequence#,archived,status from v$log;
6. 删除归档(切记先备份再删除)
不建议手工删,建议rman删
根据生产需要,归档文件也要备份
6.1 手工删除
不建议操作系统rm命令手工删归档,可按需在rman备份脚本中增加删除归档的语句
如果存在手工删除情况,可能引起rman备份脚本执行报错,可以在rman脚本中执行crosscheck archivelog all; 校验,通知控制文件
rm arch_ORCL_1_25_1069527136.dbf
rman target /
crosscheck archivelog all;
6.2 rman删除
list archivelog all;
delete force archivelog until sequence 25;
7. 日志挖掘log miner功能
Oracle LogMiner是一个非常有用的分析工具,可以轻松获得oracle在线/归档日志文件中的具体内容,可以解析出所有对于数据库操作的DML和DDL语句。适用于调试、审计或者回退某个特定的事务。由一组PL/SQL包和一些动态视图组成。是一个完全免费的工具,没有提供任何的图形化用户界面
注意:此logminer示例为老方法,官方在后来推出了新方法。老方法还可用,但是官方建议使用新方法。新方法直通车
7.1 DML日志挖掘
创建测试表:
create table scott.demo as select * from scott.emp;
7.2 添加database补充日志(SYS)
alter database add supplemental log data;
7.3 模拟DML误操作
delete from scott.demo where deptno=10;
commit;
delete from scott.demo where deptno=20;
7.4 查看当前日志组
select group#,sequence#,status from v$log;
7.5 切换日志,生成日志
alter system switch logfile;
select name from v$archived_log;
7.6 添加第一个需要分析的日志
# 提供第一个需要加载的日志文件 new
execute dbms_logmnr.add_logfile(logfilename=>'/home/oracle/arch1_45_1066545308.dbf',options=>dbms_logmnr.new)
7.7 按需添加后续日志(可选)
# 根据需要,追加后续日志文件 addfile
execute dbms_logmnr.add_logfile(logfilename=>'/home/oracle/arch1_46_1066545308.dbf',options=>dbms_logmnr.addfile)
7.8 执行logmnr分析
execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog)
7.9 查询分析结果
col username for a10
col sql_redo for a60
select username,scn,to_char(timestamp,'yyyy-mm-dd hh24:mi:ss'),sql_redo from v$logmnr_contents where seg_name='DEMO';
7.10 关闭日志分析
execute dbms_logmnr.end_logmnr;