`
wsql
  • 浏览: 11782525 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

如何恢复DROP的存储过程

 
阅读更多
如何恢复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(创建语句)

分享到:
评论

相关推荐

    SQL存储过程实例.doc

    --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...

    SQL Server数据库实验_存储过程与触发器设计.docx

    使用CREATE PROCEDURE语句创建存储过程,ALTER PROCEDURE语句修改存储过程,DROP PROCEDURE语句删除存储过程,存储过程有不带参数的、有带输入参数的、有带输出参数(output)的,还可以有带返回值的。创建好的存储...

    VC 删除已存在的存储过程.rar

    VC 演示在程序中删除已存在的存储过程,VC6存储过程相关操作实例,删除方法很简单,创建对象,如下代码示:  UpdateData(true);  BOOL result;  ADOConn m_AdoConn;  m_AdoConn.OnInitADOConn();  _bstr_t sql;...

    SQL导出MySQL单个存储过程.txt

    SQL语句对单个的MySQL存储过程导出 首先确保参数secure-file-priv='' 表示不限制mysqld在任意目录的导入导出 打开my.cnf或my.ini,加入如下语句后重启mysql服务。 secure_file_priv='' sql语法只修改下面的...

    数据库管理与应用 8.2.6 使用DROP PROCEDURE语句删除存储过程.pdf

    数据库管理与应用 8.2.6 使用DROP PROCEDURE语句删除存储过程.pdf 学习资料 复习资料 教学资源

    在db2数据库写存储过程

    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 ...

    sql创建同名存储过程

    CREATE PROC [ EDURE ] procedure_name [ ; number ] number 是可选的整数,用来对同名的过程分组,以便用一条 DROP PROCEDURE 语句即可将同组的过程一起除去。

    mysql数据存储过程参数实例详解

    MySQL 存储过程参数有三种类型:in、out、inout。它们各有什么作用和特点呢? 一、MySQL 存储过程参数(in) MySQL 存储过程 “in” 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数...

    sql存储过程详解

    1,不带参数的存储过程 2,带输入参数的存储过程 3,带输入和输出参数的存储过程 4,带返回值的存储过程 不带参数的存储过程 例如,以下存储过程返回Employees表中所有职员的记录。 存储过程代码: USE ...

    socket身份校验(存储过程)mysql数据库

    用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 ...

    sql 存储过程,创建事务

    以银行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

    Mysql数据库存储过程基本语法讲解

    结尾表示确认输入并执行语句,但在存储过程中;不是表示结束,因此可以用该命令将;号改为//表示确认输入并执行。存储过程如同一门程序设计语言,同样包含了数据类型、流程控制、输入和输出和它自己的函数库。 一....

    sqlserver存储过程

    ----------------------------------------带输出参数存储过程--------------------------------------- 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...

    MySQL 存储过程中执行动态SQL语句的方法

    drop PROCEDURE if exists my_procedure; create PROCEDURE my_procedure() BEGIN declare my_sqll varchar(500);... 您可能感兴趣的文章:mysql 存储过程中变量的定义与赋值操作mysql存储过程详解mysq

    SQL2005入门到精通(10)

    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 ...

    MySQL存储过程的优化实例

    如果项目的存储过程较多,书写又没有一定的规范,将会影响以后的系统维护困难和大存储过程逻辑的难以理解,另外如果数据库的数据量大或者项目对存储过程的性能要求很,就会遇到优化的问题,否则速度有可能很慢,经过...

    可以自定义导出数据库的表结构(视图)的一个存储过程

    可以自定义导出数据库的表结构(视图)的一个存储过程 功能: 1.可以完整导出表结构(含主键,索引) 2.可以导出视图SQL语法 3.可以带自己定义的栏位的说明 MS SQL Server200 -2008 测试通过 导出所有表,视图(所有表是...

    C#基于数据库存储过程的AJAX分页实例

    本文实例讲述了C#基于数据库存储过程的AJAX分页实现方法。分享给大家供大家参考。具体如下: 首先我们在数据库(SQL Server)中声明定义存储过程 代码如下:use sales –指定数据库    if(exists(select * from ...

    mysql存储过程语法及实例

    存储过程如同一门程序设计语言,同样包含了数据类型、流程控制、输入和输出和它自己的函数库。  ——————–基本语法——————–  一.创建存储过程  create procedure sp_name()  begin  ………  ...

Global site tag (gtag.js) - Google Analytics