Oracle数据库自动备份SQL文本:Procedure存储过程,View视图,Function函数,Trigger触发器,Sequence序列号等
功能:备份存储过程,视图,函数触发器,Sequence序列号等
准备工作:
--1.创建文件夹 :'E:/OracleBackUp/ProcBack';--文本存放的路径
--2.执行:create or replace directory MyProcBakPath as 'E:/OracleBackUp/ProcBack';
--3.赋权限:
sqlplus /nolog
conn user/pswd as sysdba
grant select on DBA_OBJECTS to user;
--4.创建Job,自动执行,自动备份存储过程
+缩减代码,归类循环执行 lzpong 2015/03/18
+更改代码,使大存储过程也能保存,并且 不会出现 "用户名"."对象名" 的格式 lzpong 2015/07/14
+更改类型定义 为 long 字段类型表,使能保存大视图; 保存视图名到创建语句中 lzp 2016/05/06
+?触发器依然会有用户名的前缀?
以下是本人历经多次修改的最终Sql代码:
CREATE OR REPLACE PROCEDURE OBJAUTOSTORE
AS
/* 功能:备份存储过程和视图
准备工作:
--1.创建文件夹 :'E:/OracleBackUp/ProcBack';--文本存放的路径
--2.执行:create or replace directory MyProcBakPath as 'E:/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
+更改类型定义 为 long 字段类型表,使能保存大视图; 保存视图名到创建语句中 lzp 2016/05/06
*/
OutFile UTL_FILE.FILE_TYPE;
--type user_source_table_type is table of user_source.text%TYPE INDEX BY BINARY_INTEGER;
type user_source_table_type is table of long 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' ,'View_'||to_char(sysdate, 'yyyymmddhh24miss')||'.sql' FROM DUAL
union all SELECT 'TRIGGER' , 'Trig_'||to_char(sysdate, 'yyyymmddhh24miss')||'.sql' FROM DUAL
union all SELECT 'SEQUENCE' , 'Sequ_'||to_char(sysdate, 'yyyymmddhh24miss')||'.sql' FROM DUAL
union all SELECT 'FUNCTION' , 'Func_'||to_char(sysdate, 'yyyymmddhh24miss')||'.sql' 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 user_objects where object_type=rec.otype) loop --使用当前用户的
for robj in (select owner,object_name from dba_objects /*user_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;
UTL_FILE.put_line(OutFile,'-----------------start '||robj.object_name||')----------------');
pos:=1;
line:=1;
--大对象写入文件
UTL_FILE.put(OutFile,'create or replace ');
if(rec.otype='VIEW')then
UTL_FILE.put(OutFile,'view '||robj.object_name||chr(10));
execute immediate 'select text from user_views where view_name='''||robj.object_name||'''' bulk collect into user_source_table;
elsif(rec.otype='SEQUENCE')then
execute immediate 'select ''create sequnence ''||sequence_name||'' min_value ''||min_value||'' max_value ''||max_value||'' increment by ''||increment_by||'' start with ''||last_number||(case when cycle_flag=''Y'' then '' cycle '' else '''' end)||(case when order_flag=''Y'' then '' oreder '' else '''' end)||(case when cache_size>0 then '' cache ''||cache_size else '' nocache'' end) from user_sequences where SEQUENCE_NAME='''||robj.object_name||'''' bulk collect into user_source_table;
else
execute immediate 'SELECT TEXT FROM user_SOURCE WHERE name='''||robj.object_name||''' order by line ' bulk collect into user_source_table;
end if;
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,chr(10)||'/');
UTL_FILE.put_line(OutFile,'-----------------end '||robj.object_name||' (line:'||user_source_table.count||'----------------');
pos:=0;
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;
job执行后会在 建立的文件夹里生成备份文件
Oracle数据库自动备份SQL文本:Procedure存储过程,View视图,Function函数,Trigger触发器,Sequence序列号等的更多相关文章
- Windows下Oracle数据库自动备份批处理脚本
expdb命令版本 @echo off REM ########################################################### REM # Windows Se ...
- SQL Server 查询所有包含某文本的存储过程、视图、函数
• 方法一:查询所有包含某文本的存储过程.视图.函数 SELECT * from sysobjects o, syscomments s where o.id = s.id AND text LIK ...
- Linux oracle数据库自动备份自动压缩脚本代码
Linux oracle数据库备份完成后可以自动压缩脚本代码. 复制代码代码如下: #!/bin/bash #backup.sh #edit: www.jbxue.com ##系统名称 sysname ...
- Oracle 数据库自动备份方案
1.新建 backup.bat脚本 @echo off echo ================================================ echo Windows环境下Ora ...
- ORACLE数据库 自动备份 定时计划任务 windows
疑问为什么没有输入oracle 的数据库安装目录就能直接备份呢,可能是因为oracle默认安装c盘,在docs命令直接能操作吧,不信可以使用sqlplus试试. 一共分三步: 一.建立一个.bat 批 ...
- oracle数据库自动备份脚本
::通过exp命令导出远程机器(192.168.2.1)上指定服务(orcl)指定用户(pmis)及密码(pmis)的数据 ::运行该脚本的机器必须安装oracle @echo off @echo [ ...
- ORACLE数据库自动备份压缩的批处理脚本 rar 7z
使用7z的版本: @echo offset filename="d:\backup\dbname_%date:~0,10%"set zipfile="d:\backup\ ...
- 自动备份SQL数据库到云存储Storage
如何自动备份SQL数据库到Storage呢. 前提条件需要SQL Server2012 SP1 CU2或更高版本 1. 备份SQL Azure数据库到云存储Storage 1)在SQL Server ...
- C#编写强大的SQL Server数据库自动备份服务
数据库自动备份服务,带配置,还算可以吧 周末抽时间,编写了一个这样的工具,可以让,对数据库不了解或不熟悉的人,直接学会使用备份,省时省力,同样,我也将一份,通过脚本进行备份的,也奉献上来, 通过sql ...
随机推荐
- 从RPC开始(一)
这是一篇关于纯C++RPC框架的文章.所以,我们先看看,我们有什么? 1.一个什么都能干的C++.(前提是,你什么都干了) 2.原始的Socket接口,还是C API.还得自己去二次封装... 3.C ...
- 【.net 深呼吸】细说CodeDom(2):表达式、语句
在上一篇文章中,老周厚着脸皮给大伙介绍了代码文档的基本结构,以及一些代码对象与CodeDom类型的对应关系. 在评论中老周看到有朋友提到了 Emit,那老周就顺便提一下.严格上说,Emit并不是针对代 ...
- RabbitMq应用二
在应用一中,基本的消息队列使用已经完成了,在实际项目中,一定会出现各种各样的需求和问题,rabbitmq内置的很多强大机制和功能会帮助我们解决很多的问题,下面就一个一个的一起学习一下. 消息响应机制 ...
- 【接口开发】浅谈 SOAP Webserver 与 Restful Webserver 区别
接口,强大,简单,交互,跨越平台 下面简单阐述这两大接口思想 一 REST: REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性. ...
- AES加密
package com.edu.hpu; import java.math.BigInteger; import java.security.MessageDigest; import java.se ...
- linux centos中添加删除修改环境变量,设置java环境变量
前言 安装完软件必要添加环境变量.指令很少,然而长时间不写就会不自信:我写的对吗?于是百度开始,于是发现又是各有千秋.好吧,好记星不如烂笔头.当然,最重要的是,百度出来的都他妈的是如何添加环境变量,只 ...
- 如何使用dos命令打开当前用户、当前日期、当前时间以及当前用户加当前时间?
1.dos命令安装mysqld --stall.启动net start mysql.进入MySQL数据库mysql -uroot -p后,输入select user();当前用户 select cur ...
- 嵌入式C语言代码的调试技巧
在项目开发的过程中,不可避免的会遇到调试代码的情况. 刚开始写代码时,我们想看具体执行到哪儿时,往往这么写: printf("***** Code is here! *****\n" ...
- PHP 数组浅析
PHP的数组具有如下特点:1.数组初始化时无需指定长度:2.数组中的元素无需相同类型:3.数组的长度可变4.可使用var_dump(参数)或者print_r( 参数) 函数查看数组变量.5.数组内的 ...
- 元素绝对居中终极办法兼容IE8
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...