在ORACLE数据库的开发环境和测试环境中,数据库的日志模式和自动归档模式一般都是不设置的,这样有利于系统应用的调整,也免的生成大量的归档日志文件将磁盘空间大量 的消耗。但在系统上线,成为生产环境时,将其设置为日志模式并自动归档相当重要了,因为,这是保证系统的安全性,有效预防灾难的重要措施。这样,通过定 时备份数据库和在两次备份间隔之间的日志文件,可以有效的恢复这段时间的任何时间点的数据,可以在很多时候挽回或大可能的减少数据丢失。
  一、 要使OARCLE 数据库进行日志的自动归档,需要做两方面的事情;
  1.是数据库日志模式的设置(可为Archive Mode 和No Archive Mode);2.是自动归档模式设置(Automatic archival,可为Enabled 和Disabled)。
  二、 如何查看数据库的现行日志和自动归档模式的设置
  可用archive log list 命令来查看。
  运行在日志自动归档模式下的数据库系统查看结果如下(一般是生产环境):
  SQL> archive log list
  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
  没有启动数据库日志模式和自动归档的数据库系统查看结果如下(一般是测试环境):
  SQL> archive log list
  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 的。
  将数据库的日志模式设置切换(Archive Mode 和No Archive Mode 之间的切换)的步骤和操作如下:
  1. 关闭运行的数据库实例
  SQL> shutdown
  在进行日志模式切换之前,必须将运行的数据库正常关闭。
  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;
  Database log mode Archive Mode
  Automatic archival Enabled
  Archive destination for example: $ORACLE_HOME/dbs/arch
  Oldest on-line log sequence 275
  Next log sequence 277
  Current log sequence 278
  7. 将这个时间点的redo logs 归档
  SQL> archive log all;
  8. 确认新产生的日志文件已在相应的归档目录下面。
  四. 自动归档模式设置(Automatic archival,可为Enabled 和Disabled)。
  在该模式下,数据库启动一个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;
  数据库将会把在线日志进行归档处理
  3. Database log mode NO Archive Mode,Automatic archival Enabled
  有些情况下,数据库管理员只在数据库参数文件中设置了LOG_ARCHIVE_START=TRUE,然后在数据库起来后查看到ARCH 归档进程已经起来了,可是尽管ORACLE 已经作了几次日志切换,但还是没有归档日志,这时的设置是这种情况,如果数据库不是处在ARVHIVELOG 模式,redolog 还是不会被归档。
  4. Database log mode NO Archive Mode,Automatic archival Disabled
  这种设置是刚安装的oracle 数据库的缺省设置,开发环境也大部分如此。即没有进行归档。
  如何手工删除归档日志文件?(如果采用RMNA备份后则不用手工删除)
  一、先手工删除归档日志文件
  二、用RMAN删除数据库记录的归档列表信息
  1) 进入本数据库的rman,在命令行模式输入"rman target /",进入rman,查看提示,确认连接的是否是本库?
  2) 查看归档日志文件的状态:
  RMAN> list archivelog all;
  3) 删除操作系统中的日志文件(到操作系统级进行手工删除,也可以是第一步;
  4) 将归档日志信息进行更新;
  RMAN> crosscheck archivelog all;
  RMAN> delete expired archivelog all; (确认时键入"yes")
  RMAN> exit