设为首页 收藏本站
查看: 1012|回复: 0

[经验分享] oracle 数据库对象自动备份

[复制链接]

尚未签到

发表于 2016-8-9 06:28:14 | 显示全部楼层 |阅读模式
  本文介绍一种数据库对象备份的方法。其原因是因为我在开发时有两个数据库用户,他们的数据表结构相同,所开发的存储过程也相同,但是数据却是不同地方的数据。因为懒惰所以在修改过程包时只想修改一次就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、其实上面只是对包进行备份,也可以对所有用户对象进行备份。
  
  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-254934-1-1.html 上篇帖子: Oracle Audit 功能的使用方法介绍 下篇帖子: oracle多表创建的视图insert
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表