首页 > 数据库 >成为MySQL DBA后,再看ORACLE数据库(七、日志体系)

成为MySQL DBA后,再看ORACLE数据库(七、日志体系)

时间:2024-06-07 22:21:48浏览次数:26  
标签:log DBA 数据库 MySQL 归档 ORACLE 日志 redo

说起数据库的日志,一般有redo日志、归档日志、错误日志、审计日志等,不同的数据库为了满足其特定的功能会有不同类型的日志。在ORACLE的日常运维中,可能接触得最多的就是redo日志、归档日志、告警日志、闪回日志这几种日志。在ORACLE知识体系中,一般把redo、undo、checkpoint这几个知识点放在一起,这也是更好的学习数据库的路线。但我更想从MySQL的视角,把数据库的各种日志放在一起做个总结。
一、redo日志

搞数据库的都知道,redo日志的功能主要是用来clash recovery(崩溃恢复),保证数据的一致性。在ORACLE中,Redo的功能主要通过三个组件来实现:Redo Log Buffer、LGWR后台进程和Redo Log File。Oracle通过后台进程LGWR不断的把Redo Log Buffer的内容写到Redo Log File中,下图说明了三者的关系。

数据库会默认创建三个redo log日志组,在数据目录下可以看到有三个redo0x.log文件。当一个日志文件写满之后,会切换到另外一个日志文件,这个切换过程称为Log Switch,因此Log Switch会出发一个checkpoint确保该日志文件对应的变更数据落盘。通过v$log可以查看查看当前redo日志组的状态。其中STATUS列显示了日志文件的状态:当状态为CURRENT,指的是当前的日志文件是活动的,当前正在被使用的;当状态为ACTIVE,指的是活动的非当前日志,检查点尚未完成,该日志在clash recovery也会被用到;当状态为INACTIVE,指该日志非活动,对应的变更数据都已落盘,非活动日志在实例恢复时已经不再需要。

为了让用户可以快速提交,日志快速落盘,已提交的数据不丢,保证数据的一致性,LGWR进程写日志触发条件有以下几个:每3秒超时;Redo Log Buffer1/3满;Redo Log Buffer中有1M脏数据;用户提交;在DBWR进程写之前。

二、归档日志

当redo log 文件写满后,新的redo log会重用之前的redo log文件,因此原来的记录会被直接覆盖,为了保证日志的连续性,可以在ORACLE数据库中开启归档模式,就是将经写满的重做日志文件通过复制方式保存到指定的位置,也就是归档日志。开启归档后,会启动后台进程ARCN,在日志切换时,LGWR进程写之前备份历史日志。对于生产环境的数据库系统都应该开启归档模式,以便数据库能支持热备,并提供数据库完全恢复和不完全恢复。非归档只适用某种静态库、测试库、或者可以通过其他方式恢复数据的数据库,非归档模式只能冷备, 且仅能还原最后一次全备。而归档模式可以恢复到最后一次commit。

通过archive log list或v$database视图可以查看数据库是否开启了归档模式:

通过参数log_archive_dest_n可以设置ORACLE数据库的多个归档路径,n可以是1~31。如果在参数中指定了service:alter system set log_archive_dest_2='service=standby', 那么则代表把日志归档到服务名standby为远程的服务器。log_archive_format参数用来定义归档日志的命名格式,一般默认为%t_%s_%r.dbf,%t代表日志线程号、%s代表日志序列号、%r代表数据库的周期。

开启归档模式,是需要重启数据库,并在mount状态开启归档模式,以下是数据库开启归档的步骤:

#创建归档目录
mkdir -p /u01/oracle/arch
chown -R oracle:oinstall  /u01/oracle/arch
#设置归档目录参数
alter system set log_archive_dest_1='location=/u01/oracle/arch';
#正常关库,然后启动到mount状态
shutdown immediate; 
startup mount;
archive log list;
#开启归档,启动数据库
alter database archivelog; 
alter database open; 
archive log list;

 三、告警日志

告警日志是日常排查数据库问题使用最多的方式之一,记录着数据库的“编年史”,在MySQL中这个日志叫错误日志。ORACLE的告警日志位于$ORACLE_HOME/diag/rdbms/ORACLE_SID/ORACLE_SID/trace目录下,在ORACLE中可以通过v$dig_info视图查看告警日志的存放路径。

可以看到,在告警日志目录下,除了告警日志文件alert_orcl.log,还有很多trc和trm文件。trc文件即trace collection file,它是系统的跟踪文件,trc文件中包含了大量且详细的诊断和调试信息。trm文件即trace map file,称为元数据跟踪文件,记录了描述trc文件跟踪记录的元数据信息。在SQL的优化与分析中,可以通过alter session set sql_trace=true命令开启会话的跟踪,这样会话执行SQL的执行计划、执行流程中的各方面信息比如物理读,cpu消耗等将会详细记录在trc文件中,这样将可以排查出一条SQL具体慢在哪里。通过TKPROF工具可以格式化trc文件,增强可读性。此外,在$ORACLE_HOME/diag/rdbms/ORACLE_SID/ORACLE_SID/alert目录下还有一个log.xml文件,这个就是XML格式的警告日志,其实内容和alert_orcl.log是一样,XML文件主要是方便一些工具来生成报告,dba实际排查问题看alert_orcl.log文件还是更方便一些。

四、闪回日志

闪回日志是为了支持flash database而引入的,闪回日志中包含数据块被修改之前的映像,可以用于将数据库恢复到某个时间点之前的状态。这里就不过多赘述了,后面准备专门写一篇总结ORACLE的闪回技术。

五、总结

从数据库几种常用的日志来看,ORACLE和MySQL差别还是很大。MySQL记录数据变化的日志除了redo还有binlog,而MySQL的redo无法归档,只能用来crash recovery。在MySQL中,通过binlog完成主从复制和保证日志连续性,这种记录数据逻辑变化的日志也特别方便异构数据的复制,衍生了canel等开源数据同步工具。ORACLE告警日志更详细,还可以通过跟踪文件提供更详细的数据库诊断信息,相比而言MySQL的errorlog就显得太简单了,MySQL中遇到异常崩溃通常需要收集coredump信息跟踪源码才能更好的定位问题。

标签:log,DBA,数据库,MySQL,归档,ORACLE,日志,redo
From: https://www.cnblogs.com/coygfly/p/18231885

相关文章

  • 第一章 MySQL体系结构和存储引擎
    1.1定义数据库和实例数据库:物理操作系统文件或其他形式文件类型的集合实例:MySQL数据库由后台线程以及一个共享内存区组成在MySQL数据库中,实例与数据库的关系通常是一一对应的,即一个实例对应一个数据库,一个数据库对应一个实例MySQL数据库实例在系统上的表现就是一个进程MySQ......
  • Mysql阶段三总结
    Mysql阶段三总结触电器触发器(TRIGGER)是由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时,就会激活触发器执行相应的操作。MySQL从5.0.2版本开始支持触发器。*创建触发器*在MySQL中创建触发器通过SQL语句CREATETRIGGE......
  • Mysql阶段二总结
    Mysql阶段二总结文章目录Mysql阶段二总结左外连接右外连接合并查询数据纪录子查询当我们在查询数据时,要求返回所操作表中至少一个表的所有数据记录,通过SQL语句“OUTERJOIN…ON”来实现。外连接数据查询语法形式如下:SELECTfield1,field2,…,fieldnFRO......
  • Mysql 8.4.0 结合 Docker 搭建GTID主从复制,以及传统主从复制
    注意:本教程不适用旧版本,Mysql8.4.0和旧版本,主从复制相关命令有所变化,具体区别请看文末参考软件版本Docker:26.1.3Mysql:8.4.0 GTID主从复制1.准备主从两台服务器2.两台服务器分别创建DockerCompose文件services:mysql:image:mysql:8.4.0ports:-"3......
  • linux安装mysql8并配置主从
    服务器10.213.3.68DBmaser10.213.3.69DBslave都安装mysql8安装包,解压mysql-8.0.35-linux-glibc2.17-x86_64.tar.xz[root@DB-mastermysql8]#lsbindocsincludelibLICENSEmanREADMEsharesupport-files优化过的配置文件[mysqld]server-id=1log-bin=mys......
  • Mysql基础进阶速成2
    看着篇文章之前先看我的前一章:MySQL基础进阶速成1函数:每个字段使用一个函数:select+函数(字段名)+from+表名upper:将字符串中的字母大写lower:将字符串中的字符小写max:得到最大值min:得到最小值count:计数avg:平均数length:获取字符串长度........selectupper(name)fro......
  • MySQL随笔
    1、隔离级别innoDB通过间隙锁锁定查询范围避免被其他事物修改未提交读(导致脏读)、已提交读(导致不可重复读)、可重复读(mysql默认,导致幻读)、串行化 脏读:事物执行的过程读到其他事物未提交的数据不可重复读:事物a在多次读取某数据时,事物b进行了修改,导致食物a两......
  • mysql8 无法连接navicat问题
    1、修改MySQL的配置文件(my.cnf或者my.ini),在[mysqld]部分添加或者修改default_authentication_plugin=mysql_native_password。重启mysql服务2、创建或修改用户并设置密码:如果您还没有 root 用户从任何主机连接的权限,您需要首先以具有足够权限的用户(通常是本地 root 用户)登录......
  • MySQL中InnoDB引擎行数据过大对B+树存储的影响
    效率工具推荐一个程序员常用的工具网站:程序员常用工具(http://cxytools.com),有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具,效率加倍嘎嘎好用。小报童专栏精选Top100推荐一个小报童专栏导航站:小报童精选Top100(http://xbt100.top),收录了生财有术项目精选、A......
  • ubuntu 22.04 安装MySQL8后的基本设置
    安装sudoaptupdatesudoaptupgradesudoaptinstallapache2mysql-serverphplibapache2-mod-phpphp-mysql初始化配置MySQL初始化配置以及设置root密码初始化MySQL安全配置sudomysql_secure_installation这个命令会提示您进行一系列的安全设置,包括:是否......