归档日志

归档日志

1 归档和非归档的区别

  归档会在日志切换时,备份历史日志,对于OLTP系统都应考虑归档模式,以便数据库能支持热备,并提供数据库完全恢复不完全恢复(基于时间点)

  归档会启用arcn的后台进程、也会占用磁盘空间

  非归档适用某种静态库、测试库、或者可由远程提供数据恢复的数据库。非归档只能冷备,且仅能还原最后一次全备。归档可以恢复到最后一次commit

 

2 路径及命名方法

2.1 查看归档模式

archive log list;
select log_mode from v$database;

2.2 归档路径选择

Oracle判断归档目的地时按如下顺序优先择取:

  • log_archive_dest_nlog_archive_dest优先级最高
  • db_recover_file_dest参数指定的位置(快速恢复区)
  • $ORACLE_HOME/dbs参数指定的位置
  • log_archive_dest、log_archive_duplex_dest两个参数已经弃用了,它们能完成两路复用(镜像),但只能指定本机location,无法指定远程

注意:一旦使用log_archive_dest_nlog_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;

posted @ 2021-06-06 15:41  chchcharlie、  阅读(656)  评论(0编辑  收藏  举报