本文解釋如何執(zhí)行對(duì)數(shù)據(jù)庫(kù)的基本健康狀況檢查,以檢查一些配置問(wèn)題。并給出了一些一般準(zhǔn)則,來(lái)指導(dǎo)DBA應(yīng)該對(duì)哪些領(lǐng)域進(jìn)行調(diào)查,才能更好地了解數(shù)據(jù)庫(kù)運(yùn)行和變化的方式。這些準(zhǔn)則會(huì)揭示關(guān)于配置的常見(jiàn)問(wèn)題以及將來(lái)可能會(huì)發(fā)生的問(wèn)題。
注:針對(duì)性能方面的檢查,本文沒(méi)有詳述。 1參數(shù)文件參數(shù)文件有 2 種形式。首先,一個(gè)是基于文本的版本,通常稱為 init.ora 或 pfile;另一個(gè)是基于二進(jìn)制的文件,通常稱為 spfile。 一定要注意,spfile 優(yōu)先于 pfile,即除非另有說(shuō)明,只要有 spfile 可用,都將被自動(dòng)應(yīng)用。 注意:建議在數(shù)據(jù)庫(kù)配置發(fā)生變化后,生成一份 RDA 報(bào)告。保留歷史 RDA 報(bào)告,可以確保您隨著數(shù)據(jù)庫(kù)演化對(duì)數(shù)據(jù)庫(kù)配置有個(gè)大概了解。 2控制文件強(qiáng)烈建議至少擁有兩份控制文件??梢酝ㄟ^(guò)控制文件的鏡像完成該操作,并且強(qiáng)烈建議放在不同的物理磁盤上。如果由于磁盤崩潰等原因,導(dǎo)致控制文件丟失,則您可以使用鏡像文件啟動(dòng)數(shù)據(jù)庫(kù)。通過(guò)這種方法,丟失的控制文件可以輕松簡(jiǎn)單地被恢復(fù)。 SQL> select status, name from v$controlfile; 控制文件的位置和數(shù)量可以通過(guò)初始化參數(shù) 'control_files' 進(jìn)行控制。 3重做日志文件Oracle 服務(wù)器維護(hù)聯(lián)機(jī)重做日志文件,以盡量減少數(shù)據(jù)庫(kù)中的數(shù)據(jù)丟失。重做日志文件用于示例失敗等情況,以恢復(fù)還未寫(xiě)進(jìn)數(shù)據(jù)文件的已提交數(shù)據(jù)。強(qiáng)烈建議在不同物理磁盤上對(duì)重做日志文件進(jìn)行鏡像,從而在因磁盤崩潰、用戶刪除等原因?qū)е缕渲幸粋€(gè)重做日志文件丟失時(shí),恢復(fù)起來(lái)更加容易。 SQL> select group,status,member from v$logfile; 雖然至少需要兩個(gè)重做日志組,但是在啟用歸檔時(shí)最好具有至少三個(gè)重做日志組。在存在大量日志切換的環(huán)境中,通常會(huì)看到 ARCHiver 后臺(tái)進(jìn)程歸檔的速度落后于 LGWR 后臺(tái)進(jìn)程生成日志的速度。在這種情況下,LGWR 進(jìn)程需要等待 ARCH 進(jìn)程完成歸檔重做日志文件。 4歸檔歸檔提供了備份數(shù)據(jù)庫(kù)變化所需的機(jī)制。歸檔文件非常重要,它提供了恢復(fù)數(shù)據(jù)庫(kù)所必須的信息。強(qiáng)烈建議在歸檔日志模式下運(yùn)行數(shù)據(jù)庫(kù),雖然可能有理由不這樣做,比如處于 TEST(測(cè)試)環(huán)境中時(shí),丟失在當(dāng)前時(shí)間與最后一次備份之間所做的更改對(duì)您來(lái)說(shuō)是可以接受的。 檢查歸檔配置的方法有數(shù)種,以下是其中一種: SQL> archive log list 對(duì)于 10g 之前的版本,如果數(shù)據(jù)庫(kù)在歸檔日志模式下運(yùn)行,但是禁用了自動(dòng)歸檔程序進(jìn)程,則您需要手動(dòng)歸檔重做日志文件。 如果未及時(shí)執(zhí)行該操作,則數(shù)據(jù)庫(kù)會(huì)被凍結(jié),任何活動(dòng)都會(huì)被阻止。 因此,當(dāng)數(shù)據(jù)庫(kù)處于歸檔日志模式時(shí),應(yīng)該啟動(dòng)自動(dòng)歸檔。通過(guò)在參數(shù)文件中將 'log_archive_start' 參數(shù)設(shè)置為 true,可以完成此操作。 從 10g 開(kāi)始,該參數(shù)已經(jīng)棄用,不再要求明確進(jìn)行設(shè)置。歸檔文件的指定磁盤上必須有足夠的可用空間,否則 ARCHiver 進(jìn)程無(wú)法寫(xiě)入,必定會(huì)導(dǎo)致數(shù)據(jù)庫(kù)崩潰。 5數(shù)據(jù)文件Autoextend autoextend 命令選項(xiàng)可以啟用或禁用數(shù)據(jù)文件的自動(dòng)擴(kuò)展。如果自動(dòng)擴(kuò)展的數(shù)據(jù)文件無(wú)法分配所需的空間,它會(huì)自動(dòng)增加數(shù)據(jù)文件的大小以獲取更多空間來(lái)給對(duì)象增長(zhǎng)使用。 標(biāo)準(zhǔn)的 Oracle 數(shù)據(jù)文件最多可以包含 4194303 個(gè) Oracle 數(shù)據(jù)塊。 所以這也表示單個(gè)數(shù)據(jù)文件大小的上限取決于所用的 Oracle 塊大小。 DB_BLOCK_SIZE Max Mb value to use in any command 從 Oracle 10g 開(kāi)始,我們?cè)黾恿艘粋€(gè)稱為 BIGFILE 的新功能,該功能允許創(chuàng)建更大的文件。請(qǐng)注意,每個(gè)操作系統(tǒng)都有其一定的限制,因此您需要確保數(shù)據(jù)文件的最大大小不超過(guò)操作系統(tǒng)允許的限制。 要確定數(shù)據(jù)文件進(jìn)而表空間是否具有 AUTOEXTEND 功能: SQL> select file_id, tablespace_name, bytes, maxbytes, maxblocks, increment_by, file_name 位置 驗(yàn)證數(shù)據(jù)文件的位置。隨著時(shí)間推移,數(shù)據(jù)庫(kù)可能會(huì)增長(zhǎng),并會(huì)向數(shù)據(jù)庫(kù)中添加數(shù)據(jù)文件。要避免基于“哪兒有空間就放哪兒”來(lái)隨意放置數(shù)據(jù)文件,因?yàn)檫@會(huì)使備份策略和維護(hù)變得復(fù)雜。 以下為不良使用的一個(gè)示例: SQL> select file#,name from v$datafile; 6表空間SYSTEM表空間 用戶對(duì)象不應(yīng)在系統(tǒng)表空間中創(chuàng)建。如果創(chuàng)建,將導(dǎo)致不必要的碎片,并阻止系統(tǒng)表的增長(zhǎng)。以下查詢會(huì)返回一個(gè)列表,列出在系統(tǒng)表空間中已經(jīng)創(chuàng)建的,但不屬于 SYS 或 SYSTEM的對(duì)象。 SQL> select owner, segment_name, segment_type SYSAUX表空間 創(chuàng)建或升級(jí)數(shù)據(jù)庫(kù)時(shí),SYSAUX 表空間會(huì)被自動(dòng)創(chuàng)建,作為SYSTEM表空間的輔助表空間。之前創(chuàng)建并使用獨(dú)立表空間的一些數(shù)據(jù)庫(kù)組件,現(xiàn)在也開(kāi)始使用 SYSAUX 表空間。 SQL> select space_usage_kbytes, occupant_name, occupant_desc 本地管理表空間與字典管理表空間 從 Oracle 8i 起,Oracle 引入了本地管理表空間,但是是從 Oracle 9i 起它才變?yōu)槟J(rèn)設(shè)置。本地管理表空間,也稱為 LMT,相對(duì)于數(shù)據(jù)字典管理表空間有一定的優(yōu)勢(shì)。 要驗(yàn)證哪個(gè)表空間為 Locally Managed(本地管理)或 Dictionary Managed(字典管理),您可以運(yùn)行以下查詢: SQL> select tablespace_name, extent_management 臨時(shí)表空間 本地管理空間表將臨時(shí)文件用于臨時(shí)表空間,而字典管理表空間使用臨時(shí)類型的表空間。當(dāng)您運(yùn)行較早的版本時(shí)(早于 Oracle 9i),一定要檢查用于存儲(chǔ)臨時(shí) segment 的表空間類型。默認(rèn)情況下,所有表空間創(chuàng)建時(shí)都為 PERMANENT,因此您應(yīng)確保專用于臨時(shí) segment 的表空間為 TEMPORARY 類型。 SQL> select tablespace_name, contents 確保數(shù)據(jù)庫(kù)上的用戶都分配了臨時(shí)類型的表空間。以下查詢列出了將永久表空間指定為其默認(rèn)臨時(shí)表空間的所有用戶。 SQL> select u.username, t.tablespace_name 注意:用戶 SYS 和 SYSTEM 會(huì)將 SYSTEM 表空間顯示為它們的默認(rèn)臨時(shí)表空間。該值也可以改變,以防止 SYSTEM 表空間中產(chǎn)生碎片。 SQL> alter user SYSTEM temporary tablespace TEMP 臨時(shí)表空間中分配的空間是可以重復(fù)使用的。這是因?yàn)榛谛阅艿目紤],以避免由于持續(xù)分配和取消分配 extent 和 segment所產(chǎn)生瓶頸。因此,當(dāng)查看臨時(shí)表空間中的可用空間時(shí),可能會(huì)始終顯示為已滿的狀態(tài)。以下查詢可以列出關(guān)于臨時(shí) segment 使用情況的更多有用信息: 這將給出臨時(shí)表空間的大小: SQL> select tablespace_name, sum(bytes)/1024/1024 mb 這將給出臨時(shí)表空間的“高水位”(=單次使用的最大值): SQL> select tablespace_name, sum(bytes_cached)/1024/1024 mb 這將給出當(dāng)前使用情況: SQL> select ss.tablespace_name, 表空間碎片 表空間碎片過(guò)多會(huì)對(duì)性能產(chǎn)生影響,特別是系統(tǒng)上正進(jìn)行許多 Full Table Scans(全表掃描)時(shí)。碎片的另一個(gè)缺點(diǎn)是,當(dāng)所有可用空間的總和遠(yuǎn)遠(yuǎn)超出您請(qǐng)求的空間時(shí),您會(huì)得到空間不足的錯(cuò)誤消息。 解決碎片的唯一辦法是重新創(chuàng)建對(duì)象。從 Oracle8i 開(kāi)始,您可以使用 'alter table .. move' 命令。在 Oracle8i 之前,您可以使用 export/import。 如果您需要對(duì)系統(tǒng)表空間消除碎片,則必須重建整個(gè)數(shù)據(jù)庫(kù),因?yàn)闊o(wú)法刪除系統(tǒng)表空間。 7對(duì)象Extent數(shù)量? 盡管過(guò)度擴(kuò)展對(duì)象的性能影響不是很大,但是很多過(guò)度擴(kuò)展對(duì)象積聚起來(lái)確實(shí)會(huì)影響性能。以下查詢將列出分配的 extent 超過(guò)了指定最小量的所有對(duì)象。將 <--minext--> 值改為實(shí)際數(shù)值,通常,對(duì)于 extent 個(gè)數(shù)超過(guò)100或200的對(duì)象,可以通過(guò)使用更大的 extent 來(lái)重建: SQL> select owner, segment_type, segment_name, tablespace_name, 下一個(gè)Extent 非常重要的是,segment 可以增長(zhǎng),因此在需要時(shí)它們可以分配下一個(gè) extent。如果表空間中沒(méi)有足夠的可用空間,則無(wú)法分配下一個(gè) extent,且對(duì)象無(wú)法增長(zhǎng)。以下查詢返回了所有無(wú)法分配其下一個(gè) extent 的 segment: select s.owner, s.segment_name, s.segment_type, 請(qǐng)注意,如果表空間中有許多碎片,則此查詢可能會(huì)返回仍然可以增長(zhǎng)的對(duì)象。上述查詢基于可以表空間中的最大可用塊。如果 有許多這樣彼此相連的“較小”可用塊,則 Oracle 將合并這些塊以提供 extent 分配。 索引 基本不需要重建索引,更多時(shí)候建議您選擇合并索引。 8UNDO從 Oracle 9i 開(kāi)始,我們引入了一種管理前鏡像的新方式。之前,這是通過(guò) RollBack Segment 進(jìn)行的,或稱為 manual undo(手動(dòng) undo)。當(dāng)參數(shù) UNDO_MANAGEMENT 設(shè)置為 AUTO 時(shí),使用 automatic undo(自動(dòng) undo)。未設(shè)置或設(shè)置為 MANUAL 時(shí),我們使用“過(guò)去”的 rollback segment 機(jī)制。盡管當(dāng)前版本中,兩個(gè)版本都可用,我們建議使用自動(dòng) undo。 AUTO UNDO AUM(自動(dòng) undo 管理,Automatic Undo Management)幾乎不需要配置。您基本上只需要定義將前映像保持可用的時(shí)間量。這是通過(guò)參數(shù) UNDO_RETENTION 控制的,以秒為單位定義。因此,值 900 表示 15 分鐘。 一定要意識(shí)到,如果 undo 表空間中存在空間壓力時(shí),我們不保證前鏡像一定會(huì)保留這么長(zhǎng)時(shí)間。 從 Oracle 10g 開(kāi)始,您可以選擇使用 GUARANTEE 選項(xiàng),以確保在定義的 undo_retention 時(shí)間之前,undo 信息不會(huì)被覆蓋。 MANUAL UNDO 損壞的 rollback segment 會(huì)阻止實(shí)例打開(kāi)數(shù)據(jù)庫(kù)。僅當(dāng)知道 rollback segment 名稱時(shí),我們才有可能采取更正操作。因此,請(qǐng)?jiān)?/span>init.ora 中參數(shù) 'rollback_segments' 中列出所有的 rollback segment。 rollback segment 太小或不足可能會(huì)對(duì)數(shù)據(jù)庫(kù)的行為有嚴(yán)重影響。因此,有些問(wèn)題必須要考慮到。以下查詢會(huì)顯示在線 rollback segment 是否足夠,或 rollback segment 是否太小。 SQL> select d.segment_name, d.tablespace_name, s.waits, s.shrinks, WAITS 表示在哪些 rollback segment header上有等待。通常,通過(guò)添加 rollback segment可以減少這類爭(zhēng)用。 如果 SHRINKS 非零,則說(shuō)明該特定 rollback segment 設(shè)置了參數(shù) OPTIMAL,或者 DBA顯式執(zhí)行了命令來(lái)縮小該 rollback segment。SHRINKS 表示因?yàn)槭聞?wù)擴(kuò)展 rollback segment 超出了 OPTIMAL 大小而隨后縮小 rollback segment 的次數(shù)。如果該值過(guò)高,則 OPTIMAL 大小的值以及 rollback segment 的總大小應(yīng)該增加(minextents 或 extent 大小本身可以增加,這主要取決于 WRAPS 列的值)。 WRAPS 列說(shuō)明 rollback segment 切換到另一 extent 以操作事務(wù)的次數(shù)。如果該值巨大,則需要增加 rollback segment 的 extent 大小。 9內(nèi)存管理內(nèi)存的管理與版本密切相關(guān)。根據(jù)正在運(yùn)行的版本,可用的選項(xiàng)會(huì)有所不同。在大多數(shù)系統(tǒng)環(huán)境,建議盡量使用自動(dòng)功能。 Oracle 9i 從 Oracle 9i 開(kāi)始,我們使用以下參數(shù): Oracle 10g 在 10g 中,引入了 Automatic Shared Memory Management(自動(dòng)共享內(nèi)存管理,ASMM)。自動(dòng)共享內(nèi)存管理功能,通過(guò)將參數(shù) SGA_TARGET 設(shè)置為非零值來(lái)啟用。 此功能的優(yōu)勢(shì)在于,您可以在不同組件之間共享內(nèi)存資源。資源可以根據(jù)需要由 Oracle 自動(dòng)進(jìn)行分配和取消分配。 Automatic PGA Memory(自動(dòng) PGA 內(nèi)存)管理仍可通過(guò)參數(shù) 'workarea_size_policy' 和 Oracle 11g 在 11g 中,引入 Automatic Memory Management(自動(dòng)內(nèi)存管理,AMM)。通過(guò)使用兩個(gè)參數(shù),MEMORY_MAX_TARGET 和 MEMORY_TARGET,可以啟用PGA 和 SGA 的自動(dòng)調(diào)整。 10日志和跟蹤告警日志 數(shù)據(jù)庫(kù)的告警日志是按時(shí)間順序?qū)懭氲?。始終會(huì)添加數(shù)據(jù),因此該文件大小會(huì)增長(zhǎng)到非常巨大。應(yīng)定期清除或截?cái)嘣撐募?,因?yàn)榇笮透婢罩緯?huì)占用不必要的磁盤空間,從而會(huì)降低 OS 向文件寫(xiě)入的速度。 11g 之前的版本: SQL> show parameter background_dump_dest 11g 和更高版本: SQL> show parameter diagnostic_dest Max_dump_file_size Oracle Server 進(jìn)程會(huì)生成特定錯(cuò)誤或沖突的跟蹤文件。這些跟蹤文件可用于進(jìn)一步分析問(wèn)題。init.ora 參數(shù) 'max_dump_file_size' 限制了這些跟蹤文件的大小。該參數(shù)值應(yīng)指定為操作系統(tǒng)塊大小的整數(shù)倍。 SQL> show parameter max_dump_file_size 用戶和核心轉(zhuǎn)儲(chǔ)參數(shù)大小 參數(shù) 'user_dump_dest' 和 'core_dump_dest' 可以包含許多跟蹤信息。 一定要定期清除此目錄,因?yàn)榇四夸洉?huì)占用大量磁盤空間。 注意:從 Oracle 11g 開(kāi)始,該位置由參數(shù) 'diagnostic_dest' 控制。 審計(jì)文件 默認(rèn)情況下,每次以 SYS 或 SYSDBA 進(jìn)行的連接,都會(huì)記錄在操作系統(tǒng)文件中。 11數(shù)據(jù)庫(kù)備份數(shù)據(jù)庫(kù)的備份情況,高于其它所有的檢查。因此,每一次例行檢查時(shí),務(wù)必檢查備份作業(yè)的執(zhí)行情況。重要的事情說(shuō)三遍:檢查備份日志、檢查備份日志、檢查備份日志!
|
|