oracle 备份数据库对象(存储过程PROCEDURE,FUNCTION,VIEW,TRIGGER...)

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

历经几次修改终于, 完美了,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"

  

时间: 2024-08-10 23:30:32

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

查询某个表所涉及的 存储过程Procedure, 视图view , 方法Function

/*查询某个表所涉及的Procedure,Package,Function*/select name,type,referenced_owner,referenced_name,referenced_typefrom user_dependencieswhere referenced_name='Mytable'   -- Mytable 表名 and type='procedure';   -- 储过程Procedure, 视图view , 方法Function 原文地址:https://ww

oracle(创建数据库对象)

1 --创建数据库 2 --1.SYSDBA系统权限 3 startup:--启动数据库. 4 shutdown:--关闭数据库. 5 alter database[mount]|[open]|[backup]|[character set]:--修改数据库到加载状态.打开状态,备份数据库,修改数据库字符集. 6 create database:--创建数据库. 7 drop database:--删除数据库. 8 create spfile:--创建服务器初始化参数文件. 9 alter da

oracle 进阶(二) oracle 其他数据库对象

1.Sequence n自动生成唯一的数字 n是一个共享的对象 n典型的应用于表的主键 n可替代应用代码 n将序列号值放在缓存中可提高访问速度 创建名字为 DEPT_DEPTNO的序列号,以供DEPT表使用 . 不加 CYCLE 选项 CREATE SEQUENCE dept_deptno INCREMENT BY 1 START WITH 91 MAXVALUE 100 NOCACHE NOCYCLE; 2.Index n是一种对象 n使用指针加快记录访问速度 n减小硬盘 I/O n索引独立于

使用mysqldump备份数据库(含存储过程)

加上-R选项即可把存储过程也备份下来了:mysqldump -uroot -p dbtest -R >dbtest_routine_20100617.sql #windows下mysql备份还原,可不用修改my.ini来还原视图(已验证) mysqldump -uroot -p123 --default-character-set=gbk --opt --extended-insert=false --triggers -R --hex-blob -x db_name > f:\db.sql

oracle(查询数据库对象1)

1 --查询表信息 2 xxx_tables--包含表的基本描述信息和统计信息 3 xxx_tab_columns--包含表中列的描述信息和统计信息 4 xxx_all_tables--包含当前数据库所有的关系表和对象表信息 5 xxx_tab_comments--包含所有表和视图的注释信息 6 xxx_col_comments--包含所有表和视图的列注释信息 7 xxx_tab_statistics--包含所有表和统计信息 8 xxx_tab_col_statistics--包含所有表中列的统

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

导出数据库 exp hljslfh2/[email protected] file=d:\hljslfh2Of0426.dmp 导入数据库 imp hljslfh2/[email protected]/dbsvr file="d:\hljslfh2Of0426.dmp" full=y ignore=y 创建表空间管理https://localhost:1158/em 上述语句说明如下: hljslfh2是创建的登录数据库用户名: hljslfh2是登录数据库的密码: localhost

数据库对象——函数、存储过程、索引、同义词

数据库对象--函数 1.函数(function)分为两种,一种是oracle数据库自身的函数,另一种是用户自己写的函数. 2.使用函数把小写字幕变成大写字幕. select upper('a i love you') from dual; 3.创建一个通过员工的ID号获取其薪水的函数 create or replace function get_empsal(emp_no in number) return number is emp_sal number(7,2); begin select

[独孤九剑]Oracle知识点梳理(六)数据库常用对象之Procedure、function、Sequence

本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL [独孤九剑]Oracle知识点梳理(五)数据库常用对象之Table.View [独孤九剑]Oracle知识点梳理(七)数据库常用对象之Cursor [独孤九剑]Oracle知识点梳理(八)常见Exception [独孤九剑]Oracle知识点梳理(九)数

Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作

Oracle如何实现创建数据库.备份数据库及数据导出导入的一条龙操作 Oracle中对数据对象和数据的管理,无疑都是使用PL/SQL Developer来进行管理,该工具也提供给我们很多方便.快捷的操作,使得我们不再为Oracle本身丑陋.难用的UI而抱怨.由于我们一般都是建建表.查查数据的操作居多,较少会考虑系统的整个Oracle的完整备份操作.但是在我们一些发布操作中,我们必须考虑如何把Oracle的对象.表数据导出到Sql脚本中,并且把创建Oracle表空间.创建Oracle数据库的操作也