對于通路頻繁的生産庫進行線上變更操作是比較危險的,因為倘若變更失敗将導緻對象失效不可用,嚴重影響應用。
下面介紹一下進行線上庫變更的流程。
<b>1 對package 中所有sql語句進行review,檢視它們的執行計劃,确認是否合理。</b>
<b>2 檢查包的依賴關系</b>
IM@im1>select owner,name,type,DEPENDENCY_TYPE
2 from dba_dependencies
3 where REFERENCED_OWNER like upper('%&REFERENCED_OWNER_like%')
4 and REFERENCED_NAME like upper('%&REFERENCED_NAME_like%')
5 and REFERENCED_TYPE like upper('%&REFERENCED_TYPE_like%')
6 and type!='PACKAGE BODY';
<b>3 檢視釋出前對象的有效個數和無效個數以便前後對比</b>
IM@im1>select object_type,status,count(*) from user_objects group by object_type,status;
OBJECT_TYPE STATUS COUNT(*)
------------------ ------- ----------
TYPE VALID 11
VIEW INVALID 3
INDEX VALID 399
TABLE VALID 234
PACKAGE VALID 49
SYNONYM VALID 10
FUNCTION VALID 1
SEQUENCE VALID 173
PROCEDURE VALID 22
PACKAGE BODY VALID 49
DATABASE LINK VALID 6
INDEX PARTITION VALID 79
TABLE PARTITION VALID 79
13 rows selected.
<b>4 準備復原方案</b>
為防止新的包釋出不成功,必須将舊的包放在伺服器上,當釋出失敗時,立即執行舊的包,進行操作復原。
<b>5 釋出包。</b>
@/tmp/IM_SMS_20110727.pkg
<b>6 再次檢查對象的有效個數和無效個數,檢測是否變更成!</b>
<b>7 如果有無效對象在使用utlrp.sql 進行修複</b><b>以sysdba登入資料庫執行:</b>
<b>@?/rdbms/admin/utlrp.sql</b>
<b>8 如果該包被頻繁執行,還有監控系統未來30分鐘内是否正常!</b>