Sybase迁移Oracle字符集问题,Sybase数据库迁移数据到Oracle(未改进)
本文主要讲述如何将Sybase数据库的数据迁移至Oracle中,因为我对Sybase不熟悉,所有本文讲述的只是完成Sybase数据表中的数据迁移到Oracle的一个过程
一、Sybase以及Oracle数据库配置
1、连接Sybase数据库
1.1、首先安装Sybase数据库以及Sybase数据库的可视化工具DBArtisan8.6.1
1.2、到Sybase数据库安装路径中(我的安装路径是:C:\SAP)找到ini文件夹下的sql.ini配置文件
(我的路径位置是 C:\SAP\ini),这个文件的功能就是配置数据库的数据源(包含数据库的主机地址
,端口,以及服务器名称
[dev](服务器名)
master=TCP,192.168.44.22,4100(数据库主机地址192.168.44.22以及端口4100)
query=TCP,192.168.44.22,4100
1.3、使用DBArtisan连接Sybase数据库:Datasource->Register Datasource,在弹出的窗口中
1.3.1、选择Sybase Adaptive Serve,下一步
连接Sybase数据库
1.3.2、填入数据源的主机地址以及ip端口
1.3.3、填入用户名以及密码,然后测试连接,如果连接通过,那就点击下一步
标题
1.3.4、然后点击完成,配置数据源就成功了
1.4、上面的步骤完成后,可视化工具会显示刚才自己配的数据源,双击,填写用户名和密码,登录
2、连接Oracle数据库(不作详述)
二、将Sybase数据库中的数据导出到txt文件中
2.1、在Sybase可视化工具DBArtisan打开sql编辑窗口,执行下列语句:
set nocount on
use emulator(数据库名)
go
select 'bcp emulator.dbo(所有者).' + name + ' out d:\temp\' + name + '.txt -Sdev(dev为数据库服务器名) -Ucontrol(control为用户名) -Pcontrol(control为密码) -t"!|"(表示每个字段数据用!|分隔) -r"\n" -c' from sysobjects where type='U'
go
这个语句的作用就是生成所有表的bcp导出命令,这个bcp命令就是用来导出表的数据到txt文件中
2.2、执行上面的语句后,会生成如下结果:
导出数据到txt的bcp命令
上面的bcp命令的意思就是:将emulator这个数据库中的account、relation、banker等表中的数据导出到
d:\temp\XX.txt文件中
-S:表示数据库所在的服务器名,在上面的sql.ini文件有配置;
-U:表示数据库的用户名
-P:表示数据库用户密码
-t"!|":表示在导出数据的时候,每个字段都用!|分隔开
2.3、创建一个.bat文件,并将上面的bcp命令都复制到bat文件中,然后双击执行这个bat批命令,没有报错后,就
可以在d:\temp这个目录下导出数据了
导出数据后生成的txt文件
三、将txt文件中的数据导入到Oracle中:
下面以导入relationt表为例:
3.1、打开Sybase可视化工具DBArtisan,选中relation表,然后点击Extract
导出relation表结构
这个步骤的作用就是查看relation表结构:
relation表结构
3.2、Oracle建表
因为Sybase的数据类型datetime和Oracle的数据类型不一样,Oracle的类型是date,所以不能直接将txt直接
导入到Oracle中,首先需要在Oracle建立临时表,并且临时表所有的时间类型都用varchar表示:
Oracle临时表:
CREATE TABLE relation1
(
fundacc char(30) NOT NULL,
mnytype char(4) NOT NULL,
banker char(8) NOT NULL,
bankacc char(30) NOT NULL,
acctype char(4) NOT NULL,
openmode char(2) NOT NULL,
b_branch char(8) NOT NULL,
b_deptid char(8) NOT NULL,
userid char(8) NOT NULL,
status char(2) NOT NULL,
settime1 varchar(30) NOT NULL,(时间类型统一用varchar)
updatetime1 varchar(30) NOT NULL,
CONSTRAINT pk_relation1
PRIMARY KEY(fundacc,mnytype,banker,bankacc)
);
commit;
Oracle正式表:
CREATE TABLE relation
(
fundacc char(30) NOT NULL,
mnytype char(4) NOT NULL,
banker char(8) NOT NULL,
bankacc char(30) NOT NULL,
acctype char(4) NOT NULL,
openmode char(2) NOT NULL,
b_branch char(8) NOT NULL,
b_deptid char(8) NOT NULL,
userid char(8) NOT NULL,
status char(2) NOT NULL,
settime date NOT NULL,
updatetime date NOT NULL,
CONSTRAINT pk_relation
PRIMARY KEY(fundacc,mnytype,banker,bankacc)
);
commit;
在Oracle执行上面建表语句
3.3、生成ctl脚本:
Oracle有一个叫sqlldr的工具,可以用来将txt数据导入到数据表中,建立一个后缀名为ctl的脚本,脚本命名
为relation.ctl。将以下内容写进脚本中:
load data
infile 'D:\temp\relation.txt'(Sybase导出的txt数据)
append into table relation1(表示将txt的数据导入到relationX1表中)
fields terminated by "!|" (读取txt数据时,以!|终止,每一个!|分隔的数据就表示一个字段的数据)
OPTIONALLY ENCLOSED BY '"'
trailing nullcols(表示允许字段数据为null)(下面对应relation表的字段名称)
(
fundacc,
mnytype,
banker,
bankacc "nvl(:bankacc,' ')",(读取txt文件时,如果该字段数据为null,那么给一个空格作为默认值,因为有些表设计的时候,字段不能为null,所以给一个空格)
acctype "nvl(:acctype,' ')",
openmode "nvl(:openmode,' ')",
b_branch "nvl(:b_branch,' ')",
b_deptid "nvl(:b_deptid,' ')",
userid "nvl(:userid,' ')",
status,
settime1,
updatetime1
)
3.4、编写sqlldr命令,并放到命令行执行:
sqlldr test/test@127.0.0.1:1521/goldpre control=D:\relation.ctl log=D:\SybaseToOracle_Log\relation.log
test/test@127.0.0.1:1521/goldpre 是Oracle数据源,127.0.0.1:1521是数据源主机地址以及端口,goldpre是
数据源服务器名
D:\relation.ctl表示ctl脚本的位置;
log=D:\SybaseToOracle_Log\relation.log:执行ctl后生成的日志文件
上面命令执行后,查看日志文件,没报错的话,就继续下面步骤
3.5、将临时表的数据转换迁移到正式表中
下面这条sql是将临时表relation1的数据复制插入到正式表relation中
insert into relation select fundacc,mnytype,banker,bankacc,acctype,openmode,b_branch,b_deptid,userid,status,to_date(substr(settime1,1,length(settime1)-6)||substr(settime1,length(settime1)-1,2),'Mon DD YYYY HH:MI:SSPM','NLS_DATE_LANGUAGE = American') settime,to_date(substr(updatetime1,1,length(updatetime1)-6)||substr(updatetime1,length(updatetime1)-1,2),'Mon DD YYYY HH:MI:SSPM','NLS_DATE_LANGUAGE = American') updatetime from relation1
下面这段函数就是讲varchar类型的日期数据(Dec 14 2004 7:26:23:390PM)转换成date类型的数据
to_date(substr(settime1,1,length(settime1)-6)||substr(settime1,length(settime1)-1,2),'Mon DD YYYY HH:MI:SSPM','NLS_DATE_LANGUAGE = American') settime
删除临时表:
drop table relation1;
purge table relation1;
最后使用select * from relation,查看表中数据是否有问题,到此表数据由Sybase迁移到Oracle就完成了
四、结束语:
因为本人对Sybase不熟悉,所以以上工作仅限Sybase表中数据迁移,不设计存储过程等其他的,如有问题欢迎大家指点
改进。
Sybase迁移Oracle字符集问题,Sybase数据库迁移数据到Oracle(未改进)相关推荐
- Sybase迁移Oracle字符集问题,Sybase更换字符集(cp850--cp936)
修改的操作步骤 Sybase server名:eastsoftcourt (在Dsedit中设置) Sybase sa的口令:sybase 生产库名:escourt6 操作的目录:d:\sybase ...
- aws 数据库迁移_使用AWS进行数据库迁移
aws 数据库迁移 The Agenda of this blog is to understand the different aspects of Data Migration. This blo ...
- aws mysql迁移_AWS Data Migration Service-AWS数据库迁移服务-AWS中国区域
AWS Database Migration Service 可帮助您快速并安全地将数据库迁移至 AWS.源数据库在迁移过程中可继续正常运行,从而最大程度地减少依赖该数据库的应用程序的停机时间.AWS ...
- EF mysql 数据迁移_EF Code First Migrations数据库迁移
1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...
- 数据传输服务 DTS > 数据迁移 > 从自建数据库迁移至阿里云 > 源库为MySQL > 从自建MySQL迁移至RDS MySQL
从自建MySQL迁移至RDS MySQL 更新时间:2020-08-20 10:49:52 编辑我的收藏 本页目录 前提条件 注意事项 费用说明 迁移类型说明 增量数据迁移支持同步的SQL操作 数据库 ...
- python数据库迁移教程_django中的数据库迁移的实现
Django是用python写的web开发框架,其特点是: 1.重量级框架,内部封装了很多的功能组件,使开发变的简便快速, 2.MVT模式:前后端分离,高内聚低耦合,m:model,与mvc中的m功能 ...
- ORACLE字符集为US7ASCII,插入数据,中文乱码问题解决
1.可以通过select * from nls_database_parameters where parameter ='NLS_CHARACTERSET';查到ORACLE的字符集 US7ASCI ...
- oracle client 默认端口,[数据库]配置精简版Oracle客户端
[数据库]配置精简版Oracle客户端 0 2012-12-22 16:00:24 一般只是作为客户端访问Oracle,并不需要安装庞大的Oracle.有时候经常忘记怎么配置精简版Oracle,这篇文 ...
- MySQL数据库同步数据到Oracle
通过一个工具可以将不同数据库的数据同步到另一个数据库中,以MySQL数据导入到Oracle为例: 导入工具 Navicat Premium 15 工具下载地址 Navicat | 产品 操作步骤: 1 ...
- cmd oracle sys登录_Oracle数据库之cmd 登录oracle
本文主要向大家介绍了Oracle数据库之cmd 登录oracle,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. cmd 登录oracle 源地址:http://zhidao.b ...
最新文章
- Traveller项目介绍
- frame框架的显示隐藏操作 (转)
- 随机蕨(Random Fern)
- 微信小程序之可滚动视图容器组件 scroll-view
- TortoiseSVN客户端重新设置用户名和密码
- BlogEngine(4)---Widget小部件
- 音视频低延迟应用的四个技术实践
- Windows 7各服务项介绍
- java 时间戳转换成时间_java 10位时间戳 转成时间
- git clone 出现fatal: unable to access ‘https://github 类错误解决方法
- 【案例】保健品行业如何优化供应链管理?APS系统来帮忙
- android轮播图实现方案,Android轮播图实现教程
- CCF NOI1021 发放奖金
- IP地址转化为32位无符号数
- 京东全链路压测军演系统(ForceBot)架构解密
- Visual Basic 6.0精简版下载地址
- 在我的ibmR40上装osx86
- 【Git】解决Untracked Files Prevent Checkout的问题
- 视比特“AI+3D视觉”核心产品 | 智能下料分拣产线
- html编辑器怎么设置为excel,excel2013宏编辑器的设置方法教程
热门文章
- 网页采集器,全自动网站采集发布(图文)
- 计算机病毒库更新记录表,计算机病毒库
- D7000、60D、K5、E5的详细对比评价(转)_我是亲民_新浪博客
- 中彩分析家 v7.18 build 1203 怎么用
- 如何进入百度、阿里,一个6年Android老司机的面经
- c#学习笔记---BackgroundWorker 详解
- 南天PR2、PR2E驱动下载,xp,win7,win8,win8.1,win10 32位64位驱动下载安装教程
- ActiveX控件进行注册
- DL for Scratch 读书笔记
- Redhat7.3修改密码