数据库归档模式

Posted 当年亦如是

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库归档模式相关的知识,希望对你有一定的参考价值。

背景:新话单功能上线后,生产环境之前未配置定时任务产生话单,导致数据库有2000多万条的记录等待生成话单,定时任务配置正确后,由于环境开启了数据库归档模式,而生成话单的过程又在不断的update和delete行为轨迹表中的数据,导致产生大量的归档日志,必须实时监控磁盘空间。

Oracle数据库的归档模式一般在开发、测试环境默认是不设置的的,主要是为了节省磁盘空间,在生产环境上,设置日志模式并自动归档主要是为了保证系统安全,恢复数据。

(一)Oracle数据库进行日志的自动归档需要满足两个条件:

1.是数据库日志模式的设置(可为Archive Mode 和No Archive Mode)

2.是自动归档模式设置(Automatic archival,可为Enabled 和Disabled)

(二)查看Oracle数据现行的日志模式和归档模式的设置

使用 archive log list 命令查看

1.运行在日志自动归档模式的查看结果

Database log mode  Archive Mode
Automatic archival    Enabled
Archive destination  /backup/archivelog
Oldest online log sequence 2131
Next log sequence to archive 2133
Current log sequence 2133

2.未启动数据库日志自动归档模式的查看结果

Database log mode   No Archive Mode
Automatic archival     Disabled
Archive destination   /u01/app/oracle/product/8.1.7/dbs/arch
Oldest online log sequence 194
Current log sequence 196

(三)数据库日志模式的设置

创建数据库时,可以在CREATE DATABASE 语句中指定数据库的日志模式,默认缺省是NOARCHIVELOG 模式,如果在创建数据库时指明是Archive Mode的话,会增加约20%的创建时间,而在以后启动INSTANCE 时再设置的话,一般只用去几秒的时间。

日志模式设置切换(Archive Mode 和No Archive Mode 之间的切换)的步骤和操作如下:

1.关闭数据库实例

SQL> shutdown immediate;

2.备份数据库

该备份跟以后产生的日志一起用于将来的灾难恢复(很重要,如要改为归档日志模式,没有这个数据库备份,仅有日志文件是无法从该时间点恢复的)

3.启动数据库实例到mount 状态,但不要打开。

SQL> startup mount;

4.切换数据库日志模式。

SQL> alter database archivelog;(设置数据库为归档日志模式)

SQL> alter database noarchivelog;(设置数据库为非归档日志模式)

5.打开数据库。

SQL> alter database open;

6.确认数据库现在处于归档日志模式。

SQL> archive log list;

7.将这个时间点的redo logs 归档

SQL> archive log all;

8.确认新产生的日志文件已在相应的归档目录下面。

(四)数据库自动归档模式的设置

在该模式下,数据库启动一个arch 进程,专门负责将redo logs 写到系统归档设备的相应目录下。在数据库的参数文件中设置参数(一般是在$ORACLE_HOME/dbs/init*.ora 文件中):

LOG_ARCHIVE_START= LOG_ARCHIVE_DEST= LOG_ARCHIVE_FORMAT=

LOG_ARCHIVE_START: 如要求自动归档的话,则设为TRUE,如要求为非自动归档的话,则设为FALSE

LOG_ARCHIVE_DEST: 该参数设定了archive logs 归档存放的路径。

LOG_ARCHIVE_FORMAT: 该参数设定了archive logs 的命名格式。例如,如将格式设为: arch%s.arc log 文件将为: arch1.arc, arch2.arc, arch3.arc

这几个参数设置只有在数据库实例启动前设置才能生效,如果在数据库运行中进行设置,要使其生效,必须重起数据库。 如果数据库正在运行中,不能即刻重起,要设置其为自动归档模式,则做如下操作:

SQL> ALTER SYSTEM ARCHIVE LOG START;

如要设置其为非自动归档模式(取消自动归档),则:

SQL> ALTER SYSTEM ARCHIVE LOG STOP;

但如果数据库重起后,给语句修改的结果就失效了,自动归档的设置还是按照系统参数文件中的LOG_ARCHIVE_START 的值来设置。

(五)几种设置情况:

  1. Database log mode Archive Mode,Automatic archival Enabled 这是在大部分生产环境中的ORACLE 数据库日志及归档模式设置,这种情况下,做好数据库的定期备份(有热备和冷备)和归档日志备份,可有效的将数据库恢复到有归档日志的全部时间点。
  2. Database log mode Archive Mode,Automatic archival Disabled 这种情况下,数据库不能自动归档,需要进行手工归档。如果所有在线日志都写满了,又没有的及时进行手工归档的话,由于LGWR 没有可用的在线日志可写,数据库将会挂在这儿,只有进行手工归档后,有可用的在线日志后才能继续。在生产环境中应该避免这种情况。 手工归档操作如下:

SQL> ALTER SYSTEM ARCHIVE LOG ALL;

数据库将会把在线日志进行归档处理

  1. Database log mode NO Archive Mode,Automatic archival Enabled 有些情况下,数据库管理员只在数据库参数文件中设置了LOG_ARCHIVE_START=TRUE,然后在数据库起来后查看到ARCH 归档进程已经起来了,可是尽管ORACLE 已经作了几次日志切换,但还是没有归档日志,这时的设置就是这种情况,如果数据库不是处在ARVHIVELOG 模式,redolog 还是不会被归档。
  2. Database log mode NO Archive Mode,Automatic archival Disabled 这种设置是刚安装的oracle 数据库的缺省设置,开发环境也大部分如此。即没有进行归档。

归档日志清理(如果采用RMNA备份后则不用手工删除)

归档日志都可以清理,不会导致数据库有问题,但一般清历史的,保留近1个小时的。 一、先手工删除归档日志文件 二、用RMAN删除数据库记录的归档列表信息

  1. 进入本数据库的rman,在命令行模式输入"rman target /",进入rman,查看提示,确认连接的是否是本库?

oracle ~# reman /target

  1. 查看归档日志文件的状态:

RMAN> list archivelog all;

  1. 删除操作系统中的日志文件(到操作系统级进行手工删除,也可以是第一步;
  2. 将归档日志信息进行更新;

RMAN> crosscheck archivelog all;
RMAN> delete expired archivelog all; (确认时键入"yes")
RMAN> exit

 

以上是关于数据库归档模式的主要内容,如果未能解决你的问题,请参考以下文章

mariadb开启归档模式

Oracle数据库如何开启自动归档

oracle11g设置归档模式和非归档模式

怎样将Oracle数据库设置为归档模式及非归档模式

Oracle 开启归档日志以及关闭归档日志

Oracle11g 归档模式