讓你的應用程式不再對資料庫的改動“感冒”(三) (轉)
原著作者:to:jczuprynski@zerodefectcomputing.com">Jim Czuprynski
LBL(Looking Before Leng)三思而後行:namespace prefix = o ns = "urn:schemas--com::office" />
前面所述的技術只有在開發前計劃一組新的或者修正原有的資料庫物件時,能夠取得很好的效果。但是我總是會發現,當我們在進行這種開發規劃的時候,執行中的應用往往不可避免地受到中斷。換句話說,一個好的計劃應該保護現有的應用免受中由於資料庫物件改變引起的重編譯或者無效導致的中斷之苦。
明白在使物件有效前會發生什麼重大影響
在我開始講述改變資料庫物件之前,要重點強調一點,請務必要仔細檢查每一個待改變的資料庫物件防止導致無效錯誤。在過去的幾年內,在焦急的開發員和撓人的主管的催促下,我曾經有意或無意地違反了這些建議,通常會導致應用程式的下降。
下面的程式碼可以幫助你檢查透過重編譯哪些物件將會無效。
> SET WRAP OFF
SQL> TTITLE CENTER "Parent and Dependent s"
SQL> BREAK ON par_typ SK1 ON par_sts SKIP 1 ON par_obj SKIP 1 NODUPLICATES
SQL> COLUMN par_typ FORMAT A12 HEADING "Type"
SQL> COLUMN par_sts FORMAT A08 HEADING "Status"
SQL> COLUMN par_obj FORMAT A16 HEADING "Parent"
SQL> COLUMN dep_obj FORMAT A16 HEADING "Child"
SQL> COLUMN dep_typ FORMAT A12 HEADING "Type"
SQL> COLUMN dep_sts FORMAT A08 HEADING "Status"
SQL>
2 O1.object_type par_typ,
3 O1.status par_sts,
4 O1.object_name par_obj,
5 O2.object_name dep_obj,
6 O2.object_type dep_typ,
7 O2.status dep_sts
8 FROM
9 public_dependency PD,
10 all_objects O1,
11 all_objects O2
12 WHERE PD.referenced_object_id = O1.object_id
13 AND PD.object_id = O2.object_id
14 AND O1.object_name = 'EMPLOYEES'
15 ORDER BY par_obj;
Parent and Dependent Objects
Type Status Parent Child Type Status
------------ -------- ---------------- ---------------- ------------ --------
TABLE VALID EMPLOYEES PKG_SECURITY PACKAGE BODY INVALID
BV_EMPLOYEES VIEW VALID
EMP_DETAILS_VIEW VIEW VALID
PKG_SECURITY PACKAGE BODY VALID
SECURE_EMPLOYEES TRIGGER VALID
UPDATE_JOB_HISTO TRIGGER VALID
6 rows selected.
在重編譯以後,一定要檢查哪些無效的物件。然後還是再檢查
很多次,我曾經目睹了這樣的情形:UTLRP.SQL重或者第三方的沒有重編譯所有最近無效的物件。至少,這會導致一些問題;在最壞的情況下,除非有人注意到了這一點,應用程式將完全不能存取資料庫。
舉個例子,不久前我花費了整整90分鐘外加一個下午幫助一個程式設計師PowerBuilder程式訪問開發資料庫時遇到的ORA-00942錯誤"table not found",但是相同的程式碼卻可以在生產資料庫上正確執行。當我們在除錯程式的時候,這個錯誤看上去是間歇出現和重現的。
我想起以前遇到過這種情況並且花費了很多時間來折磨我的大腦,最終具有諷刺意味的是罪魁禍首是無效的資料庫物件。最終發現是因為另外一個程式設計師刪除並且重建了原來的一個表,但是有一大堆其他的資料庫物件引用了這個表,而他卻沒有重新編譯這些物件,導致它們都無效了。
密切提防global temporary tables
最後一個告誡:如果你使用全域性臨時表(GTTs)來和計算狀態資訊,小心程式改變它會帶來的後果。我曾經把進行了一個最平常不過的改動,把GTT的varchar(15)欄位改變成varchar(25)。然而這個特殊的GTT透過指定了ON COMMIT PRESERVE ROWS選項,從而可以被一個程式包用來儲存每個連線的資訊。ORACLE頑固地拒絕了ALTER TABLE命令除非我要求所有應用程式的使用者都登出,解除了對GTT的凍結之後才行。也許那個命令只需要一小會兒時間,使用者登出後也只需要等待一小會兒,但是設想一下如果這種改動要在一個業務高峰時候做的話,這種影響也許會變得非常糟糕。
(全文結束)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-961228/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 讓你的應用程式不再對資料庫的改動“感冒”(一) (轉)資料庫
- 讓你的應用程式不再對資料庫的改動“感冒”(二) (轉)資料庫
- Zendesk:你的顧客對你的調研“感冒”麼-資料資訊圖
- GodBlessYou: 讓你的應用不再崩潰Go
- 業務人員自行搭建應用,讓資料不再過時
- 給你的應用程式新增動態滑鼠 (轉)
- 轉---讓指標不再困擾你指標
- 一個功能強大的對話方塊庫—讓你的專案不再單調
- c++ 讓你的應用支援相對路徑C++
- 非Access資料庫在VB的程式設計及應用 (轉)資料庫程式設計
- 低程式碼開發平臺 讓資料應用不再複雜
- 資料庫中的XML應用例項 (轉)資料庫XML
- Oracle資料庫及應用程式最佳化(轉)Oracle資料庫
- 讓你的Mozilla支援XML資料島 (轉)XML
- 用Delphi 開發資料庫程式經驗三則 (轉)資料庫
- iOS開發系列–讓你的應用“動”起來iOS
- 實用的資料庫檢查程式 (1) (轉)資料庫
- 實用的資料庫檢查程式(3) (轉)資料庫
- 3分鐘短文:Laravel Form,讓你不再寫 HTML 的好“庫”LaravelORMHTML
- 資料庫命令的應用資料庫
- Python爬蟲隨機UserAgent庫,讓你不再手動敲UA!Python爬蟲隨機
- 資料庫即將死去 -- 轉《NoSQL的資料庫技術革命讓我們對SQL說不》資料庫SQL
- angualrJs對資料庫資料處理的增刪改查JS資料庫
- 小程式雲開發讓你不再加班
- python+資料庫(三)用python對資料庫基本操作Python資料庫
- PublishFolderCleaner 讓你的 dotnet 應用釋出資料夾更加整潔
- 如何選擇資料庫伺服器,參考這幾點讓你不再被坑資料庫伺服器
- kylix 資料庫應用簡介 (轉)資料庫
- 解讀什麼是小程式容器,讓移動應用開發不再有難題
- HarmonyOS:儲存你的應用資料
- 資料庫規範化三個正規化應用例項(轉)資料庫
- 資料庫設計三大正規化應用例項剖析(轉)資料庫
- 應用程式的資料庫從Sql Server遷移到Oracle資料庫SQLServerOracle
- Dos下的XMS完全控制類 --- 使用它,讓你的DOS程式使用XMS不再是夢想! (轉)
- 讓你詳細的瞭解資料庫防火牆的功能資料庫防火牆
- 【移動資料】imp的應用
- 【移動資料】exp的應用
- TiDB 分散式資料庫在轉轉公司的應用實踐TiDB分散式資料庫