首页 > 数据库 >oracle 数据库对象自动备份

oracle 数据库对象自动备份

时间:2023-09-21 12:37:29浏览次数:63  
标签:-- text 备份 file oracle output line 数据库


      本文介绍一种数据库对象备份的方法。其原因是因为我在开发时有两个数据库用户,他们的数据表结构相同,所开发的存储过程也相同,但是数据却是不同地方的数据。因为懒惰所以在修改过程包时只想修改一次就ok,所以想了一个半自动的办法,让数据库自动备份数据库对象,然后编写bat文件进行同步更新。

      首先要明确主次,我把a数据库用户作为修改对象,b数据库用户只是同步更新。ok

      步骤:

      一、用dba身份登录数据库,给a数据库用户指定一个存储路径‘d:\test’,并授予读写的权限。

create or replace directory D_OUTPUT as 'D:\test';   
grant read,write on directory D_OUTPUT to a;   
GRANT EXECUTE ON utl_file TO a;

 

    二、用a登录数据库,编写自动备份包的过程。

   

create or replace procedure save_PACKAGEtoSQL_thomas is
  procedname varchar2(32);
  i          PLS_INTEGER := 0;
  L_output   utl_file.file_type;
  file_dic   varchar2(200) := 'D_OUTPUT'; --目录
  file_name  varchar2(32) := 'pro.sql'; --生成的文件
  cursor proc is --得到每个业务模块中用到的存储过程名称
    select x.referenced_name
      from user_dependencies x
     where x.referenced_type = 'PACKAGE'
     group by x.referenced_name;
  
begin
  --打开文件
  L_output := utl_file.fopen(file_dic, file_name, 'a');
  --循环得到每一个存储过程名称
  open proc;
  loop
    fetch proc
      into procedname;
    exit when proc%notfound;
    i := i + 1;
    dbms_output.put_line('procedname' || i || '=' || procedname);
  
    --得到每一个存储过程的source
    for j in (select decode(t.line,
                            1,
                            'Create or replace ' || t.text,
                            t.text) text
                from user_source t
               where t.name = procedname
                 and t.type = 'PACKAGE'
               order by line) LOOP
      --写每一个存储过程包到文件
      UTL_FILE.put_line(L_output, j.text, false);
    END LOOP;
    --在每一个存储过程后增加'/'
    UTL_FILE.put_line(L_output, '/', false);
    for j in (select decode(t.line,
                            1,
                            'Create or replace ' || t.text,
                            t.text) text
                from user_source t
               where t.name = procedname
                 and t.type = 'PACKAGE BODY'
               order by line) LOOP
      --写每一个存储过程包体到文件
      UTL_FILE.put_line(L_output, j.text, false);
    END LOOP;
    --在每一个存储过程后增加'/'
    UTL_FILE.put_line(L_output, '/', false);
  end loop;

  close proc;

  UTL_FILE.fclose(L_output);
end save_PACKAGEtoSQL_thomas;

   三、编写job,定时每天晚上12点执行。

  

VARIABLE job_busilog_addpartition NUMBER;
BEGIN
DBMS_JOB.SUBMIT(:job_busilog_addpartition,save_PACKAGEtoSQL_thomas;',trunc(sysdate)+23/24,'SYSDATE+1');
COMMIT;
END;

  四、编写bat文件,内容:start sqlplus     b/pwd@db   @ d:\test\pro.sql  。

 

  完成。

======================================================================

  后续问题:1、上面是本地数据库思路,远程数据库需要数据库连接就可以了。

                 2、本来准备自动完成更新的,但是不知道怎样备份成dmp文件,也或者是在过程里怎样实现导入sql文件导入。

                 3、其实上面只是对包进行备份,也可以对所有用户对象进行备份。

  

  

   

 

标签:--,text,备份,file,oracle,output,line,数据库
From: https://blog.51cto.com/u_16255870/7552804

相关文章

  • oracle 内置函数备忘录
    这两天在写oracle包,蛮大的一个,为了方便查找,就丢上来个。黄色是经常用到的,顺便看看对大家有没有帮助。  SQL中的单记录函数1.ASCII返回与指定的字符对应的十进制数;SQL>selectascii('A')A,ascii('a')a,ascii('0')zero,ascii('')spacefromdual;       A    ......
  • 将Execl表格的数据导入数据库
    ///导入台区///</summary>///<paramname="savePath"></param>///<paramname="msg"></param>///<returns></returns>publicboolUpload(stringsavePath,outst......
  • Oracle 数据库11g版本dataguard创建的简单方法
    作者:ArupNanda DataGuard了解ActiveDataGuard如何通过实时查询,同时应用归档的的日志、将物理备用数据库转换为快照备用数据库以及对基础架构的一系列改进措施,让您对备份环境的投资物有所值。下载Oracle数据库11gOracle数据库11g对DataGuard功能进行了多方面的增强,......
  • greenplum到oracle的dbi_link的配置、调试与测试
    为了解决greenplum到oracle的数据库的数据互联互通的问题,特提供的dbi_link做了研究与测试,dbi_link的基本原理是用Perl的DBI和相应数据库的DBD来访问异构数据库,实现数据的互访与数据传递,这次研究的目的是想解决oracle数据仓库到greenplum的数据传输的问题,这次的研究大概可以分为以......
  • Oracle 数据库日常维护(3)
    常用DBA管理脚本一、数据库构架体系1、表空间的监控是一个重要的任务,我们必须时刻关心表空间的设置,是否满足现在应用的需求,以下的语句可以查询到表空间的详细信息SELECTTABLESPACE_NAME,INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,MAX_EXTENTS,PCT_INCREASE,MIN_EXTLEN,STATUS,CONTE......
  • 【引用】Oracle全文检索方面的研究(全5)
    3.5Storage属性Oracle全文检索通常会生成一系列的辅助表,生成规则是dr$+索引名+$+表用途标识,由于这些表是oracle自动生成的,通常没有办法为这些表指定存储空间。为构造text索引所生成的辅助表指定表空间、存储参数(usethestoragepreferencetospecifytablespaceandcreation......
  • 【引用】Oracle全文检索方面的研究(全3)
    3.3Lexer属性               Oracle全文检索的lexer属性用于处理各种不同的语言,最基本的英文使用basic_lexer,中文则可以使用chinese_vgram_lexer或chinese_lexer。   3.3.1Basic_lexerbasic_lexer属性支持如英语、德语、荷兰语、挪威语、瑞典语等以空格......
  • 【引用】Oracle全文检索方面的研究(全6)
    3.6Wordlist属性Oracle全文检索的wordlist属性用来设置模糊查询和同词根查询,wordlist属性还支持子查询和前缀查询,oracle的wordlist属性只有basic_wordlist一种(原文:Usethewordlistpreferencetoenablethequeryoptionssuchasstemming,fuzzymatchingforyourlang......
  • 【引用】Oracle全文检索方面的研究(全2)
    3.2Filter属性过滤器负责将各种文件格式的数据转换为纯文本格式,索引管道中的其他组件只能处理纯文本数据,不能识别microsoftword或excel等文件格式,filter有charset_filter、inso_filter、null_filter、user_filter、procedure_filter几种类型。(可将文档格式转化为数据库文......
  • 【引用】Oracle全文检索方面的研究(全9)
    3.10常用的脚本3.10.1.删除preference:beginctx_ddl.drop_preference('my_lexer');end; 3.10.2.索引重建:ALTERINDEXnewsindexREBUILDPARAMETERS('replacelexermy_lexer'); 3.10.3同步索引beginctx_ddl.sync_index('myindex','2M');end;或通过后......