- 浏览: 606530 次
- 性别:
- 来自: 西安
文章分类
- 全部博客 (365)
- Java 基础知识(笔试面试有用) (35)
- SQL 相关 (11)
- Oracle笔试 (1)
- Java 笔试面试 (11)
- LINUX (12)
- ExtJS (21)
- Javascript (17)
- WebGIS (2)
- 软件工程 (3)
- 数据库 (17)
- 项目管理 (63)
- 工作流 (2)
- 计算机网络 (3)
- ZigBee技术及应用 (24)
- 单片机(AVR Studio) (7)
- 项目人力资源管理 (3)
- 项目管理高级知识 (4)
- JAVA技术 (12)
- 项目管理中的概念 (3)
- SQL SERVER (1)
- C++ (1)
- C/C++编程经验 (12)
- C和C++面试笔试题 (12)
- 其他IT技术笔试面试 (6)
- 名企笔试面试集锦 (16)
- 非技术 (10)
- C#相关 (1)
- Matlab相关 (2)
- 计算机专业课相关 (2)
- Web Service (1)
- Excel 使用 (1)
- PhotoShop相关 (4)
- ASP 相关 (2)
- android (1)
- Java WEB 相关 (1)
- web 安全相关 (7)
- 网络安全 (1)
- IBatis (1)
- web 开发技巧 (2)
- css 相关 (1)
- Ruby相关 (2)
- 生活 (3)
- 操作系统安全相关 (6)
- 操作系统相关 (1)
- PHP相关 (3)
- 开发经验 (12)
- Redis (1)
最新评论
最近做了些数据库转换工作,主要是从Sql Server转换到Oracle,过程中遇到很多问题,现进行一个小小总结,方便有同样需求的朋友们。
需要对数据库结构、数据、自定义函数、存储过程等数据库元素进行转换,由于Sql Server和Oracle数据库语言本身的差异非常大,所以自定义函数和存储过程的转换是比较困难的一件事情,市面上也很少有这方面的工具,几乎都想直接写工具了,后来却找到了个国外的一个叫做“SwissSQL-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目录下写入了<!--[if gte vml 1]><v:shapetype
id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter" />
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0" />
<v:f eqn="sum @0 1 0" />
<v:f eqn="sum 0 0 @1" />
<v:f eqn="prod @2 1 2" />
<v:f eqn="prod @3 21600 pixelWidth" />
<v:f eqn="prod @3 21600 pixelHeight" />
<v:f eqn="sum @0 0 1" />
<v:f eqn="prod @6 1 2" />
<v:f eqn="prod @7 21600 pixelWidth" />
<v:f eqn="sum @8 21600 0" />
<v:f eqn="prod @7 21600 pixelHeight" />
<v:f eqn="sum @10 21600 0" />
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" />
<o:lock v:ext="edit" aspectratio="t" />
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" alt="" style='width:51.75pt;
height:10.5pt' /><![endif]--><!--[if !vml]--><!--[endif]-->这个文件,赶忙备份此文件,转换了几行语句后,关闭软件,果然此文件再次被修改,这就说明很有可能此文件就是记录的软件试用的行数。当我们第二次使用的时候把备份的文件覆盖了原文件,但此事软件所有按钮都禁用了,说明软件还有其他的地方可以判断用户是否使用过软件。重新安装软件(其实就是把安装目录里的文件重置一下),结果又可以使用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.cnblogs.com/Dragonpro/archive/2005/11/16/277473.html
将SQL Server 2005中的数据同步到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表了。
以下是引用片段:
ORACLE bigint NUMBER 19 3 1
ORACLE binary BLOB NULL 0 1
ORACLE binary RAW -1 4 1
ORACLE bit NUMBER 1 3 1
ORACLE char CHAR -1 4 1
ORACLE char CLOB NULL 0 1
ORACLE char VARCHAR2 -1 4 1
ORACLE datetime DATE NULL 0 1
ORACLE decimal NUMBER -1 3 1
ORACLE double precision FLOAT NULL 0 1
ORACLE float FLOAT NULL 0 1
ORACLE image BLOB NULL 0 1
ORACLE int NUMBER 10 3 1
ORACLE money NUMBER 19 3 1
ORACLE nchar NCHAR -1 4 1
ORACLE nchar NCLOB NULL 0 1
ORACLE ntext NCLOB NULL 0 1
ORACLE numeric NUMBER -1 3 1
ORACLE nvarchar NCLOB NULL 0 1
ORACLE nvarchar NVARCHAR2 -1 4 1
ORACLE nvarchar(max) NCLOB NULL 0 1
ORACLE real REAL NULL 0 1
ORACLE smalldatetime DATE NULL 0 1
ORACLE smallint NUMBER 5 3 1
ORACLE smallmoney NUMBER 10 3 1
ORACLE sysname NVARCHAR2 128 4 1
ORACLE text CLOB NULL 0 1
ORACLE timestamp RAW 8 4 1
ORACLE tinyint NUMBER 3 3 1
ORACLE uniqueidentifier CHAR 38 4 1
ORACLE varbinary BLOB NULL 0 1
ORACLE varbinary RAW -1 4 1
ORACLE varbinary(max) BLOB NULL 0 1
ORACLE varchar CLOB NULL 0 1
ORACLE varchar VARCHAR2 -1 4 1
ORACLE varchar(max) CLOB NULL 0 1
ORACLE xml NCLOB NULL 0 1
ORACLE bigint NUMBER 19 3 1
ORACLE binary BLOB NULL 0 1
ORACLE binary RAW -1 4 1
ORACLE bit NUMBER 1 3 1
ORACLE char CHAR -1 4 1
ORACLE char CLOB NULL 0 1
ORACLE char VARCHAR2 -1 4 1
ORACLE datetime DATE NULL 0 1
ORACLE decimal NUMBER -1 3 1
ORACLE double precision FLOAT NULL 0 1
ORACLE float FLOAT NULL 0 1
ORACLE image BLOB NULL 0 1
ORACLE int NUMBER 10 3 1
ORACLE money NUMBER 19 3 1
ORACLE nchar CHAR -1 4 1
ORACLE nchar CLOB NULL 0 1
ORACLE ntext CLOB NULL 0 1
ORACLE numeric NUMBER -1 3 1
ORACLE nvarchar CLOB NULL 0 1
ORACLE nvarchar VARCHAR2 -1 4 1
ORACLE nvarchar(max) CLOB NULL 0 1
ORACLE real REAL NULL 0 1
ORACLE smalldatetime DATE NULL 0 1
ORACLE smallint NUMBER 5 3 1
ORACLE smallmoney NUMBER 10 3 1
ORACLE sysname VARCHAR2 128 4 1
ORACLE text CLOB NULL 0 1
ORACLE timestamp RAW 8 4 1
ORACLE tinyint NUMBER 3 3 1
ORACLE uniqueidentifier CHAR 38 4 1
ORACLE varbinary BLOB NULL 0 1
ORACLE varbinary RAW -1 4 1
ORACLE varbinary(max) BLOB NULL 0 1
ORACLE varchar CLOB NULL 0 1
ORACLE varchar VARCHAR2 -1 4 1
ORACLE varchar(max) CLOB NULL 0 1
ORACLE xml CLOB NULL 0 1
ORACLE bigint NUMBER 19 3 1
ORACLE binary BLOB NULL 0 1
ORACLE binary RAW -1 4 1
ORACLE bit NUMBER 1 3 1
ORACLE char CHAR -1 4 1
ORACLE char CLOB NULL 0 1
ORACLE char VARCHAR2 -1 4 1
ORACLE datetime DATE NULL 0 1
ORACLE decimal NUMBER -1 3 1
ORACLE double precision FLOAT NULL 0 1
ORACLE float FLOAT NULL 0 1
ORACLE image BLOB NULL 0 1
ORACLE int NUMBER 10 3 1
ORACLE money NUMBER 19 3 1
ORACLE nchar NCHAR -1 4 1
ORACLE nchar NCLOB NULL 0 1
ORACLE ntext NCLOB NULL 0 1
ORACLE numeric NUMBER -1 3 1
ORACLE nvarchar NCLOB NULL 0 1
ORACLE nvarchar NVARCHAR2 -1 4 1
ORACLE nvarchar(max) NCLOB NULL 0 1
ORACLE real REAL NULL 0 1
ORACLE smalldatetime DATE NULL 0 1
ORACLE smallint NUMBER 5 3 1
ORACLE smallmoney NUMBER 10 3 1
ORACLE sysname NVARCHAR2 128 4 1
ORACLE text CLOB NULL 0 1
ORACLE timestamp RAW 8 4 1
ORACLE tinyint NUMBER 3 3 1
ORACLE uniqueidentifier CHAR 38 4 1
ORACLE varbinary BLOB NULL 0 1
ORACLE varbinary RAW -1 4 1
ORACLE varbinary(max) BLOB NULL 0 1
ORACLE varchar CLOB NULL 0 1
ORACLE varchar VARCHAR2 -1 4 1
ORACLE varchar(max) CLOB NULL 0 1
ORACLE xml NCLOB NULL 0 1
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中
SELECT contract_id,project_code,actual_money
FROM contract_project
如果报告成功,那么我们的数据就已经写入到Oracle中了。用
以下是引用片段:
SELECT *
FROM MIS..MIS.CONTRACT_PROJECT
查看Oracle数据库中是否已经有数据了。
4.建立SQLAgent,将以上同步SQL语句作为执行语句,每天定时同步两次。
这样我们的同步就完成了。
这里需要注意的是MIS..MIS.CONTRACT_PROJECT 这里必须要大写,如果是小写的话会造成同步失败。
发表评论
-
MySQL 性能优化之索引
2016-05-14 10:22 0我们都知道通过创建索引来提升查询性能,更深入的话,可能会 ... -
MySQL的事务隔离级别
2016-03-08 18:46 463问题背景:前几天在项目中遇到 两个进程 query MyS ... -
django mysql 查询不出数据表中的新数据(数据库事务)
2016-03-08 18:55 3071背景:实际django项目中遇到这样一个问题,两个进程A ... -
一次SQL优化过程中的分析过程
2015-12-22 18:58 16284线上有这样一个Sql耗时 ... -
MongoDB介绍及下载与安装
2014-02-19 17:29 827第一节 MongoDB介绍 ... -
数据库三范式
2012-10-18 19:07 901关系数据库的几种设计范式介绍 1、第一范式(1NF) ... -
数据库 索引相关
2012-10-06 08:08 804索引是对数据库表中一列或多列的值进行排序的一种结构 ... -
编程经验总结
2012-10-04 21:42 879jboss必须小心和jdk的版本对应上。要不会出现错误 ... -
常用SQL语句
2012-10-02 10:18 704首先,简要介绍基础语句: 1、说明:创建数据 ... -
CDM和PDM的区别?
2012-10-01 14:49 1684CDM和PDM的区别? 概念 ... -
数据库相关资料下载
2012-09-28 22:32 781数据库相关讲义下载 -
MySQL 默认编码
2012-07-30 14:56 742修改MySQL的默认编码,编辑my.ini(MySQL配 ... -
MySQL 忘记root 密码
2012-07-30 14:56 6961、运行命令Net stop mysql停止mysql服 ... -
MySQL 常用命令
2012-07-27 16:46 939第一招、mysql服务的启动和停止 net ... -
ibatis查询结果不能自动赋值
2011-05-05 12:55 1417ibatis查询结果不能自动赋值,不知道大家有没有遇到。 ... -
ibatis 查询数据时 出错
2011-05-04 09:36 892用Ibatis框架的时候。有时候能碰到这种事情。什么都正确。但 ... -
PowerDesigner CDM建模
2011-05-03 16:45 874转自:http://tech.it168.co ...
相关推荐
在 SQL Server 中,我们可以创建一个链接服务器,以便连接到 Oracle 数据库。下面是一个示例代码: ```sql EXEC sp_addlinkedserver @server = 'GE160', @srvproduct = 'Oracle', @provider = 'MSDAORA', @datasrc ...
本篇文章将深入探讨如何将数据从SQL Server导入到Oracle数据库,这对于数据迁移、数据整合或跨平台操作具有重要意义。 首先,我们来了解SQL Server和Oracle的基本特性。SQL Server是微软公司开发的一款关系型数据库...
### SQL Server到Oracle数据库迁移详解 #### 一、引言 随着企业的发展和技术的更新换代,企业常常需要对原有的数据库系统进行迁移或升级。本文将详细介绍如何使用Java语言实现从SQL Server到Oracle数据库的数据...
Oracle 数据库到 SqlServer 数据迁移步骤详解 Oracle 数据库到 SqlServer 的数据迁移是一项复杂的任务,需要经过多个步骤来完成。本文将详细介绍如何将 Oracle 数据库导入到 SqlServer 中。 Step 1-6: 数据源设置...
在企业级应用中,有时需要在不同的数据库系统间进行数据迁移或兼容性处理,这就涉及到了SQL Server到Oracle的数据转换。本篇文章将详细探讨如何利用工具实现SQL Server自动生成SQL语句并转换到Oracle。 首先,标题...
### SQL Server 2012 连接 Oracle 数据库操作说明 #### 一、概述 在实际工作中,经常需要在不同的数据库系统之间进行数据交互。本文档将详细介绍如何使用 SQL Server 2012 实现与 Oracle 数据库的连接,并进行数据...
标题“sql server导入oracle数据库.rar”涉及的主题是关于在两个不同的数据库系统之间进行数据迁移,具体是从Microsoft SQL Server到Oracle数据库。这个压缩包文件包含了相关的教程和指导文档,帮助用户了解并执行这...
例如,一个使用ODBC的应用程序可以在不修改代码的情况下,只需更换不同的ODBC驱动,就可以连接到SQL Server、Oracle或MySQL数据库。 在实际开发中,使用ODBC驱动可能会涉及到以下知识点: 1. 数据源配置:每个ODBC...
本主题将深入探讨如何将数据从SQL Server导入到Oracle数据库,这涉及到多个步骤和技术。以下是对这个过程的详细解析: 首先,理解SQL Server和Oracle是两种不同的关系型数据库管理系统(RDBMS)。SQL Server由微软...
标题与描述均指向了一个具体的技术操作过程:“SQLSERVER导入ORACLE数据库”。这涉及到跨数据库系统的数据迁移,是一项在企业级数据库管理中常见的需求,尤其是在不同的技术栈或业务整合时。以下将深入解析这一过程...
首先,为了能够从Oracle数据库连接到SQL Server数据库,我们需要在Oracle服务器上配置ODBC数据源。具体步骤如下: 1. **创建ODBC数据源**:使用Oracle服务器的操作系统提供的ODBC管理工具创建一个新的ODBC数据源,...
SqlServer2008通过Oracle provider for OLEDB访问远程Oracle数据库 包括链接服务器环境安装、链接服务器创建、远程建表、修改表,增删改查数据,创建、执行带参与无参存储过程的方法等,资料为作者参考网络资料整理...
SQL的过程中对调用者传进的SQL进行转换后再执行,就基本完成了整个系统的SQL语法从SQL Server到Oracle的 兼容,呵呵,听起来有点不可思议。系统已经于3个月前上线,目前运行很稳定。 如果有人用得着或发现什么...
### Oracle到SQL Server存储过程语法转换详解 在数据库迁移项目中,从Oracle迁移到SQL Server是一种常见的场景。本文旨在提供一份详细的指南,帮助开发者更好地理解这两种数据库系统在存储过程方面的语法差异,并...
数据库转换工具,可实现oracle,mysql,sqlserver,sybase,db2相互转换
本教程将详细讲解如何将数据从SQL Server导入到Oracle数据库,确保你理解每一步骤,并能顺利进行操作。 首先,我们需要在SQL Server中创建一个新的数据库。这可以通过SQL Server Management Studio (SSMS) 来完成。...
连接 sqlserver oracle 经典方法
Oracle 到 SQL Server 跨库查询是指通过网关工具将数据从 SQL Server 数据库中抽取到 Oracle 数据库中。这个过程需要安装和配置网关软件,并进行相应的设置和配置。 一、网关软件安装 网关软件的安装是跨库查询的...