深入探究Oracle数据库日志文件的重要性 (oracle 数据库日志文件)

随着大数据时代的到来,数据库作为数据存储和管理的重要工具,越来越得到人们的重视。在数据库管理中,Oracle数据库作为市场份额更大的商业数据库管理系统,备受关注。而其中日志文件,作为数据库管理中的重要组成部分,更是备受重视,它不仅能够记录数据库操作,还能够让错误的回滚、事务的恢复变得更为容易。本文将从Oracle数据库日志文件的定义、作用、种类及读取等角度,。

一、Oracle数据库日志文件是什么?

Oracle数据库日志文件是数据库管理系统中的一种特殊文件,他们用于记录数据库的操作和事务事件。Oracle数据库日志文件包括Redo日志文件和Archive日志文件两种。当数据库发生更新时,Oracle将新数据写到客户端的临时表中,同时将这些更改操作记录在日志文件中,我们称之为“ redo日志”。“archive日志”是redo日志的备份,记录了全部日志的情况下会自动删除redo日志,以节省磁盘空间并减少I / O操作。

二、Oracle数据库日志文件的作用

1.数据恢复

因为Oracle数据库日志文件能够记录表空间、数据块以及Oracle数据库内日志传输等各种类型的需要安全恢复的信息,所以在意外宕机或者数据出错的情况下,Oracle数据库就可以通过恢复日志文件来对数据库进行相应的恢复操作,这是其最基本的作用。

2.数据恢复与灾难恢复

因为Oracle数据库的日志文件是记录着数据库中每次发生变化的过程,所以在万一出现数据库灾难的情况下,只有通过数据恢复进行灾难恢复操作,才能尽可能的避免数据库出现更大的损失。

3.让错误的回滚变得容易

错误的回滚操作是指当事务的部分子操作失败,决定放弃继续处理这个事务,撤销以前的工作,即回滚操作。利用Oracle数据库日志文件的记录轨迹,就能方便地将数据回滚到之前的状态。

4.数据库的完整性

由于Oracle数据库日志文件能够记录数据的全部更改过程,所以如果中途遇到意外情况导致数据库意外停机,其日志文件能够避免主要数据出错、重复提交等问题的发生,从而保障数据库的完整性。

三、Oracle数据库日志文件的种类

1. Redo日志文件

Redo日志文件是记录相关千变万化的操作内容的日志,主要是记录各种数据修改操作。由于该日志文件中纪录的操作内容是十分丰富的,所以除了数据库恢复操作外,还可以为Oracle数据库服务诸如性能分析、数据归档与恢复等方面的应用提供有力支持。

2.Archive日志文件

Oracle数据库为了减少磁盘、I/O操作的时间,降低相应的开销,将创建的redo日志文件归档为archive日志文件,这是一个副本。与redo日志相比,archive日志文件需要通过手动归档的方式来进行备份。在archive日志文件的备份过程中,日志文件必须转移到另一个地方或者另一个磁盘来存放,因为必须避免数据库中的磁盘空间不够或日志文件被I/O操作破坏。

四、Oracle数据库日志文件的读取

1.日志浏览器

Oracle日志浏览器是通过实时的文本日志文件的解析展示给需要的人的。该工具可以极大地提高工作效率,因为他可以查看一些数据库的细节。Oracle日志浏览器提供了用户界面,可以让用户选择一个存储在Oracle数据库中的日志文件。用户还可以浏览特定的日志数据流。Oracle日志浏览器能够帮助用户更加深入地认识Oracle数据库日志文件的重要性。

2.恢复工具

Oracle数据库同时提供了完善的恢复工具,这些工具可以在需求时对日志文件进行恢复操作。而从最基本的XLOG到更高级的别名方式,Oracle数据库日志文件有了更多的操作和实现方式,其中最为常见和实用的日志确定方法有“时间点恢复”和“SCN恢复”。

综上所述,Oracle数据库日志文件是数据库管理系统中的一个重要组成部分,它不仅能够记录数据库操作,还能够让错误的回滚、事务的恢复变得更为容易。同时,Oracle数据库日志文件还具有数据恢复、完整性保障等多种作用,在Oracle数据库管理中发挥着至关重要的作用。因此,,不仅对Oracle数据库管理的学习,对提高Database Administrator的工作效率,都有着重要的意义。

相关问题拓展阅读:

oracle数据库的警告日志如何查看

‍测试环境中出现了一个异常的告警现象:一条告警通过 Thanos Ruler 的 HTTP 接口观察到持续处于 active 状态,但是从 AlertManager 这边看这条告警为已解决状态。按照 DMP 平台的设计,告警已解决指的是告警上设置的结束时间已经过了当前时间。一条发送至 AlertManager 的告警为已解决状态有三种可能:1. 手动解决了告警2. 告警只产生了一次,第二次计算告警规则时会发送一个已解决的告警3. AlertManager 接收到的告警会带着一个自动解决时间,如果还没到达自动解决时间,则将该时间重置为 24h 后首先,因为了解到测试环境没有手动解决过异常告警,排除之一条;其次,由于该告警持续处于 active 状态,所以不会是因为告警只产生了一次而接收到已解决状态的告警,排除第二条;最后,告警的告警的产生时间念乱与自动解决时间相差不是 24h,排除第三条。那问题出在什么地方呢?

分析

下面我们开始分析这个问题。综合之一节的描述,初步的猜想是告警在到达 AlertManager 前悉含的某些阶段的处理过程太长,导致告警到达 AlertManager 后就已经过了自动解决时间。我们从分析平台里一条告警的流转过程入手,找出告警在哪个处理阶段耗时过长。首先,一条告警的产生需要两方面的配合:

metric 数据

告警规则

将 metric

数据输入

到告警规则进行计算,如果符合条件则产生告警。DMP 平台集成了 Thanos 的相关组件,数据的提供和计算则会分开,数据还是由 Prometheus Server 提供,而告警规则的计算则交由 Thanos Rule(下文简称 Ruler)处理。下图是 Ruler 组件在集群中所处的位置:

看来,想要弄清楚现告警的产生到 AlertManager 之间的过程,需要先弄清除 Ruler 的大致机制。官方文档对 Ruler 的介绍是:You can think of Rule as a simplified Prometheus that does not require a sidecar and does not scrape and do PromQL evaluation (no QueryAPI)。

不难推测,Ruler 应该是在 Prometheus 上封装了一层,并提供一些额外的功能。通过翻阅资料大致了解,Ruler 使用 Prometheus 提供的库计算告警规则,并提供一些额外的功能。下面是 Ruler 中告警流转过程:

请点击输入图片描述

请点击输入图片描述

首先,图中每个告警规则 Rule 都有一个 active queue(下面简称本地队列),用来保存一个告警规则下的活跃告警。

其次,从本地队列中取出告警,发送至 AlertManager 前,会被放入 Thanos Rule Queue(下面简称缓冲队列),该缓冲队列有两个属性:

capacity(默认值为 10000):控制缓冲队列的大小,

maxBatchSize(默认值为 100):控制单次发送到 AlertManager 的更大告警数

了解了上述过程,再通过翻阅 Ruler 源码发现,一条告警在放入缓冲队列前,会为其设置一个默认的自动解决时间(当前时间 + 3m),这里是影响告警自动解决的开始时间,在这以后,有两个阶段可能影响告警的处理:1. 缓冲队列阶段2. 出缓冲队列到 AlertManager 阶段(

网络延迟

影响)由于测试环境是局域网环境,并且也没在环境上发现网络相关的问题,我们初步排除第二个阶段的影响,下面我们将注意力放在缓冲队列上。通过相关源码发现,告警在缓冲队列中的处理过程大致如下:如果本地队列中存在一条告警,其上次发送之间距离现在超过了 1m(默认值,可修改),则将该告警放入缓冲队列,并从缓冲队列中推送最多 maxBatchSize 个告警发送至 AlertManager。反之,如果所有睁高笑本地队列中的告警,在最近 1m 内都有发送过,那么就不会推送缓冲队列中的告警。也就是说,如果在一段时间内,产生了大量重复的告警,缓冲队列的推送频率会下降。队列的生产

方太

多,消费方太少,该队列中的告警就会产生堆积的现象。因此我们不难猜测,问题原因很可能是是缓冲队列推送频率变低的情况下,单次推送的告警数量太少,导致缓冲队列堆积。下面我们通过两个方面验证上述猜想:首先通过日志可以得到队列在大约 20230s 内推送了大约 2023 次,即平均 10s 推送一次。结合缓冲队列的具体属性,一条存在于队列中的告警大约需要 (capacity/maxBatchSize)*10s = 16m,AlertManager 在接收到告警后早已超过了默认的自动解决时间(3m)。其次,Ruler 提供了 3 个 metric 的值来监控缓冲队列的运行情况:

thanos_alert_queue_alerts_dropped_total

thanos_alert_queue_alerts_pushed_total

thanos_alert_queue_alerts_popped_total

通过观察 thanos_alert_queue_alerts_dropped_total 的值,看到存在告警丢失的总数,也能佐证了缓冲队列在某些时刻存在已满的情况。

解决通过以上的分析,我们基本确定了问题的根源:Ruler 组件内置的缓冲队列堆积造成了告警发送的延迟。针对这个问题,我们选择调整队列的 maxBatchSize 值。下面介绍一下这个值如何设置的思路。由于每计算一次告警规则就会尝试推送一次缓冲队列,我们通过估计一个告警数量的更大值,得到 maxBatchSize 可以设置的最小值。假设你的业务系统需要监控的实体数量分别为 x1、x2、x3、…、xn,实体上的告警规则数量分别有 y1、y2、y3、…、yn,那么一次能产生的告警数量最多是(x1 * y2 + x2 * y2 + x3 * y3 + … + xn * yn),最多推送(y1 + y2 + y3 + … + yn)次,所以要使缓冲队列不堆积,maxBatchSize 应该满足:maxBatchSize >= (x1 * y2 + x2 * y2 + x3 * y3 + … + xn * yn) / (y1 + y2 + y3 + … + yn),假设 x = max(x1,x2, …,xn), 将不等式右边适当放大后为 x,即 maxBatchSize 的最小值为 x。也就是说,可以将 maxBatchSize 设置为系统中数量更大的那一类监控实体,对于 DMP 平台,一般来说是 MySQL 实例。

注意事项

上面的计算过程只是提供一个参考思路,如果最终计算出该值过大,很有可能对 AlertManager 造成压力,因而失去缓冲队列的作用,所以还是需要结合实际情况,具体分析。因为 DMP 将 Ruler 集成到了自己的组件中,所以可以比较方便地对这个值进行修改。如果是依照官方文档的介绍使用的 Ruler 组件,那么需要对源码文件进行定制化修改。

‍‍

告警日志文件是一类特殊的跟踪文件(trace file)。告警日志文件命名烂察一般为alert_.log,其中SID为ORACLE数据库脊历空实例名称。数据库告警日志是樱瞎按时间顺序记录message和错误信息。

oracle日志文件存储在哪个表空间

日志文件分为重做日志文件(redo log file)和归档日志文件(archive log file)。

SQL> select group#, status, member from v$logfile;

GROUP# STATUS MEMBER

C:\ORACLE\ORADATA\ORCL\REDO03.LOG

C:\ORACLE\ORADATA\ORCL\REDO02.LOG

C:\ORACLE\ORADATA\ORCL\REDO01.LOG

redo log fiel有多个组group构成。一个group中能包括不止一个log file,日志信息是写到group的每个logfile中,握败所以一个group中的log file存储着一样的信息。当一个group写满之后就转到下一个group中,段孝颤称之为日志切换。

当所有group都写满了后,就重头开始从之一个group开始,原来的内容将被覆盖丢失。如果不想被丢失,可以采用归档模式慎并,即将数据保存到archive log file中。归档模式会给系统带来一定的性能问题。

查看database采用哪种模式:

SQL> select dbid,name,log_mode from v$database;

DBID NAME LOG_MODE

—–

ORCL NOARCHIVELOG

归档日志路径由SPFILE的log_archive_dest参数确定。

SQL> show parameter log_archive_dest;

NAME TYPEVALUE

log_archive_deststring

log_archive_dest_ string

log_archive_dest_ string

log_archive_dest_ string

log_archive_dest_ string

log_archive_dest_ string

log_archive_dest_ string

log_archive_dest_ string

log_archive_dest_ string

log_archive_dest_ string

log_archive_dest_ string

log_archive_dest_state_string enable

log_archive_dest_state_string enable

log_archive_dest_state_string enable

log_archive_dest_state_string enable

log_archive_dest_state_string enable

log_archive_dest_state_string enable

log_archive_dest_state_string enable

log_archive_dest_state_string enable

log_archive_dest_state_string enable

log_archive_dest_state_string enable

警告日志文件alert_sid.log保存着例行的信息和错误信息,它的路经是:

SQL> select value from v$parameter where name=’background_dump_dest’;

VALUE

c:\oracle\diag\rdbms\orcl\orcl\trace

SQL> show parameter background_dump_dest;

NAME TYPEVALUE

background_dump_dest string c:\oracle\diag\rdbms\orcl\orcl\trace

用户跟踪文件是oracle出现异常时自动创建的文本文件,它与警告文件一起构成了完整的故障信息描述体系。

SQL> select value from v$parameter where name=’user_dump_dest’;

VALUE

c:\oracle\diag\rdbms\orcl\orcl\trace

SQL> show parameter user_dump_dest;

NAME TYPEVALUE

user_dump_deststring c:\oracle\diag\rdbms\orcl\orcl\trace

oracle日志不在如扒庆表空间里,请问你要看的时redo log 还是archive?

你可以在SQLplus 中查询他们的位置:

select * from v$logfile

查询archive log:

show parameter log_archive_dest

如果你说的alter日志渣握(就是此册记录oracle日常活动的)

show parameter background_dump_dest;

查询日志文件状态和表空间

select * from v$log;

select * from v$logfile;

oracle日志不在表空间里,请问你要看的铅纤亏竖汪时redo log 还是archive?

你可以在SQLplus 中查询他们的位置:

select * from v$logfile

查询archive log:

show parameter log_archive_dest

如果你说槐神的alter日志(就是记录oracle日常活动的)

show parameter background_dump_dest;

查询日念桥志文颤高码件状态和表空间茄哪

select * from v$log;

select * from v$logfile;

如何打开oracle 的 log文件

在输入imp命令的时候可以指定生成日志文件,如执行命令:

imp 用户名/密码@数据库实例名 file=C:\data\filename.dmp log=C:\data\宽弯logname.log fromuser=scott

其中在C:\data\路径拆缺下的logname.log就是日志文件,可用文本方式打开,如旅巧辩图:

打开内容如下:

关于oracle 数据库日志文件的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 深入探究Oracle数据库日志文件的重要性 (oracle 数据库日志文件)