漫談數據庫的啟動和關閉
2024-07-21 02:05:31
供稿:網友
對于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;