将公司系统从SqlServer 2K移植到Oracle 10g中的简要总结
时间: 2009-01-15 08:34
来源: 博客园?阿修罗一平
点击: 次
?
??? 公司有一个系统是基于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数据类型
column1
bigint
8
NUMBER(19)
column2
binary
50
RAW(50)
column3
bit
1
NUMBER(2)
column4
char
10
CHAR(10)
column5
datetime
8
DATE
column6
decimal
9
NUMBER(18)
column7
float
8
BINARY_DOUBLE
column8
image
16
BLOB
column9
int
4
NUMBER(10)
column10
money
8
NUMBER(19,4)
column11
nchar
10
NCHAR(10)
column12
ntext
16
NCLOB
column13
numeric
9
NUMBER(18)
column14
nvarchar
50
NVARCHAR2(50)
column15
real
4
BINARY_FLOAT
column16
smalldatetime
4
DATE
column17
smallint
2
NUMBER(5)
column18
smallmoney
4
NUMBER(10,4)
column19
sql_variant
?
BLOB
column20
text
16
CLOB
column21
timestamp
8
RAW(8)
column22
tinyint
1
NUMBER(3)
column23
uniqueidentifier
16
BLOB
column24
varbinary
50
RAW(50)
column25
varchar
50
VARCHAR2(50)
Oracle?10g?转换为SqlServer?2k
Oracle列名
Oracle数据类型
SqlServer列名
SqlServer数据类型
SqlServer数据长度
COLUMN1
BINARY_DOUBLE
COLUMN1
float
8
COLUMN2
BINARY_FLOAT
COLUMN2
real
4
COLUMN3
BLOB
COLUMN3
image
16
COLUMN4
CLOB
COLUMN4
ntext
16
COLUMN5
CHAR(10)
COLUMN5
nchar
10
COLUMN6
DATE
COLUMN6
datetime
8
COLUMN12
NUMBER
COLUMN12
numeric
13
COLUMN13
NVARCHAR2(10)
COLUMN13
nvarchar
10
COLUMN14
RAW(10)
COLUMN14
varbinary
10
COLUMN15
TIMESTAMP(6)
COLUMN15
datetime
8
COLUMN16
TIMESTAMP(6) WITH LOCAL TIME ZONE
COLUMN16
datetime
8
COLUMN17
TIMESTAMP(6) WITH TIME ZONE
COLUMN17
datetime
8
COLUMN18
VARCHAR2(10)
COLUMN18
nvarchar
10
COLUMN7
INTERVAL DAY(2) TO SECOND(6)
COLUMN7
nvarchar
30
COLUMN8
INTERVAL YEAR(2) TO MONTH
COLUMN8
nvarchar
14
COLUMN9
LONG
COLUMN9
ntext
16
COLUMN10
LONG RAW
COLUMN10
image
16
COLUMN11
NCLOB
COLUMN11
ntext
我们在做数据库移植设计的时候,完全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中没有出现问题。??
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!