如何恢复DROP的存储过程
--此方法,适用开启归档模式的Oracle数据库
当你DROP掉存储过程时,首先
SQL>dropprocedureselect_data;
SQL>altersystemswitchlogfile;--切换日志
系统已更改。
查看flash_recovery_area文件下下最新的归档日志
SQL>connsysassysdba;--使用sys用户连接
SQL>showparameterutl
NAMETYPEVALUE
-----------------------------------------------------------------------------
create_stored_outlinesstring
utl_file_dirstring
设置utl_file_dir路径
--单实例环境
SQL>altersystemsetutl_file_dir='d:demo'scope=spfile;
--RAC环境
SQL>altersystemsetutl_file_dir='d:demo'scope=spfilesid='*';
重启数据库
SQL>Shutdownimmediate
SQL>Startup;
建立字典文件(环境为windows)
--dict.ora为文件名d:\demo,为路径名
SQL>executedbms_logmnr_d.build('dict.ora','d:\logmnr',dbms_logmnr_d.store_in_flat_file);
PL/SQL过程已成功完成。
建立日志分析列表
SQL>executedbms_logmnr.add_logfile(logfilename=>'E:\app\ZT\flash_recovery_area\lyz\ARCHIVELOG\2012_11_21\O1_MF_1_29_8BRJ6S2J_.ARC',options=>dbms_logmnr.new);
PL/SQL过程已成功完成。
--继续添加日志
SQL>executedbms_logmnr.add_logfile(logfilename=>'E:\app\ZT\flash_recovery_area\lyz\ARCHIVELOG\2012_11_21\O1_MF_1_30_8BRJSY77_.ARC',options=>dbms_logmnr.addfile);
PL/SQL过程已成功完成。
启动LogMiner
SQL>executedbms_logmnr.start_logmnr (dictfilename=>'D:\logmnr\dict.ora',options=>dbms_logmnr.ddl_dict_tracking);
PL/SQL过程已成功完成。
查询分析日志结果
PS:不知道为何显示的用户为UNKONW,有知道的告诉我下
查看到存储过程DROP的时间点,试用闪回功能恢复,脚本如下
闪回功能恢复
setpagesize0
columntextformata4000
spoolD:\7.txt
SELECTtext
FROMDBA_sourceASOFTIMESTAMPTO_TIMESTAMP('2012-11-2110:40:02','YYYY-MM-DDHH24:MI:SS')
WHEREOWNER='SCOTT'
ANDNAME='SELECT_DATA'
ORDERBYLINE
;
spooloff;
此时在D盘下的7.txt文件里就是被DROP的存储过程select_data
在Eygle大神指点的方向下,我发现还有一种方法可以实现恢复,也感谢
BearFishShow的方法
创建恢复函数,此方法来自http://bbs.csdn.net/topics/370143351,感谢BearFishShow
CREATEORREPLACEFUNCTIONRECOVE_PROCE(del_Timeinvarchar2,
proc_Nameinvarchar2)
RETURNVARCHAR2IS
/**
*
*functionName:存储过程或function删除后恢复方法
*
*del_time对象被删除时间
*
*proc_Name:被删除对象名称
*
*return:返回重建对象的语句
*
*/
OBJ_NUMNUMBER;
str_Procvarchar2(2000);
str_Endvarchar2(2000):='';
str_Sqlvarchar2(2000);
BEGIN
SELECTobj#
INTOOBJ_NUM
FROMobj$ASOFTIMESTAMPTO_TIMESTAMP(del_Time,'YYYY-MM-DDHH24:MI:SS')
WHERENAME=upper(proc_Name);
foriin(SELECTrowidrid,source
FROMsource$ASOFTIMESTAMPTO_TIMESTAMP(del_Time,'YYYY-MM-DDHH24:MI:SS')
whereobj#=OBJ_NUM
orderbyline)loop
selectsource
intostr_Proc
fromsource$ASOFTIMESTAMPTO_TIMESTAMP(del_Time,'YYYY-MM-DDHH24:MI:SS')
whereobj#=OBJ_NUM
ANDROWID=I.RID
orderbyline;
str_End:=str_End||str_Proc;
endloop;
str_Sql:='CREATEORREPLACE'||str_End;
returnstr_Sql;
exception
whenothersthen
dbms_output.put_line(sqlcode||sqlerrm);
returnnull;
ENDRECOVE_PROCE;
/
setpagesize0
columntextformata4000
spoolD:\7.txt
SELECTRECOVE_PROCE(‘2012-11-2110:40:02’,’SELECT_DATA’)FROMfromDUAL;
spooloff;
此时在D盘下的7.txt文件里就是被DROP的存储过程select_data(创建语句)
分享到:
相关推荐
--1、创建存储过程-- if exists (select * from sysobjects where name='Sum_wage') drop procedure Sum_wage GO create procedure Sum_wage @PWage int, @AWage int, @total int as while (1=1) begin if (select...
使用CREATE PROCEDURE语句创建存储过程,ALTER PROCEDURE语句修改存储过程,DROP PROCEDURE语句删除存储过程,存储过程有不带参数的、有带输入参数的、有带输出参数(output)的,还可以有带返回值的。创建好的存储...
VC 演示在程序中删除已存在的存储过程,VC6存储过程相关操作实例,删除方法很简单,创建对象,如下代码示: UpdateData(true); BOOL result; ADOConn m_AdoConn; m_AdoConn.OnInitADOConn(); _bstr_t sql;...
SQL语句对单个的MySQL存储过程导出 首先确保参数secure-file-priv='' 表示不限制mysqld在任意目录的导入导出 打开my.cnf或my.ini,加入如下语句后重启mysql服务。 secure_file_priv='' sql语法只修改下面的...
数据库管理与应用 8.2.6 使用DROP PROCEDURE语句删除存储过程.pdf 学习资料 复习资料 教学资源
CREATE PROCEDURE "PLName"(--存储过程名字 IN orders_ID BIGINT, OUT Comments VARCHAR(254) ) BEGIN declare TEMP VARCHAR(254); --声明变量 declare t_TEMP VARCHAR(254); DECLARE c1 CURSOR FOR SELECT ...
CREATE PROC [ EDURE ] procedure_name [ ; number ] number 是可选的整数,用来对同名的过程分组,以便用一条 DROP PROCEDURE 语句即可将同组的过程一起除去。
MySQL 存储过程参数有三种类型:in、out、inout。它们各有什么作用和特点呢? 一、MySQL 存储过程参数(in) MySQL 存储过程 “in” 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数...
1,不带参数的存储过程 2,带输入参数的存储过程 3,带输入和输出参数的存储过程 4,带返回值的存储过程 不带参数的存储过程 例如,以下存储过程返回Employees表中所有职员的记录。 存储过程代码: USE ...
用mysql的存储过程查询表中的数据 mysql数据库 tb_users表 use test; DROP TABLE IF EXISTS tb_users; CREATE TABLE IF NOT EXISTS tb_users ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, password ...
以银行ATM取款机系统为例 ...drop database ATM go create database ATM on primary ( name='ATM_data', filename='d:\sqltest\atm_data.mdf' ) log on ( name='ATM_log', filename='d:\sqltest\atm_data.ldf' ) go
结尾表示确认输入并执行语句,但在存储过程中;不是表示结束,因此可以用该命令将;号改为//表示确认输入并执行。存储过程如同一门程序设计语言,同样包含了数据类型、流程控制、输入和输出和它自己的函数库。 一....
----------------------------------------带输出参数存储过程--------------------------------------- if (object_id('proc_getUsersRecord', 'P') is not null) drop proc proc_getUsersRecord go create proc ...
第一步:新建存储过程 CREATE PROCEDURE PCreateDeleteTrigger @tableName varchar(128) AS DECLARE @fields sysname,@sqlStr VARCHAR(2048),@log_tableName varchar(128) SET @log_tableName = @tableName+'_Delete...
drop PROCEDURE if exists my_procedure; create PROCEDURE my_procedure() BEGIN declare my_sqll varchar(500);... 您可能感兴趣的文章:mysql 存储过程中变量的定义与赋值操作mysql存储过程详解mysq
219 10.6 删除存储过程 220 10.6.1 在SQL Server Management Studio中删除存储过程 220 10.6.2 用DROP PROCEDURE语句删除存储过程 221 10.7 常用系统存储过程 222 10.7.1 sp_help存储过程 222 ...
如果项目的存储过程较多,书写又没有一定的规范,将会影响以后的系统维护困难和大存储过程逻辑的难以理解,另外如果数据库的数据量大或者项目对存储过程的性能要求很,就会遇到优化的问题,否则速度有可能很慢,经过...
可以自定义导出数据库的表结构(视图)的一个存储过程 功能: 1.可以完整导出表结构(含主键,索引) 2.可以导出视图SQL语法 3.可以带自己定义的栏位的说明 MS SQL Server200 -2008 测试通过 导出所有表,视图(所有表是...
本文实例讲述了C#基于数据库存储过程的AJAX分页实现方法。分享给大家供大家参考。具体如下: 首先我们在数据库(SQL Server)中声明定义存储过程 代码如下:use sales –指定数据库 if(exists(select * from ...
存储过程如同一门程序设计语言,同样包含了数据类型、流程控制、输入和输出和它自己的函数库。 ——————–基本语法——————– 一.创建存储过程 create procedure sp_name() begin ……… ...