归档日志文件(Archive LogFile)

相关概念

神通数据库允许将在线日志中的日志归档到一个或多个脱机目的地,这些日志称为归档日志。 将在线日志归档为归档日志的线程为归档线程。仅当数据库运行在 ARCHIVELOG 模式时,才可能进行归档操作。

归档日志是在线日志的一个副本。可以使用归档日志来做以下事情:

  • 恢复数据库
  • 更新备用数据库

选择归档与非归档日志模式

本节介绍在选用 NOARCHIVELOG 或 ARCHIVELOG 模式来运行数据库时必须考虑的问题。

  • 在非归档日志模式下运行数据库

当在 NOARCHIVELOG 模式下运行数据库时,数据库不执行日志归档操作。在系统检查点LSN之前的日志所占据的日志空间将可重复利用。

是否运行日志归档,要根据运行在数据库上的应用程序的可用性和可靠性两方面要求作出决定。如果经受不起磁盘失败事件所引起的数据库中任何数据的丢失,可以采用ARCHIVELOG模式,归档日志需要额外执行一些管理操作。

NOARCHIVELOG 模式只能保证数据库免于实例失败,但是不能避免介质失败。只有保存在在线日志中的对数据库的最新修改可以用于实例的恢复过程。换句话说,如果正在使用NOARCHIVELOG模式,那么只能使用数据库备份将数据库还原(不是恢复)到最近的完整数据库备份,不能恢复后来的事务。

而且,在 NOARCHIVELOG 模式下不能执行联机表空间备份以及联机数据文件备份。此外,不能使用先前在ARCHIVELOG模式下的联机表空间备份和联机数据文件备份。只能使用在NOARCHIVELOG模式下关闭数据库以还原数据库操作时所获得的完整数据库备份。因此,如果决定在NOARCHIVELOG模式下操作数据库,必须按照正常的时间间隔对数据库做备份。

  • 在归档日志模式下运行数据库

在 ARCHIVELOG 模式下运行数据库,可以指定在线日志归档后的存放位置和归档文件命名规则。

归档在线日志有以下好处:

  1. 通过数据库备份和归档日志,可以保证在操作系统或磁盘失败时间后能够恢复所有已提交的事务。
  2. 如果有已归档的日志,可以使用在打开数据库时以及在正常系统使用过程中所获得的备份。
  3. 通过将原有的归档日志应用于备份数据库的方法,可以将当前的备用数据库与它原来的数据库一起保留。

控制归档模式

设置数据库初始归档模式

作为数据库创建的一部分,在 CREATE DATABASE 语句中需要设置数据库最初的归档模式。通常,因为没必要存档数据库创建后生成的重做信息,所以可以使用 NOARCHIVELOG 作为默认方式。在创建数据库之后,可以修改最初的存档模式。

示例1: 在 CREATE DATABASE 时设置归档模式

CREATE DATABASE OSRDB ARCHIVELOG 'arch/OSRDB';

注解

ARCHIVELOG 指定是归档模式,'arch/OSRDB'指定了归档目录(示例中使用的是相对路径,此处也可使用绝对路径)。

示例2: 使用 NOARCHIVELOG (默认)指定为非归档模式

CREATE DATABASE OSRDB NOARCHIVELOG;

设置数据库归档日志文件命名规则

通过数据库参数配置工具修改 LOG_ARCHIVE_FORMAT 参数值,可以更改当前归档模式数据库归档日志文件命名规则。

命名格式默认为 "log%s_%v.arc" , 其中, log是归档日志文件名前缀, '%s'为日志序列号, '%v'为日志版本号。

改变数据库归档模式

要改变数据库归档模式,必须拥有 ALTER DATABASE 系统权限。

示例1: 改变为归档模式(以指定相对路径 arch/OSRDB 为例)

ALTER DATABASE ARCHIVELOG 'arch/OSRDB';

示例2: 改变为非归档模式

ALTER DATABASE NOARCHIVELOG;

控制归档时间

在归档模式下,归档线程定时被唤醒归档在线日志到归档日志文件中。

可以设置参数 LOG_ARCHIVE_INTERVAL , 限制两次归档操作的间隔时间(单位:毫秒)。

查看归档日志文件路径信息

通过查询系统视图 V_SYS_ARCHIVELOG_INFO 可以查看归档日志文件路径信息。

示例1: 归档模式

--  查看归档日志文件路径信息
SELECT * FROM V_SYS_ARCHIVELOG_INFO;

--  结果如下
 DBNAME | ARCHIVEMODE |      ARCHIVEPATH
--------+-------------+------------------------
 OSRDB  | ARCHIVELOG  | C:\ShenTong\arch/OSRDB
(1 row)

示例2: 非归档模式

--  查看归档日志文件路径信息
SELECT * FROM V_SYS_ARCHIVELOG_INFO;

--  结果如下
 DBNAME | ARCHIVEMODE  | ARCHIVEPATH
--------+--------------+-------------
 OSRDB  | NOARCHIVELOG |
(1 row)

删除归档日志文件

神通数据库支持删除某个归档日志文件。定期的清理过期的归档日志,腾出磁盘空间。

要删除某个归档日志文件,就必须拥有 ALTER DATABASE 系统权限。

查看归档日志文件信息

通过查询系统视图 V$ARCHIVED_LOG 可以查看归档日志文件详细信息。

示例1: 查看归档文件详细信息

--  查看归档日志文件详细信息
SELECT * FROM V$ARCHIVED_LOG ORDER BY CREATE_TIME;
--  结果如下
--                      PATH                        |     CREATE_TIME     | BLOCKS | START_LSN | END_LSN
----------------------------------------------------+---------------------+--------+-----------+----------
 D:\lb\8.0\oscar8\STDB\arch\OSRDB/log512_1.arc      | 2018-04-18 16:17:02 | 204800 |       512 |  1028096
 D:\lb\8.0\oscar8\STDB\arch\OSRDB/log1028096_1.arc  | 2018-04-18 16:17:38 | 204800 |   1028096 |  6396416
 D:\lb\8.0\oscar8\STDB\arch\OSRDB/log6396416_1.arc  | 2018-04-20 16:35:16 | 204800 |   6396416 | 15330304

删除归档日志文件

示例1: 删除当前全部归档日志

ALTER DATABASE DELETE ARCHIVELOG ALL;

示例2: 按照文件的创建时间进行删除

ALTER DATABASE DELETE ARCHIVELOG BETWEEN TIME '2018-04-18 16:17:02' AND '2018-04-20 16:35:16';

示例3: 按照文件包含的LSN范围进行删除

ALTER DATABASE DELETE ARCHIVELOG BETWEEN LSN 6396416 AND 15330304;

注解

  • 无论以何种方式删除日志文件,只能删除当前日志版本的日志文件,例如日志文件log512_1.arc,512是该日志文件包含的起始LSN,1是日志版本号。 通过查看V$DATABASE的CURRENT_LVN字段确定当前数据库的日志版本号,只有日志文件的日志版本号符合当前数据库的日志版本号才有可能进行删除。
  • 无论以何种方式删除日志文件,都只能删除安全的日志文件,如果某个文件将来可能还需要被使用则不会被删除,例如日志文件所在LSN的范围包含RESTARTLSN,
  • 无论以何种方式删除日志文件,都不会删除正在被使用的文件。
  • 按照LSN的方式删除归档日志文件,仅会删除日志文件所在LSN范围全部包含在用户给出的LSN范围内的日志文件。例如日志文件A范围[100,200),用户删除范围[50,150], 则A不会被删除。