有索引

--运行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. yii phpexcel自己主动生成文件保存到server上

    近期再整一个报表任务,每天必须把表导出来按excel格式发送邮件给管理员,利用phpexcel把表保存到server上.然后再通过phpmailer发送就ok. ob_end_clean();     ...

  2. Android 点亮屏幕

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  3. 基于visual Studio2013解决C语言竞赛题之1040因数分解

     题目 解决代码及点评 /* 将一个数M分解为质因数(M≠0). */ #include <stdio.h> #include <stdlib.h> void main() ...

  4. NSUserDefaults设置bool值重新启动后bool仅仅设置丢失问题

    今天使用NSUserDefaults保存bool至重新启动后发现bool值没有保存对 NSUserDefaults *ud = [NSUserDefaults standardUserDefaults ...

  5. 体验魅力Cognos BI 10 系列,第1 部分: 第一次安装

    体验魅力Cognos BI 10 系列,第1 部分: 第一次安装吴敏达, 信息管理软件高级技术顾问, IBM简介: 本系列教程旨在帮助您通过实际动手掌握Cognos BI 10.1 的主要功能.在这一 ...

  6. ASP.NET中IsPostBack详解(转载)

    1.IsPostBack介绍Page.IsPostBack是一个标志:当前请求是否第一次打开. 调用方法为:Page.IsPostBack或者IsPostBack或者this.IsPostBack或者 ...

  7. 【linux】内核编译

    原创,转载时请注明,谢谢.邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:http://blog.cs ...

  8. Qt之文件操作 QFile

    原地址:http://blog.csdn.net/liuhongwei123888/article/details/6084761 今天学习QT的文件操作 1.QIODevice直接继承自QObjec ...

  9. QT在Windows控制台下输出

    原地址:http://blog.csdn.net/fjb2080/article/details/9013047 在windows的控制台下输出,需要在pro文件中加入: CONFIG += cons ...

  10. CSS3实现时间轴效果

    原文:CSS3实现时间轴效果 最近打开电脑就能看到极客学院什么新用户vip免费一个月,就进去看看咯,这里就不说它的课程怎么滴了,里面实战路径图页面看到了这个效果: 有点像时间轴的赶脚,而且每一块鼠标悬 ...