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

|