因版本控制不规范,项目中运营同事在部署前需手动备份数据库过程、函数代码,以支持失败时回滚; 这里写了个小程序,以简化备份操作:(只针对 Oracle)
一共分两个脚本:exp.bat 和 exp.conf(执行前,修改 数据库 连接信息和备份内容即可)
exp.bat
sqlplus dc_data/dc_data@crs116 @c:\exp\exp.conf
pause
其中 @c:\exp\exp.conf
表示 查找
exp.conf 配置文件
exp.conf
set trimspool on
set linesize 2000
set pagesize 0
set newpage 1
set heading off
set term off
set long 1000000
set longc 1000000
spool .\P_GROUP_VARCHAR_APPEND.PRC
SELECT DBMS_METADATA.GET_DDL('PROCEDURE','P_GROUP_VARCHAR_APPEND', 'DC_DATA') AS TEXT FROM DUAL;
spool off
spool .\F_WORKDATE.FUN
SELECT DBMS_METADATA.GET_DDL('FUNCTION', 'F_WORKDATE', 'DC_DATA') AS TEXT FROM DUAL;
spool off
spool .\PKG_UNITY.PKG
SELECT DBMS_METADATA.GET_DDL('PACKAGE', 'PKG_UNITY', 'DC_ETL') AS TEXT FROM DUAL;
spool off
exit
文中 分别将sql语句的结果生成到相应文件;
.\P_GROUP_VARCHAR_APPEND.PRC 表示生成的文件名和路径(这里是相对路径)
set long 1000000 因 DBMS_METADATA.GET_DDL() 函数返回CLOB,默认只输出前80个字符,这里进行调大
set longc 1000000 防止CLOB写到文件里时被截断而换行