欢迎投稿

今日深度:

sql plus 抢救数据(测),sqlplus

sql plus 抢救数据(测),sqlplus


有索引
--执行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连接ORACLE数据库服务器?

测试连接成功,说明监听程序工作正常。
(1)若在图形界面方式下,则需在主机字符串(Host string)中指明连接描述符。
如果你采用的是默认安装,没有指明连接描述符,通常为orcl。
(2)在命令行方式下,连接命令的格式是:conn username/password@connect_identifier
username:用户名
password:口令
connect_identifier:连接描述符
如果没有指定连接描述符,则连接到系统环境变量ORACLE_SID所指定的数据库。
如果没有设定ORACLE_SID,则连接到的数据库。
如果你的机器上安装过两个或两个以上数据库,那必须在命令中加上@连接描述符。

有问题再联系。祝一切顺利。
 

在登陆sql plus时老是出现错误提示 ora-12154:tns:不可以解析指定的连接标识符

pl/sql 每当oracle client中service name发生变化,都会按照client安装目录下最新的tnsnames.ora,去作为它的读取文件;如果该文件在卸载oracle client后被手工删除或手工改动过后,未在oracle client中修改;则会报“ORA-12514:tns:无法解析指定的连接标识符”错误。

解决方法:

1、用tnsping <service_name>检测 plSQL登陆时database(数据库)别名是否可正确解析,如报“TNS-03505:无法解析名称”,则此database别名有冲突,需更改。

2、手工改动tnsnames.ora后,在oracle client中修改主机名(“对象”--“将数据库添加到树”--“从本地的……”,然后把错误主机名删除或从树中移除)

3、重新打开plSQL,用正确的database别名登陆,即恢复正常

4、如仍有问题,不登陆进入plSQL界面,进入"tools”--"Preferences"--"Oracle"--"Connection",把"home”(oracle主目录名)里的数据清空,应用后,重新启动plSQL即可。

附录:在做以上更改后oracle自带的sqlPLUS,可能会出现不能正常登陆远程服务器的情况;因为其访问的是database下的tnsnames.ora文件,目录与client的不一样,默认为 X(盘符):\oracle\product\10.2.0\db_1\NETWORK\ADMIN\tnsnames.ora

解决方法:只需将client下tnsnames.ora中定义的主机字符串(service_name)的命令行复制到database 下的tnsnames.ora内,然后保存就可以了。
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/2261.html NewsArticle sql plus 抢救数据(测),sqlplus 有索引 --执行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...
相关文章
    暂无相关文章
评论暂时关闭