Oracle中的归档日志文件详解

 更新时间:2025年08月29日 09:18:03   作者:DG0913L  
文章介绍了Oracle数据库的归档模式设置、日志归档原理及管理方法,包括如何检查归档状态、配置归档路径和命名格式、处理空间不足导致的挂起问题,以及归档日志的删除方式(手工/ RMAN)和控制文件信息维护

1、概念

归档是将联机重做日志以文件的形式保存到硬盘,联机日志归档的前提条件是数据库要处于归档模式。

当数据库处于 ARCHIVELOG 模式并进行日志切换时,后台进程 ARCH 会将联机重做日志的内容保存到归档日志中,当数据库出现介质故障时,使用数据文件备份、归档日志和联机重做日志可以完全恢复数据库到正常状态。

Oracle 数据库设置为归档模式之后,如果归档空间写满,数据库的 redo 文件不能归档,会出现数据库挂起的问题,导致 数据库无法使用。

2、查看数据库是否为归档模式

SQL> archive log list;Database log mode Archive ModeAutomatic archival EnabledArchive destination /app/archiveOldest online log sequence 30Next log sequence to archive 34Current log sequence 34SQL> select log_mode from v$database;LOG_MODE------------------------------------ARCHIVELOG

3、打开或关闭归档模式

如果需要打开或关闭归档模式,在数据库处于 mount 状态时使用如下命令:

3.1 打开归档模式

alter database archivelog;

3.2 关闭归档模式

alter database noarchivelog;

4、配置归档的位置

当数据库处于归档模式时,进行日志切换时后台进程将自动生成归档日志。

4.1 查看归档进程数

初始化参数 LOG_ARCHIVE_MAX_PROCESSES 用于指定最大归档进程个数。

通过改变该初始化参数的取值,可以动态地增加或减少归档进程的个数。

SQL> show parameter LOG_ARCHIVE_MAX_PROCESSES;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_max_processes            integer     4

4.2 配置归档的位置

可以使用 LOG_ARCHIVE_DEST_n 配置多个归档位置:该参数最多可以指定 10 个归档位置。

格式如下:

ALTER SYSTEM SET log_archive_dest_1 = 'location = 路径1';
ALTER SYSTEM SET log_archive_dest_2 = 'location = 路径2';
.....

4.2.1 查看归档文件

SQL> select sequence#, name from v$archived_log;
SEQUENCE#  NAME
---------- --------------------------------------------------------------------------------
34 /app/archive/orcl_62725153_0000000034_1_1125947150.dbf

可知归档的文件位置 /app/archive/

4.2.2 修改归档日志的位置为:/home/oracle/archivelog

SQL> alter system set log_archive_dest_1 = 'location=/app/archive' scope = both sid='*';
SQL> archive log list;
SQL> alter system switch logfile;
SQL> select sequence#, name from v$archived_log;
SQL> select sequence#, name from v$archived_log;
SEQUENCE#  NAME
---------- --------------------------------------------------------------------------------
34 /app/archive/orcl_62725153_0000000034_1_1125947150.dbf
35 /app/archive/orcl_62725153_0000000035_1_1125947150.dbf

5、配置归档日志文件的名称格式

初始化参数 LOG_ARCHIVE_FORMAT 用于指定归档日志文件的名称格式。

设置该初始化参数时,可以指定以下匹配符:

  • (1)%s:日志序列号;
  • (2)%S:日志序列号(带有前导 0);
  • (3)%t:线程编号;
  • (4)%T:线程编号(带有前导 0);
  • (5)%a:活动 ID 号;
  • (6)%d:数据库 ID 号;
  • (7)%r:RESETLOGS的ID值。

归档日志的文件名称格式设置如下:

SQL> alter system set LOG_ARCHIVE_FORMAT = 'orcl_%d_%S_%t_%r.dbf' scope = spfile sid='*';

重启数据库使设置生效

SQL> shutdown immediate
SQL> startup

查看参数 LOG_ARCHIVE_FORMAT 的值:

SQL> show parameter LOG_ARCHIVE_FORMAT
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_format                   string      orcl_%d_%S_%t_%r.dbf

查看归档日志:

SQL> select sequence#, name from v$archived_log;

6、删除归档日志

6.1 手工删除归档日志文件

[oracle@node1 archive]$ cd /app/archive/
[oracle@node1 archive]$ ll -r
总用量 4516
-rw-r----- 1 oracle oinstall   10752 2月   2 10:54 orcl_62725153_0000000036_1_1125947150.dbf
-rw-r----- 1 oracle oinstall   54784 2月   2 10:51 orcl_62725153_0000000035_1_1125947150.dbf
-rw-r----- 1 oracle oinstall 4551680 2月   2 10:46 orcl_62725153_0000000034_1_1125947150.dbf
[oracle@node1 archive]$ rm -rf orcl_62725153_0000000034_1_1125947150.dbf
[oracle@node1 archive]$ ll
总用量 68
-rw-r----- 1 oracle oinstall 54784 2月   2 10:51 orcl_62725153_0000000035_1_1125947150.dbf
-rw-r----- 1 oracle oinstall 10752 2月   2 10:54 orcl_62725153_0000000036_1_1125947150.dbf

查看归档日志:

SQL> select sequence#, name from v$archived_log;
SEQUENCE#  NAME
---------- --------------------------------------------------------------------------------
34 /app/archive/orcl_62725153_0000000034_1_1125947150.dbf
35 /app/archive/orcl_62725153_0000000035_1_1125947150.dbf
36 /app/archive/orcl_62725153_0000000036_1_1125947150.dbf

虽然物理文件已经删除,但是归档日志文件的信息还在。

6.2 用 RMAN 删除数据库记录的归档列表信息

[oracle@node1 ~]$ rman target /

RMAN> list archivelog all;

List of Archived Log Copies for database with db_unique_name ORCL
=====================================================================

Key     Thrd Seq     S Low Time 
------- ---- ------- - ---------
36      1    34      X 02-FEB-23
        Name: /app/archive/orcl_62725153_0000000034_1_1125947150.dbf

37      1    35      A 02-FEB-23
        Name: /app/archive/orcl_62725153_0000000035_1_1125947150.dbf

38      1    36      A 02-FEB-23
        Name: /app/archive/orcl_62725153_0000000036_1_1125947150.dbf


RMAN> crosscheck archivelog all;

released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=1996 device type=DISK
validation failed for archived log
archived log file name=/app/archive/orcl_62725153_0000000034_1_1125947150.dbf RECID=36 STAMP=1127731566
validation succeeded for archived log
archived log file name=/app/archive/orcl_62725153_0000000035_1_1125947150.dbf RECID=37 STAMP=1127731881
validation succeeded for archived log
archived log file name=/app/archive/orcl_62725153_0000000036_1_1125947150.dbf RECID=38 STAMP=1127732067
Crosschecked 3 objects

RMAN> delete expired archivelog all;

released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=1996 device type=DISK
List of Archived Log Copies for database with db_unique_name ORCL
=====================================================================

Key     Thrd Seq     S Low Time 
------- ---- ------- - ---------
36      1    34      X 02-FEB-23
        Name: /app/archive/orcl_62725153_0000000034_1_1125947150.dbf


Do you really want to delete the above objects (enter YES or NO)? yes
deleted archived log
archived log file name=/app/archive/orcl_62725153_0000000034_1_1125947150.dbf RECID=36 STAMP=1127731566
Deleted 1 EXPIRED objects
RMAN> select sequence#, name from v$archived_log;select sequence#, name from v$archived_log;
SEQUENCE#  NAME
---------- --------------------------------------------------------------------------------
34 
35 /app/archive/orcl_62725153_0000000035_1_1125947150.dbf
36 /app/archive/orcl_62725153_0000000036_1_1125947150.dbf

6.3 清除 v$archived_log 视图中的过期信息

使用 RMAN 命令删除归档后,v$archived_log 视图中的 name 列为空,但其他列的信息仍然存在。

出现这种现象的原因是因为使用 RMAN 命令在删除归档日志的时候不能够清除控制文件中的内容。

6.3.1 清除控制文件中关于 v$archived_log 的信息

SQL> execute sys.dbms_backup_restore.resetCfileSection(11);
PL/SQL procedure successfully completed.

6.3.2 查询发现 v$archived_log 视图中的信息全部被清除了

SQL> select sequence#, name from v$archived_log;
 SEQUENCE# NAME
---------- -----------------------------

6.3.3 将未过期的归档文件信息重新注册到控制文件中

RMAN> catalog start with '/app/archive/';

using target database control file instead of recovery catalog
searching for all files that match the pattern /app/archive/

List of Files Unknown to the Database
=====================================
File Name: /app/archive/orcl_62725153_0000000035_1_1125947150.dbf
File Name: /app/archive/orcl_62725153_0000000036_1_1125947150.dbf

Do you really want to catalog the above files (enter YES or NO)? yes
cataloging files...
cataloging done

List of Cataloged Files
=======================
File Name: /app/archive/orcl_62725153_0000000035_1_1125947150.dbf
File Name: /app/archive/orcl_62725153_0000000036_1_1125947150.dbf
RMAN> select sequence#, name from v$archived_log;
 SEQUENCE# NAME
---------- --------------------------------------------------------------------------------
        35 /app/archive/orcl_62725153_0000000035_1_1125947150.dbf
        36 /app/archive/orcl_62725153_0000000036_1_1125947150.dbf

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • ip修改后orcale服务无法启动问题解决

    ip修改后orcale服务无法启动问题解决

    今天配置虚拟机中设计了下ip,使虚拟机和主机处在同一网段,然后使用webservice就成功了就来了,oracle连接不上了,接下来讲提供详细的解决方法
    2012-11-11
  • Redhat6.5安装oracle11g的方法

    Redhat6.5安装oracle11g的方法

    这篇文章主要介绍了Redhat6.5安装oracle11g的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • oracle数据库如何开启审计日志

    oracle数据库如何开启审计日志

    在Oracle数据库中,审计功能的开启与关闭由参数audit_trail控制,其取值包括DB(默认值,开启审计并记录到数据库)、OS(将审计记录写入操作系统文件)、TRUE(开启审计功能)、FALSE和NONE(均为关闭审计功能),操作过程涉及查看、开启
    2024-10-10
  • Oracle中游标Cursor的用法详解

    Oracle中游标Cursor的用法详解

    本文详细讲解了Oracle中游标Cursor的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • Oracle AWR(自动工作量资料档案库)的管理与维护详解

    Oracle AWR(自动工作量资料档案库)的管理与维护详解

    这篇文章主要给大家介绍了关于Oracle AWR(自动工作量资料档案库)管理与维护的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10
  • Oracle数据库服务器修改操作系统时间的注意事项详解

    Oracle数据库服务器修改操作系统时间的注意事项详解

    在本篇文章里小编给大家整理的是一篇关于Oracle数据库服务器修改操作系统时间的注意事项详解,需要的朋友们可以参考下。
    2020-03-03
  • oracle存储过程中return和exit区别概述及测试

    oracle存储过程中return和exit区别概述及测试

    至于return和exit在oracle存储过程中的应用,有些新手朋友们还是比较容易混淆的,本文将针对这两个关键字进行详细对比下,感兴趣的你可以参考下,希望可以帮助到你
    2013-02-02
  • Oracle dbca时报:ORA-12547: TNS:lost contact错误的解决

    Oracle dbca时报:ORA-12547: TNS:lost contact错误的解决

    这篇文章主要给大家介绍了关于Oracle在dbca时报:ORA-12547: TNS:lost contact错误的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-11-11
  • Oracle中pivot函数示例详解

    Oracle中pivot函数示例详解

    PIVOT函数是Oracle数据库中的一个聚合函数,它可以将行数据转换为列数据,这篇文章主要介绍了Oracle中pivot函数示例详解,需要的朋友可以参考下
    2024-05-05
  • oracle行转列方法集合汇总(推荐!)

    oracle行转列方法集合汇总(推荐!)

    工作中我们经常会碰到行转列的情况,下面这篇文章主要给大家介绍了关于oracle行转列方法集合的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04

最新评论