以下内容是在平时学习和查阅资料过程中的知识整理,主要总结了Oracle11g中相关日志的内容,有不全的内容还望海涵,有错误的地方还请多多指点,采纳的时候需要谨慎!
1.redo log
redo log(online Redo log files)联机重做日志,指Oracle以SQL脚本的形式实时记录数据库的数据更新,通俗的说就是将已执行的SQL脚本保存到联机重做日志中。
Oracle11g中,一个或者多个redo log组成一个联机重做日志组,对于每个数据库实例默认有三个在线日志组,用于存放redo log,每个日志组大小可以自定义设定,默认的日志组大概在500M左右。用户通过查看V$LOG和V$LOGFILE这两个视图获得相关的redo log 和日志组的相关信息,并且用户还可以对日志组进行添加、修改、删除等操作。
每次三个日志组中只有一个日志组处于活跃状态,不断的写入当前数据库的操作脚本,日志文件采用按顺序循环写的方式,当一个日志组写满时,LGWR则将日志写入到下一个联机日志组中,当最后一个日志组写满时,从第一个日志组重新开始写。写入下一组的过程称为日志切换,日志切换时发生检查点检查,检查点的相关信息会被写入到控制文件当中。
alter system switch logfile; -----仅切换当前实例日志组,适用归档和非归档
alter system archive log current; -----在RAC下切换所有实例的日志组,仅使用与归档模式
alter system checkpoint;
alter system set fast_start_mttr_target = n ------强制设置检查点间隔
alter database add logfile group4 ('$ORACLE_BASE/oradata/u01/logn4.rdo') size 500M; ----添加日志组4设置其大小为500M
alter database add logfile member '$ORACLE_BASE/oradata/u01/logn4.rdo' to group 4; -----添加日志成员
alter database drop logfile member '$ORACLE_BASE/oradata/u01/logn4.rdo'; ----删除日志成员(注:不能删除组内的唯一一个成员,不能删除处于active和current状态的成员,删除日志文件后,屋里文件并没有被真正删除,需要手动删除)
alter database drop logfile group 4; ----删除日志组(注:一个实例至少有两个日志组,活动或者当前的日志组不能被删除,日志组被删除后,需要手动删除物理文件)
alter database clear logfile group 4; ----清空日志组文件
alter database clear unarchived logfile group 4; ----使用unarchived参数避免归档
在V$LOG视图中,status列有四种状态,
unused:新添加的日志组,还没有使用;
inactive:日志组对应的脏块已经从data buffer写入到data file中,可以进行覆盖;
active:日志组对应的脏块还没有完全从data buffer写入到data file,含有实例恢复需要的信息,不能被覆盖
current:当前日志组对应的脏块还没有全部从data buffer写入到data file,含有实例恢复需要的信息,不能被覆盖
THREAD列,在单实例的环境下,thread#永远是1;SEQUENCE#列是日志序号列,在日志切换时会递增;FIRST_CHANGE#列在每个日志组对应一个sequence号,其中首条日志条目的第一个的scn。
2.archive redo log
archive redo log 归档重做日志,指将在线日志进行归档,将其存储到固定的文件硬盘上,用于数据库的恢复,通俗的说就是对redo log日志的备份。在数据库处于归档模式时,当一个redo log group被写满或者发出切换日志组的命令时,该日志组的内容就会被写入归档中,
数据库处于归档模式之后,如果归档空间被写满,数据库的redo log不能被归档,会出现Oracle数据库挂起的问题,清理归档之后数据库会恢复正常。
arc log常用视图查询如下:
-----arc log 相关查询
archive log list; -----查看归档相关设置
select * from v$flash_recovery_area_usage; --查看ARCHIVED LOG空间占用率
select * from v$recovery_file_dest; --查看归档日志大小及使用情况
select sequence#,first_time from v$loghist; --列出所有归档redo日志文件的顺序和产生的时间
select * from v$archived_log; --查看arc log
select * from v$archived_log where archived='YES' and deleted='NO'; --查看所有归档,未删除的归档日志
arc log日志清理:
----acr log 日志清理
su - oracle
lsnrctl status ----查看监听
export $ORACLE_SID=***** ----指定需要清理归档的实例
rman target / -----进入rman
crosscheck backup; -----查看备份
crosscheck archivelog all; -----列出归档列表
allocate channel for maintenance device type disk; -----分配磁盘通道
delete noprompt archivelog all completed before 'sysdate - 30' -----保留30天归档
delete noprompt archivelog all; -----删除全部归档不提示
report obsolete -----查看过期备份
delete noprompt obsolete; -----删除过期备份不提示
delete noprompt expired backup; -----删除过期备份不提示
关于清理arc log,如何确认归档日志是否过期
su - oracle
rman target /
show all -----查看所有的rman策略
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS; -----保留策略
在redo log中,LGWR进程将redo log buffer中的重做数据写入到red log中,这是内存读,磁盘写。
在arc log中,是将redo log写入到归档文件中,是磁盘读,磁盘写。
显然,LGWR的读写效率要比arc log快,当频繁发生DML操作时,可能会发生归档慢,redo log写入快的情况,这就会导致数据库被hang住,这时数据库什么也干不了,等待arc进程将日志数据写入到归档文件中。
这种情况可以通过启用更多的归档进程来解决,可以修改log_archive_max_processes来实现,该参数是动态参数,可以直接修改。
-----查看当前参数(log_archive_max_processes)的值
SQL> show parameter log_archive_max_processes;
-----修改归档最大进程数
SQL> alter system set log_archive_max_processes=5;
-----验证进程数
[oracle@Genius ~] ps -ef|grep arc
3.alert
alert日志是Oracle数据库的告警日志,记录着Oracle中的重大操作、重大错误记录、数据库启动/关闭、日志归档等的一些信息,包括涉及物理结构的所有操作,表空间的热备模式、数据库参数的修改等。可以定期对其进行备份之后清理一下,以免影响数据库性能。
单实例数据库中alert日志的存放位置:
-----查看alert日志存放位置
show parameter background_dump_dest;
show parameter core_dump_dest;
show parameter user_dump_dest;
$ORACLE_BASE/diag/rdbms/globa_name/oracle_sid/trace/alert_oraclesid.log
rac位置:
/u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
alert日志增长速度比较快,可以备份后将其清理:
------备份100000行后清除
[oracle@database trace] tail -100000f alert.log > alert.log_bak20210312
[oracle@database trace] >alert.log
4.audit
audit审计日志,审计日志中记录着关于数据库所有的符合策略的信息,关于数据库几乎所有的操作都会在这日志中记录。
oracle11g开始,出于安全考虑,将所有的审计日志内容存放到SYS.AUD$表中,系统默认的参数为DB,也就是默认开启审计功能,由于SYS.AUD$表在system表空间中,所以不定时进行清理会导致system表空间满的情况,建议关闭审计功能,或者定时清理SYS.AUD$表。
show parameter audit_trail; ----查看审计功能状态,value值为DB时,表示功能开启
alter system set audit_trail=FALSE scope=spfile; -----关闭审计功能,关闭之后需要重启数据库
select * from sys.aud$; -----查看审计日志
delete from sys.aud$;
truncate table sys.aud$; -----删除审计日志
show parameter audit_file_dest; -----查看审计日志位置
5.listener
listener,监听日志,记录所有的监听信息。
何为监听?Oracle监听器是一个独立的操作系统进程,运行在操作系统进程列表中。拥有独立于数据库实例的启动、终止命令控制台(lsnrctl),它在服务器一个特定端口上(默认为1521),等待通过Oracle Net Service连入到服务器的客户端请求,并且Oracle监听器根据系统设置情况(各种环境变量)接受数据库实例的服务列表。服务Service是对外提供的服务名称,供本地命名服务依据Service名称连入到其中。Service是对应数据库SID,也就是指定的Oracle实例数据库位置。
listener.log文件不能太大,如果监听日志文件太大,会带来一些性能问题和麻烦,有些Oracle版本监听日志文件大小不能超过2G,否则会导致LISTENER不能处理新的连接。
监听日志存放位置:
$ORACLE_BASE/diag/tnslsnr/<host_name>/<listener_alias_name>/alert/log.xml
$ORACLE_BASE/diag/tnslsnr/<host_name>/<listener_alias_name>/trace/listener.log
开启和关闭记录监听日志:
lsnrctl set log_status off -----停止记录监听日志
lsnrctl set log_status on -----开启记录监听日志
注意:清理监听日志的时候应先停止记录监听日志
6.asm
asm磁盘日志,记录着ASM磁盘的相关日志,例如当OCR盘挂起时,可以查看相关日志寻找挂起原因。
asm一般由grid用户管理,管理相关磁盘时记着切换相关用户。
asm日志存放位置:
$ORACLE_HOME/diag/asm/<asm_name>/<sid>/trace/alert_asmname.log
asm磁盘使用率查询:
select t.NAME,
t.STATE as status,
t.TOTAL_MB / 1024 / 1024 as total,
(t.TOTAL_MA - t.FREE_MB) / 1024 /1024 as use,
t.FREE_MB / 1024 / 1024 as free
from v$asm_diskgroup t;
7.diskmon
diskmon 磁盘防护进程日志,勇于记录Oracle磁盘监控器守护进程故障的调试日志文件
diskmon日志文件位置:/u01/11.2.0/grid/log/<hosrname>/diskmon/
8.GI-alert
GI-alert日志,集群的当前节点的alert日志,该日志记录着该节点在集群中的重要信息,其功能等同于数据库中的alert日志。
GI-alert日志在集群中的存放位置:
/u01/app/11.2.0/grid/log/<hostname>alert<hostname>.log
9.ohas、crsd、cssd、ctss、evm
ohas、crsd、cssd、ctss、evm这五个日志时集群相关的五个重要日志,分别记录着关于集群不同资源的相关信息;
ohas:Oracle高可用服务日志,集群中记录高可用服务信息的日志
ohas日志位置:/u01/11.2.0/grid/log/<hostname>/ohasd/ohasd.log
crsd:集群就绪进程服务日志,它提供的服务叫作CRS(Cluster Ready Service) 服务,Oracle Clusterware是位于集群层的组件。
它为应用层资源(CRS Resource) 提供"高可用性服务",所以, Oracle Clusterware 必须监控这些资源,并在这些资源运行异常时进行干预,包括关闭,重启进程或者转移服务。CRSD进程提供的就是这些服务。
crsd日志位置:/u01/11.2.0/grid/log/<hostname>/crsd/crsd.log
cssd:集群同步服务进程日志,集群中用来记录集群同步服务进程的相关信息。
cssd日志位置:/u01/11.2.0/grid/log/<hostname>/cssd/cssd.log
ctss:集群时间同步服务进程日志,集群中时间同步进程的相关信息记录在这里。
ctss日志位置:/u01/11.2.0/grid/log/<hostname>/ctssd/ctssd.log
evm:时间管理器日志,这个进程负责发布CRS产生的各种事件(event).这些event可以通过两种法师发布给客户:ONS和Callout Script,用户可以自定义回调脚本,放在特定的目录下,这样当有某些时间发生时,EVMD会自动扫描该目录,并调用用户的脚本,这种调用是通过racgevt进程来完成的。除了复杂事件发布之外,evm还是CRSD和CSSD两个进程之间的桥梁,CRS和CSS两个服务之前的通信就是通过EVMD进程完成的。
evm日志位置:/u01/11.2.0/grid/log/<hosrname>/evmd/evmd.log
10.agent、client、racg
agent代理日志,包含CRSD和OHASD守护进程的oraagent、orarootagent、oracssdagent和oracssdmonitor的跟踪及诊断日志文件。
agent日志位置:/u01/11.2.0/grid/log/<hosrname>/agent/agent.log
client客户端日志,记录着更重GI客户端的跟踪和诊断日志
client日志位置:/u01/11.2.0/grid/log/<hosrname>/client/
racg RAC跟踪日志,记录着在集群中可执行文件的跟踪和调试信息
racg日志位置:/u01/11.2.0/grid/log/<hosrname>/racg/racg.log
11.cvu、gnsd
cvu 由Oracle集群验证实用工具生成的跟踪和调试日志
cvu日志文件位置:/u01/11.2.0/grid/log/<hosrname>/cvu/
gnsd Grid Naming Service 日志,用于排除Oracle网格命名服务相关问题的跟踪和调试日志文件
gnsd日志文件位置:/u01/11.2.0/grid/log/<hosrname>/gnsd/
12.mdnsd
mdnsd DNS守护进程日志,用于排除多播域名服务故障的跟踪和诊断日志文件。Oracle网格命名服务使用这一服务来管理名称解析和服务发现。
mdnsd日志文件位置:/u01/11.2.0/grid/log/<hosrname>/mdnsd/
13.crfmond、crflogd
crfmond CHM(Oracle集群健康监控器)诊断日志,勇于记录Oracle集群健康监控器提供的跟踪和诊断日志文件。
crfmond日志文件位置:/u01/11.2.0/grid/log/<hosrname>/crfmond/
crflogd CHM(Oracle集群健康监控器)诊断日志,勇于记录Oracle集群健康监控器提供的跟踪和诊断日志文件。
crflogd日志文件位置:/u01/11.2.0/grid/log/<hosrname>/crflogd/
crfmond和crflogd都是CHM诊断日志
14.gipcd、gpnpd
gipcd集群私网网卡管理进程,勇于排查Oracle网格进程间通信守护进程的故障的调试和跟踪文件
gipcd文件位置:/u01/11.2.0/grid/log/<hosrname>/gipcd/
gpnpd网格即插即用守护进程日志,记录Oracle网格即插即用守护进程的日志和输出文件
gpnpd文件位置:/u01/11.2.0/grid/log/<hosrname>/gpnpd/
15.srvm
srvm(server management)服务管理日志,记录着服务器管理服务的日志文件。
srvm日志位置:/u01/11.2.0/grid/log/<hosrname>/srvm/
补充:Oracle集群件诊断日志文件存储在$GRID_HOME/log/<nodename>目录中。在此目录下,GI(Grid Infrastructure 网格基础设施)中的每个组件都拥有各自的目录,这些组件中记录着集群相关的调试日志文件等内容,排查相关类型的问题可以考虑优先到此目录下对应的组件文件夹中查看相关的日志。这些日志的增长速度都比较缓慢,但还是要定期检查备份,方便排查问题。