数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
不同字符集倒库的方法

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

第一步: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)

 




相关文章

相关软件