oracle資料庫要在歸檔模式下正常工作,要進行如下設定:
一、設定資料庫為歸檔模式
如果資料庫歸檔模式沒有開啟,查詢顯示如下資訊(非歸檔模式):
1、查詢當前資料庫的模式
SQL> archive log list;
資料庫記錄模式 非存檔模式
自動封存 禁用
存檔終點 D:oracleora81RDBMS
最早的概要資訊日誌序列 64
當前日誌序列 66
2、shutdown immediate
3、
a.關閉資料庫後,備份已有的資料,改變資料庫的運行方式是對資料庫的重要改動,所以要對資料庫做備份,對可能出現的問題作出保護。
b.
修改初始化參數檔案init.ora,在初始化參數檔案中添加
#log_archive_start = true
#log_archive_dest = D:oracleoradatapeiyzarchive
#log_archive_duplex_dest = D:oracleoradatapeiyzarchiveachive
log_archive_dest_1='location=D:oracleoradatapeiyzarchive1'
log_archive_dest_3='location=D:oracleoradatapeiyzarchive3'
#log_archive_dest_2 = "SERVICE=standby_db1" //這裡是把歸檔檔案儲存到遠程standby機子上LOG_ARCHIVE_FORMAT = ARC%T%S.arc //這裡變數 %s or %S 為記錄序號,%t or %T為線程號,都有作業系統自動產生(為檔案名稱的一部分),另外%S為一固定長度,如果不夠左邊補0
注意:
這裡log_archive_dest和log_archive_duplex_dest是一組;log_archive_dest_1到log_archive_dest_5是一組(8i中最多可有5個鏡像目錄而9i中可達10個鏡像目錄);這兩組在初始化參數檔案中只能設定一組,二者不能同時存在;
4、把資料庫啟動到mount狀態,進行如下操作設定資料庫為歸檔模式
SQL> alter database archivelog;
資料庫已更改。
a、查看當前資料庫歸檔模式是不是開啟,如果在初始化參數檔案中沒有定義歸檔路徑的話顯示如下資訊:
SQL> archive log list
資料庫記錄模式 存檔模式
自動封存 禁用
存檔終點 D:oracleora81RDBMS //注意,這裡為在初始化參數檔案中沒有指定歸檔路徑的情況下的預設歸檔路徑最早的概要資訊日誌序列 64
下一個存檔日誌序列 66
當前日誌序列 66
b、而我當前的顯示為:
SQL> archive log list;
資料庫記錄模式 存檔模式
自動封存 禁用
存檔終點 D:oracleoradatapeiyzarchive3 //當前日誌切換時記錄檔被歸檔到這個目錄下
最早的概要資訊日誌序列 66
下一個存檔日誌序列 68
當前日誌序列 68
5、手工修改資料庫為自動歸檔模式(如果在初始化參數檔案中設定了log_archive_start = true選項,則該步可以省略)
SQL> archive log start;
已處理的語句
SQL> archive log list
資料庫記錄模式 存檔模式
自動封存 啟用 //已啟動自動歸檔,如果在初始化參數檔案中設定了log_archive_start = true選項,則為啟動執行個體後自動開啟自動歸檔功能
存檔終點 D:oracleoradatapeiyzarchive3
最早的概要資訊日誌序列 66
下一個存檔日誌序列 68
當前日誌序列 68
6、開啟資料庫
SQL> alter database open;
資料庫已更改。
7、做一些日誌切換檢查是否設定生效
SQL> alter system switch logfile;
系統已更改。
SQL> /
系統已更改。
檢查作業系統目錄 D:oracleoradatapeiyzarchive1和D:oracleoradatapeiyzarchive3下是否有歸檔檔案產生,如果存在說明設定成功。
二、有關歸檔模式下測試的兩個問題(rdbms:8.1.7.0/os:win2000)
A.在資料庫開啟的情況下,通過alter system set ...語句修改的歸檔路徑在下次重啟後會生效嗎?
1、修改歸檔路徑
SQL> alter system set log_archive_dest_2='location=D:oracleoradatapeiyzarchive2';
系統已更改。
SQL> alter system set log_archive_dest_3='location=D:oracleoradatapeiyzarchive4';
系統已更改。
2、手工進行日誌切換
SQL> alter system switch logfile;
系統已更改。
SQL> /
系統已更改。
3、檢查D:oracleoradatapeiyzarchive2和D:oracleoradatapeiyzarchive4目錄下是否有新的歸檔記錄檔產生檢查發現僅有D:oracleoradatapeiyzarchive4目錄下有新的歸檔檔案產生;說明僅在初始化參數檔案中定義的參數才能通過動態修改歸檔路徑;那麼雖然log_archive_dest_3參數路徑能夠修改並確實將歸檔檔案歸檔到新的路徑下了,那麼重啟系統後還能儲存動態修改的歸檔路徑嗎,通過下面實驗我們便知。
注意:如果通過alter system set log_archive_dest_2='location=D:oracleoradatapeiyzarchive2';修改,雖然修改成功而且操作系統中D:oracleoradatapeiyzarchive2目錄也存在,但通過alter system switch logfile;日誌切換,該目錄下仍不會產生歸檔日誌文件,因為改參數並沒有在初始化參數中定義。
4、shutdown immediate
資料庫已經關閉。
已經卸載資料庫。
ORACLE 常式已經關閉。
5、startup
ORACLE 常式已經啟動。
Total System Global Area 51648540 bytes
Fixed Size 75804 bytes
Variable Size 42651648 bytes
Database Buffers 8388608 bytes
Redo Buffers 532480 bytes
資料庫裝載完畢。
資料庫已經開啟。
6、修改資料庫為自動歸檔模式
SQL> archive log start;
已處理的語句
7、檢查歸檔資訊
SQL> archive log list
資料庫記錄模式 存檔模式
自動封存 啟用
存檔終點 D:oracleoradatapeiyzarchive3
最早的概要資訊日誌序列 76
下一個存檔日誌序列 78
當前日誌序列 78
8、手工進行日誌切換
SQL> alter system switch logfile;
系統已更改。
SQL> /
系統已更改。
9、檢查作業系統中歸檔目錄
檢查作業系統D:oracleoradatapeiyzarchive1和D:oracleoradatapeiyzarchive2和D:oracleoradatapeiyzarchive3和D:oracleoradatapeiyzarchive4目錄下內容,僅有1和3下有歸檔檔案產生,說明通過動態修改的參數在資料庫重啟後不能生效(8i中,如果想在重啟後仍然生效9i中某些參數可以通過加scope=both指定),仍然保持初始化參數中定義的設定;如果想在下次重啟後仍然生效必須通過修改初始化參數檔案內容。
B、如果資料庫處于歸檔模式但自動歸檔功能沒有開啟會產生什麼後果呢,產生這種情況後又怎樣解決呢,下面我將就這個問題進行一些
實驗
1、啟庫
SQL> startup
ORACLE 常式已經啟動。
Total System Global Area 51648540 bytes
Fixed Size 75804 bytes
Variable Size 42651648 bytes
Database Buffers 8388608 bytes
Redo Buffers 532480 bytes
資料庫裝載完畢。
資料庫已經開啟。
2、檢查資料庫歸檔情況
SQL> archive log list
資料庫記錄模式 存檔模式
自動封存 禁用
存檔終點 D:oracleoradatapeiyzarchive3
最早的概要資訊日誌序列 76
下一個存檔日誌序列 78
當前日誌序列 78
注意:這裡雖然資料庫為歸檔模式,但自動封存功能並未開啟。
3、手工進行日誌切換看會出現什麼情況
SQL> alter system switch logfile;
系統已更改。
SQL> alter system switch logfile;
系統已更改。
SQL> / ...... //這裡日誌切換不了了,hang在這了,並沒有“系統已更改。”提示,只是游標在閃
這時我檢查作業系統相關歸檔目錄並沒有發現新的歸檔日誌產生,說明日誌切換一周后,最初的日誌還沒被歸檔,這時lgwr進程又要等這個日誌被歸檔後才能使用,所以資料庫hang在這了;
那麼這個問題怎麼解決呢?難道一直等在這嗎?答案是否定的。
可以通過如下方法解決
4、另開一個sqlplus視窗,以sysdba登陸到資料庫
SQL> conn / as sysdba
已串連。
5、手工把資料庫的自動歸檔功能開啟
SQL> archive log start;
已處理的語句
6、查看剛才hang住的視窗,發現日誌切換完成了
SQL> /
系統已更改。
7、檢查作業系統中相關歸檔目錄,發現新的歸檔日誌產生。
資料庫正常工作。
另一種方法為當資料庫hang住後,另啟一個sqlplus視窗,以sysdba登陸到資料庫,進行如下操作:
1、首先查詢歸檔資訊
SQL> archive log list
資料庫記錄模式 存檔模式
自動封存 禁用
存檔終點 D:oracleoradatapeiyzarchive3
最早的概要資訊日誌序列 81
下一個存檔日誌序列 81
當前日誌序列 83
2、手工進行歸檔,因為從查詢結果來看啟庫後最早的聯機日誌為81號,所以首先進行歸檔81號聯機記錄檔。再歸檔82、83號檔案:
SQL> alter system archive log sequence 81;
系統已更改。
注意:
這時到剛才hang住的視窗查看發現日誌操作已經切換完畢,顯示如下
SQL> /
系統已更改。
還需要注意一下:
a、如果先歸檔83號聯機日誌,則報如下錯誤(因為它為當前正在hang住的聯機日誌,不能進行歸檔):
SQL> alter system archive log sequence 83;
alter system archive log sequence 83
*
ERROR 位於第 1 行:
ORA-00259: 日誌 2 (開啟線程 1) 為當前日誌,無法存檔
ORA-00312: 聯機日誌 2 線程 1: 'D:ORACLEORADATAPEIYZREDO02.LOG'
b、如果先歸檔82號聯機記錄檔的話,系統自動把81號的聯機記錄檔一同進行歸檔了,不必要再進行81號聯機檔案的歸檔操作了
SQL> alter system archive log sequence 82;
系統已更改。
SQL> alter system archive log sequence 81;
alter system archive log sequence 81
*
ERROR 位於第 1 行:
ORA-00260: 無法找到聯機日誌序列 81 (線程 1)
3、查看作業系統中歸檔相關目錄,發現所有聯機日誌都被歸檔完成;
4、當然這隻是一種暫時的解決方案,要想不再使資料庫被hang住又不要手工進行歸檔,必須通過開啟自動歸檔功能,也即:
SQL> archive log start;
已處理的語句
或者
在初始化參數檔案中添加log_archive_start=true參數選項。