sql plus 搶救資料(測),sqlplus

來源:互聯網
上載者:User

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內,然後儲存就可以了。
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.