词条信息

xiazaiwo
xiazaiwo
进士
词条创建者 发短消息   

相关词条

热门词条

更多>>
什么是端口?到底是做什么的呢?
端口一般指两种,一种是硬件比如路由器或者交换机的插网线的端口,一种是软件的逻辑的概念,比如http的80端口!...
7种进阶方法让你快速测试端口连通性
Ping是Windows、Linux和Unix系统下的一个检查网络连通性的命令工具,对于大部分互联网用户来说很...
电脑开机,总需要按F1,是什么原因造成的?
一.主板掉电这个说法是行业内的叫法了,一般是主板的CMOS电池没电了导致的。也是最常见的一种提示你按F1的提示...
社保降费对个人有什么影响?
下调城镇职工基本养老保险单位缴费比例是政府给企业发的一个大红包,特别是对于企业来说是一个利好,但是对个人来说有...
车辆“出险”对下年保费的影响,到底有多大?
【出险对交强险的影响】【出险对商业险的影响】车辆“出险”对下年保费的影响,到底有多大?这里有必要先提下车险第三...

精选图集

更多>>
简易百科旧版 >>所属分类 >> SQLserver    数据库   

SqlServer到Oracle数据库转换手记

标签: 暂无标签

顶[0] 发表评论(0) 编辑词条
    博客分类:
  • 数据库

 

最近做了些
数据库
转换工作,主要是从Sql Server转换到
Oracle
,过程中遇到很多问题,现进行一个小小总结,方便有同样需求的朋友们。
需要对数据库结构、数据、自定义函数、存储过程等数据库元素进行转换,由于Sql Server和Oracle数据库语言本身的差异非常大,所以自定义函数和存储过程的转换是比较困难的一件事情,市面上也很少有这方面的
工具
,几乎都想直接写
工具
了,后来却找到了个国外的一个叫做“Swiss
SQL
-
SQL
Server To Oracle”
这样的
工具
,此
工具
可以在http://www.swissql.com/
站点
上下载,使用方法有两种,一种是转换TSQL脚本到PLSQL,一种是通过JDBC连接到SQLServer数据库进行转换,转换后的结果都保存为PLSQL脚本,要导入Oracle需要运行这些脚本。此软件是用Java语言
编写
在安装之前必须先安装JDK,在试用过程中发现此工具存在这么几个问题:
1、此工具在转换数据结构的过程中把varchar的数据类型都转换成varchar2(1)了而不管原谅数据有多长统一都转换成1个长度,我不知道这么简单的BUG有没有其他设置的地方,反正后来我们没用它转数据结构也就没怎么研究了。
2、此工具为试用版本,我们也没找到注册版,而试用版只能前后转换共2000行SQL语句,而要购买这个软件也不太实际,费用高不说,还是外国的买起来也麻烦,软件为转换这么几个存储过程去耗费这么大的资金在我们这些用盗版的人看来是不可取的,我们的数据库对象那么多,显然这是不好办的问题,那么能否用欺骗的手法蒙混过关呢?下面就是具体的欺骗手法了:
-记得以前用过一个软件叫着“完美卸载”此软件可以记录安装程序时对磁盘进行的更改,有了这个我们就可以安装软件的时候记录好此软件对磁盘所写入的文件,看看有什么异样这样我们就能理解共享软件在那个文件写入了注册信息。
-通过跟踪发现在安装软件的时候,安装程序除了对安装目录写入信息和少量的注册表信息外没有对磁盘做任何更改,别急,我们继续跟踪,跟踪到第一次运行软件的时候,就有了异样,发现此软件在Windows目录下写入了这个文件,赶忙备份此文件,转换了几行语句后,关闭软件,果然此文件再次被修改,这就说明很有可能此文件就是记录的软件试用的行数。当我们第二次使用的时候把备份的文件覆盖了原文件,但此事软件所有按钮都禁用了,说明软件还有其他的地方可以判断
用户
是否使用过软件。重新安装软件(其实就是把安装目录里的文件重置一下),结果又可以使用2000行了。这就是软件欺骗的全部过程,也是可当作破解软件的土办法,只是麻烦一点的是需要先备份安装目录和那个dll文件,注意那个dll文件不能通用,必须要程序生成的本机的dll文件。当快要用完试用行数的时候通过覆盖文件的方式欺骗软件,从而可以继续试用,就这么简单。
另外在转换数据库的过程中应该还要注意以下几个问题:
-在Oracle数据库中命名不能大于30个英文字符,无论是表名、存储过程名等等,统统不能大于30个字符。
-在Oracle数据库中,存储过程的定义更侠义一些,而不像SqlServer那样开放。特别像返回结果集这些操作上存在很多差异,在SQLServer可以直接试用select语句返回结果集,而Oracle只能把存储过程封装到包中设置Out参数的Cursor数据类型来达到返回结果集的目的,在存储过程内部不能直接试用Select语句返回结果集,很是不便。
-在使用单纯的SQL语句的时候,如果是多条语句,调用Oracle数据库就必须封装在begin/end语句块中。
-手动对Oracle数据库查询时可以选用PL/SQL Developer这个工具,蛮好用的。
http://www.cn
blog
s.com/Dragonpro/archive/2005/11/16/277473.
html

 

 

 

 

 

 

 

将SQL Server2005中的数据同步到Oracle中时间:2007-12-10 11:11:15来源:站长资讯收集整理作者:  有时由于项目开发的需要,必须将SQLServer2005中的某些表同步到Oracle数据库中,由其他系统来读取这些数据。不同数据库类型之间的数据同步我们可以使用链接服务器和SQLAgent来实现。假设我们这边(SQLServer2005)有一个合同管理系统,其中有表contract 和contract_project是需要同步到一个MIS系统中的(Oracle9i)那么,我们可以按照以下几步实现数据库的同步。

 

1.在Oracle中建立对应的contract 和 contract_project表,需要同步哪些字段我们就建那些字段到Oracle表中。

 

  这里需要注意的是Oracle的数据类型和SQLServer的数据类型是不一样的,那么他们之间是什么样的关系拉?我们可以在SQLServer下运行:

 

 

SELECT *

FROM msdb.dbo.MSdatatype_mappings

SELECT *

FROM msdb.dbo.sysdatatypemappings

 

 

 

  来查看SQLServer和其他数据库系统的数据类型对应关系。第一个SQL语句是看SQL转Oracle的类型对应,而第二个表则更详细得显示了各个数据库系统的类型对应。根据第一个表和我们的SQLServer中的字段类型我们就可以建立好Oracle表了。 

 

 

以下是引用片段:

ORACLEbigintNUMBER1931

ORACLEbinaryBLOBNULL01

ORACLEbinaryRAW-141

ORACLEbitNUMBER131

ORACLEcharCHAR-141

ORACLEcharCLOBNULL01

ORACLEcharVARCHAR2-141

ORACLEdatetimeDATENULL01

ORACLEdecimalNUMBER-131

ORACLEdouble precisionFLOATNULL01

ORACLEfloatFLOATNULL01

ORACLEimageBLOBNULL01

ORACLEintNUMBER1031

ORACLEmoneyNUMBER1931

ORACLEncharNCHAR-141

ORACLEncharNCLOBNULL01

ORACLEntextNCLOBNULL01

ORACLEnumericNUMBER-131

ORACLEnvarcharNCLOBNULL01

ORACLEnvarcharNVARCHAR2-141

ORACLEnvarchar(max)NCLOBNULL01

ORACLErealREALNULL01

ORACLEsmalldatetimeDATENULL01

ORACLEsmallintNUMBER531

ORACLEsmallmoneyNUMBER1031

ORACLEsysnameNVARCHAR212841

ORACLEtextCLOBNULL01

ORACLEtimestampRAW841

ORACLEtinyintNUMBER331

ORACLEuniqueidentifierCHAR3841

ORACLEvarbinaryBLOBNULL01

ORACLEvarbinaryRAW-141

ORACLEvarbinary(max)BLOBNULL01

ORACLEvarcharCLOBNULL01

ORACLEvarcharVARCHAR2-141

ORACLEvarchar(max)CLOBNULL01

ORACLExmlNCLOBNULL01

ORACLEbigintNUMBER1931

ORACLEbinaryBLOBNULL01

ORACLEbinaryRAW-141

ORACLEbitNUMBER131

ORACLEcharCHAR-141

ORACLEcharCLOBNULL01

ORACLEcharVARCHAR2-141

ORACLEdatetimeDATENULL01

ORACLEdecimalNUMBER-131

ORACLEdouble precisionFLOATNULL01

ORACLEfloatFLOATNULL01

ORACLEimageBLOBNULL01

ORACLEintNUMBER1031

ORACLEmoneyNUMBER1931

ORACLEncharCHAR-141

ORACLEncharCLOBNULL01

ORACLEntextCLOBNULL01

ORACLEnumericNUMBER-131

ORACLEnvarcharCLOBNULL01

ORACLEnvarcharVARCHAR2-141

ORACLEnvarchar(max)CLOBNULL01

ORACLErealREALNULL01

ORACLEsmalldatetimeDATENULL01

ORACLEsmallintNUMBER531

ORACLEsmallmoneyNUMBER1031

ORACLEsysnameVARCHAR212841

ORACLEtextCLOBNULL01

ORACLEtimestampRAW841

ORACLEtinyintNUMBER331

ORACLEuniqueidentifierCHAR3841

ORACLEvarbinaryBLOBNULL01

ORACLEvarbinaryRAW-141

ORACLEvarbinary(max)BLOBNULL01

ORACLEvarcharCLOBNULL01

ORACLEvarcharVARCHAR2-141

ORACLEvarchar(max)CLOBNULL01

ORACLExmlCLOBNULL01

ORACLEbigintNUMBER1931

ORACLEbinaryBLOBNULL01

ORACLEbinaryRAW-141

ORACLEbitNUMBER131

ORACLEcharCHAR-141

ORACLEcharCLOBNULL01

ORACLEcharVARCHAR2-141

ORACLEdatetimeDATENULL01

ORACLEdecimalNUMBER-131

ORACLEdouble precisionFLOATNULL01

ORACLEfloatFLOATNULL01

ORACLEimageBLOBNULL01

ORACLEintNUMBER1031

ORACLEmoneyNUMBER1931

ORACLEncharNCHAR-141

ORACLEncharNCLOBNULL01

ORACLEntextNCLOBNULL01

ORACLEnumericNUMBER-131

ORACLEnvarcharNCLOBNULL01

ORACLEnvarcharNVARCHAR2-141

ORACLEnvarchar(max)NCLOBNULL01

ORACLErealREALNULL01

ORACLEsmalldatetimeDATENULL01

ORACLEsmallintNUMBER531

ORACLEsmallmoneyNUMBER1031

ORACLEsysnameNVARCHAR212841

ORACLEtextCLOBNULL01

ORACLEtimestampRAW841

ORACLEtinyintNUMBER331

ORACLEuniqueidentifierCHAR3841

ORACLEvarbinaryBLOBNULL 01

ORACLEvarbinaryRAW-141

ORACLEvarbinary(max)BLOBNULL01

ORACLEvarcharCLOBNULL01

ORACLEvarcharVARCHAR2-141

ORACLEvarchar(max)CLOBNULL01

ORACLExmlNCLOBNULL01

 

 

2.建立链接服务器。我们将Oracle系统作为SQLServer的链接服务器加入到SQLServer中。

 

  具体做法参见我以前的文章http://www.cnblogs.com/studyzy/archive/2006/12/08/690307.html

 

3.使用SQL语句通过链接服务器将SQLServer数据写入Oracle中。

 

  比如我们建立了链接服务器MIS,而Oracle中在MIS用户下面建立了表contract_project,那么我们的SQL语句就是:

 

 

以下是引用片段:

DELETE FROM MIS..MIS.CONTRACT_PROJECT

--清空Oracle表中的数据

INSERT into MIS..MIS.CONTRACT_PROJECT--将SQLServer中的数据写到Oracle中

SELECTcontract_id,project_code,actual_money

FROM contract_project

 

 

 

  如果报告成功,那么我们的数据就已经写入到Oracle中了。用

 

 

以下是引用片段:

SELECT *

FROM MIS..MIS.CONTRACT_PROJECT

 

 

  查看Oracle数据库中是否已经有数据了。

 

4.建立SQLAgent,将以上同步SQL语句作为执行语句,每天定时同步两次。

 

  这样我们的同步就完成了。

 

  这里需要注意的是MIS..MIS.CONTRACT_PROJECT这里必须要大写,如果是小写的话会造成同步失败。

 

 

参考资料
[1].  下载我_精品源码软件教程资源网   http://www.xiazaiwo.net/tech/mysql/16084.html

附件列表


按字母顺序浏览:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

→我们致力于为广大网民解决所遇到的各种电脑技术问题
 如果您认为本词条还有待完善,请 编辑词条

上一篇Oracle 11g client中为什么找不到Enterprise Manager Co
下一篇HTTPS漏洞导致1500项iOS应用存在安全隐患

0
1. 本站部分内容来自互联网,如有任何版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
2. 本站内容仅供参考,如果您需要解决具体问题,建议您咨询相关领域专业人士。
3. 如果您没有找到需要的百科词条,您可以到百科问答提问或创建词条,等待高手解答。

关于本词条的提问

查看全部/我要提问>>