天天看点

【变更】线上库的变更操作

对于访问频繁的生产库进行线上变更操作是比较危险的,因为倘若变更失败将导致对象失效不可用,严重影响应用。

下面介绍一下进行线上库变更的流程。

<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>