【archive_dest】歸檔的路徑問題

ballontt發表於2013-03-13

初始環境:

檢視歸檔模式:

SYS@PROD> archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /u01/app/oracle/product/10.2.0/db_1/dbs/arch

Oldest online log sequence     2

Next log sequence to archive   5

Current log sequence           5

 

檢視引數log_archive_dest

SYS@PROD> show parameter log_archive_dest;

 

NAME                                 TYPE        VALUE

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

log_archive_dest                     string

 

檢視閃回狀態:

SYS@PROD> select flashback_on from v$database;

 

FLASHBACK_ON

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

NO

閃回未開啟。

==============================================================================

 

閃回未開啟時的歸檔路徑測試:

 

進行歸檔,並檢視歸檔路徑:

SYS@PROD> alter system switch logfile;

 

System altered.

SYS@PROD> select name from v$archived_log;

 

NAME

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

/u01/app/oracle/product/10.2.0/db_1/dbs/arch1_5_809806951.dbf

/u01/app/oracle/product/10.2.0/db_1/dbs/ar_test1_6_809806951.dbf

/u01/app/oracle/product/10.2.0/db_1/dbs/ar_test1_7_809806951.dbf

3條記錄歸檔在了Archive destination   /u01/app/oracle/product/10.2.0/db_1/dbs/arch

路徑下。

 

此時想修改歸檔的路徑,設定引數log_archive_dest

 

SYS@PROD> alter system set log_archive_dest='/home/oracle/ar_test';

System altered.

 

SYS@PROD> show parameter log_archive_dest;

NAME                                 TYPE        VALUE

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

log_archive_dest                     string      /home/oracle/ar_test

 

SYS@PROD> archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /home/oracle/ar_test

Oldest online log sequence     4

Next log sequence to archive   8

Current log sequence           8

 

此時再次實驗檢視歸檔路徑:

 

SYS@PROD> alter system switch logfile;

 

System altered.

 

SYS@PROD> select name from v$archived_log;

 

NAME

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

/u01/app/oracle/product/10.2.0/db_1/dbs/arch1_5_809806951.dbf

/u01/app/oracle/product/10.2.0/db_1/dbs/ar_test1_6_809806951.dbf

/u01/app/oracle/product/10.2.0/db_1/dbs/ar_test1_7_809806951.dbf

/home/oracle/ar_test/1_8_809806951.dbf

 

多出第4條歸檔結果的存放路徑發生了變化

 

上述的操作,未開啟閃回。接下來看看閃回開啟後歸檔路徑會發生什麼變化。

閃回開啟:

 

SYS@PROD> alter system set db_recovery_file_dest_size=2g;

 

System altered.

 

SYS@PROD> alter system set db_recovery_file_dest='/home/oracle/flash';

alter system set db_recovery_file_dest='/home/oracle/flash'

*

ERROR at line 1:

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

ORA-16019: cannot use db_recovery_file_dest with LOG_ARCHIVE_DEST or

LOG_ARCHIVE_DUPLEX_DEST

 

因為設定了引數LOG_ARCHIVE_DEST所以無法再設定閃回恢復區的目錄,也就無法開啟歸檔。

 

只好取消LOG_ARCHIVE_DEST的設定

SYS@PROD> alter system set LOG_ARCHIVE_DEST='';

 

System altered.

 

SYS@PROD> archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            ?/dbs/arch

Oldest online log sequence     5

Next log sequence to archive   9

Current log sequence           9

 

如果此時如果在進行歸檔:

SYS@PROD> alter system switch logfile;

 

System altered.

 

SYS@PROD> select name from v$archived_log;

 

NAME

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

/u01/app/oracle/product/10.2.0/db_1/dbs/arch1_5_809806951.dbf

/u01/app/oracle/product/10.2.0/db_1/dbs/ar_test1_6_809806951.dbf

/u01/app/oracle/product/10.2.0/db_1/dbs/ar_test1_7_809806951.dbf

/home/oracle/ar_test/1_8_809806951.dbf

 

你將無法找到新生成的歸檔,直到我們再次設定了新的歸檔路徑,此次消失的歸檔檔案將和下一次新產生的歸檔檔案同時出現

 

SYS@PROD> alter system set log_archive_dest='/home/oracle/ar_test';

 

System altered.

 

SYS@PROD> select name from v$archived_log;

 

NAME

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

/u01/app/oracle/product/10.2.0/db_1/dbs/arch1_5_809806951.dbf

/u01/app/oracle/product/10.2.0/db_1/dbs/ar_test1_6_809806951.dbf

/u01/app/oracle/product/10.2.0/db_1/dbs/ar_test1_7_809806951.dbf

/home/oracle/ar_test/1_8_809806951.dbf

還是4條記錄,我們在歸檔一次:

 

SYS@PROD> alter system switch logfile;

 

System altered.

 

SYS@PROD> select name from v$archived_log;

 

NAME

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

/u01/app/oracle/product/10.2.0/db_1/dbs/arch1_5_809806951.dbf

/u01/app/oracle/product/10.2.0/db_1/dbs/ar_test1_6_809806951.dbf

/u01/app/oracle/product/10.2.0/db_1/dbs/ar_test1_7_809806951.dbf

/home/oracle/ar_test/1_8_809806951.dbf

/home/oracle/ar_test/1_9_809806951.dbf

/home/oracle/ar_test/1_10_809806951.dbf

 

6 rows selected.

6條記錄出現了。

 

如果,我們設定了引數log_archive_dest,閃回是無法開啟的。

取消該引數的設定:

SYS@PROD> alter system set log_archive_dest='';

 

System altered.

 

設定db_recovery_file_dest

SYS@PROD> alter system set db_recovery_file_dest='/home/oracle/flash';

 

System altered.

 

SYS@PROD> show parameter db_recovery_file_dest;

 

NAME                                 TYPE        VALUE

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

db_recovery_file_dest                string      /home/oracle/flash

db_recovery_file_dest_size           big integer 2G

 

取消db_recovery_file_dest引數後就可以了。雖然此時閃回還沒有開啟,但此時新的歸檔路徑已經變成db_recovery_file_dest=’/home/oracle/flash’

 

SYS@PROD> alter system switch logfile;

 

System altered.

 

SYS@PROD> archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     8

Next log sequence to archive   12

Current log sequence           12

SYS@PROD> select name from v$archived_log;

 

NAME

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

/u01/app/oracle/product/10.2.0/db_1/dbs/arch1_5_809806951.dbf

/u01/app/oracle/product/10.2.0/db_1/dbs/ar_test1_6_809806951.dbf

/u01/app/oracle/product/10.2.0/db_1/dbs/ar_test1_7_809806951.dbf

/home/oracle/ar_test/1_8_809806951.dbf

/home/oracle/ar_test/1_9_809806951.dbf

/home/oracle/ar_test/1_10_809806951.dbf

/home/oracle/flash/PROD/archivelog/2013_03_13/o1_mf_1_11_8n106whc_.arc

 

7 rows selected.

我們清楚地看到第七條結果了

 

接下來,我們正式開始閃回

SYS@PROD> select flashback_on from v$database;

 

FLASHBACK_ON

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

YES

在來重複上面的歸檔操作看看:

SYS@PROD> archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     8

Next log sequence to archive   12

Current log sequence           12

 

SYS@PROD> alter system switch logfile;

 

System altered.

SYS@PROD> select name from v$archived_log;

 

NAME

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

/u01/app/oracle/product/10.2.0/db_1/dbs/arch1_5_809806951.dbf

/u01/app/oracle/product/10.2.0/db_1/dbs/ar_test1_6_809806951.dbf

/u01/app/oracle/product/10.2.0/db_1/dbs/ar_test1_7_809806951.dbf

/home/oracle/ar_test/1_8_809806951.dbf

/home/oracle/ar_test/1_9_809806951.dbf

/home/oracle/ar_test/1_10_809806951.dbf

/home/oracle/flash/PROD/archivelog/2013_03_13/o1_mf_1_11_8n106whc_.arc

/home/oracle/flash/PROD/archivelog/2013_03_13/o1_mf_1_12_8n10qpfm_.arc

 

8 rows selected.

8條記錄了,新生成的歸檔在閃回恢復區中。

我們似乎看到,其實不論我們是否執行了:

Alter  database  flashback  on命令

來真正的開啟閃回,當我們設定了引數db_recovery_file_dest時,歸檔的路徑就已經確定,而且無法再使用引數log_archive_dest

 

如果,此時想形成多路徑歸檔日誌,可以通過設定引數log_archive_dest_n

這裡設定log_archive_dest_1

SYS@PROD> alter system set log_archive_dest_1='location=/home/oracle/ar_test';

 

System altered.

 

SYS@PROD> archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /home/oracle/ar_test

Oldest online log sequence     9

Next log sequence to archive   13

Current log sequence           13

 

SYS@PROD> alter system switch logfile;

 

System altered.

 

SYS@PROD> select name from v$archived_log;

 

NAME

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

/u01/app/oracle/product/10.2.0/db_1/dbs/arch1_5_809806951.dbf

/u01/app/oracle/product/10.2.0/db_1/dbs/ar_test1_6_809806951.dbf

/u01/app/oracle/product/10.2.0/db_1/dbs/ar_test1_7_809806951.dbf

/home/oracle/ar_test/1_8_809806951.dbf

/home/oracle/ar_test/1_9_809806951.dbf

/home/oracle/ar_test/1_10_809806951.dbf

/home/oracle/flash/PROD/archivelog/2013_03_13/o1_mf_1_11_8n106whc_.arc

/home/oracle/flash/PROD/archivelog/2013_03_13/o1_mf_1_12_8n10qpfm_.arc

/home/oracle/ar_test/1_13_809806951.dbf

 

9 rows selected.

log_archive_dest_1引數設定後,形成了新的歸檔路徑,且不在閃回恢復區中進行歸檔。

 

僅接著再來設定一個引數log_archive_dest_2

SYS@PROD> alter system set log_archive_dest_2='location=/home/oracle/ar_test1';

 

System altered.

 

SYS@PROD> show parameter log_archive_dest;

 

NAME                                 TYPE        VALUE

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

log_archive_dest                     string

log_archive_dest_1                   string      location=/home/oracle/ar_test

log_archive_dest_10                  string

log_archive_dest_2                   string      location=/home/oracle/ar_test1

log_archive_dest_3                   string

 

SYS@PROD> archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /home/oracle/ar_test1

Oldest online log sequence     11

Next log sequence to archive   15

Current log sequence           15

 

進行歸檔:

SYS@PROD> alter system switch logfile;

 

System altered.

 

SYS@PROD> select name from v$archived_log;

 

NAME

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

/u01/app/oracle/product/10.2.0/db_1/dbs/arch1_5_809806951.dbf

/u01/app/oracle/product/10.2.0/db_1/dbs/ar_test1_6_809806951.dbf

/u01/app/oracle/product/10.2.0/db_1/dbs/ar_test1_7_809806951.dbf

/home/oracle/ar_test/1_8_809806951.dbf

/home/oracle/ar_test/1_9_809806951.dbf

/home/oracle/ar_test/1_10_809806951.dbf

/home/oracle/flash/PROD/archivelog/2013_03_13/o1_mf_1_11_8n106whc_.arc

/home/oracle/flash/PROD/archivelog/2013_03_13/o1_mf_1_12_8n10qpfm_.arc

/home/oracle/ar_test/1_13_809806951.dbf

/home/oracle/ar_test/1_14_809806951.dbf

/home/oracle/ar_test1/1_14_809806951.dbf

 

11 rows selected.

此時有兩個歸檔記錄生成,且兩個檔案的名字一樣,只是存放的路徑不同。

 

結論:

(1)       剛開啟歸檔時,將有一個預設的歸檔路徑:

/u01/app/oracle/product/10.2.0/db_1/dbs/arch可以通過設定引數log_archive_dest來設定新的歸檔路徑

(2)       如果設定了引數log_archive_dest,將無法開啟設定引數db_recovery_file_dest來配置閃回恢復區,也就無法開啟閃回。

(3)       log_archive_dest無法和引數log_archive_dest_n, db_recovery_file_dest同時存在

(4)       log_archive_dest_n設定後將做為新的歸檔路徑,設定幾個引數就會有幾個幾路歸檔,同時也不會再在閃回恢復區中進行歸檔。

(5)       “曾看到資料說,db_recovery_file_dest設定後,oracle會隱式的設定log_archive_dest

_10db_recovery_file_dest的內容”這裡無從驗證。

======================================================================================

其實,到這裡,經朋友的提示,發現了一個蛋疼的問題:設定後log_archive_dest後,我們可以關閉資料庫在pfile裡設定pfiledb_recovery_file_dest的值,然後生成spfile啟動資料庫,此時,這幾個引數將同時有效的存在,歸檔將會在這兩個引數下的路徑下進行2路歸檔。但是此時你將無法在資料庫開啟狀態下對這幾個引數通過spfile進行任何修改,除非你在去pfile裡進行修改。至於非要這樣修改的目的是什麼,不知道。暫時只是知道有這麼一回事!


ballontt

2013/3/13

---The End---

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27425054/viewspace-756096/,如需轉載,請註明出處,否則將追究法律責任。

相關文章