仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 816|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL教程之分歧字符集倒库的办法

[复制链接]
小女巫 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:25:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
目前的方案是用mysqlbinlog工具,增加一个Flashback参数,输出结果为一个新的binlog文件――姑且叫做flashbacklog,这个flashbacklog顺序执行,可制定某张表和执行到哪个pos,来实现数据库的闪回。
第一步:EXP原US7ASCII数据库中的SCOTT用户。
第二步:EXP原US7ASCII数据库中的ZHAOBOYI用户。
第三步:CREATENEWDATABASE(CHARACTERSETSIMPLIFIEDCHINESE_CHINA.ZHS16GBK),
一切的路径与原
数据库不异。

第四步:将ZHS16GBK中的INIT。ORACOPYINIT。ORA。BAK。
第五步:将US7ASCII中的INIT。ORACOPYZHS16GBK修正响应参数。
第六步:天生ZHS16GBK中的SCOTT用户,受权,EXPZHS16GBK中的SCOTT用户。
第七步:天生ZHS16GBK中的ZHAOBOYI用户,EXPZHS16GBK中的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
procedurefwrite_clob_NIUas
CURSORc_ltIS
SELECTc.text,c.info_id
FROMinfo_ctextc
whereinfo_id<=120
--change7.16WHEREinfo_id<=100
orderbyinfo_idasc;
/*
1000-1100F
1100-1600OK
1600-1630OK
1629-1640OK
1640-1660F
1660-1668OK
1669F
1670-1750OK
*/
StrVARCHAR2(32767):=Null;
PositionINTEGER:=1;
New_PositionINTEGER:=1;
Patvarchar2(80):=d:writeclob;
--change716Patvarchar2(80):=/export/home0/ora8i/doc/ch;
Save_Fileutl_file.file_type;
ResultBOOLEAN:=FALSE;
Dir_DelimiterVARCHAR2(200):=;
--change7.16Dir_DelimiterVARCHAR2(200):=/;--NOTE:UseforWin
dowsNT
p_FilenameVARCHAR2(200);
v_offsetinteger;
v_amountinteger;
v_buffervarchar2(30240);
BEGIN
v_amount:=30240;
IFSUBSTR(Pat,LENGTH(Pat),1)!=Dir_DelimiterTHEN
Pat:=Pat||Dir_Delimiter;ENDIF;
BEGIN
FORrINc_lt
LOOP
IFr.textisnotnullthen
p_Filename:=r.info_id||.dat;
New_Position:=1;
Position:=1;
Save_File:=utl_file.fopen(Pat,p_Filename,w);
ifDBMS_LOB.INSTR(r.text,CHR(10),Position)=0then
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);
endloop;
exception
whenno_data_foundthen
null;
end;

--htp.p(111);
--Str:=DBMS_LOB.SUBSTR(r.text,1)||CHR(10);
--HTP.P(STR);
endif;
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;

--change7.17IFNew_Position!=0THEN
utl_file.put_line(Save_File,REPLACE(Str,CHR(10),Null));
--else

--utl_file.put_line(Save_File,Str);
--change7.17
--htp.p(new_position);
--ENDIF;
ENDLOOP;
UTL_FILE.FCLOSE(Save_File);
htp.p(<center><h2>Thefile||p_Filename||generated!</h2></center>);
endif;
ENDLOOP;

EXCEPTION
WHENNO_DATA_FOUNDTHEN
htp.p(<center><h2>Thefile||p_Filename||Failed!</h2></center>);
end;
ENDfwrite_clob_niu;
附录二:存储历程fupdate_clob_text
procedurefupdate_clob_textas
CURSORc_ltIS
SELECTc.text,c.info_id
FROMinfo_ctextc
--whereinfo_id=112
where((info_id>=1andinfo_id<=30)or
(info_id>=30andinfo_id<=60)or
(info_id>=60andinfo_id<=90)or
(info_id>=90andinfo_id<=120))


/*--CHANGE716WHEREtypenotin(B,C,V,A,E)and((info_id>=10000
andinfo_id<20000)or
(info_id>=1100andinfo_id<1601)or
(info_id>=1600andinfo_id<1630)or
(info_id>=1660andinfo_id<1668)or
info_id>=1670or
(info_id>=0andinfo_id<501))
*/
orderbyinfo_idasc;
/*
1000-1100F
1100-1600OK
1600-1630OK
1629-1640OK
1640-1660F
1660-1668OK
1669F
1670-1750OK
*/
TmpCLOB;
Patvarchar2(80):=d:writeclob;
--CHANGE7.16Patvarchar2(80):=/export/home0/ora8i/doc/ch;
Save_Fileutl_file.file_type;
ResultBOOLEAN:=FALSE;
Dir_DelimiterVARCHAR2(200):=;
--change7.16Dir_DelimiterVARCHAR2(200):=/;--NOTE:UseforW
indowsNT
p_FilenameVARCHAR2(200);
BEGIN
htp.p(我们);

IFSUBSTR(Pat,LENGTH(Pat),1)!=Dir_DelimiterTHEN
Pat:=Pat||Dir_Delimiter;ENDIF;
FORrINc_lt
LOOP
begin
p_Filename:=to_char(r.info_id)||.dat;
UPDATEinfo_ctextSETtext=
WHEREinfo_id=r.info_id;
COMMIT;

SELECTtextINTOTmpFROMinfo_ctext
WHEREinfo_id=r.info_idFORUPDATE;


--DBMS_LOB.TRIM(Tmp,0);

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

IFResultTHEN
UPDATEinfo_ctextSETtext=Tmp
WHEREinfo_id=r.info_id;
COMMIT;
ENDIF;

end;
ENDLOOP;
EXCEPTION
WHENNO_DATA_FOUNDTHEN
htp.p(<center><h2>Thefile||p_Filename||Failed!</h2></center>);


ENDfupdate_clob_text;
附录三:新数据库字符集
NLS――LANG
SIMPLIFIEDCHINESE_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)


InnoDB数据表的索引,与InnoDB数据表相比,在InnoDB数据表上,索引对InnoDB数据表的重要性要大得多。在InnoDB数据表上,索引不仅会在搜索数据记录时发挥作用,还是数据行级锁定机制的苊、基础。
小妖女 该用户已被删除
沙发
发表于 2015-1-19 11:10:27 | 只看该作者
备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。
冷月葬花魂 该用户已被删除
板凳
发表于 2015-1-24 13:18:23 | 只看该作者
这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。
透明 该用户已被删除
地板
发表于 2015-2-1 16:07:42 | 只看该作者
是要和操作系统进行Socket通讯的场景。否则建议慎重!
海妖 该用户已被删除
5#
发表于 2015-2-7 08:00:23 | 只看该作者
sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西
兰色精灵 该用户已被删除
6#
发表于 2015-2-21 04:49:59 | 只看该作者
SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)
不帅 该用户已被删除
7#
发表于 2015-3-6 19:42:27 | 只看该作者
财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..
愤怒的大鸟 该用户已被删除
8#
发表于 2015-3-13 07:08:31 | 只看该作者
大家注意一点。如下面的例子:
乐观 该用户已被删除
9#
发表于 2015-3-20 16:11:38 | 只看该作者
我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 00:26

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表