有索引

--运行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. (诊断)为GitHub添加SSH key时出现“Could not open a connection to your authentication agent”错误的应对方案(转)

    在为windows 环境下的github账户添加SSH key时,需要在Git Bash执行如下命令: 第一步:检查已有的SSH keys $ ls -al ~/.ssh 第二步:生成新的SSH ke ...

  2. Deamon Thread 讲解

    The daemon thread's life cycle is same with the life cycle of the application which starts this daem ...

  3. css概述

    前言 1.CSS    cascading   stylesheet  级联样式表 ,外观显示(页面内容显示的方式).CSS文档以.css作为后缀    2.w3c推荐页面文件定义      数据和结 ...

  4. perl $d = encode_utf8($r); $f = decode_json($d)

    [root@dr-mysql01 ~]# cat a1.pl my $url="http://192.168.32.101:3000/api/getcode?env=zj&phone ...

  5. 修改Android 4.2.2的原生Camera引出的java.lang.UnsatisfiedLinkError: Native method not found,及解决方法

    修改Android 4.2.2的原生Camera应用,做一些定制,将Camera的包名从之前的 package com.android.* 修改成了com.zhao3546.*. 调整后,应用可以正常 ...

  6. Qt 打包发布 不能动态打开图片显示问题

    刚写完一个图片标注工具, 发现在我电脑可以实时打开照片显示出来,在他人的电脑上就不可以. 原来Qt默认只识别png 具体解决方案: 原地址:http://blog.csdn.net/goodlixue ...

  7. Delphi中运行时改变panel的位置及大小(通过wm_SysCommand来实现)

    procedure TForm1.pnl1MouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Int ...

  8. uva 568(数学)

    题解:从1開始乘到n,由于结果仅仅要最后一位.所以每乘完一次,仅仅要保留后5位(少了值会不准确,刚開始仅仅保留了一位.结果到15就错了,保留多了int会溢出,比方3125就会出错) 和下一个数相乘,接 ...

  9. FZOJ2110: Star

    Problem Description Overpower often go to the playground with classmates. They play and chat on the ...

  10. 由于“Table(T_Test)”没有主键,因此无法在其上执行 Create、Update 或 Delete 操作

    在使用Linq To Sql查询的时候,遇到这么个问题,如图所示: 出现这个问题的原因就像途中所说的——没有主键(现在终于初步知道“为什么别人常说数据库中的逻辑主键是为了在编程中方便使用”的原因了,估 ...