当前位置:文档之家› Oracle Archive log

Oracle Archive log

Oracle归档日志(Archive Log 一)归档日志即重做日志的备份,使用归档日志的目的是为了实现介质恢复。

一.日志操作模式1.Noarchivelog(非归档模式)不保存重做日志。

不能在open状态下进行物理备份;要定期执行完全数据库备份;只能将数据库恢复到上次的完全备份点。

2.Archivelog当进行日志切换时,ARCH进程会将重做日志的内容复制到归档日志中。

在归档重做日志前,新事务变化不能覆盖旧事务变化。

可以在open 状态下进行物理备份。

可以将数据库恢复到失败前的状态。

可以是用备份数据库与主数据库保持同步。

二.开启归档1.改变日志操作模式shutdown immediate;startup mount;alter database archivelog;alter database open;修改日志操作模式后,必须重新备份数据库2.归档重做日志1).手工归档alter system archive log all;2).自动归档设置初始化参数:log_archive_start=trueshutdown immediate;startup pfile=.3).检查日志操作模式archive log list;三.指定归档位置1.使用log_archive_dest1).设置归档目录log_archive_dest log_archive_duplex_dest 2).设置归档日志格式2.使用log_archive_dest_n1).指定归档位置log_archive_dest_1=’location=f:\arc1’log_archive_dest_3=’service=standby’2).设置其他初始化参数log_archive_dest_state_1=enablelog_archive_dest_state_3=defer四.相关的一些脚本1.显示日志操作模式select log_mode from v$database2.显示归档日志信息select name,sequence#,first_change# from v$archived_log3.显示归档日志位置select destination from v$arvhive_dest4.显示日志历史信息select * from v$loghist;Oracle中的归档日志(Archive Log 二)在Oracle中,数据一般是存放在数据文件中,不过数据库与Oracle 最大的区别之一就是数据库可以在数据出错的时候进行恢复。

这个也就是我们常见的Oracle中的重做日志(REDO FILE)的功能了。

在重做日志分成2部分,一个是在线重做日志文件,另外一个就是归档日志文件。

这里不详细说明在线重做日志,而是说一下归档日志(Archive Log)。

在线重做日志大小毕竟是有限的,当都写满了的时候,就面临着2个选择,第一个就是把以前在线重做日志从头擦除开始继续写,第二种就是把以前的在线重做日志先进行备份,然后对被备份的日志擦除开始写新的在线Redo File。

这种备份的在线重做日志就是归档日志。

而数据库如果采用这种生成归档日志的模式的话,就是归档日志模式(ARCHIVELOG模式),反之如果不生成归档日志,就是非归档日志模式(NOARCHIVELOG模式)。

有了归档日志有什么好处了。

比如在这个月1号的时候备份了一次数据,然后过了10天,这10天生成了成百上千个在线重做日志,突然发现其中有一个数据磁盘出问题了,不能用了,那该如何是好呢。

如果没有采用归档日志,那么实际上磁盘中只会有几个最新的在线重做日志。

那么我只能要不然把出问题的数据磁盘上所占据的表空间都删除掉。

但是如果是SYSTEM表空间所涉及的磁盘出错,就没办法这么做了,只能用第二种方法。

那第二种方法就是把1号备份的数据拿出来恢复。

那么1号到10号之间的10天的数据都丢了,如果是关键系统,比如证券金融什么的系统,就要赔钱赔到死掉。

但是如果有了归档日志,那么这10天的重做日志都会存放起来,那么DBA首先把1号的备份数据恢复,然后再拿这10天的REDO日志来进行一次数据操作重放,那么就可以完全恢复最新的数据库,不会有什么后果了。

在软件开发的时候,由于测试服务器的配置有限,特别是磁盘空间有限,所以有可能要限制REDO文件的大小,有可能就把系统设置为NOARCHIVELOG 模式了。

但是在实际的生产运行环境下,建议一定要使用ARCHIVELOG模式,在一定程度上保证数据的基本安全。

有人可能会怕归档日志造成性能损失。

其实完全是杞人忧天,归档日志只是做一个备份,多耗一些磁盘空间。

在当前的软件系统中,硬盘的存储容量成本已经属于低到可以忽略的地步,而最重要的是数据库的安全。

DBA的任务本来就是确保数据的安全,系统的稳定性是首要保证的。

▋Oracle归档方式下丢失非当前联机日志(Archive Log 三)C:\>del D:\oracle9\oradata\nbxtdb\REDO03.LOGC:\>exitSQL> startupORACLE 例程已经启动。

Total System Global Area 378608760 bytesFixed Size 453752 bytesVariable Size 167772160 bytesDatabase Buffers 209715200 bytesRedo Buffers 667648 bytes数据库装载完毕。

ORA-00313: 无法打开日志组3 (线程1) 的成员ORA-00312: 联机日志3 线程1: 'D:\ORACLE9\ORADATA\NBXTDB\REDO03.LOG'SQL> select group#,sequence#,archived,status from v$log;GROUP# SEQUENCE# ARC STATUS---------- ---------- --- ----------------1 106 NO CURRENT2 104 YES INACTIVE3 105 YES INACTIVE--发现3是非当前日志,并且已经归档SQL> alter database clear logfile group 3;--如果还没有归档则使用:alter database clear unarchived logfile group 3;数据库已更改。

SQL> alter database open;数据库已更改。

--如果损坏的是非当前联机日志文件,一般只需要clear就可以重建改日志文件,但是如果数据库处于归档状态--但日志还没有归档,则需要强性clear。

--建议clear后,特别是强行clear后做一次数据库的全备份--改方法适合于归档和非归档数据库▋Oracle归档模式管理和设置(Archive Log 四)一、什么是Oracle归档模式:Oracle数据库有联机重做日志,这个日志是记录对数据库所做的修改,比如插入,删除,更新数据等,对这些操作都会记录在联机重做日志里。

一般数据库至少要有2个联机重做日志组。

当一个联机重做日志组被写满的时候,就会发生日志切换,这时联机重做日志组2成为当前使用的日志,当联机重做日志组2写满的时候,又会发生日志切换,去写联机重做日志组1,就这样反复进行。

如果数据库处于非归档模式,联机日志在切换时就会丢弃. 而在归档模式下,当发生日志切换的时候,被切换的日志会进行归档。

比如,当前在使用联机重做日志1,当1写满的时候,发生日志切换,开始写联机重做日志2,这时联机重做日志1的内容会被拷贝到另外一个指定的目录下。

这个目录叫做归档目录,拷贝的文件叫归档重做日志。

数据库使用归档方式运行时才可以进行灾难性恢复。

二、如何启动和关闭归档模式1) pfile和spfile 参数中有关归档模式的选项(init.ora)log_archive_start = true ##归档模式是自动还是手工,true为自动,false为手工log_archive_dest_1 = "location=D:\Oracle\oradata\oradb\archive" ##归档日志文件所保存的路径,可以设定多个路径log_archive_format = "%%ORACLE_SID%_%T%_TS_%S.ARC" ##归档日志文件的命名方法,2) 如果是用spfile方式启动的实例,需要动态设定参数,依照下面步骤:SQL> conn / as sysdba;SQL> alter system set log_archive_format='arc_%t_%s_%r.dbf' scope=spfile;System altered.SQL> alter system set log_archive_dest_1 = "location=/opt/app/oracle/oradata/arclog" scope=spfile;System altered.SQL> startup force mount;SQL> alter database archivelog; ##起用归档模式SQL> alter database open; ##打开数据库SQL> archive log list -- 观看日志文件点SQL> alter system switch logfile;##强制系统进行日志切换,可马上观察到归档日志的产生语句已处理。

SQL> archive log list3) 如果是用pfile方式启动的实例,首先要在init.ora 文件中添加上面选项,再依照下面步骤编辑init.ora文件,增加三个参数log_archive_start = truelog_archive_dest_1 = "location=/opt/app/oracle/oradata/arclog"log_archive_format = "arc_%t_%s_%r.dbf"SQL> conn / as sysdba;SQL> shutdown immediate;SQL> startup pfile=’%oracle_home%/init.ora mount;SQL> alter database archivelog; ##起用归档模式SQL> alter database open; ##打开数据库4)停止归档:SQL> conn / as sysdba;SQL> shutdown immediate;SQL> startup mount;SQL> alter database noarchivelog; --关闭归档模式SQL> alter database open;。

相关主题