天天看點

【變更】線上庫的變更操作

對于通路頻繁的生産庫進行線上變更操作是比較危險的,因為倘若變更失敗将導緻對象失效不可用,嚴重影響應用。

下面介紹一下進行線上庫變更的流程。

<b>1 對package 中所有sql語句進行review,檢視它們的執行計劃,确認是否合理。</b>

<b>2 檢查包的依賴關系</b>

IM@im1&gt;select owner,name,type,DEPENDENCY_TYPE

  2     from dba_dependencies

  3     where REFERENCED_OWNER like upper('%&amp;REFERENCED_OWNER_like%')

  4        and REFERENCED_NAME like upper('%&amp;REFERENCED_NAME_like%')

  5        and REFERENCED_TYPE like upper('%&amp;REFERENCED_TYPE_like%')

  6        and type!='PACKAGE BODY';

<b>3 檢視釋出前對象的有效個數和無效個數以便前後對比</b>

IM@im1&gt;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>