首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 批次重編譯失效程序:一鍵修復腳本與存儲過程版

     編輯:Oracle 資料庫基礎

SQL*Plus 臨時腳本法

SPOOL ExecCompProc.sql
SELECT 'ALTER PROCEDURE ' || object_name || ' COMPILE;'
FROM   all_objects
WHERE  status = 'INVALID'
AND    object_type = 'PROCEDURE';
SPOOL OFF
@ExecCompProc.sql

永久存儲過程版(含錯誤記錄)

CREATE OR REPLACE PROCEDURE zl_compile_invalid_procedure AS
  v_sql VARCHAR2(200);
BEGIN
  FOR x IN (SELECT object_name
            FROM   all_objects
            WHERE  status = 'INVALID'
            AND    object_type = 'PROCEDURE') LOOP
    v_sql := 'ALTER PROCEDURE ' || x.object_name || ' COMPILE';
    BEGIN
      EXECUTE IMMEDIATE v_sql;
    EXCEPTION
      WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('FAILED: ' || x.object_name || ' - ' || SQLERRM);
    END;
  END LOOP;
END;
/
-- 執行前開啟輸出
SET SERVEROUTPUT ON
EXEC zl_compile_invalid_procedure;

擴充建議

  • 同理可寫 FUNCTION、PACKAGE、TRIGGER、VIEW 版本。
  • 生產庫建議先在測試環境驗證,避免編譯鎖定影響業務。
  • 搭配 UTL_RECOMP.RECOMP_SERIAL()(10g+)可遞歸重編譯所有失效物件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved