分享
 
 
 

不同字符集倒库的方法

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有