oracle日志归档

 
  学过SQL Server和MySQL之后,再学Oracle会感觉很难入门(个人的感觉),因为这三者数据库都是应用环境中比较常见的数据库,而前两者却没有归档这么一说(只是很难入门的原因之一),但是并不是说前两者都没有这些日志,在SQLServer中大家应该都知道create database后会有两个文件,一个是*.mdf而另一个是*.ldf,那么后者(*.ldf)就类似于Oracle的日志,MySQL下一般都在datadir的根目录下的*.bin的二进制文件就是类似的日志了,但是都没有归档这么一说。
 
########################归档模式介绍################################
下面我简单对“归档”这个概念按个人的理解进行粗略的解释
所谓“归档”字面意思就是归入档案,也就是打包存储,那么这个oracle的日志归档顾名思义就是将Oracle的日志进行打包存储(个人认为便于理解)。
 
非归档模式
 
Oracle有联机重做日志,这个日志记录了Oracle数据库的所有操作,增删改查等。对这些操作Oracle通过联机重做日志进行动作记录。一般数据库至少有两个联机重做日志组,当第一个联机日志组写满时,就会发生日志切换,这时日志组二便成为当前的联机重做日志组,当第二组写满时,又去写第一组,这样反复进行的话,当第二个写满时,就开始再次用第一个,而写第二个组之前写入第一个组的日志就会被丢弃,这样就是Oracle数据库的非归档模式。
 
归档模式
 
如果数据库处于非归档模式,联机日志在切换时就会丢弃. 而在归档模式下,当发生日志切换的时候,被切换的日志会进行归档。比如,当前在使用联机重做日志1,当1写满的时候,发生日志切换,开始写联机重做日志2,这时联机重做日志1的内容会被拷贝到另外一个指定的目录下。这个目录叫做归档目录,拷贝的文件叫归档重做日志。
 
########################为什么要启用归档##############################
为什么要启用归档日志模式?归档日志模式和非归档日志模式的区别是什么?
 
数据库使用归档方式运行时,才可以通过重做日志进行灾难性恢复。
 
非归档模式只能做冷备份,并且恢复时只能做完全备份.最近一次完全备份到系统出错期间的数据不能恢复.
 
归档模式可以做热备份,并且可以做增量备份,可以做部分恢复.
 
用ARCHIVE LOG LIST 可以查看当前模式状态是归档模式还是非归档模式.
################################################################
查看默认归档路径
1. select * from v$recovery_file_dest;
 
sql >show parameter db_recovery_file_dest
 
归档的日志文件可以通过LOGMNR进行分析。
 
1.  ARCn后台进程的最大参数
 
LOG_ARCHIVE_MAX_PROCESSES(动态参数)最大10个后台进程:
 
可以通过SELECT * FROM V$ARCHIVE_PROCESSES视图查看
 
与归档信息相关的视图:
 
 
 
 
视图  
作用
 
V$DATABASE
LOG_MODE字段归档模式
 
 
V$INSTANCE
ARCHIVER字段是否正在归档
 
 
V$ARCHIVED_LOG
从控制文件中获取的所有历史归档日志文件信息
 
 
V$ARCHIVE_DEST
归档目标位置的信息
 
 
V$ARCHIVE_PROCESSES
归档进程的信息
 
 
V$BACKUP_REDOLOG
所有已备份的归档日志文件的信息
 
 
V$LOG
所有重做日志文件的信息,其中包含那些需要归档的重做日志文件
 
 
V$LOG_HISTORY
重做日志文件的历史信息
 
查询已归档的日志文件信息(即是系统中存在的物理文件)
SELECT NAME,SEQUENCE#,ARCHIVED,STATUS,FIRST_CHANGE#,TO_CHAR(FIRST_TIME, 'YYYY-MM-DD HH24:MI:SS')  FIRST_CHANGE_TIME FROM V$ARCHIVED_LOG
 
查看归档目标位置的信息
SELECT DESTINATION,BINDING,TARGET,STATUS FROM V$ARCHIVE_DEST
 
查看那些重做日志需要归档
 
SELECT GROUP#,MEMBERS,SEQUENCE#,ARCHIVED,STATUS,FIRST_CHANGE#,TO_CHAR(FIRST_TIME, 'YYYY-MM-DD HH24:MI:SS') FIRST_CHANGE_TIME FROM V$LOG
 
##########################启用归档配置##############################
1.改变非归档模式到归档模式
 
[oracle@Ora oraarclog]$ sqlplus /nolog            #用Oracle用户登录pl/sql
 
SQL*Plus: Release 11.2.0.1.0 Production on Wed May 15 04:49:30 2013
 
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
 
SQL> connect / as sysdba                #用dba的身份连接到数据库
Connected.
SQL>  
SQL> shutdown immediate                    #关闭数据库
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;                    #将数据库启动到mount状态,不打开,下一步进行启用归档模式
ORACLE instance started.
 
Total System Global Area  780824576 bytes
Fixed Size                  2217424 bytes
Variable Size             524290608 bytes
Database Buffers          247463936 bytes
Redo Buffers                6852608 bytes
Database mounted.
SQL> select log_mode from V$database;            #当前可以查看database视图,log_mode的状态时NOARCHIVELOG,日志处于非归档模式
 
LOG_MODE
------------
NOARCHIVELOG
 
SQL> alter database archivelog;                #设置启用归档模式
 
Database altered.
 
SQL> select log_mode from v$database;            #再次查看已经处于归档模式
 
LOG_MODE
------------
ARCHIVELOG
 
SQL> alter database open;                #然后打开数据库
 
Database altered.
 
SQL> alter system archive log start;            #启用自动归档(和启用归档模式是两码事,仔细看字面意思就能明白)
 
System altered.
 
SQL> exit                        #退出
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
 
更改归档路径(更改归档目录)
 
SQL> alter system set log_archive_dest_1='location=/home/oracle/oraarclog' scope=spfile;    #将归档目录更改到/home/oracle/oraarclog下
 
System altered.
 
SQL> archive log list;                                        #查看归档信息
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /home/oracle/oraarclog
Oldest online log sequence     8
Next log sequence to archive   10
Current log sequence           10
 
SQL> select name from v$archived_log;                                #查看归档的name和位置
 
NAME
--------------------------------------------------------------------------------
/home/oracle/oraarclog/1_9_815127246.dbf
 
将归档模式改为非归档模式(和以上相同的命令不多做介绍)
 
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
 
Total System Global Area  780824576 bytes
Fixed Size                  2217424 bytes
Variable Size             524290608 bytes
Database Buffers          247463936 bytes
Redo Buffers                6852608 bytes
Database mounted.
SQL> startup mount
ORACLE instance started.
 
Total System Global Area  780824576 bytes
Fixed Size                  2217424 bytes
Variable Size             524290608 bytes
Database Buffers          247463936 bytes
Redo Buffers                6852608 bytes
Database mounted.
SQL> alter database noarchivelog;            #将数据库设置为非归档模式
 
Database altered.
 
SQL> alter database open;
 
Database altered.
 
SQL> archive log list;
Database log mode              No Archive Mode        #米有归档
Automatic archival             Disabled            #自动归档禁止状态
Archive destination            /home/oracle/oraarclog
Oldest online log sequence     8
Current log sequence           10
 
修改日志文件命名格式:  
SQL> alter system set log_archive_max_processes = 5;  
SQL> alter system set log_archive_format = "archive_%t_%s_%r.log" scope=spfile;
对于非归档模式的数据库该为归档模式使用以下步骤:  
SQL> alter system set log_archive_dest_1='location=/oracle/log/archive_log';  
该语句含义是确定归档日志的路径,实际上Oracle 10g可以生成多份一样的日志,保存多个位置,以防不测  
例如再添加一个日志位置可使用以下语句  

SQL>alter system set log_archive_dest_2='location=/oracle/log2/archive_log';


#############################

本文属笔者原创

作者:john

转载请注明出处


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值