暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 19C入门到精通之管理归档日志文件

ITPro进化论 2023-12-19
908

Oracle利用重做日志文件来记录用户对数据库所做的修改,但是重做日志文件是以循环方式使用的,在将所修改的数据重新写入重做日志文件中时,原来保存的重做记录会被覆盖。为了完整地记录数据库的全部修改过程,Oracle使用“归档日志文件”来提前一步保存这些即将被覆盖的重做日志记录。

1. 日志模式分类

通常Oracle有两种日志模式:第一种是归档日志模式(ARCHIVELOG);第二种是非归档日志模式(NOARCHIVELOG)。在归档日志模式下,Oracle会首先对源日志文件进行归档存储,且在归档未完成之前不允许覆盖原有日志;在非归档日志模式下,源日志文件的内容会被新的日志内容所覆盖。

1.1. 归档模式(ARCHIVELOG)

在重做日志文件被覆盖之前,Oracle能够将已经写满的重做日志文件通过复制方式保存到指定的位置,保存下来的所有重做日志文件被称为“归档重做日志”,这个过程就是“归档过程”。只有数据库处于归档模式时,才会对重做日志文件执行归档操作。另外,归档日志文件中不仅包含了被覆盖的日志文件,还包含重做日志文件使用的顺序号。

当数据库的运行处于归档模式时,具有如下优势:

  • 如果发生磁盘介质损坏,则可以使用数据库备份与归档重做日志恢复已经提交的事务,保证不会发生任何数据丢失。
  • 如果为当前数据库建立一个备份数据库,通过持续地为备份数据库应用归档重做日志,可以保证源数据库与备份数据库的一致性。
  • 利用归档日志文件,可以实现使用数据库在打开状态下创建的备份文件来进行数据库恢复。

在归档模式下,系统后台进程LGWR在将数据写入下一个重做日志文件中之前,必须等待该重做日志文件完成归档,否则,LGWR进程将被暂停执行,直到完成对重做日志文件的归档。归档操作可以由后台进程ARCN自动完成,也可以由数据库管理员手动完成,为了简化操作,通常情况下选择由后台进程ARCN自动完成。另外,为了提高归档的速度,可以考虑使用多个ARCN进程加速归档的速度。下图显示了在归档模式下重做日志文件的自动归档过程。

1.2. 非归档模式(NOARCHIVELOG)

非归档模式只能用于保护实例故障,而不能保护介质故障,当数据库处于NOARCHIVELOG模式时,如果进行日志切换,生成的新内容将直接覆盖原来的日志记录。使用非归档模式具有如下特点:

  • 当完成检查点之后,后台进程LGWR可以覆盖原来的重做日志文件。
  • 如果数据库备份后的重做日志内容已经被覆盖,那么当出现数据库文件被损坏时,只能恢复到最近一次的某个完整备份点,而且这个备份点的时间是人工无法控制的,甚至可能会有数据丢失。

Oracle数据库具体应用归档模式还是非归档模式,是由数据库对应的应用系统来决定的。如果任何由于磁盘物理被损坏而造成的数据丢失都是不允许的,那么就只能使用归档模式;如果只是强调应用系统的运行效率,而将数据的丢失放在次一级考虑,那么可以采取非归档模式,但数据库管理员必须经常定时对数据库进行完整的备份。

2. 管理归档操作

默认情况下,Oracle数据库处于非归档日志模式,这样重做日志文件中被覆盖的日志记录就不会被写入归档日志文件中。根据Oracle数据库对应的应用系统的要求,用户可以把数据库的日志模式切换到归档模式,反之亦可操作。要实现数据库在归档模式与非归档模式之间切换,可以使用ALTER DATABASE ARCHIVELOG或NOARCHIVELOG语句。

2.1. 日志模式切换

在Oracle中,归档日志文件默认情况下存储到快速恢复区所对应的目录(由初始化参数DB_RECOVERY_FILE_DEST设定)中,并且会按照特定的格式生成归档日志文件名。如果只想将归档日志文件放在默认的路径下,那么只需执行ALTER DATABASE ARCHIVELOG语句即可。

改变日志操作模式时,用户必须以sysdba的身份执行相应操作。接下来将讲解数据库由非归档模式切换为归档模式的具体操作步骤:

①查看当前日志模式。在改变日志模式之前,用户首先应该检查当前日志模式,这可以通过查询动态性能视图v$database来实现,代码如下:

select log_mode from v$database;

通过查询结果可以看到,数据库当前处于非归档日志模式(NOARCHIVELOG)。

②关闭并重新启动数据库。改变日志操作模式必须在MOUNT状态下进行,因此必须先关闭数据库,然后重新装载数据库。代码如下:

--关闭数据库
shutdown immediate;
--以mount状态启动数据库
startup mount;

③改变日志模式。使用ALTER DATABASE ARCHIVELOG语句将数据库切换到归档模式,代码如下:

alter database archivelog;

说明:若是要把归档日志模式改为非归档日志模式,只需要将ALTER DATABASE ARCHIVELOG语句中的ARCHIVELOG关键字换成NOARCHIVELOG即可,其他步骤基本相同。

④打开数据库。使用ALTER DATABASE OPEN语句打开数据库,这时数据库的日志模式被彻底改变,代码如下:

alter database open;

⑤使用ARCHIVE LOG LIST命令查看数据库是否处于归档模式;

2.2. 配置归档进程

如果Oracle系统的后台进程LGWR经常出现等待的状态,就可以考虑启动多个ARCN进程,通过修改系统初始化参数LOG_ARCHIVE_MAX_PROCESSES就可以调整启动ARCN进程数量。

设置启动3个ARCN后台系统进程,代码如下:

alter system set log_archive_max_processes=3;

说明:当数据库处于ARCHIVELOG模式时,默认情况下Oracle会自动启动两个归档日志进程。通过改变初始化参数LOG_ARCHIVE_MAX_PROCESSES的值,用户可以动态地增加或减少归档进程的个数。

3. 设置归档文件位置

归档日志文件保存的位置被称为归档目标。用户可以为数据库设置多个归档目标,与设置控制文件和重做日志文件一样,不同的归档目标最好位于不同的磁盘中,以缓解归档操作时磁盘的I/O瓶颈。

归档目标在初始化参数LOG_ARCHIVE_DEST_n中进行设置,其中n为1~10的整数,即可以为数据库指定1~10个归档目标。在进行归档时,Oracle会将重做日志文件组以相同的方式归档到每一个归档目标中。在设置归档目标时,用户可以指定本地机器作为归档目标,也可以选择远程服务器作为归档目标,下面分别来看这两种情况。

3.1. 本地归档目标(LOCATION)

若设置LOG_ARCHIVE_DEST_n参数时使用LOCATION关键字,则表示指定的归档目标在本地机器上。

在本地机器上建立4个归档目标,代码及其运行结果如下:

##在oracle账号下切换到/opt/oracle/oradata/目录
cd /opt/oracle/oradata/
##创建OracleFiles目录并切换到该目录下
mkdir OracleFiles && cd OracleFiles
##创建归档目录archive1、archive2、archive3、archive4
mkdir archive1  archive2  archive3  archive4

在本地机器上建立4个归档目标,代码及其运行结果如下:

alter system set log_archive_dest_1 = 'location=/opt/oracle/oradata/OracleFiles/archive1';

alter system set log_archive_dest_2 = 'location=/opt/oracle/oradata/OracleFiles/archive2';

alter system set log_archive_dest_3 = 'location=/opt/oracle/oradata/OracleFiles/archive3';

alter system set log_archive_dest_4 = 'location=/opt/oracle/oradata/OracleFiles/archive4';

使用初始化参数LOG_ARCHIVE_DEST_n设置归档位置时,还可以指定OPTIONAL、MANDATORY或REOPEN选项;

  • OPTIONAL:该选项是默认选项。使用该选项时,无论“归档操作”是否执行成功,都可以覆盖重做日志文件。
  • MANDATORY:该选项用于强制进行“归档操作”。使用该选项时,只有在归档成功后,重做日志文件才能被覆盖。
  • REOPEN:这是一个属性选项,它用于设定重新归档的时间间隔,默认值为300 s。但需要注意的是,REOPEN属性必须跟在MANDATORY选项后。

在本地机器上,分别使用OPTIONAL、MANDATORY、REOPEN和默认选项建立4个归档目标,代码及其运行结果如下:

alter system set log_archive_dest_1 = 'location=/opt/oracle/oradata/OracleFiles/archive1 optional';

alter system set log_archive_dest_2 = 'location=/opt/oracle/oradata/OracleFiles/archive2 mandatory';

alter system set log_archive_dest_3 = 'location=/opt/oracle/oradata/OracleFiles/archive3 mandatory reopen=500';

alter system set log_archive_dest_4 = 'location=/opt/oracle/oradata/OracleFiles/archive4';


在使用初始化参数LOG_ARCHIVE_DEST_n设置归档位置时,还可以使用初始化参数LOG_ARCHIVE_MIN_SUCCEED_DEST控制本地成功归档的“最小个数”。如果成功生成的归档日志文件少于“最小个数”,那么重做日志将不能被覆盖。

在本地机器上,设置最小归档数为3个,代码如下:

alter system set log_archive_min_succeed_dest=3;

执行上述代码后,如果成功生成的归档日志文件少于3个,那么重做日志将不能被覆盖。

另外,还可以使用初始化参数LOG_ARCHIVE_DEST_STATE_n设置归档位置是否可用。如果设置该参数为ENABLE,则表示激活相应的归档位置;如果设置该参数为DEFER,则表示禁用相应的归档位置。

禁用LOG_ARCHIVE_DEST_STATE_4对应的归档位置,代码如下:

alter system set log_archive_dest_state_4 = defer;

一般当归档日志所在的磁盘损坏或填满时,数据库管理员应该暂时禁用该归档位置。

3.2. 远程归档目标(SERVER)

如果在设置LOG_ARCHIVE_DEST_n参数时使用了SERVICE关键字,则表示归档目标是一个远程服务器。

建立一个远程归档目标,其目录位置在名称为CentOS的服务器上,代码及其运行结果如下:

alter system set log_archive_dest_1='service=CentOS';

在上述代码中,CentOS是一个远程服务器的名称。

4. 查看归档日志信息

查看归档日志信息主要有两种方法:一种是使用数据字典和动态性能视图;另一种是使用ARCHIVE LOG LIST命令。

4.1. 使用数据字典和动态性能视图

常用的各种包含归档信息的数据字典视图及其说明如下表示:

--查询v$archive_dest动态性能视图来显示归档目标信息
select dest_name from v$archive_dest;

4.2. 使用ARCHIVE LOG LIST命令

在SQL* Plus环境中,使用ARCHIVE LOG LIST命令可以显示当前数据库的归档信息;

注意:若要在SQL * Plus环境中显示归档信息,则用户必须以sysdba的身份进行操作。

今天的文章就到这里,如果对你有用,记得点个【赞】【在看】,感谢阅读~

文章转载自ITPro进化论,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论