Oracle歸檔日誌

(測試數據庫環境: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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章