oracle转sqlserver
‘壹’ oracle数据怎样转化为sqlserver数据库里面
这个要看你的 数据库, 设计得有多复杂了.
假如 仅仅是用数据库存储 数据. 没有使用任何 存储过程/函数/触发器/序列号 什么的.
也没有什么存储 二进制大对象的列
那么还是比较简单的.
直接在 sql server 那里 建立一个 Oracle 的数据库链接
然后
SELECT * INTO 本地表名 FROM Oracle链接的表
SQL Server 链接服务器-访问 Oracle
http://hi..com/wangqing999/blog/item/c0a19a42862e311c6b63e5d2.html
假如你的 Oracle 数据库里面, 使用了很多 Oracle 特有的 特性。
那么 从 Oracle 迁移到 SQL Server , 可就有 一个列表清单的事情要做了。
比如 Oracle 有序列号, SQL Server 没有。 你要想办法折腾, 运气好的话 identity 可以处理。
又比如 Oracle 里面, 可以写 package 这样的 存储过程代码。 SQL Server 没有。
又比如 Oracle 里面, 有 其独有的 分析函数, 与 MODEL 查询。 SQL Server 没有。
建议你去查询 Oralce 移植 SQL Server 的贴子去看看。
求采纳为满意回答。
求采纳为满意回答。
‘贰’ 一段Oracle数据库脚本转成sql server脚本怎么转换
这个一般应该用数据库的迁移工具,直接对数据库进行转换;而不是对 数据库脚本进行转换。
对于你的情况,给一个建议:
先在Oracle中执行脚本,还原 Oracle数据库。
用powerdesigner生成数据库的物理模型(此处也可以直接用迁移工具)
在将数据库类型换成sqlserver,生成适合sqlserver的脚本。
上面的过程,只适合于表结构(主要是字段类型)。
对于视图、存储过程、触发器 等,应该还是需要自己修改。
‘叁’ 如何将Oracle中的数据导入到SQL Server中来
假设oracle安装在另一台IP地址为192.168.1.202的机器上,而你的机器上安装了MS SQL SERVER2005,现在你要将oracle中的一个数据库导入进来。
前提条件:
在本机安装oracle客户端,注意必须是安装版的,使用绿色版不可以。
http://www.cnblogs.com/flyrain/archive/2010/06/05/oracle-sqlserver.html
‘肆’ 怎样把Oracle查询转换为SQLServer
我们知道,T-SQL是SQL Server的语言引擎,而Oracle的语言引擎却是PLSQL.这两种查询语言都对 ANSI SQL-92标准进行了扩展以提供额外的支持力度。你所创建的应用程序几乎都要用到这些补充特性。本文就对最常用的、非标准的Oracle扩展进行了说明,同时还要介绍下如何 对这些扩展进行转化以用在SQL Server环境下。 列的选择 用PLSQL执行数据查询的时候,FROM子句是必须的,这同SQL Server的要求是一样的。 SELECT语句必须选择针对的数据表。在Oracle数据库内有一种特殊的表DUAL.DUAL表由 Oracle连同数据字典一同创建,所有的用户都可以用名称DUAL访问该表。这个表里只有一列DUMMY,该列定义为VARCHAR2(1)类型,有一行值X. 从DUAL表选择数据常被用来通过SELECT语句计算常数表达式,由于DUAL只有一行数据,所以常数只返回一次。 Oracle下的DUAL查询如下所示: SELECT ‘x’ FROM al 而对等的SQL Server查询则是下面这个样子: SELECT ‘x’ 连接 Oracle用|| 符号作为连接符,而SQL Server的连接符是加号:+ . Oracle查询如下所示: Select ‘Name’ || ‘Last Name’ From tableName 对应的SQL Server查询如下所示: Select ‘Name’ + ‘Last Name’ 数字取舍 Oracle数据库内有一个TRUNC函数,该函数返回m位十进制数的n位;如果省略m则n就是0位。m的值可以为负,表示截去小数点左边m位数字。 在SQL Server下可以用Round或者Floor. 以下是Oracle查询: SELECT TRUNC(15.79,1) "Truncate" FROM DUAL; 下面是同类查询的SQL Server版本: SELECT ROUND(15.79, 0) rounded , ROUND(15.79, 0,1) truncated SELECT FLOOR(ROUND(15.79, 0)), FLOOR(ROUND(15.79, 0,1) ) 在把Oracle查询转换为SQL Server的时候要特别当心一些不容易注意到的问题。我们知道,T-SQL是SQL Server的语言引擎,而Oracle的语言引擎却是PLSQL.这两种查询语言都对 ANSI SQL-92标准进行了扩展以提供额外的支持力度。你所创建的应用程序几乎都要用到这些补充特性。
‘伍’ 如何从oracle数据库导出数据到sql server
导出是用MS自带的ole
db
provider访问接口导出:
1.右键要导出的数据库【任务】-》【导出数据】-》设置导出数据源
2.设置oracle为目标数据源
3.设置目标表(创建)
4.编辑字段
由于sqlserver的t-sql与oracle的pl/sql定义数据类型不一样,这里注意要修改类型:
int
->
number
(注意设置number的精度)
nvarchar
->
varchar2
(最好是nvarchar2,但ms这个驱动只提供这种转换)
datetime
->
date
也可以直接编辑sql,注意pl/sql的编写方式,编辑完之后下一步
5.这里的datetime转成date是有警告的,不过没关系,然后可以忽略出错与截断,下一步:
6.点击完成
在oracle
em里面查看刚才导出的数据表及数据
‘陆’ 能将Oracle数据导入sql server数据库吗
可以的
1、在目的SQL Server数据库服务器上安装ORACLE Client软件或者ORACLE ODBC Driver.
通过oracle客户端,在netmanager中建立“服务(TNS server)”,并测试连接上oracle数据库正常
2、在sqlserver的DTS(导入和导出数据工具)进行
(1)选择数据源:
数据源:oracle in oracle9i
选择:用户/系统DSN:
点击新建DSN:选择数据源类型:系统数据源,
下一步:选择驱动程序:oracle in oracle9i,下一步,完成 ,
进入oracle odbc driver configration页面
再输入:datasorce name:GZDS
TNS server name:gz(通过netmanager定义好TNS server)
user:(oracle登录用户)
填写好以后,进行"TEST Connection"
可以连通,则点击“ok”,DSN建立完成
数据源选择完成,点击“下一步”进入“选择目的”
(2)选择目的
目的:用于SQL Server的Microsoft OLE DB提供程序
服务器:192.168.0.63
选择:使用sqlserver身份登录
用户名:sa 密码:pass
并刷新,选择好数据库:test(目的数据库,提前建立好的)并点击“下一步”
a.从数据源复制表和数据(下一步:选择源表及视图)
b.用一条查询语句指定要传输的数据(进行sql编辑)
(通过以上选择好要复制的数据表或者相关视图)
再点击下一步“保存、调度和复制包”
(3)“保存、调度和复制包”
时间:立即运行
再点击下一步:进行:“正在完成DTS导入导出”向导
(4)完成:
点击:“完成”按钮,系统进入数据复制“正在执行包”的页面,
可以看到数据正在复杂的进度条
注意:在ORACLE表和SQL Server表之间'转换'那步很重要,
可以改变默认的字段数据类型,如image->text,decimal->int
‘柒’ 如何从oracle迁移数据到sql server
前阵做了下数据库迁移,从Sql Server2005迁移到Oracle
10g,这里说一下迁移的方法。
Sql
Server和Oracle区别比较大,包括语法,字段类型,数据库机制,配置管理方法等等,区别是全方位的,做迁移需要注意很多问题,在迁移过程中也会遇到问题,需要细细处理之。这里说一下数据库结构的迁移,和迁移过程中注意的一些问题。(当然具体的数据库迁移过程中可能问题是不一样的,具体问题具体分析了)
迁移的方法是从Sql Server已有数据库中生成出Oracle的建库脚本,然后在Oracle数据库上执行。用到的生成工具是Power
Designer。
1、打开PD(Power
Designer简称,以下均使用PD),新建一个PDM(物理数据模型),DBMS选择Microsoft SQL
Server2005,Model name起名叫做mssdb。
2、通过逆向工程将现有Sql
Server数据库生成PDM
(1)选择Database->Reverse
Engineer Database,配置数据源,选择要迁移的数据库,输入用户名、密码。
(2)选择数据库,选择用户dbo下的所有表、视图、存储过程、方法、触发器、序列等(由于Sql Server与oracle,数据库概念上的区别,这里不需选择用户、角色)。
点击OK,生成PDM。已经建立过PDM的情况,这一步可以省略。
3、生成Oracle物理数据模型
选择Tools->Generate Physical Data Model
(1)DBMS选择Oracle
10g,输入名称:oradb。
(2)在Configure Model
Options配置中, Model Settings的Table&View界面中,勾选Ignore
identifying owner。Oracle中用户的概念与Sql Server不同,这里忽略owner。
(3)Selection标签,选择需要生成的所有表、视图、外键、存储过程、方法、触发器、序列等。
点击确定,即生成了oracle 的PDM。
注意,在生成PDM的过程中可能不会一帆风顺,有可能会报错(比如提示对象长度超限),这会导致生成失败。这时需要根据具体错误提示做相应修改(可能需要多次调整,没有办法,谁让两者差别这么大的呢)。
4、生成Oracle脚本
与Sql
Server不同的是,在Oracle里表名、字段名全部为大写,若要单独处理为小写,需加上双引号。而PD生成的脚本默认是有双引号的,这里需要修改默认配置,去掉双引号。
然后选择oradb,然后选择Database->Generate
Database,进入数据库生成界面
在Format标签下,去掉勾选Owner prefix,它将省掉建表语句前“dbo.”所带来的麻烦;
在Selection标签下,选择要生成脚本的各对象;
在Preview标签下,可以预览预生成的脚本(表较多时,切换会比较慢)。
点击确定,即得到生成的脚本。
5、检查与调整
脚本是PD自动生成的,因为表比较多,在oracle上直接去执行难免会有错误。所以在执行之前需要检查下脚本的正确性。这里提几点需要注意的地方。
(1)Oracle要求表名、字段名等长度最多是30位,而Sql Server没有这个限制,所以可能会有在Sql
Server创建正常的表而在Oracle下会创建失败。
(2)检查一下主键、外键的名称,它们有可能是随机生成的名称。可根据相应规范进行修改。
(3)检查字段名是否用到了Oracle的关键字。比如Sql
Server命名“备注”字段可能会用“comment”、标题用“title”,但comment、title在Oracle中是关键字,不可以做为字段名称。
(4)存储过程、方法是否符合Oracle语法。
(5)Sql
Server有自增字段,而Oracle没有。要实现此功能,需要相应创建序列、触发器。
(6)Sql
Server中字段类型为text的情况,如果是存二进制数据需要在Oracle中选用Blob字段类型。
(7)Sql
Server有外键的情况,主表记录删除,从表记录也会跟着删除;而Oracle默认情况是当从表有记录时,所对应的主表记录不允许删除。所以这种情况下外键需要添加外键级联删除。
(8)生成的表、视图等个数是否正确,缺失的情况可单独生成脚本。
系统不一样,出现问题的点可能也不一样,具体问题具体分析。
6、建库
在Oracle数据库服务(当然要先安装好Oracle服务端、并建立数据库)orcl实例下,使用用户sys登陆并创建用户orauser,并将resource、connect角色赋给orauser(这里,orauser使用默认表空间、默认临时表空间)。
用刚创建的用户orauser登陆orcl数据库服务,执行前面已经生成的脚本,若干分钟后脚本执行完毕,观察一下执行过程中有无错误产生,也可以记录执行的日志以便日后查看;检查看表、视图等个数与Sql
Server数据库中是否一致。如果都正确,那么,数据库结构从Sql
Server到Oracle的迁移到此结束。当然,迁移的是否正确还需要在之后的使用中检查,发现错误及时修改即可。
‘捌’ 如何将oracle表中数据导入到sqlserver
--用DTS移植数据
--数据转换服务(Data Transformation Services,简称DTS),它可以在任意数据源之间移动数据,并在移动过程中对数据进行清洗
--DTS通常用于将数据移动到SQL Server,但实际上它可以方便地在几乎所有的数据源之间移动数据
--注意:“复制数据库向导”和“导入/导出向导”实际只是创建和执行了DTS包
--DTS设计器
--“数据转换服务”->“本地包”->新建或打开包
--“连接”:可用的连接对象
--“任务”:包含了19个关键的数据转换任务,其中最常见的是“转换数据任务”和“执行SQL任务”
--“包属性”:在DTS的设计器中选择“包”->“属性”或右键“包属性”,可以打开包属性对话框
--添加“连接”
--添加“任务”
--1、源:源可以是源连接中的一个表、视图,或者一个SQL查询
--2、目的:接收数据的表
--3、转换:对源数据列和目的数据列进行匹配或者连接。一个列转换可以是下列情形之一:
--复制列是转换中最常见的情况
--日期时间字符串、小写字符串、字串、裁剪字符串和大写串的处理全都与复制列转换类似,不同的是
--它们中的每一个都增加了某种类型的数据转换功能
--读文件和写文件分别用于将数据导入或者导出到源列中所指定的文件
--对于包含有逻辑或者数据查找的复杂转换,需要使用ActiveX脚本实现
--4、查找:仅仅把数据从一个表移动到另外一个表是一项很简单的任务。但在很多情况下我们都必须在转换的过程中对数据进行修改
--转换任务可以调用查找脚本找出需要的值来替换源数据集中的值
--a、定义一个查找,“名称”:需要替换的源数据中的列名;“连接”:目的驱动;“高速缓存”:设置DTS执行时可以缓存的查询结果数量
--b、“查询”:可以打开查询设计器的一个变种,通过它可以为任意的连接定义有效的查询。该查询应当以源列表中的值为输入(参数),
--并返回相应的替代它的值以便插入目的表。输入的参数用‘?’来表示,而select语句所返回的值就是用于在目的表中替代输入参数的值
--下面的例子从源列中读出顾客类型的名字,并用查询所返回的CustomerTypeID来替代它
select customertypeid from customertype where (name = ?)
--为什么要这样做呢?源表中的customertype列为字符,而目的表中的customertypeid为整型,所以需要根据源表中的customertype(字符)
--从表customertype中得到相应的customertypeid以便插入到目的表的customertypeid(整数)中
--c、Active转换?
/*'**********************************************************************
' Visual Basic Transformation Script
'************************************************************************
' Copy each source column to the destination column
Function Main()
DTSDestination("CustomerTypeID") = DTSLookups("CustomerType").Execute(DTSSource("CustomerType"))
Main = DTSTransformStat_OK
End Function
*/
--5、转换选项:
--工作流控制
--DTS只包含几个任务的情况在实际中是很少见的。绝大多数DTS包都要执行数十个任务,而这些任务之间又具有错综复杂的关系。因此,执行
--顺序对于防止错误的发生至关重要。
--DTS通过以下选项来控制工作流的执行顺序:完成时(蓝色);成功时(绿色);失败时(红色)
--如:添加任务“执行SQL任务”(用来执行SQL语句),以在执行其他任务之前删除表中的数据。则此任务为第一个执行。选中此任务和第二个
--任务,然后从“工作流”中选择需要工作流类型(如完成),就可以设定这两个任务之间的执行顺序。执行好之后作用:先执行第一个任务,
--完成后,再执行第二个任务。。
--如果要为转换数据任务设置工作流,可以选择该转换任务的源连接,右键->“工作流属性”->设置工作流
--执行DTS包
--存储和移动DTS包
--1、“包”->“保存”:保存到本地服务器上。展开企业管理器控制台树的“数据转换服务”->“本地包”,将会看到那些保存的包
--2、“包”->“另存为”:提供了其他几种可选的存储格式和选项
--SQL Server:这种方法将包保存在任何已注册的SQL Server的MSDB数据库的sysdtspackages表中。如果已经注册了相应的服务器,
--这将是最简单的把包移动到另外一个SQL Server上的办法。如果要把包移动到还没有注册的服务器上,应使用“结构花存储文件”选项
--Meta Data Services:这种高级的方法可以跟踪已经为DTS修改的数据
--结构化存储文件:这种方法能够创建可以复制到另外一个SQL Server,并且可以在另外一台服务器上打开的文件。一定要注意SQL Server
--和service pack的版本号,因为具有不同的service pack级别的SQL Server 2000实例所使用的结构化存储文件有可能是不兼容的
--要打开用结构化存储文件格式保存的包,可以在企业管理器控制台树的数据转服务节点的快捷方式菜单中选择“打开包”菜单命令
--Visual Basic文件:这个选项可以生成与SQL Server DTS包完成同样任务的VB脚本
--注意:如果已经使用“包”->“另存为”命令保存了包,“包”->“保存”命令将用上一个“另存为”命令所选择的位置和格式来保存这个包
--增量和版本
--数据转换服务还有一个很好的特性:它能够对包的变化进行管理。包的每次保存都会产生该包的一个新版本,最终就会形成该包的多个连续的版本
--如果要查看任意包所保存的各个版本,可以在企业管理器中,从本地包清单中选择一个DTS包,然后选择“操作”->“版本”菜单命令,或者从
--该包的快捷方式菜单中选择“版本”菜单。此时将会打开“DTS包版本”对话框,并显示该包的各个版本的日期和描述
--使用“DTS包版本”对话框,可以打开以前的版本进行编辑或者对它们进行清理。如果想恢复到某个以前的版本,可以打开该版本进行编辑,然后】
--使用“包”->“另存为”菜单命令以一个新名字保存该包
‘玖’ 求介绍一下oracle数据库脚本转换成sqlserver数据库脚本的经验,只能手工吗,还是有简便的方法或者工具
这个一般应该用数据库的迁移工具,直接对数据库进行转换;而不是对 数据库脚本进行转换。
对于你的情况,给一个建议:
先在Oracle中执行脚本,还原 Oracle数据库。
用powerdesigner生成数据库的物理模型(此处也可以直接用迁移工具)
在将数据库类型换成sqlserver,生成适合sqlserver的脚本。
上面的过程,只适合于表结构(主要是字段类型)。
对于视图、存储过程、触发器 等,应该还是需要自己修改。
‘拾’ 如何将Oracle数据库中的一张表导入到SqlServer中
看你上面说的方法应该是用ODBC,数据源是指你配置的oracle访问名,首先你要安装有oracle客户端(如果你是在安装了oracle数据库的机器上操作就不需要再安装oracle客户端了),然后用Net
Configuration
Assistant配置好你要访问的oracle数据库的访问名。该访问名就是上面你要填的数据源。你可以到oracle安装目录下,找到tnsnames.ora文件,里面记录了你配置的oracle数据库访问名。比如我的数据库是10G的,该文件在目录D:\oracle\proct\10.2.0\db_1\NETWORK\ADMIN
\tnsnames.ora
里面你可以找到类似这样的东西
你配的访问名
=
(DESCRIPTION
=
(ADDRESS
=
(PROTOCOL
=
TCP)(HOST
=
数据库的IP地址或机器名)(PORT
=
1521))
(CONNECT_DATA
=
(SERVER
=
DEDICATED)
(SERVICE_NAME
=
数据库的SID)
)
)