oracle数据泵恢复备份后自动编译脚本
在使用Oracle数据泵备份和恢复数据时,如果有存储过程、触发器等对象需要恢复,那么在恢复后需要手动编译这些对象。为了避免手动编译的繁琐和出错,可以使用以下脚本实现自动编译。
- 创建一个编译脚本,例如:compile.sql。脚本内容如下:
SET SERVEROUTPUT ON;
DECLARE
cur SYS_REFCURSOR;
obj_type VARCHAR2(30);
obj_owner VARCHAR2(30);
obj_name VARCHAR2(100);
obj_status VARCHAR2(30);
BEGIN
OPEN cur FOR SELECT object_type, owner, object_name, status
FROM dba_objects
WHERE object_type IN ('PROCEDURE', 'FUNCTION', 'PACKAGE', 'PACKAGE BODY', 'TRIGGER')
AND status <> 'VALID'
ORDER BY object_type, owner, object_name;
LOOP
FETCH cur INTO obj_type, obj_owner, obj_name, obj_status;
EXIT WHEN cur%NOTFOUND;
EXECUTE IMMEDIATE 'ALTER '||obj_type||' "'||obj_owner||'"."'||obj_name||'" COMPILE';
DBMS_OUTPUT.PUT_LINE('Compiled '||obj_type||': "'||obj_owner||'"."'||obj_name||'"');
END LOOP;
CLOSE cur;
END;
/
- 在数据泵恢复完成后,调用编译脚本:
@compile.sql
执行完毕后,所有需要编译的存储过程、触发器等对象都会被自动编译。
原文地址: https://www.cveoy.top/t/topic/nGV 著作权归作者所有。请勿转载和采集!