设为首页 收藏本站
查看: 1578|回复: 0

[经验分享] 从SqlServer 2K移植到Oracle 10g中的简要总结

[复制链接]

尚未签到

发表于 2016-7-24 14:16:45 | 显示全部楼层 |阅读模式
  公司有一个系统是基于SqlServer 2k,现在,应客户要求,移植到Oracle 10g数据库。代码的扩展极其easy,三下五除二,搞定。就是在将数据从SqlServer 2k导入到Oracle 10g数据库中时出现了一些问题。刚开始采用的方案是把表结构和数据导入到Sql脚本中,然后在Oracle数据库中执行Sql脚本。这个过程涉及到数据 库字段类型的转换问题,容易出错。后来采用使用SqlServer 2k的DTS 将数据从SqlServer中导入到Oracle 10g中。工作就这么搞定了,为了方便以后数据类型的转换,方便以后做针对不同数据库的Sql脚本,我把SqlServer 2k和Oracle 10g大部分数据类型都做了一下测试,当然现在只有SqlServer 2k和Oracle 10g数据对应关系。不对应关系如下:

SqlServer 2k转换为Oracle 10g
列名SqlServer数据类型SqlServer长度Oracle数据类型
column1bigint8    NUMBER(19)
column2binary50    RAW(50)
column3bit1    NUMBER(2)
column4char10    CHAR(10)
column5datetime8    DATE
column6decimal9    NUMBER(18)
column7float8BINARY_DOUBLE
column8image16    BLOB
column9int4    NUMBER(10)
column10money8NUMBER(19,4)
column11nchar10NCHAR(10)
column12ntext16NCLOB
column13numeric9NUMBER(18)
column14nvarchar50NVARCHAR2(50)
column15real4BINARY_FLOAT
column16smalldatetime4DATE
column17smallint2NUMBER(5)
column18smallmoney4NUMBER(10,4)
column19sql_variant BLOB
column20text16CLOB
column21timestamp8RAW(8)
column22tinyint1NUMBER(3)
column23uniqueidentifier16BLOB
column24varbinary50RAW(50)
column25varchar50VARCHAR2(50)
  
Oracle 10g 转换为SqlServer 2k
Oracle列名Oracle数据类型SqlServer列名SqlServer数据类型SqlServer数据长度
COLUMN1BINARY_DOUBLECOLUMN1float8
COLUMN2BINARY_FLOATCOLUMN2real4
COLUMN3BLOBCOLUMN3image16
COLUMN4CLOBCOLUMN4ntext16
COLUMN5CHAR(10)COLUMN5nchar10
COLUMN6DATECOLUMN6datetime8
COLUMN12NUMBERCOLUMN12numeric13
COLUMN13NVARCHAR2(10)COLUMN13nvarchar10
COLUMN14RAW(10)COLUMN14varbinary10
COLUMN15TIMESTAMP(6)COLUMN15datetime8
COLUMN16TIMESTAMP(6) WITH LOCAL TIME ZONECOLUMN16datetime8
COLUMN17TIMESTAMP(6) WITH TIME ZONECOLUMN17datetime8
COLUMN18VARCHAR2(10)COLUMN18nvarchar10
COLUMN7INTERVAL DAY(2) TO SECOND(6)COLUMN7nvarchar30
COLUMN8INTERVAL YEAR(2) TO MONTHCOLUMN8nvarchar14
COLUMN9LONGCOLUMN9ntext16
COLUMN10LONG RAWCOLUMN10image16
COLUMN11NCLOBCOLUMN11ntext16
  我们在做数据库移植设计的时候,完全DIY,可以考虑设计可扩展组件完成这种数据库表、列等对应关系的转换工作,那么以后再做系统移植中数据导入时就一劳永逸了。现在也没有时间做这种工作,不过感觉这还是挺有意义的一项工作。

    在转换过程中,出现了另一个问题,就是如果SqlServer 2k 中的表名含有小写,那么在导入到Oracle 10g后,需要修改表名,否则Sql语句会执行失败。(导入后表名多了引号) 比如SqlServer 2k有一个表test,导入到Oracle 10g后显示的表名仍然为test,但是如果你要查询test表中的数据时,按照正常情况下,你只用输入select * from test即可,可是现在却变成select * from "test"。通过Oracle 10g的维护系统进入修改表名时,表名显示为带有引号的-"test"。出现这个问题,因为表不是很多,所以我们将SqlServer 2k的表名都改为了大写,或者在Oracle中将表名改为大写,就ok了,需要注意这些细节。Oracle 10g导入到SqlServer 2k中没有出现问题。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-248719-1-1.html 上篇帖子: Oracle中的主机字符串是什么意思? 下篇帖子: java.lang.ClassNotFoundException: oracle.jdbc.driver.oracledriver错误
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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