不同字元集倒庫的方法

來源:互聯網
上載者:User

第一步:EXP 原 US7ASCII資料庫中的SCOTT使用者。
第二步:EXP 原US7ASCII 資料庫中的ZHAOBOYI使用者。
第三步:CREATE NEW DATABASE(CHARACTER SET SIMPLIFIED CHINESE_CHINA.ZHS16GBK),
所有的路徑與原
資料庫相同。

第四步:將ZHS16GBK 中的INIT。ORA COPY INIT。ORA。BAK。
第五步:將US7ASCII 中的INIT。ORA COPY ZHS16GBK 修改相應參數。
第六步:產生ZHS16GBK 中的SCOTT 使用者,授權,EXP ZHS16GBK 中的SCOTT 使用者。
第七步:  產生ZHS16GBK 中的ZHAOBOYI 使用者,EXP ZHS16GBK 中的ZHAOBOYI 使用者。
第八步:用ULTRAEDIT 分別開啟(US7ASCII)以及(ZHS16GBK)SCOTT 使用者,將前5行中的U
S7ASCII 不同處改掉。
第九步:相應的做ZHAOBOYI 使用者。
第十步:在ZHS16GBK中,執行SYS 使用者的OWALOAD。SQL ,對HTP。P授權。
第十一步:做IMP,把原有的資料庫倒入到新的資料庫。
第十二步:解決大欄位問題。
首先在原資料庫中執行預存程序 fwrite_clob_NIU,將含有大欄位的表產生到檔案中,接著
,在新資料庫中編譯執行fupdate_clob_text,
將大欄位倒回到新資料庫中。
附錄:
1。預存程序:FWRITE——CLOB——NIU
procedure       fwrite_clob_NIU as
    CURSOR c_lt IS
    SELECT c.text,c.info_id
    FROM info_ctext c
  where info_id <= 120
    --change7.16 WHERE  info_id <=100
    order by info_id asc;
/*
    1000-1100 F
    1100-1600 OK
    1600-1630 OK
    1629-1640 OK
    1640-1660 F
    1660-1668 OK
    1669 F
    1670-1750 OK
*/   
    Str                 VARCHAR2(32767) := Null;
    Position            INTEGER         := 1;
    New_Position        INTEGER         := 1;
Pat varchar2(80) := 'd:\writeclob';
--change716 Pat varchar2(80) := '/export/home0/ora8i/doc/ch';
    Save_File   utl_file.file_type;
    Result      BOOLEAN             := FALSE;
Dir_Delimiter   VARCHAR2(200) := '\';
--change 7.16    Dir_Delimiter   VARCHAR2(200) := '/';  -- NOTE: Use '\' for Win
dows NT
    p_Filename VARCHAR2(200);
    v_offset integer;
    v_amount integer;
    v_buffer varchar2(30240);
BEGIN
    v_amount := 30240;
    IF SUBSTR( Pat, LENGTH( Pat ), 1 ) != Dir_Delimiter THEN
       Pat := Pat || Dir_Delimiter; END IF;
    BEGIN
      FOR r IN c_lt
      LOOP
      IF r.text is not null then
   p_Filename := r.info_id ||'.dat';
   New_Position:=1;
   Position:=1;
      Save_File := utl_file.fopen( Pat, p_Filename, 'w' );
        if DBMS_LOB.INSTR( r.text, CHR(10), Position ) = 0 then
         begin
              V_OFFSET := 1;
              v_buffer := '';
         loop
 
            dbms_lob.read(r.text,v_amount,v_offset,v_buffer);
 
            v_offset := v_offset + v_amount;
           utl_file.put( Save_File,  v_buffer );
          --    htp.p(v_buffer);
          -- htp.p('jjjj');
       end loop;
        exception
         when no_data_found then
          null; 
      end;
        
          -- htp.p('111');
          -- Str := DBMS_LOB.SUBSTR( r.text,1)||CHR(10);
          -- HTP.P(STR);
        end if;  
        WHILE( New_Position != 0 )
        LOOP
          New_Position := DBMS_LOB.INSTR( r.text, CHR(10), Position );

          Str := DBMS_LOB.SUBSTR( r.text, New_Position - Position, Position );
         -- HTP.P('STR=');
         -- HTP.P(STR);
          Position := New_Position + 1;

          --change 7.17 IF New_Position != 0 THEN
             utl_file.put_line( Save_File, REPLACE( Str, CHR(10), Null ) );
         -- else
            
           --        utl_file.put_line( Save_File,  Str );
          -- change 7.17
          -- htp.p(new_position);
         -- END IF;
         END LOOP;
  UTL_FILE.FCLOSE(Save_File);
  htp.p('<center><h2>The file  '||p_Filename||'    generated!</h2></center>');
  end if;
      END LOOP;
     
 EXCEPTION
   WHEN NO_DATA_FOUND THEN
     htp.p('<center><h2>The file  '||p_Filename||'    Failed!</h2></center>');
    end;
END fwrite_clob_niu;
附錄二:預存程序fupdate_clob_text
procedure       fupdate_clob_text as
    CURSOR c_lt IS
    SELECT c.text,c.info_id
    FROM info_ctext c
 -- where info_id = 112
   where ((info_id >= 1 and info_id <= 30) or
   (info_id >=30 and info_id <= 60) or
   (info_id >=60 and info_id <= 90) or
   (info_id >=90 and info_id <= 120))
   
  
   /* --CHANGE 716 WHERE type not in ('B','C','V','A','E') and ((info_id >=10000
 and info_id <20000) or
    (info_id >=1100 and info_id <1601)  or
    (info_id >=1600 and info_id <1630)  or
    (info_id >=1660 and info_id <1668) or
    info_id >=1670  or
    (info_id >=0 and info_id <501))
    */
    order by info_id asc;
/*
    1000-1100 F
    1100-1600 OK
    1600-1630 OK
    1629-1640 OK
    1640-1660 F
    1660-1668 OK
    1669 F
    1670-1750 OK
*/ 
    Tmp             CLOB; 
    Pat varchar2(80) := 'd:\writeclob';
  -- CHANGE 7.16 Pat varchar2(80) := '/export/home0/ora8i/doc/ch';
    Save_File   utl_file.file_type;
    Result      BOOLEAN             := FALSE;
    Dir_Delimiter   VARCHAR2(200) := '\';
    -- change 7.16 Dir_Delimiter   VARCHAR2(200) := '/';  -- NOTE: Use '\' for W
indows NT
    p_Filename VARCHAR2(200);
BEGIN
    htp.p('我們');
   
    IF SUBSTR( Pat, LENGTH( Pat ), 1 ) != Dir_Delimiter THEN
       Pat := Pat || Dir_Delimiter; END IF;
      FOR r IN c_lt
      LOOP      
  begin
     p_Filename :=to_char(r.info_id)||'.dat';
          UPDATE info_ctext SET text = ' '
           WHERE info_id=r.info_id;
         COMMIT;
              
          SELECT text INTO Tmp FROM info_ctext
         WHERE info_id = r.info_id  FOR UPDATE;


     -- DBMS_LOB.TRIM( Tmp, 0 );

       Result := Load_File( Pat, p_Filename, Tmp );

       IF Result THEN
          UPDATE info_ctext SET text = Tmp
           WHERE info_id=r.info_id;
         COMMIT;
       END IF;
 
        end;
       END LOOP;   
 EXCEPTION
   WHEN NO_DATA_FOUND THEN
     htp.p('<center><h2>The file  '||p_Filename||'    Failed!</h2></center>');

       
END fupdate_clob_text;
附錄三:新資料庫字元集
NLS——LANG
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
原資料庫字元集
AMERICAN_AMERICA.US7ASCII.


______________________________________

===================================================================
新浪免費電子郵箱 (http://mail.sina.com.cn)
訂閱手機簡訊頭條新聞,天天獎多款時尚手機! (http://dailynews.sina.com.cn/c/272235.html)
訂閱手機簡訊頂級新聞每天得新款手機大獎! (http://dailynews.sina.com.cn/c/266499.html)

 


相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。