编写批处理实现把数据库对象分对象备份导出

执行入口

@echo off
@echo 开始备份数据库对象

::获取当前系统日期,并复制为Today变量
for /f "tokens=2 delims==" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value') do (
  set t=%%a
)
set Today=%t:~0,4%%t:~4,2%%t:~6,2%

::创建文件夹,用于存放导出的存储过程等数据库对象
mkdir D:\zslpfrsql\dbback\%Today%

::备份数据库存储过程
sqlplus user/password@ip/dbsid @D:\bat\spooldb\spoolproc.sql  D:\zslpfrsql\dbback\%Today%\procedure.sql
::备份数据库视图
sqlplus user/password@ip/dbsid @D:\bat\spooldb\spoolview.sql  D:\zslpfrsql\dbback\%Today%\view.sql
::备份数据库函数
sqlplus user/password@ip/dbsid @D:\bat\spooldb\spoolfunc.sql  D:\zslpfrsql\dbback\%Today%\func.sql

@echo 数据库对象备份结束
@echo on

 

函数对象导出(spoolfunc.sql )

set echo off
set pagesize 0
set linesize 500
set long 90000
--去除sql执行返回结果
set termout off
set heading off
set feedback off
col func_text for a200 wrapped word
spool &1

--去除storage等多余参数
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',FALSE);
--输出信息采用缩排或换行格式化
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'PRETTY',true);
--确保每个语句都带分号
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SQLTERMINATOR',true);

select dbms_metadata.get_ddl(u.OBJECT_TYPE,u.OBJECT_NAME) as func_text from 
user_objects u
where u.OBJECT_TYPE in('FUNCTION')
and u.OBJECT_NAME LIKE 'ZSLP%';

spool off

quit;

 

 存储过程导出(spoolproc.sql)

set echo off
set pagesize 0
set linesize 500
set long 90000
/*
忽略sql语句的执行结果
*/
set termout off
/*
不显示列标题
*/
set heading off
/*
去除执行sql的反馈,
如反馈的table created等
*/
set feedback off
/*
 将宽度设置为200个字符才换行
*/
col prc_text for a200 wrapped word
spool &1

--去除storage等多余参数
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',FALSE);
--输出信息采用缩排或换行格式化
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'PRETTY',true);
--确保每个语句都带分号
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SQLTERMINATOR',true);

select dbms_metadata.get_ddl(u.OBJECT_TYPE,u.OBJECT_NAME) as prc_text from 
user_objects u
where u.OBJECT_TYPE in('PROCEDURE')
and u.OBJECT_NAME LIKE 'ZSLP%';

spool off

quit;

 

表结构导出(spooltable.sql)

set echo off
set pagesize 0
set linesize 500
set long 90000
set termout off
set heading off
set feedback off
col view_text for a200 wrapped word
spool D:\test.sql

--去除storage等多余参数
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',FALSE);
--输出信息采用缩排或换行格式化
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'PRETTY',true);
--确保每个语句都带分号
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SQLTERMINATOR',true);

select dbms_metadata.get_ddl(u.OBJECT_TYPE,u.OBJECT_NAME) as view_text from 
user_objects u
where u.OBJECT_TYPE in('TABLE')
and u.OBJECT_NAME LIKE 'ZSLP%';

spool off

quit;

视图导出(spoolview.sql)

set echo off
set pagesize 0
set linesize 500
set long 90000
set termout off
set heading off
set feedback off
col view_text for a200 wrapped word
spool &1

--去除storage等多余参数
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',FALSE);
--输出信息采用缩排或换行格式化
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'PRETTY',true);
--确保每个语句都带分号
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SQLTERMINATOR',true);

select dbms_metadata.get_ddl(u.OBJECT_TYPE,u.OBJECT_NAME) as view_text from 
user_objects u
where u.OBJECT_TYPE in('VIEW')
and u.OBJECT_NAME LIKE 'ZSLP%';

spool off

quit;

 

你可能感兴趣的:(windows,批处理,oracle,oracle)