oracle导入到sybase

oracle 数据库如何导入到sybase中,本来想网上应该有相应的工具,结果找了半天,有些徒劳无功,下面是我能够找到的几种据说可以进行互导的工具。

1 .power transfer:sybase自己的工具,有人说可以进行数据库转换,不过在网上找了半天,也没有找到下载的地方,在emule上搜索也没有找到相关的资源,不知道到底行不行。

2 .Cross-Database Converter 5.0:下载地址为 http://www.dbbalance.com/download.htm,下载安装之后发现因为没有付钱,无法出现运行界面,此路不通。

3 .Oracle Sybase Import, Export & Convert Software:收费软件,是www.sobolsoft.com出的一个互导工具,结果现在官网地址都无法访问,不知道在哪里可以下载。

找不到解决办法,最后只好手动导数据库,其实所有的数据库互导无非是两个步骤:

1. 数据库表结构

2. 数据库中的数据 (对于存储过程的互导没有试验,不过应该是大同小异)

oracle 导入到sybase的步骤如下:

1 .导出oracle数据库结构,可以用Toad工具导出,"Database"——"Export"——"Table Scripts",导出到一文本文件如db_oracle_to_sybase_structure.sql,文件内容为:

CREATE TABLE OA_COMPANY

(

COMPANYID VARCHAR2(75 BYTE) NOT NULL,

COMPANYNAME VARCHAR2(255 BYTE) NOT NULL,

PORTALURL VARCHAR2(150 BYTE),

)

TABLESPACE OASPACE

PCTUSED 0

PCTFREE 10

INITRANS 1

MAXTRANS 255

STORAGE (

INITIAL 64K

MINEXTENTS 1

MAXEXTENTS 2147483645

PCTINCREASE 0

BUFFER_POOL DEFAULT

)

LOGGING

NOCACHE

NOPARALLEL;



CREATE TABLE OA_USER

(

USERID VARCHAR2(75 BYTE) NOT NULL,

COMPANYID VARCHAR2(75 BYTE) NOT NULL,

ACTIVE NUMBER(5),

CREATED_TS DATE,

CREATED_BY VARCHAR2(255 BYTE),

)

TABLESPACE OASPACE

PCTUSED 0

PCTFREE 10

INITRANS 1

MAXTRANS 255

STORAGE (

INITIAL 64K

MINEXTENTS 1

MAXEXTENTS 2147483645

PCTINCREASE 0

BUFFER_POOL DEFAULT

)

LOGGING

NOCACHE

NOPARALLEL;



ALTER TABLE OA_COMPANY ADD (

PRIMARY KEY (COMPANYID));



ALTER TABLE OA_USER ADD (

PRIMARY KEY (USERID));



ALTER TABLE OA_USER ADD (

FOREIGN KEY (COMPANYID)

REFERENCES OA_COMPANY (COMPANYID));



2 .导入到sybase之前,要手工对sql语句进行转换

① 上面的数据类型

VARCHAR2(75 BYTE) ——>VARCHAR(75)

NUMBER(5) ——>NUMERIC(5)

可以全局替换一下,把"VARCHAR2"替换为"VARCHAR"," BYTE"替换为"","NUMBER"替换为"NUMERIC"

② 把关于表空间的定义TABLESPACE OASPACE给删去,如上面文件中的删除线所示

③ 把字段没有声明允许为NULL 的字段如"PORTALURL VARCHAR2(150 BYTE),"修改为"PORTALURL VARCHAR2(150) NULL,",只有这样显示指定,生成的sybase表字段才允许为NULL,否则在sybase中生成表结构后还需要手动更改

④ 把上面sql中每段的分号去掉,否则在sybase中运行会报错,如

ALTER TABLE OA_COMPANY ADD (

PRIMARY KEY (COMPANYID));

改为

ALTER TABLE OA_COMPANY ADD (

PRIMARY KEY (COMPANYID))



修改后文件 db_oracle_to_sybase_structure.sql 内容 为:

CREATE TABLE OA_COMPANY

(

COMPANYID VARCHAR(75) NOT NULL,

COMPANYNAME VARCHAR(255) NOT NULL,

PORTALURL VARCHAR(150) NULL,

)



CREATE TABLE OA_USER

(

USERID VARCHAR(75) NOT NULL,

COMPANYID VARCHAR(75) NOT NULL,

ACTIVE NUMBERIC(5) NULL,

CREATED_TS DATE NULL,

CREATED_BY VARCHAR(255) NULL,

)



ALTER TABLE OA_COMPANY ADD (

PRIMARY KEY (COMPANYID))



ALTER TABLE OA_USER ADD (

PRIMARY KEY (USERID))



ALTER TABLE OA_USER ADD (

FOREIGN KEY (COMPANYID)

REFERENCES OA_COMPANY (COMPANYID))



3 .导出数据库中的数据,可以用Toad工具导出,"Database"——"Export"——"Table Data",导出到一文本文件如db_oracle_to_sybase_data.sql,文件内容为:

INSERT INTO OA_COMPANY ( COMPANYID, COMPANYNAME, PORTALURL) VALUES (

'1', ' 苏州工业园区利维利信息有限公司', 'http:/www.sznjusoft.com');

commit;



INSERT INTO OA_USER ( USERID, COMPANYID,CREATED_TS, CREATED_BY) VALUES (

'1', '1', 'admin', TO_Date( '11/06/2007 03:02:18 下午', 'MM/DD/YYYY HH:MI:SS AM'));

commit;



4 .导入到sybase之前,要手工对sql语句进行转换

① sybase 中没有TO_Date函数,在这里可以用getdate()或NULL代替,如TO_Date( '11/06/2007 03:02:18 下午', 'MM/DD/YYYY HH:MI:SS AM')变为getdate()或NULL(如果熟悉正则表达式,可以使用正则来替换)

② 把上面sql中每段的分号去掉,否则在sybase中运行会报错



修改后文件 db_oracle_to_sybase_data.sql 内容 为:

INSERT INTO OA_COMPANY ( COMPANYID, COMPANYNAME, PORTALURL ) VALUES (

'1', ' 苏州工业园区利维利信息有限公司', 'http://www.lively.com')

commit



INSERT INTO OA_USER ( USERID, COMPANYID,CREATED_TS, CREATED_BY) VALUES (

'1', '1', 'admin', getdate())

commit



5 .开始导入到sybase

① 首先导入表结构,执行db_oracle_to_sybase_structure.sql,注意这里我们只执行文件中的

CREATE TABLE OA_COMPANY

(

COMPANYID VARCHAR(75) NOT NULL,

COMPANYNAME VARCHAR(255) NOT NULL,

PORTALURL VARCHAR(150) NULL,

)



CREATE TABLE OA_USER

(

USERID VARCHAR(75) NOT NULL,

COMPANYID VARCHAR(75) NOT NULL,

ACTIVE NUMBERIC(5) NULL,

CREATED_TS DATE NULL,

CREATED_BY VARCHAR(255) NULL,

)



ALTER TABLE OA_COMPANY ADD (

PRIMARY KEY (COMPANYID))



ALTER TABLE OA_USER ADD (

PRIMARY KEY (USERID))

而生成表外键约束部分的sql语句在插入表数据之后再执行

注: 关于外键约束最后执行是因为在下面的 ② 中导入表数据时可能会出现子表数据在父表数据之前导入时会出现约束错误。

② 然后导入表数据,执行db_oracle_to_sybase_data.sql

③ 执行生成表外键约束部分的sql语句:

ALTER TABLE OA_USER ADD (

FOREIGN KEY (COMPANYID)

REFERENCES OA_COMPANY (COMPANYID))

6 .注意在第5步导入到sybase之前必须确保sybase的字符集支持中文,如

Language :chinese

Character :eucgb Extended Unix Code for GB2312-80 (Simplified Chinese)

Sort :binary Binary ordering, for the EUC GB2312-80 character set (eucgb).



注意上面的设置字符集使得sybase对于大小写敏感,如select * from oa_user,会提示找不到此表名,必须select * from OA_USER才可以,不止对于表名,对于表中的字段和其它如视图也是一样,大小写必须与sybase中定义的完全一致。



注: 对于Language:chinese / Character:eucgb / Sort:binary只能大小写敏感的问题,我在网上找到了一篇文章,尝试去改sybase下的相应配置文件,希望可以大小写不敏感,结果没有成功,有兴趣的可以参考这篇文章尝试一下(自定义Sybase排序方式)。



如果要求sybase大小写不敏感,可以采用

Language :english

Character :iso-1

Sort :nocase Dictionary order, case insensitive.

的设置

我使用的是Language:chinese / Character:eucgb / Sort:binary,结果在转换代码的时候把hibernate中的所有配置文件涉及到表名/字段名的地方全部改成了大写,还好是用hibernate,改动的地方不是很多(sybase的驱动可以在sybase安装目录下的jConnect-5_5classesjconn2.jar和jConnect-6_0classesjconn3.jar找到)。

附:sybase的sql执行可视化工具SQL Advantage,比较小,功能也比较简单,不过使用起来比较方便。

在Sybase安装后使用中出现了两个错误:

unable to install language(s) because master database need 1 megabytes more of free space.

Task failed: install language(s).Terminating configuration.

Can't allocate space for object 'syslogs' in database 'master' because 'logsegment' segment is full/has no free extents. If you ran out of space in syslogs, dump the transaction log. Otherwise, use ALTER DATABASE to increase the size of the segment.



都是因为master数据库空间比较小造成的,所以最好在安装sybase数据库完毕后立刻更改它的Database Devices大小和master数据库空间大小,设置多少自己把握。



在设置前最好备份一下master数据库:

dump database master to 'D:sybaseackupmaster.dump'
[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9650775/viewspace-919486/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9650775/viewspace-919486/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值