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

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

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

  1. CREATE OR REPLACE PROCEDURE OBJAUTOSTORE
  2. AS
  3. /* 功能:备份存储过程和视图
  4. 准备工作:
  5. --1.创建文件夹 :'D:/OracleBackUp/ProcBack';--文本存放的路径
  6. --2.执行:create or replace directory MyProcBakPath as 'D:/OracleBackUp/ProcBack';
  7. --3.赋权限:
  8. sqlplus /nolog
  9. conn nag/nag as sysdba
  10. grant select on DBA_OBJECTS to NAG;
  11. --4.创建Job,自动执行,自动备份存储过程
  12. +缩减代码,归类循环执行 lzpong 2015/03/18
  13. +更改代码,使超大存储过程也能保存,并且 不会出现 "用户名"."对象名" 的格式 lzpong 2015/07/14
  14. */
  15. OutFile UTL_FILE.FILE_TYPE;
  16.  
  17. type user_source_table_type is table of user_source.text%TYPE INDEX BY BINARY_INTEGER;
  18. user_source_table user_source_table_type;
  19.  
  20. pos INTEGER;
  21. line integer;
  22. towner VARCHAR2(50) :='NAG';
  23.  
  24. cursor abc is
  25. SELECT 'PROCEDURE' otype,'Proc_'||to_char(sysdate, 'yyyymmddhh24miss')||'.sql' ofile FROM DUAL
  26. union all SELECT 'VIEW' otab,'View_'||to_char(sysdate, 'yyyymmddhh24miss')||'.sql' ofile FROM DUAL
  27. union all SELECT 'TRIGGER' otab, 'Trig_'||to_char(sysdate, 'yyyymmddhh24miss')||'.sql' ofile FROM DUAL
  28. union all SELECT 'SEQUENCE' otab, 'Sequ_'||to_char(sysdate, 'yyyymmddhh24miss')||'.sql' ofile FROM DUAL
  29. union all SELECT 'FUNCTION' otab, 'Func_'||to_char(sysdate, 'yyyymmddhh24miss')||'.sql' ofile FROM DUAL
  30. ;
  31. BEGIN
  32.  
  33. for rec in abc loop
  34. dbms_output.put_line(rec.otype||','||rec.ofile);
  35. OutFile:=UTL_FILE.FOPEN('MYPROCBAKPATH' , rec.ofile,'w',32767);
  36.  
  37. for robj in (select owner,object_name from dba_objects where object_type=rec.otype and owner=towner) loop
  38. --select dbms_metadata.get_ddl(rec.otype,robj.object_name,towner) into v_sql from dual;
  39. execute immediate 'SELECT TEXT FROM user_SOURCE WHERE name='''||robj.object_name||''' order by line ' bulk collect into user_source_table;
  40.  
  41. UTL_FILE.put_line(OutFile,'-----------------start '||robj.object_name||' (line:'||user_source_table.count||')----------------');
  42. pos:=1;
  43. line:=1;
  44. --大对象写入文件
  45. UTL_FILE.put(OutFile,'create or replace ');
  46. WHILE pos<=user_source_table.count LOOP
  47. if(line>500)then --防止 文件写入缓存满了
  48. dbms_output.put_line(pos||' '||robj.object_name);
  49. UTL_FILE.fflush(OutFile);
  50. line:=1;
  51. end if;
  52. UTL_FILE.put(OutFile,user_source_table(pos));
  53. pos:=pos+1;
  54. line:=line+1;
  55. END LOOP;
  56. UTL_FILE.put_line(OutFile,'-----------------end '||robj.object_name||'----------------');
  57.  
  58. end loop;
  59. UTL_FILE.put_line(OutFile,'-----------------end of file '||rec.ofile||'----------------',true);
  60. UTL_FILE.FCLOSE(OutFile);
  61.  
  62. end loop;
  63.  
  64. EXCEPTION
  65. WHEN OTHERS THEN
  66. UTL_FILE.put(OutFile,' pos:'||pos||chr(10)||SQLERRM||chr(10)||dbms_utility.format_error_backtrace);
  67. UTL_FILE.FCLOSE(OutFile);
  68. dbms_output.put_line(SQLERRM||chr(10)||dbms_utility.format_error_backtrace);
  69. END;

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

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

  1. ::备份文件夹 路径 WinRAR 路径 不需要引号
  2. echo off
  3. ::文件名前缀
  4. set pnm=NAG_Back_
  5. ::备份文件夹 路径
  6. set pth=D:\OracleBackUp
  7. ::WinRAR 路径
  8. set rth=C:\Program Files\WinRaR
  9. ::自动检测/创建备份文件夹
  10. if not exist "%pth%" ( md "%pth%" )
  11. echo ****************%date%,数据备份计划**************** >>%pth%\%pnm%explog.log
  12. set pth=%pth%\%pnm%
  13. echo %time%,处理老的备份文件 >>%pth%explog.log
  14. if exist "%rth%\rar" do (
  15. del "%pth%6.rar"
  16. ren "%pth%5.rar" %pnm%6.rar
  17. ren "%pth%4.rar" %pnm%5.rar
  18. ren "%pth%3.rar" %pnm%4.rar
  19. ren "%pth%2.rar" %pnm%3.rar
  20. ren "%pth%1.rar" %pnm%2.rar
  21. ren "%pth%0.rar" %pnm%1.rar
  22. ) else (
  23. del "%pth%6.dmp"
  24. ren "%pth%5.dmp" %pnm%6.dmp
  25. ren "%pth%4.dmp" %pnm%5.dmp
  26. ren "%pth%3.dmp" %pnm%4.dmp
  27. ren "%pth%2.dmp" %pnm%3.dmp
  28. ren "%pth%1.dmp" %pnm%2.dmp
  29. ren "%pth%0.dmp" %pnm%1.dmp
  30. )
  31. echo %time%,开始备份数据库 >>"%pth%explog.log"
  32. ::导出参数
  33. exp username/password owner=username file="%pth%0.dmp" log="%pth%0.log"
  34. if exist "%rth%\rar" do (
  35. echo %time%,开始压缩备份文件 >>"%pth%explog.log"
  36. "%rth%\rar" a -df "%pth%0.rar" "%pth%0.dmp" "%pth%0.log"
  37. )
  38. echo %time%,完成数据库备份 >>"%pth%explog.log"
  39. 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学习笔记(12)-进程间通信|匿名管道

    Linux的进程间通信有几种方式,包括,管道,信号,信号灯,共享内存,消息队列和套接字等-- 现在一个个的开始学习! ----------------------------------------- ...

  2. 老生长谈的$.extend()方法

    jq的extend()是jq插件扩展很重要的部分,到这里证明是可以自己在jq的基础上,分为两种方法去扩展或开发,为jq本身添加一个方法,可以理解成扩展静态方法和自定义方法. 今天有看到一篇帖子,对这部 ...

  3. sql查询中datetime显示的格式为yyyy-DD-mm

    datetime数据库中保存的形式为2008/9/29 星期一 上午 12:00:00,希望界面显示2008-09-29,则可以用到以下sql语句. ),kgrq, ),),jhjgrq, ),'/' ...

  4. mac composer 安装

    在命令行执行 curl -sS https://getcomposer.org/installer | php 如果没安装 curl 执行以下代码 php -r "readfile('htt ...

  5. Python for Infomatics 第14章 数据库和SQL应用三(译)

    14.5 SQL 总结 到目前为止,我们在Python示例程序中使用了SQL,并且涉及了许多SQL基础.在这一小节中,我们特别审视SQL语言,并对其语法进行回顾. 虽然有很多不同的数据库供应商,但因S ...

  6. mac新手的烦恼

    最近新换了mac,我换mac并非自愿.无论mac的性能有多好,我依然讨厌使用appstore下载软件的感觉,尤其在我一遍又一遍忘记自己的appID的时候.无奈我的thinkpad常常死机,最近又常倒腾 ...

  7. 基于shell脚本比较数字加减乘除

    让用户输入两个数来比较他们的大小 先用touch命令新建一个2.sh文件 在用vi进入i进入编辑状态 输入 保存后检查

  8. SQL存储过程基础(从基础开始学,加油!)

    Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø ...

  9. Intellij IDEA 常用快捷键

    [常规] Ctrl+Shift + Enter,语句完成 "!",否定完成,输入表达式时按 "!"键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更 ...

  10. GiuHub 使用

    一 Mac 能不能连接安卓手机 1 USB数据线  设置 > 通用 > 开发人员选项 > USB调试 > 选择"相机PTP模式"  连接后,手机中的照片和视 ...