ORACLE資料庫的啟動和關閉(轉)

Rounders發表於2007-08-09
ORACLE資料庫的啟動和關閉[@more@]對於DBA們來說,關閉和重新啟動資料庫以便最佳化、調整應用的執行是經常碰到的事情。如果用
戶已經log進如了資料庫,你用SHUTDOWN IMMEDIATE 或SHUTDOWN ABORT命令來執行關閉資料庫,
那使用者將不能連線,直到資料庫重新啟動,使用者時常會抱怨:怎麼又要重起。其實,每次這樣的
啟動關閉都是為了資料庫能更好的運做。這篇文章將具體介紹shutdown/startup操作時應想到的
步驟和許多注意事項,或許這些能對你有所幫助。
NOTE:在執行第一步前,SHUT DOWN 資料庫,不要提前關閉SQL*NET,直到你確認關閉了SERVER上
的資料庫後再關閉SQL*NET。因為一旦你關閉了SQL*NET,使用者將將失去和資料庫的會話。

第一步---存檔或刪除老的trace files 和 logs
當你啟動ORACLE的一個例項(INSTANCE)時,ORACLE把關於該例項的診斷資訊寫入指定的trace
和 log檔案。每個後臺程式都增加一個TRACE檔案,它被儲存在指定的目錄(該路徑由INIT.ORA
或CONFIG.ORA檔案中的BACKGROUND_DUMP_DEST引數指定)。使用者在資料庫中遇到一個內部錯誤時
也增加 USERS' TRACE檔案,該檔案的位置由INIT.ORA 或 CONFIG.ORA 檔案中的USER_DUMP_DEST
引數指定。

TRACE檔案的個數和名稱形式由你的作業系統決定。例如在UNIX下,檔名是一個數字加下畫線加
後臺程式號,類似3_12345.trc,當你下一次啟動例項時,一個新的檔案將被產生,因為程式號的
不同,檔名可能是3_13245.trc 。

由於每次啟動和關閉資料庫時,ORACLE並不自動刪除TRACE檔案,所以如果忽略這個步驟,那這些
沒有用的檔案將佔據大量的自由空間。所以DBA應該主動的管理這些檔案,或刪除或存檔在別的指
定目錄下,如何管理主要是根據你自己的開發環境需要而訂了。 SQL*NET也產生LOG檔案,一般叫
LISTENER.LOG,為了能知道他的位置,可以鍵入命令
lsnrctl status

LISTENER.LOG檔案大小也隨著啟動的次數不斷的變大,所以透過妥善管理它也能有效的利用空間。

第二步---改名ALERT LOG檔案
ALERT LOG檔案也是用來記錄INSTANCE的診斷資訊的。它的存放目錄也透過BACKGROUND_DUMP_DEST
引數來指定。一般情況下ALERT LOG檔案命名方式為:ALERT_ .LOG。ALTER LOG檔案包括了一些數
據庫主要事件資訊,例如:startup,dhutdown, redo log 的使用,tablespace的改變,檔案的改
變,內部錯誤資訊,tablespace-backup的狀態的改變等。ALTER LOG檔案是重要的,同時該檔案
的大小增長的速度也很驚人,如果你不檢查他,一段時間後你想看看它將是很費勁,因為它已經
很大了,查起來也費勁。

為了既能留下這些有用的資訊,同時不至於浪費很大的空間,可以用改名的方法。你可以在任何
時候更改ALTER LOG檔名,甚至在DATABASE OPEN時。當ORACLE不能找到被BACKGROUND_DUMP_DESC
指定的檔案時,他將增加一個新的ALTER LOG檔案。雖然改名不要求SHUTDOW,但選擇在
SHUTDOWN/STARTUP資料庫時更改名字是一個好的主意。

NOTE:下面的幾步是在restart資料庫時做的。

第三步---產生一個增加控制檔案(CREATE CONGROLFILE )命令的檔案
為了recover一個被破壞的資料庫,你不得不用CREATE CONTROLFILE 命令來重建control files。
CREATE CONTROLFILE命令有兩個使用:
1、在你的現有CONTROL FILES檔案破化後重建它
2、在ALTER DATABASE 級別的引數時,如:MAXDATAFILES

你可以手輸入命令,但最好在STARTUP前傳送一命令,以便你擁有最新版本的CREATE CONTROLFILE命令。
從進入SQLDBA,SERVER MANAGER或者SQL*PLUS,輸入:
alter database backup controlfile to trace;

該命令在USER_DUMP_DESC引數指定的路徑產生一個TRACE檔案,名字可能是SIDNAME_PROCESSID.TRC,
該檔案將包含針對你的資料庫的完整的CREATE CONTROLFILE 語法。

第四步--把PACKAGES 和 PROCEDURES駐留SGA區
眾所周知,當PL/SQL OBJECTS被一個使用者呼叫時,它將被儲存在SGA區的SQL共享池中,當別人再度
呼叫該OBJECT時直接從SGA區讀取,能感受到明顯的速度提升。所以,把常用的PACKAGES 和
PROCEDURES在STARTUP時就載入並駐留SGA,將提高應用的整體效能。透過從新編譯、呼叫等方法可以
呼叫OBJECT(PROCEDURES 或 CURSORS)進SGA,然後用DBMS_SHARED_POOL.KEEP來駐留SGA。如下:
alter package APPOWNER.ADD_CLIENT compile;
execute DBMS_SHARED_POOL.KEEP('APPOWNER.ADD_CLIENT','P');
(P代表PROCEDURES,C代表CURSORS)

一般每個資料庫包括兩類駐留程式:
1、資料庫的核心PACKAGES
2、使用者自定義的PACKAGES
核心PACKAGES包括SYS 所有的PACKAGES,STANDARD,DBMS_SQL, DBMS_UTILITY, DIUTIL,為了檢視
你的INSTANCE中那些被駐留了,查詢DBA_OBJECT_SIZE,用下面的語句:
select Owner,
Name,
Type,
Source_Size+Code_Size+Parsed_Size+Error_Size Total_Bytes
from DBA_OBJECT_SIZE
where Type = 'PACKAGE BODY' order by 4 desc;

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

相關文章