开发过程中,需要不停的备份数据库对象, 特别是存储过程, 每次手动备份不免很低能啊

历经几次修改终于, 完美了,O(∩_∩)O哈哈~      (当然,你也可以再改简便一点~~~)

select dbms_metadata.get_ddl('PROCEDURE',"PROCEDURE_NAME",'NAG') 遇到大存储过程老是丢东西不说, 对象名 还老是 "用户名"."对象名" 的格式,腻烦人!~

CREATE OR REPLACE PROCEDURE OBJAUTOSTORE
AS
/* 功能:备份存储过程和视图
准备工作:
--1.创建文件夹 :'D:/OracleBackUp/ProcBack';--文本存放的路径
--2.执行:create or replace directory MyProcBakPath as 'D:/OracleBackUp/ProcBack';
--3.赋权限:
sqlplus /nolog
conn nag/nag as sysdba
grant select on DBA_OBJECTS to NAG;
--4.创建Job,自动执行,自动备份存储过程
+缩减代码,归类循环执行 lzpong 2015/03/18
+更改代码,使超大存储过程也能保存,并且 不会出现 "用户名"."对象名" 的格式 lzpong 2015/07/14
*/
OutFile UTL_FILE.FILE_TYPE; type user_source_table_type is table of user_source.text%TYPE INDEX BY BINARY_INTEGER;
user_source_table user_source_table_type; pos INTEGER;
line integer;
towner VARCHAR2(50) :='NAG'; cursor abc is
SELECT 'PROCEDURE' otype,'Proc_'||to_char(sysdate, 'yyyymmddhh24miss')||'.sql' ofile FROM DUAL
union all SELECT 'VIEW' otab,'View_'||to_char(sysdate, 'yyyymmddhh24miss')||'.sql' ofile FROM DUAL
union all SELECT 'TRIGGER' otab, 'Trig_'||to_char(sysdate, 'yyyymmddhh24miss')||'.sql' ofile FROM DUAL
union all SELECT 'SEQUENCE' otab, 'Sequ_'||to_char(sysdate, 'yyyymmddhh24miss')||'.sql' ofile FROM DUAL
union all SELECT 'FUNCTION' otab, 'Func_'||to_char(sysdate, 'yyyymmddhh24miss')||'.sql' ofile FROM DUAL
;
BEGIN for rec in abc loop
dbms_output.put_line(rec.otype||','||rec.ofile);
OutFile:=UTL_FILE.FOPEN('MYPROCBAKPATH' , rec.ofile,'w',32767); for robj in (select owner,object_name from dba_objects where object_type=rec.otype and owner=towner) loop
--select dbms_metadata.get_ddl(rec.otype,robj.object_name,towner) into v_sql from dual;
execute immediate 'SELECT TEXT FROM user_SOURCE WHERE name='''||robj.object_name||''' order by line ' bulk collect into user_source_table; UTL_FILE.put_line(OutFile,'-----------------start '||robj.object_name||' (line:'||user_source_table.count||')----------------');
pos:=1;
line:=1;
--大对象写入文件
UTL_FILE.put(OutFile,'create or replace ');
WHILE pos<=user_source_table.count LOOP
if(line>500)then --防止 文件写入缓存满了
dbms_output.put_line(pos||' '||robj.object_name);
UTL_FILE.fflush(OutFile);
line:=1;
end if;
UTL_FILE.put(OutFile,user_source_table(pos));
pos:=pos+1;
line:=line+1;
END LOOP;
UTL_FILE.put_line(OutFile,'-----------------end '||robj.object_name||'----------------'); end loop;
UTL_FILE.put_line(OutFile,'-----------------end of file '||rec.ofile||'----------------',true);
UTL_FILE.FCLOSE(OutFile); end loop; EXCEPTION
WHEN OTHERS THEN
UTL_FILE.put(OutFile,' pos:'||pos||chr(10)||SQLERRM||chr(10)||dbms_utility.format_error_backtrace);
UTL_FILE.FCLOSE(OutFile);
dbms_output.put_line(SQLERRM||chr(10)||dbms_utility.format_error_backtrace);
END;

 好了, 轻松了不少了吧~~ 

下面继续奉上 Oracle的自动全库导出脚本,还带打包压缩哦:

::备份文件夹 路径 和 WinRAR 路径 不需要引号
echo off
::文件名前缀
set pnm=NAG_Back_
::备份文件夹 路径
set pth=D:\OracleBackUp
::WinRAR 路径
set rth=C:\Program Files\WinRaR
::自动检测/创建备份文件夹
if not exist "%pth%" ( md "%pth%" )
echo ****************%date%,数据备份计划**************** >>%pth%\%pnm%explog.log
set pth=%pth%\%pnm%
echo %time%,处理老的备份文件 >>%pth%explog.log
if exist "%rth%\rar" do (
del "%pth%6.rar"
ren "%pth%5.rar" %pnm%6.rar
ren "%pth%4.rar" %pnm%5.rar
ren "%pth%3.rar" %pnm%4.rar
ren "%pth%2.rar" %pnm%3.rar
ren "%pth%1.rar" %pnm%2.rar
ren "%pth%0.rar" %pnm%1.rar
) else (
del "%pth%6.dmp"
ren "%pth%5.dmp" %pnm%6.dmp
ren "%pth%4.dmp" %pnm%5.dmp
ren "%pth%3.dmp" %pnm%4.dmp
ren "%pth%2.dmp" %pnm%3.dmp
ren "%pth%1.dmp" %pnm%2.dmp
ren "%pth%0.dmp" %pnm%1.dmp
)
echo %time%,开始备份数据库 >>"%pth%explog.log"
::导出参数
exp username/password owner=username file="%pth%0.dmp" log="%pth%0.log"
if exist "%rth%\rar" do (
echo %time%,开始压缩备份文件 >>"%pth%explog.log"
"%rth%\rar" a -df "%pth%0.rar" "%pth%0.dmp" "%pth%0.log"
)
echo %time%,完成数据库备份 >>"%pth%explog.log"
echo. >>"%pth%explog.log"

  

oracle 备份数据库对象(存储过程PROCEDURE,FUNCTION,VIEW,TRIGGER...)的更多相关文章

  1. oracle(创建数据库对象)

    1 --创建数据库 2 --1.SYSDBA系统权限 3 startup:--启动数据库. 4 shutdown:--关闭数据库. 5 alter database[mount]|[open]|[ba ...

  2. Oracle 备份数据库

    [目录] ①备份数据库(https://www.cnblogs.com/xqz0618/p/oracle_backup.html) ②定时备份数据库(https://www.cnblogs.com/x ...

  3. 数据库之存储过程Procedure

    数据库之存储过程 一.概述 SQLserver中视图通过简单的select查询来解决复杂的查询,但是视图不能提供业务逻辑功能,而存储过程可以办到. 二.什么是存储过程 存储过程procedure是一组 ...

  4. Oracle备份数据库

    1.前言 工作中数据库备份是一个很重要的事情,难免有时候一个不小心就会误操作,造成无法挽回的措施.在昨天的工作中,我们的一个产品经理在操作定制端的时候一个误操作,清空了几张表的数据同时还删除了几张系统 ...

  5. oracle(查询数据库对象1)

    1 --查询表信息 2 xxx_tables--包含表的基本描述信息和统计信息 3 xxx_tab_columns--包含表中列的描述信息和统计信息 4 xxx_all_tables--包含当前数据库 ...

  6. oracle备份数据库数据及导入数据库

    1.oracle数据库备份和导入 bat 脚本 scott oracle数据库用户名称 123456 数据库scott用户下的密码 192.168.124.8 本电脑IP orcl 为oracle库 ...

  7. Oracle常用数据库对象(片段)

    1:用户和权限 1.1 用户的创建 a)语法---    create user 用户名  identified by 密码: b)创建用户abcd,并设定密码为abcd;---注意:操作数据库对象是 ...

  8. oracle 备份数据库,导出数据库

    导出数据库 exp hljslfh2/hljslfh@dbsvr file=d:\hljslfh2Of0426.dmp 导入数据库 imp hljslfh2/hljslfh@localhost/dbs ...

  9. Hibernate映射文件创建和删除触发器,存储过程等数据库对象

    创建表,触发器,和存储过程等数据库对象,这里一定要用create 在hibernate.cfg.xml文件中

随机推荐

  1. linux I/O stack cache 强制刷新

    linux 存储子系统作为最为复杂的子系统之一,拥有很深的模块栈(如图),其中很多模块又有自己的缓存功能(如下图).实际应用中,用户下发的数据停留在哪个缓存中,是否已经写入磁盘,这些操作对用户来说是个 ...

  2. 1. Activiti 运行时表信息总结

    Activiti的后台是有数据库的支持,所有的表都以ACT_开头. 第二部分是表示表的用途的两个字母标识. 用途也和服务的API对应. ACT_RE_*: 'RE'表示repository. 这个前缀 ...

  3. IPv6进阶

    IPV6报文部分字段介绍 1.没有校验和字段:优点:当TTL减少时,不需要重新处理,相对于IPV4能减少处理的时间:缺点:必须在上层包含校验和2.下一个报文:可指向扩展报文:(大部分节点不处理和查看大 ...

  4. js中字符串相关知识点总结

      有引号就是字符串类型 空格也算长度 字符串的length不可写 typeof 判断数据类型 var s="a bcadde你好" // alert(typeof s)      ...

  5. 让div垂直居中的5种方法

    方法一: 这个方法把 div 的显示方式设置为表格,然后我们可以使用表格的 vertical-align property 属性. HTML & CSS: <div class=&quo ...

  6. 运行错误:error while loading shared libraries: xxx.so.0:cannot open shared object file: No such file or

    链接时可以通过-L和-l来指定自己的库,因此链接可以通过,但是运行时,系统仍无法找到指定的库,需要简单配置一下. 解决方法: 可以直接在将自己的库所在路径添加到/etc/ld.so.conf文件中.但 ...

  7. LabVIEW 吸星大法 - 看见的好东西都是我的(上篇)

    前言 写了多年的LabVIEW程序,你是否面临这样的问题 总是在做一些重复的工作,感觉很没有意思: 总在不停的写代码,做类似的控件,实现相同的功能,丝毫没有成就感: 总在天加班,没有时间去提高自己; ...

  8. 深入浅出 妙用Javascript中apply、call、bind

    apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. Jav ...

  9. CharSequence cannot be resolved. It is indirectly referenced from required .class files

    最近在写项目的时候发现会莫名其妙的出现这个编译错误,网上查了下发现自己安装的是JDK1.8造成的 原因:JDK1.8版本现在还不稳定 解决方法:卸载JDK1.8,安装JDK1.7 扩展:发现安装JDK ...

  10. java并发之volatile

    volatile是轻量级的synchronized,它在多处理器应用开发中保证了共享变量的“可见性”(可见性指当一个线程修改共享变量后,其它线程可以看到这个修改). volatile如果使用合理会比s ...