Fy_Recover_Data ———— 用于数据恢复的PLSQL包

来源:互联网 发布:淘宝卖家怎么贷款 编辑:程序博客网 时间:2024/06/08 17:07

http://www.hellodba.com/reader.php?ID=191&lang=CN

 

 

 

Fy_Recover_Data ———— 用于数据恢复的PLSQL包

[English]

作者: fuyuncat

来源: www.HelloDBA.com

日期: 2012-08-14 03:56:53

分享到  新浪微博腾讯微博人人网i贴吧开心网豆瓣淘宝推特FacebookGMailBloggerOrkutGoogle Bookmarks

Fy_Recover_Data是利用Oracle表扫描机制、数据嫁接机制恢复TRUNCATE或者损坏数据的工具包。由纯PLSQL编写。
关于其实现原理和使用示例请参考:移花接木————利用Oracle表扫描机制恢复被Truncate的数据。
包中过程、函数描述如下:

  -- 更新记录:                                                          
  -- 15/08/2012, Fuyuncat:                                                
  --   1. Fixed Bug in Clean_Up_Ts (Not chage TS status correctly)        
  --   2. Added Exception Handle when Restore Data                        
  --   3. Added Parameter in recover_table,                               
  --            to balance Fault Tolerance and Performance                
  --                                                                      
  -- 16/08/2012, Fuyuncat:                                                
  --   1. Enhanced corrupted block processing, get rows as possilbe       
  --            to balance Fault Tolerance and Performance                
  --                                                                      
  -- 17/08/2012, Fuyuncat:                                                
  --   1. Ommit the LOB columns raised ORA-22922 exception       

 

SQL代码
  1. create or replace package FY_Recover_Data is  
  2.   -------------------------------------------------------------------------  
  3.   -- WWW.HelloDBA.COM                                                   ---  
  4.   -- Created By: Fuyuncat                                               ---  
  5.   -- Created Date: 08/08/2012                                           ---  
  6.   -- Email: Fuyuncat@gmail.com                                          ---  
  7.   -- Coyprigh (c), 2012, WWW.HelloDBA.COM All rights reserved.          ---  
  8.   -- Last Version: http://www.HelloDBA.com/download/FY_Recover_Data.zip ---  
  9.   -------------------------------------------------------------------------  
  10.   
  11.   /************************************************************************  
  12.   ** Copy file  
  13.   **  
  14.   ** srcdir: Directory of Source File;  
  15.   ** srcfile: Source File Name;  
  16.   ** dstdir: Directory of Destination File;  
  17.   ** dstfile: Destination File Name;  
  18.   ************************************************************************/  
  19.   procedure copy_file(srcdir varchar2,   
  20.                       srcfile varchar2,   
  21.                       dstdir varchar2 default null,   
  22.                       dstfile varchar2 default null);  
  23.   
  24.   /************************************************************************  
  25.   ** Recover Table Data From Special Data File;  
  26.   **  
  27.   ** oriobjid: Object Id of Table to be Recovered;  
  28.   ** recowner: Owner of Table to be used as recovering dummy table;  
  29.   ** rectable: Name of Table to be used as recovering dummy table;  
  30.   ** rstowner: Owner of Table to store the recovered data;  
  31.   ** rsttable: Name of Table to store the recovered data;  
  32.   ** srcdir: Directory of the Data File to be recovered;  
  33.   ** srcfile: Name of the Data File to be recovered;  
  34.   ** recdir: Directory of Data File that rectable is stored;  
  35.   ** recfile: Name of Data File that rectable is stored;  
  36.   ** copydir: Directory of Copy of Data File that rectable is stored;  
  37.   ** coryfile: Name of Copy of Data File that rectable is stored;  
  38.   ** blksz: Block size of the Tablespace Storing the Table to be recovered;  
  39.   ************************************************************************/  
  40.   procedure recover_table(oriobjid number,  
  41.                           recowner varchar2,   
  42.                           rectab varchar2,   
  43.                           rstowner varchar2,   
  44.                           rsttab varchar2,   
  45.                           srcdir varchar2,   
  46.                           srcfile varchar2,   
  47.                           recdir varchar2,   
  48.                           recfile varchar2,   
  49.                           copydir varchar2,   
  50.                           copyfile varchar2,   
  51.                           blksz number default 8192);  
  52.   
  53.   /************************************************************************  
  54.   ** Recover Table Data From Data Files of Targe Table;  
  55.   **  
  56.   ** tgtowner: Owner of Target Table to be recovered;  
  57.   ** tgttable: Name of Target Table to be recovered;  
  58.   ** recowner: Owner of Table to be used as recovering dummy table;  
  59.   ** rectable: Name of Table to be used as recovering dummy table;  
  60.   ** rstowner: Owner of Table to store the recovered data;  
  61.   ** rsttable: Name of Table to store the recovered data;  
  62.   ** srcdir: Directory of the Data File to be recovered;  
  63.   ** srcfile: Name of the Data File to be recovered;  
  64.   ** recdir: Directory of Data File that rectable is stored;  
  65.   ** recfile: Name of Data File that rectable is stored;  
  66.   ** copydir: Directory of Copy of Data File that rectable is stored;  
  67.   ** coryfile: Name of Copy of Data File that rectable is stored;  
  68.   ** blksz: Block size of the Tablespace Storing the Table to be recovered;  
  69.   ************************************************************************/  
  70.   procedure recover_table(tgtowner varchar2,  
  71.                           tgttable varchar2,  
  72.                           recowner varchar2,   
  73.                           rectab varchar2,   
  74.                           rstowner varchar2,   
  75.                           rsttab varchar2,   
  76.                           srcdir varchar2,   
  77.                           recdir varchar2,   
  78.                           recfile varchar2,   
  79.                           copydir varchar2,   
  80.                           copyfile varchar2,   
  81.                           blksz number default 8192);  
  82.   
  83.   /************************************************************************  
  84.   ** Prepare the data files to be use during recovering;  
  85.   **  
  86.   ** tgtowner: Owner of Target Table to be recovered;  
  87.   ** tgttable: Name of Target Table to be recovered;  
  88.   ** datapath: Absolute path of Data Files;  
  89.   ** datadir: Directory to be created referring to datapath;  
  90.   ** rects: Tablespace to store the recovering dummy table;  
  91.   ** recfile: Name of Data File to store the recovering dummy table;  
  92.   ** rstts: Tablespace to store table storing the recovered data;  
  93.   ** rstfile: Name of Data File to store restoring table;  
  94.   ** blksz: Block size of the Tablespace Storing the Table to be recovered;  
  95.   ************************************************************************/  
  96.   procedure prepare_files(tgtowner varchar2,  
  97.                           tgttable varchar2,  
  98.                           datapath in varchar2,  
  99.                           datadir in out varchar2,  
  100.                           rects out varchar2,   
  101.                           recfile out varchar2,   
  102.                           rstts out varchar2,   
  103.                           rstfile out varchar2,   
  104.                           blksz out varchar2);  
  105.   
  106.   /************************************************************************  
  107.   ** Clean up existing Recover and Restore Tablespace. Drop tables in the tablespaces  
  108.   **  
  109.   ** rects: Recover tablespace name  
  110.   ** rects: Restore tablespace name, default NULL, will not do cleaning up;  
  111.   ************************************************************************/  
  112.   procedure clean_up_ts(rects varchar2,   
  113.                         rstts varchar2 default null);  
  114.   
  115.   /************************************************************************  
  116.   ** Fill Blocks of Recovering Table, to format the blocks;  
  117.   **  
  118.   ** tgtowner: Owner of Target Table to be recovered;  
  119.   ** tgttable: Name of Target Table to be recovered;  
  120.   ** datadir: Directory to be created referring to datapath;  
  121.   ** rects: Tablespace to store the recovering dummy table;  
  122.   ** recfile: Name of Data File to store the recovering dummy table;  
  123.   ** rstts: Tablespace to store table storing the recovered data;  
  124.   ** blks: Number blocks in Initial Extent of the recovering dummy table;  
  125.   ** recowner: Owner of Table to be used as recovering dummy table;  
  126.   ** rstowner: Owner of Table to store the recovered data;  
  127.   ** rectable: Name of Table to be used as recovering dummy table;  
  128.   ** rsttable: Name of Table to store the recovered data;  
  129.   ** coryfile: Name of Copy of Data File that rectable is stored;  
  130.   ************************************************************************/  
  131.   procedure fill_blocks(tgtowner varchar2,  
  132.                         tgttable varchar2,  
  133.                         datadir varchar2,   
  134.                         rects varchar2,  
  135.                         recfile varchar2,  
  136.                         rstts varchar2,  
  137.                         blks number default 8,  
  138.                         recowner varchar2 default user,  
  139.                         rstowner varchar2 default user,  
  140.                         rectab out varchar2,  
  141.                         rsttab out varchar2,  
  142.                         copyfile out varchar2);  
  143. end FY_Recover_Data;  

点击此处:下载源代码

--- Fuyuncat ---

上一篇:OraTracer升级下一篇:《Oracle 高性能SQL引擎剖析:SQL优化与调优机制详解》随书脚本

 

原创粉丝点击