有索引

--运行plsql脚本

DECLARE

 TYPE RowIDTab ISTABLE OF ROWID INDEXBY BINARY_INTEGER;

 

 CURSORc1 IS select /*+ index(xifenfei ind_xifenfei) */ rowid

 fromchf.xifenfei

 whereobject_id isNOT NULL;

 

 r RowIDTab;

 rows NATURAL := 20000;

 bad_rows number := 0 ;

 errors number;

 error_code number;

 myrowid rowid;

BEGIN

 OPENc1;

 LOOP

   FETCH c1 BULK COLLECT INTOr LIMIT rows;

   EXITWHENr.count=0;

   BEGIN

    FORALL i INr.FIRST..r.LASTSAVE EXCEPTIONS

     insertinto chf.xifenfei_new      

     select/*+ ROWID(A) */ *

     fromchf.xifenfei A whererowid = r(i);

   EXCEPTION

   whenOTHERS then

    BEGIN

     errors := SQL%BULK_EXCEPTIONS.COUNT;

     FORerr1 IN1..errors LOOP

       error_code := SQL%BULK_EXCEPTIONS(err1).ERROR_CODE;

       if error_code in(1410, 8103) then

         myrowid := r(SQL%BULK_EXCEPTIONS(err1).ERROR_INDEX);

         bad_rows := bad_rows + 1;

         insertinto chf.bad_rows values(myrowid, error_code);

       else

         raise;

       endif;

     ENDLOOP;

     END;

   END;

  commit;

 ENDLOOP;

 commit;

 CLOSEc1;

 dbms_output.put_line('Total Bad Rows: '||bad_rows);

END;

/

没有索引

--找回记录

setserveroutput on

setconcat off        

DECLARE 

 nrows number; 

 rid rowid; 

 dobj number; 

 ROWSPERBLOCK number; 

BEGIN

 ROWSPERBLOCK:=1000; --估算最大的一个块中记录条数

 nrows:=0;

 

 selectdata_object_id  intodobj  

 fromdba_objects  

 whereowner = 'CHF' 

 andobject_name = 'T_XIFENFEI'

-- and subobject_name = '<table partition>'  Add this condition if table is partitioned 

 ;

 

 fori in(selectrelative_fno, block_id, block_id+blocks-1 totblocks            

           fromdba_extents            

           whereowner = 'CHF'             

             andsegment_name = 'T_XIFENFEI' 

-- and partition_name = '<table partition>' Add this condition if table is partitioned

-- and file_id != <OFFLINED DATAFILE> This condition is only used if a datafile needs to be skipped due to ORA-376 (A)

          orderby extent_id)  

 loop  

   forbr ini.block_id..i.totblocks loop  

    forj in1..ROWSPERBLOCK loop 

    begin

      rid := dbms_rowid.ROWID_CREATE(1,dobj,i.relative_fno, br , j-1); 

      insertinto CHF.T_XIFENFEI_NEW      

      select/*+ ROWID(A) */ *        

      fromCHF.T_XIFENFEI A  

      whererowid = rid;          

      if sql%rowcount = 1 thennrows:=nrows+1; endif; 

      if (mod(nrows,10000)=0) thencommit;endif; 

    exceptionwhenothers thennull;

    end;

    endloop; 

  endloop; 

 endloop; 

 COMMIT;

 dbms_output.put_line('Total rows: '||to_char(nrows));

END;

/

 

两个不错的博客

http://www.xifenfei.com/4160.html(核心思想利用rowid读取块内容)

http://www.hellodba.com/reader.php?ID=216&lang=CN(核心思想。数据块替换与拷贝+查询)

sql plus 抢救数据(測)的更多相关文章

  1. SQL SERVER导入数据到ORACLE的方法总结

    我们偶尔会有将数据从SQL SERVER导入到ORACLE当中的这种需求,那么这种跨数据库导数有那些方法呢?这些方法又有那些利弊呢? 下面比较肤浅的总结了一些可行的方法. 1:生成SQL脚本然后去OR ...

  2. SQL Server 变更数据捕获(CDC)监控表数据

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现过程(Realization) 补充说明(Addon) 参考文献(References) ...

  3. SQL Server定时自动抓取耗时SQL并归档数据发邮件脚本分享

    SQL Server定时自动抓取耗时SQL并归档数据发邮件脚本分享 第一步建库和建表 USE [master] GO CREATE DATABASE [MonitorElapsedHighSQL] G ...

  4. SQL Server 迁移数据到MySQL

    一.背景 由于项目开始时候使用的数据库是SQL Server,后来把存储的数据库调整为MySQL,所以需要把SQL Server的数据转移到MySQL:由于涉及的表比较多,所以想在MySQL中生成对应 ...

  5. 在SQL Server中将数据导出为XML和Json

        有时候需要一次性将SQL Server中的数据导出给其他部门的也许进行关联或分析,这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做 ...

  6. PHP如何通过SQL语句将数据写入MySQL数据库呢?

    1,php和MySQL建立连接关系 2,打开 3,接受页面数据,PHP录入到指定的表中 1.2两步可直接使用一个数据库链接文件即可:conn.php <?phpmysql_connect(&qu ...

  7. 《SQL Server企业级平台管理实践》读书笔记——SQL Server中数据文件空间使用与管理

    1.表和索引存储结构 在SQL Server2005以前,一个表格是以一个B树或者一个堆(heap)存放的.每个B树或者堆,在sysindexes里面都有一条记录相对应.SQL Server2005以 ...

  8. 通过Sql语句导数据

    在通过SQL Server向导中的SQL语句导数据时,默认情况下源表中的nvarchar字段类型会变成202,解决此问题的方法是,要重新选择一下对应的数据接收表.

  9. 如何使用 SQL Developer 导出数据

    完成此方法文档后,您应该能够了解: 如何使用 SQL Developer 将数据导出为各种文件格式 如何导出模式中的对象定义 目录 1. 简介 2. 软件要求 3. 导出数据 4. 导出对象定义 5. ...

随机推荐

  1. Homebrew 1.0.0 发布,MacOS 上的包管理器

    神器,没有它不知道怎么用macos https://www.oschina.net/news/77367/homebrew-1-0-0

  2. Learning Lua Programming (4) Cocos2d-x中Lua编程(一)

    刚开始接触cocos2d-x 下的Lua编程,主要参看了李华明大神的博客中的介绍,http://blog.csdn.net/xiaominghimi/article/category/1155088  ...

  3. 不可表示的数[x/2] + y + x * y

    前端是时间在庞果网上看到不可表示的数的编程题(如下),我自己也试着解答了一下,写的算法虽然没有没有错,但是跑了一些还只是跑到a8,后来到自己整理一下网上的解答过程,虽然解答写的很清晰,但是有些知识还是 ...

  4. 【E2LSH源代码分析】p稳定分布LSH算法初探

    上一节,我们分析了LSH算法的通用框架,主要是建立索引结构和查询近似近期邻.这一小节,我们从p稳定分布LSH(p-Stable LSH)入手,逐渐深入学习LSH的精髓,进而灵活应用到解决大规模数据的检 ...

  5. vbox要手动mount才能挂载windows的共享文件夹(好用,不用安装samba了)

    mount -t vboxsf BaiduShare /mnt/bdshare/ 我按照这篇文章成功: http://www.wuji8.com/meta/448016166.html 其它参考: h ...

  6. 基于visual Studio2013解决面试题之1405归并排序

     题目

  7. Java+7入门经典 - 6 扩展类与继承 Part 1/2

    第6章 扩展类与继承 面向对象编程的一个重要特性: 允许基于已定义的类创建新的类; 6.1 使用已有的类 派生 derivation, 派生类 derived class, 直接子类 direct s ...

  8. Codility上的问题 (16) Omicron 2012

    比较无聊的题,求斐波那契数的第N^M项. f(0) = 0, f(1) = 1, f(n) = f(n - 1) + f(n - 2),结果对10000103取模. N, M在[0..10^7]之间. ...

  9. 一个关于native sql的程序

    *&---------------------------------------------------------------------* *& Report ZHR_BPM11 ...

  10. VS关闭Browser Link

    原文:VS关闭Browser Link 这是VS2013的一个新功能,叫Browser Link,基于SignalR. 它可以实现VS IDE和你的程序的双向通讯,在IDE编辑代码即刻将修改发送到浏览 ...