sqlserver到oracle数据无损迁移
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sqlserver到oracle数据无损迁移
编者:liuli10@
版本:V1.7
最后修订日期:2015-11-21
第一章简介
1.1数据迁移
随着时代发展数据越来越被重视,而很多时候,当系统需要更新换代的时候,升级后系统所是有的数据库与当前系统的数据库并不一致,此时不仅需要数据割接,最重要的是:如何能将老系统中的数据无损的割接到新系统、新数据库中。因此,结合项目实战经验,针对从windows平台下数据库sqlserver到linux平台下oracle数据库的数据无损迁移进行总结。
1.2数据库简介
一般此处会有很多数据库以及出品公司的历史以及发展历程,在编者看来然而并没有什么大用途,百度百科都可以搜索的到,因此本章结束,直接进入实战总结环节。
第二章sqlserver数据导出
2.1sqlserver数据导出命令
当然不可否认windows为sqlserver提供了强大的图形化平台,导出数据变得只需要点一点就能完成,然而这样的数据导出对于大批量有要求的操作,是极其劳神伤财的,因此,必须要通过命令行进行格式化导出,因此,这里介绍sqlserver 本机数据库导出命令。
2.1.1bcp命令以及参数介绍
/liyanmingkong/article/details/6087674
/uid-25472509-id-4304562.html
/link?url=WV2JJM4JHxR7Qct8rr_-499zPc3aP_7E5rOt5l yEnG_Mj_tE9_-ZN1JPE2Vc2wRpkO8QkNGNLVznDfMgniCOnxXhK5jQppNpZk8 Jo1x8o23
为了将文档尽可能精简,bcp命令的参数以及介绍请自行去以上任意网址查询。或者自行baidu或者google搜索。
2.2实战语句解析
实战语句为:
bcp"select*from gwbnboss.dbo.ACCOUNT_BUSINESS"queryout "C:\Users\liuli9\Desktop\sqlserverdata_mov\textfile\ACCOUNT_BUSINESS.txt"-c -r"{#$&}"-t"{@#$}"-S"127.0.0.1"-U"数据库用户名"-P"密码"
最终导出的结果存在于
C:\Users\liuli9\Desktop\sqlserverdata_mov\textfile\ACCOUNT_BUSINESS.txt 文件中,当出现“{#$&}”时表示接下来是下一行数据,出现“{@#$}”时表示接下来是下一列数据。将查询结果集完整导出,不对数据做任何格式化或者修改操作,保证数据的原生无损。
bcp"sql语句"queryout"绝对路径\导出数据的文件名.txt"-c-r"行终止符,出现该字符,表示一行数据已完整"-t"列终止符,表示列终止出现时,列数据已完整"-S"可以是ip可以使可以被解析的地址"-U"数据库用户名"-P"密码"
2.3实战分析
在不指定行分隔符时,默认导出时的行终止符是回车符,然而从实战中的出来的经验是:无法保证客户所提供的数据中有奇葩数据,数据中存在回车符,如果一旦出现回车符,那么将会使导出的数据在导入时,出现错误,数据完整无损无法被保证。因此行列分隔符一定要单独以极特殊字符进行指定,并在导入时进行指定。最大限度保证数据的完整无损。
第三章oracle数据导入
3.1导入须知
一般在使用oracle数据库时会使用linux或者solaris进行搭建,而此时跨平台的数据文件传输,以及文件内容格式的完整不变,成为一个需要考虑的点,但是由于在数据导出时进行特殊字符指定行列分割,因此在这里出现数据乱码或者回车符不兼容的可能性被降到了最低。
导入使用sqlldr命令,具体参数以及使用方法请自行查询学习。此为oracle 自带工具。
3.2导入
3.2.1导入准备以及导入
【1】在做数据导入之前,首先要将sqlserver中表的表结构进行转换到oracle,方法有两种:
1、通过手动建表。
2、通过工具进行转换。
不管哪一种方法,需要注意的是:
【2】在表创建完成之后需要对表结构进行一定的扩张改造:
1、所有表字段中的最大长度,修改到尽可能长,因为你无法确定客户在第一次到第二次数据给你的期间有没有对表结构进行过调整。因此给数据一个足够大的桶。
2、去除所有约束条件,如果手动建表可以在建表之初将所有限制条件去掉,因为你无法确定客户的数据是在加了限制条件前加入还是之后,并且有一些特殊字符在不通编码格式下也许会被认为成一致,因此,保证数据无损统一,去除所有约束条件。
3、分析源表,有一些可能为空的字段,分析是否需要对其进行数据初始化,
进行初始化函数的编写,因为你无法确定老系统给出的数据可以为空的字段在新系统中是否可以无影响,【这一步并非必须但如果要做一定需要割接组同事参与】【3】导入主机oracle客户端安装并配置tnsnames,并配置环境变量
1、理论上是要求所有命令在使用时不需要进行绝对路径的添加的,因此
对于PATH以及相关环境变量需要进行配置。
2、由于在导入语句中为保证导入不出错需要对连接串进行指定解析,因
此客户端的tnsnames需要进行配置。
【4】在导出、建表、表改造、环境配置准备完成之后,需要进行ctl文件生成,此处不做赘述,具体编写规则请自行查询学习,此处只针对实战中的ctl进行分析(ACCOUNT_BUSINESS.ctl):
OPTIONS(skip=0,rows=300000)
LOAD DATA
infile ACCOUNT_BUSINESS.txt"str'{#$&}'"
TRUNCATE
INTO TABLE ACCOUNT_BUSINESS
Fields terminated by'{@#$}'
trailing nullcols
(
RECORDID"to_number(:RECORDID)",
SUBBOOK CHAR(1000),
SUBCLASS CHAR(1000),
RECORDTIME"is_date(substr(:RECORDTIME,1,19),'yyyy-mm-dd hh24:mi:ss')",
RECORDTYPE"to_number(:RECORDTYPE)",
MONEY"to_number(:MONEY)",
MONEYTYPE CHAR(1000),
RECORDDESC CHAR(1000),
XID CHAR(1000),
NOTE CHAR(4000),
RECORDPOINT CHAR(1000),
RECORDPERSON CHAR(1000),