Oracle归档日志

来源:互联网 发布:mac如何升级到10.12 编辑:程序博客网 时间:2024/06/06 12:34

(测试数据库环境:powter)

一、log_archive_dest

1.1、开启归档

检查当前归档信息:

SQL>archive log list

Database logmode              No Archive Mode

Automaticarchival             Disabled

Archivedestination           /u01/app/oracle/product/10.2.0/db_1/dbs/arch

Oldest onlinelog sequence     5

Current logsequence           7

如果recovery_file非空,则Archive destination默认使用recovery_file的值,下面通过设置recovery_file的值使Archive destination使用默认值。

SQL>show parameter recovery_file

 

NAME                                 TYPE

----------------------------------------------------------

VALUE

------------------------------

db_recovery_file_dest                string

 

db_recovery_file_dest_size           big integer

0

SQL>alter system set db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'scope=spfile;

 

System altered.

参数recovery_file_dest为静态参数,只能修改spfile,然后重启数据库使其生效。

SQL>alter system set db_recovery_file_dest_size=2G scope=both;

 

Systemaltered.

 

SQL>show parameter recovery_file

 

NAME                                 TYPE

----------------------------------------------------------

VALUE

------------------------------

db_recovery_file_dest                string

 

db_recovery_file_dest_size           big integer

2G

重启DB达到mount状态:

SQL>shutdown immediate

Databaseclosed.

Databasedismounted.

ORACLEinstance shut down.

SQL>startup mount

ORACLEinstance started.

 

Total SystemGlobal Area  314572800 bytes

FixedSize                  2020480 bytes

VariableSize             130026368 bytes

DatabaseBuffers          180355072 bytes

RedoBuffers                2170880 bytes

Databasemounted.

检查db_recovery_file是否生效:

SQL>show parameter recovery_file

 

NAME                                 TYPE

----------------------------------------------------------

VALUE

------------------------------

db_recovery_file_dest                string

/u01/app/oracle/flash_recovery

_area

db_recovery_file_dest_size           big integer

2G

查看归档信息:

SQL>archive log list

Database logmode              No Archive Mode

Automaticarchival             Disabled

Archivedestination            USE_DB_RECOVERY_FILE_DEST

Oldest onlinelog sequence     5

Current logsequence           7

可以发现,我们只是设置了db_recovery_file的路径和大小,并没有设置log_archive_dest,但现在Archive destination已经使用db_recovery_file_dest的值了。

SQL>alter database archivelog;

 

Database altered.

 

1.2、验证归档文件

1.2.1、切换日志

列出当前归档信息:

SQL>archive log list

Database logmode              Archive Mode

Automaticarchival             Enabled

Archivedestination           USE_DB_RECOVERY_FILE_DEST

Oldest onlinelog sequence     5

Next logsequence to archive   7

Current logsequence           7

打开数据库:

SQL>alter database open;

 

Databasealtered.

查看日志物理文件

[oracle@redhat4Disk1]$ pwd

/u01/app/oracle/oradata/powter/Disk1

[oracle@redhat4Disk1]$ ll

总用量 1199652

-rw-r-----  1 oracle oinstall   8863744 7月 20 11:57 ctl01.ctl

-rw-r-----  1 oracle oinstall 104858112  7月 20 11:56 redo01_01.log

-rw-r-----  1 oracle oinstall 104858112  7月 20 11:56 redo02_01.log

-rw-r-----  1 oracle oinstall 104858112  7月 20 11:56 redo03_01.log

-rw-r-----  1 oracle oinstall 340795392  7月 20 11:56sysaux01.dbf

-rw-r-----  1 oracle oinstall 340795392  7月 20 11:56system01.dbf

-rw-r-----  1 oracle oinstall  20979712 7月 19 22:02 temp01.dbf

-rw-r-----  1 oracle oinstall 209723392  7月 20 11:56undotbs01.dbf

切换日志

SQL>alter system switch logfile;

 

Systemaltered.

 

查看归档信息与切换日志前对比:

SQL>archive log list;

Database logmode              Archive Mode

Automaticarchival             Enabled

Archivedestination           USE_DB_RECOVERY_FILE_DEST

Oldest onlinelog sequence     6

Next logsequence to archive   8

Current logsequence           8

查看日志文件信息:

[oracle@redhat4Disk1]$ ll

总用量 1199652

-rw-r-----  1 oracle oinstall   8863744 7月 20 11:58 ctl01.ctl

-rw-r-----  1 oracle oinstall 104858112  7月 20 11:58 redo01_01.log

-rw-r-----  1 oracle oinstall 104858112  7月 20 11:58 redo02_01.log

-rw-r-----  1 oracle oinstall 104858112  7月 20 11:56 redo03_01.log

-rw-r-----  1 oracle oinstall 340795392  7月 20 11:56sysaux01.dbf

-rw-r-----  1 oracle oinstall 340795392  7月 20 11:56system01.dbf

-rw-r-----  1 oracle oinstall  20979712 7月 19 22:02 temp01.dbf

-rw-r-----  1 oracle oinstall 209723392  7月 20 11:56undotbs01.dbf

查看归档日志文件信息:

[oracle@redhat42012_07_20]$ pwd

/u01/app/oracle/flash_recovery_area/POWTER/archivelog/2012_07_20

可以发现,oracle根据需要在flash_recovery_area路径下创建以SID创建了目录。

[oracle@redhat42012_07_20]$ ll

总用量 1164

-rw-r-----  1 oracle oinstall 1180160  7月 20 11:58o1_mf_1_7_80kotqm6_.arc

1.2.2、执行归档

手动进行归档:

?能否自动,如果自动,则按照什么条件归档?

SQL>alter system archive log current;

 

Systemaltered.

查看归档信息:

SQL>archive log list

Database logmode              Archive Mode

Automaticarchival             Enabled

Archivedestination           USE_DB_RECOVERY_FILE_DEST

Oldest onlinelog sequence     7

Next logsequence to archive   9

Current logsequence           9

当前日志文件信息:

[oracle@redhat4Disk1]$ ll

总用量 1199652

-rw-r-----  1 oracle oinstall   8863744 7月 20 12:05 ctl01.ctl

-rw-r-----  1 oracle oinstall 104858112  7月 20 11:58redo01_01.log

-rw-r-----  1 oracle oinstall 104858112  7月 20 12:05redo02_01.log

-rw-r-----  1 oracle oinstall 104858112  7月 20 12:05redo03_01.log

-rw-r-----  1 oracle oinstall 340795392  7月 20 12:05sysaux01.dbf

-rw-r-----  1 oracle oinstall 340795392  7月 20 12:05system01.dbf

-rw-r-----  1 oracle oinstall  20979712 7月 19 22:02 temp01.dbf

-rw-r-----  1 oracle oinstall 209723392  7月 20 12:05undotbs01.dbf

归档日志信息:

[oracle@redhat42012_07_20]$ ll

总用量 1176

-rw-r-----  1 oracle oinstall 1180160  7月 20 11:58o1_mf_1_7_80kotqm6_.arc

-rw-r-----  1 oracle oinstall    4608 7月 20 12:05 o1_mf_1_8_80kp7nys_.arc

可以发现,切换日志和执行归档都会进行日志文件的切换,都会产生归档日志文件

二、使用log_archive_dest_n的归档方式

1、创建两个放归档文件的目录

/u01/app/oracle/log_archive_area/powter/log_archive_dest_1

/u01/app/oracle/log_archive_area/powter/log_archive_dest_2

2、设置两个归档文件

SQL>alter system set log_archive_dest_1 = 'location=/u01/app/oracle/log_archive_area/powter/log_archive_dest_1'scope=both;

 

Systemaltered.

 

SQL>alter system set log_archive_dest_2 =

'location=/u01/app/oracle/log_archive_area/powter/log_archive_dest_2'scope=both;

 

Systemaltered.

以上两个参数可以动态修改并生效:

SQL> archivelog list

Database logmode              Archive Mode

Automaticarchival             Enabled

Archivedestination           /u01/app/oracle/log_archive_area/powter/log_archive_dest_2

Oldest onlinelog sequence     7

Next logsequence to archive   9

Current logsequence           9

 

3、验证log_archive_dest和log_archive_dest_n不能同时使用

SQL>alter system set log_archive_dest='/u01/app/oracle/arch' scope=both;

alter systemset log_archive_dest='/u01/app/oracle/arch' scope=both

*

ERROR at line1:

ORA-02097:parameter cannot be modified because specified value is invalid

ORA-16018:cannot use LOG_ARCHIVE_DEST with LOG_ARCHIVE_DEST_n or

DB_RECOVERY_FILE_DEST

 

4、切换日志和归档

[oracle@redhat4Disk1]$ ll

总用量 1199652

-rw-r-----  1 oracle oinstall   8863744 7月 20 12:53 ctl01.ctl

-rw-r-----  1 oracle oinstall 104858112  7月 20 12:50redo01_01.log

-rw-r-----  1 oracle oinstall 104858112  7月 20 12:50redo02_01.log

-rw-r-----  1 oracle oinstall 104858112  7月 20 12:50redo03_01.log

-rw-r-----  1 oracle oinstall 340795392  7月 20 12:50sysaux01.dbf

-rw-r-----  1 oracle oinstall 340795392  7月 20 12:50system01.dbf

-rw-r-----  1 oracle oinstall  20979712 7月 19 22:02 temp01.dbf

-rw-r-----  1 oracle oinstall 209723392  7月 20 12:50undotbs01.dbf

切换日志:

SQL>alter system switch logfile;

 

Systemaltered.

 

[oracle@redhat4Disk1]$ ll

总用量 1199652

-rw-r-----  1 oracle oinstall   8863744 7月 20 12:55 ctl01.ctl

-rw-r-----  1 oracle oinstall 104858112  7月 20 12:54redo01_01.log

-rw-r-----  1 oracle oinstall 104858112  7月 20 12:50redo02_01.log

-rw-r-----  1 oracle oinstall 104858112  7月 20 12:54redo03_01.log

-rw-r-----  1 oracle oinstall 340795392  7月 20 12:50sysaux01.dbf

-rw-r-----  1 oracle oinstall 340795392  7月 20 12:50system01.dbf

-rw-r-----  1 oracle oinstall  20979712 7月 19 22:02 temp01.dbf

-rw-r-----  1 oracle oinstall 209723392  7月 20 12:50undotbs01.dbf

[oracle@redhat4log_archive_dest_1]$ pwd

/u01/app/oracle/log_archive_area/powter/log_archive_dest_1

[oracle@redhat4log_archive_dest_1]$ ll

总用量 1216

-rw-r-----  1 oracle oinstall 1235968  7月 20 12:541_9_789081433.dbf

[oracle@redhat4log_archive_dest_2]$ pwd

/u01/app/oracle/log_archive_area/powter/log_archive_dest_2

[oracle@redhat4log_archive_dest_2]$ ll

总用量 1216

-rw-r-----  1 oracle oinstall 1235968  7月 20 12:541_9_789081433.dbf

执行归档:

SQL>alter system archive log current;

 

Systemaltered.

 

[oracle@redhat4Disk1]$ ll

总用量 1199652

-rw-r-----  1 oracle oinstall   8863744 7月 20 12:57 ctl01.ctl

-rw-r-----  1 oracle oinstall 104858112  7月 20 12:57redo01_01.log

-rw-r-----  1 oracle oinstall 104858112  7月 20 12:57redo02_01.log

-rw-r-----  1 oracle oinstall 104858112  7月 20 12:54redo03_01.log

-rw-r-----  1 oracle oinstall 340795392  7月 20 12:57sysaux01.dbf

-rw-r-----  1 oracle oinstall 340795392  7月 20 12:57system01.dbf

-rw-r-----  1 oracle oinstall  20979712 7月 19 22:02 temp01.dbf

-rw-r-----  1 oracle oinstall 209723392  7月 20 12:57undotbs01.dbf

[oracle@redhat4log_archive_dest_1]$ ll

总用量 1228

-rw-r-----  1 oracle oinstall    4608 7月 20 12:57 1_10_789081433.dbf

-rw-r-----  1 oracle oinstall 1235968  7月 20 12:541_9_789081433.dbf

[oracle@redhat4log_archive_dest_2]$ ll

总用量 1228

-rw-r-----  1 oracle oinstall    4608 7月 20 12:57 1_10_789081433.dbf

-rw-r-----  1 oracle oinstall 1235968  7月 20 12:541_9_789081433.dbf

各种网友总结:

(1)如果数据库设置了db_recovery_file_dest,就不能设置log_archive_dest,默认的归档日志存放于db_recovery_file_dest中,如果设置了log_archive_dest_n,那么归档日志不再存放于db_recovery_file_dest中,而是存放于设置的log_archive_dest_n目录中,如果想要归档日志继续存放在db_recovery_file_dest中,可以通过如下命令

alter system setlog_archive_dest_2='location=USE_DB_RECOVERY_FILE_DEST';

(2)log_archive_dest只能与 log_archive_duplex_dest共存,他们作用一样。

(3)还有一点就是,如果我们设置的log_archive_dest_n不正确,那么ORACLE会在我们设置的上一级目录归档,比如说我们设置log_archive_dest_1='location=C:\ARCHIVE1',如果操作系统中没有ARCHIVE1这个目录,那么ORACLE会在C盘归档,这个没做测试,感兴趣的可以做一做。

(4)老版本使用log_archive_dest配置归档日志路径最多可以配置2个,除了这个参数还有一个LOG_ARCHIVE_DUPLEX_DEST,这两个参数都只能配置本地路径,格式是log_archive_dest=’/backup1/xxx/’;

到了企业版,log_archive_dest这个参数已被oracle不推荐,如果用log_archive_dest_n最多可以配置10个路径,而且可以是本地也可以是远程的standby DB,log_archive_dest_n路径必须加location或service

log_archive_dest与log_archive_dest_n两个参数冲突,如果指定了log_archive_des后log_archive_dest_n显示指定不会起作用

如果指定了log_archive_dest路径,oracle会隐式启用log_archive_dest_10,默认路径为闪回区,所以上面备份会两份,如果显示指定log_archive_dest_10为空串,将不会再备份到闪回区

这两组参数都是静态参数,修改后必须重启数据库生效,如果都未批定会用系统默认:闪回区

(原文地址:http://www.anbob.com/?p=752

(5)log_archive_dest与log_archive_dest_n区别

●     log_archive_dest.

使用log_archive_dest参数最多可设置2个归档路径,通过log_archive_dest设置一个主归档路径,通过LOG_ARCHIVE_DUPLEX_DEST 参数设置一个从归档路径。所有的路径必须是本地的,该参数的设置格式如下:

LOG_ARCHIVE_DEST= '/disk1/archive'

LOG_ARCHIVE_DUPLEX_DEST= '/disk2/archive'

●     LOG_ARCHIVE_DEST_n

LOG_ARCHIVE_DEST_n参数可以设置最多10个不同的归档路径,通过设置关键词location或service,该参数指向的路径可以是本地或远程的。

LOG_ARCHIVE_DEST_1= 'LOCATION = /disk1/archive'

LOG_ARCHIVE_DEST_2= 'LOCATION = /disk2/archive'

LOG_ARCHIVE_DEST_3= 'LOCATION = /disk3/archive'

如果要归档到远程的standby数据库,可以设置service:

LOG_ARCHIVE_DEST_4= 'SERVICE = standby1'

可见,这两个参数都可以设置归档路径,不同的是后者可以设置远程归档到standby端,而前者只能归档到本地,且最多同时归档到2个路径下。

三、使用RMAN清空日志

如果我们手动去把磁盘上的归档文件删除,此时数据库中依然可以通过动态视图查看到已经在磁盘删除掉的归档日志,即动态视图中并没有释放这些空间。

范例:RMAN删除无用归档日志文件

1、删除本地归档日志

查看归档日志路径:

SQL>select name from v$archived_log;

 

NAME

----------------------------------------------------------------------------------------

/u01/app/oracle/flash_recovery_area/POWTER/archivelog/2012_07_20/o1_mf_1_7_80kotqm6_.arc

/u01/app/oracle/flash_recovery_area/POWTER/archivelog/2012_07_20/o1_mf_1_8_80kp7nys_.arc

/u01/app/oracle/log_archive_area/powter/log_archive_dest_1/1_9_789081433.dbf

/u01/app/oracle/log_archive_area/powter/log_archive_dest_2/1_9_789081433.dbf

/u01/app/oracle/log_archive_area/powter/log_archive_dest_1/1_10_789081433.dbf

/u01/app/oracle/log_archive_area/powter/log_archive_dest_2/1_10_789081433.dbf

(null)  ?

(null

/u01/app/oracle/log_archive_area/powter/log_archive_dest_1/1_12_789081433.dbf

/u01/app/oracle/log_archive_area/powter/log_archive_dest_2/1_12_789081433.dbf

 

10 rowsselected.

?为什么还是显示10行,已经用RMAN清空的为什么不会去掉,怎样才能彻底清空?

查看闪回区中归档日志已用的空间大小:

SQL>select name,space_limit,space_used from v$recovery_file_dest;

 

NAME                                SPACE_LIMIT SPACE_USED

---------------------------------------------- ----------

/u01/app/oracle/flash_recovery_area  2147483648   1183744

删除闪回区中的归档文件

[oracle@redhat42012_07_20]$ pwd

/u01/app/oracle/flash_recovery_area/POWTER/archivelog/2012_07_20

[oracle@redhat42012_07_20]$ rm -rf o1_mf_1_7_80kotqm6_.arc

删除自定义路径的归档日志文件

[oracle@redhat4log_archive_dest_1]$ pwd

/u01/app/oracle/log_archive_area/powter/log_archive_dest_1

[oracle@redhat4log_archive_dest_1]$ rm -rf 1_10_789081433.dbf

2、使用RMAN检查归档日志信息

进入RMAN将无用的归档日志清空:

[oracle@redhat4~]$ rman

 

RecoveryManager: Release 10.2.0.1.0 - Production on Fri Jul 20 22:02:27 2012

 

Copyright (c)1982, 2005, Oracle.  All rights reserved.

 

RMAN>connect target/

 

connected totarget database: POWTER (DBID=588037465)

 

RMAN>crosscheck archivelog all; -- 此命令的含义是检查所有归档日志的状态,并把遗失的标记为expired,也就是说,expired表示已经被操作系统中被删除的归档日志

 

using targetdatabase control file instead of recovery catalog

allocatedchannel: ORA_DISK_1

channelORA_DISK_1: sid=31 devtype=DISK

validationfailed for archived log

archivelogfilename=/u01/app/oracle/flash_recovery_area/POWTER/archivelog/2012_07_20/o1_mf_1_7_80kotqm6_.arcrecid=1 stamp=789134295

validationsucceeded for archived log

archivelog filename=/u01/app/oracle/flash_recovery_area/POWTER/archivelog/2012_07_20/o1_mf_1_8_80kp7nys_.arcrecid=2 stamp=789134709

validationsucceeded for archived log

archivelogfilename=/u01/app/oracle/log_archive_area/powter/log_archive_dest_1/1_9_789081433.dbfrecid=3 stamp=789137645

validationsucceeded for archived log

archivelogfilename=/u01/app/oracle/log_archive_area/powter/log_archive_dest_2/1_9_789081433.dbfrecid=4 stamp=789137645

validationfailed for archived log

archivelog filename=/u01/app/oracle/log_archive_area/powter/log_archive_dest_1/1_10_789081433.dbfrecid=5 stamp=789137834

validationsucceeded for archived log

archivelogfilename=/u01/app/oracle/log_archive_area/powter/log_archive_dest_2/1_10_789081433.dbfrecid=6 stamp=789137834

validationsucceeded for archived log

archivelogfilename=/u01/app/oracle/log_archive_area/powter/log_archive_dest_1/1_12_789081433.dbfrecid=9 stamp=789178871

validationsucceeded for archived log

archivelogfilename=/u01/app/oracle/log_archive_area/powter/log_archive_dest_2/1_12_789081433.dbfrecid=10 stamp=789178871

Crosschecked 8 objects

 

 

RMAN>delete expired archivelog all;  -- 此命令的含义是删除expired的归档日志

 

releasedchannel: ORA_DISK_1

allocatedchannel: ORA_DISK_1

channelORA_DISK_1: sid=31 devtype=DISK

 

List ofArchived Log Copies

Key     Thrd Seq     S Low Time Name

------- ----------- - --------- ----

1       1   7       X 20-JUL-12 /u01/app/oracle/flash_recovery_area/POWTER/archivelog/2012_07_20/o1_mf_1_7_80kotqm6_.arc

5       1   10      X 20-JUL-12 /u01/app/oracle/log_archive_area/powter/log_archive_dest_1/1_10_789081433.dbf

                                                                  --刚才物理删除的归档日志文件

Doyou really want to delete the above objects (enter YES or NO)? YES

deletedarchive log

archivelog filename=/u01/app/oracle/flash_recovery_area/POWTER/archivelog/2012_07_20/o1_mf_1_7_80kotqm6_.arcrecid=1 stamp=789134295

deletedarchive log

archivelogfilename=/u01/app/oracle/log_archive_area/powter/log_archive_dest_1/1_10_789081433.dbfrecid=5 stamp=789137834

Deleted2 EXPIRED objects

 

 

RMAN>crosscheck archivelog all;

 

releasedchannel: ORA_DISK_1

allocatedchannel: ORA_DISK_1

channelORA_DISK_1: sid=31 devtype=DISK

validationsucceeded for archived log

archivelog filename=/u01/app/oracle/flash_recovery_area/POWTER/archivelog/2012_07_20/o1_mf_1_8_80kp7nys_.arcrecid=2 stamp=789134709

validationsucceeded for archived log

archivelogfilename=/u01/app/oracle/log_archive_area/powter/log_archive_dest_1/1_9_789081433.dbfrecid=3 stamp=789137645

validationsucceeded for archived log

archivelogfilename=/u01/app/oracle/log_archive_area/powter/log_archive_dest_2/1_9_789081433.dbfrecid=4 stamp=789137645

validationsucceeded for archived log

archivelogfilename=/u01/app/oracle/log_archive_area/powter/log_archive_dest_2/1_10_789081433.dbfrecid=6 stamp=789137834

validationsucceeded for archived log

archivelogfilename=/u01/app/oracle/log_archive_area/powter/log_archive_dest_1/1_12_789081433.dbfrecid=9 stamp=789178871

validationsucceeded for archived log

archivelog filename=/u01/app/oracle/log_archive_area/powter/log_archive_dest_2/1_12_789081433.dbfrecid=10 stamp=789178871

Crosschecked 6 objects

 

3、通过动态视图验证无用归档日志已经被释放

查看动态视图v$archive_log:

SQL>select name from v$archived_log;

 

NAME

----------------------------------------------------------------------------------------

 

/u01/app/oracle/flash_recovery_area/POWTER/archivelog/2012_07_20/o1_mf_1_8_80kp7nys_.arc

 

/u01/app/oracle/log_archive_area/powter/log_archive_dest_1/1_9_789081433.dbf

/u01/app/oracle/log_archive_area/powter/log_archive_dest_2/1_9_789081433.dbf

 

/u01/app/oracle/log_archive_area/powter/log_archive_dest_2/1_10_789081433.dbf

 

 

/u01/app/oracle/log_archive_area/powter/log_archive_dest_1/1_12_789081433.dbf

/u01/app/oracle/log_archive_area/powter/log_archive_dest_2/1_12_789081433.dbf

 

10 rowsselected.

查看动态视图v$recovery_file_dest:

SQL>select name,space_limit,space_used from v$recovery_file_dest;

 

NAME                                SPACE_LIMITSPACE_USED

---------------------------------------------- ----------

/u01/app/oracle/flash_recovery_area  2147483648      4096

通过实验可以发现,使用RMAN删除被标记为遗失(expired)的归档日志后,动态视图可以释放空间。

不能进入RMNA的小问题

如果当前系统也存在rman命令时,则有可能导致ORACLE的rman不能使用,当可以通过配置环境变量解决此问题。

[oracle@redhat4~]$ which rman

/usr/X11R6/bin/rman

修改环境变量,把ORACLE的命令文件路径置于系统路径前面:

[oracle@redhat4~]$ vi .bash_profile

export PATH=$ORACLE_HOME/bin:$PATH

0 0
原创粉丝点击