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