程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> oracle在歸檔模式下正常工作設置

oracle在歸檔模式下正常工作設置

編輯:Oracle數據庫基礎

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參數選項。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved