SYBASE到ORACLE数据迁移

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Sybase到Oracle数据迁移

一Sybase数据导出

1.1Sybase数据导出到TXT文件

在跨数据库从Sybase导入Oracle过程中首先会遇到的问题是,中间以什么样的数据格式做为Sybase与Oracle都认同的中间数据格式.Sybase数据库导出一般使用BCP,BCP出来的TXT文档数据也能被Oracle所接受.所以在整个过程导出Sybase的数据选择BCP导出例:导出命令

bcp personal.PA_ACCOUNT out PA_ACCOUNT.txt-Upersonal-Psuntek

-SSYBASE-c-oresult.txt

1.2Sybase导出TXT文件异常处理

在前面的基础上讲一下BCP导出的时候可能会遇到的问题,Sybase中Bcp导出的时候,如果表中的字段里面含有换行符号的话,会在txt文件中做换行处理,那行就会出现一行变成两行,换行符号在实际数据中可能是用户拷贝粘贴或者Web提交的把换行提交到数据库中.如图所示

上行的数据中,因为其数据中含有回车,一条记录导出TXT里换成了两行,我们在数据导出过程要考虑这种情况,这种情况也是数据导出后导入Oracle失败的主要原因.

解决以上情况的办法:

一般的BCP导出的命令

bcp personal.PA_ACCOUNT out PA_ACCOUNT.txt-Upersonal-Psuntek

-SSYBASE-c-oresult.txt

在上面的导出命令中加入一个参数:-r"&_&",该参数的作用,指定换行符号.

最后的BCP命令

bcp personal.PA_ACCOUNT out PA_ACCOUNT.txt-Upersonal-Psuntek

-SSYBASE-c-r"&_&"-oresult.txt

导出的文档然后要做一些变换,变换后的TXT文档就不会换行,除非在字段数据中有换行符号,导出的TXT文档用UltraEdit编辑工具进行处理

首先把换行符替换成空格,防止一行数据因为有换行符号导出TXT时变成两行数据无法导入Oracle,替换方法见图

然后再把BCP自定义换行符号”&_&”替换成换行符号,替换方法见图

[以上两步操作以UltraEdit为例子]

通过以上操作就能解决Sybase导出数据一条记录因为数据中有换行符号在TXT变成两行而无法正确导入Oracle临时库的问题.

二导出数据导入Oralce临时库

2.1Sybase建表脚本转为Oracle建脚本

把导出的TXT文件如何完整导入到Oracle中,是导数据过程中需要重点注意的事项,特别是一种比较特殊的数据类型的转换.

首先Sybase导出的TXT文件要导入Oracle临时库,那么Oracle临时库的表结构应该跟Sybase的库结构一致.可以先用powerdesign之类的工具先把Sybase的表结构导出来,然后再根据导出来的表结构修改成Oracle的临时库,一些Sybase专用的字段类型如tinyint 要转成Oracle的int,这种类型的转换是要注意的

在Sybase建表脚本转换到Oracle建表脚本的时候重点要注意像:date之类的数据,因为

Sybase中日期型的数据跟Oracle中日期型的数据格式是不同的,最好Oralce中当成字符处理,然后再在处理数据的脚本中做转换,在后面会提到.

例:sybase建表脚本

/*==============================================================*/ /*Table:PA_ACCOUNT*/

/*==============================================================*/ create table PA_ACCOUNT(

CN_USERID numeric(12)identity,

CN_PHONENUM varchar(12)not null,

CN_PASSWD varchar(32)not null,

CN_REG_MOTHED tinyint not null,

CN_REG_TIME datetime not null,

CN_USER_STATUS tinyint not null,

CN_IDCARD varchar(18)not null,

CN_LOGOUT_TIME datetime null,

CN_ACTIVE_CODE varchar(12)null,

CN_AREACODE varchar(4)not null,

CN_REG_TYPE tinyint default1null )

go

修改后的Oracle建表脚本

/*==============================================================*/ /*Table:PA_ACCOUNT*/

/*==============================================================*/ create table PA_ACCOUNT(

userseq int,

CN_USERID numeric(12)null,

CN_PHONENUM varchar(12)null,

CN_PASSWD varchar(32)null,

--CN_PASSWD1varchar(32)null,

CN_REG_MOTHED int null,

CN_REG_TIME varchar(30)null,

CN_USER_STATUS int null,

CN_IDCARD varchar(20)null,

CN_LOGOUT_TIME varchar(30)null,

CN_ACTIVE_CODE varchar(12)null,

CN_AREACODE varchar(4)null,

CN_REG_TYPE int default1null

);

commit;

建议:Sybase中对应的除数值型数据外,在Oracle中全部转换为字符型

相关文档
最新文档