SQL Server 2005------利用Linked Server把Oracle数据表导入SQL Server中
Posted on 2009-07-13 19:48 鸡尾虾的壳 阅读(1156) 评论(0) 编辑 收藏 举报把Oracle数据表导入SQL Server中的实现方法:
1. 利用数据数据库的导入导出功能,把Oracle数据表记录导出为Excel,然后在SQL Server中导入。缺点是只是适合于小数据量的情况。
2. 利用SSIS的ETL功能。缺点是无法自动生成DML。
3. 利用SQL Server的Linked Server Object。
4. 利用数据库移植功能,如SQL Server-->DBName-->Tasks-->Import/Report Data。
第一步、建立指向Oracle数据库的Linked Server Object
在控制台上或者通过T-SQL实现。
/* 对Oracle的链接服务器 */
EXEC master.dbo.sp_addlinkedserver @server = N'JacksonLinkedServer', @srvproduct=N'Oracle', @provider=N'OraOLEDB.Oracle', @datasrc=N'HLLPPP'
这个存储过程的参数用法很灵活,主要依赖于是使用那种数据库连接驱动,如MS OLE, ODBC/DNS, 还是数据库厂商提供的驱动。上面的语句是连接指向Oracle TNS为HLLPPP的链接服务器。
/* 对SQL Server的链接服务器* /
EXEC sp_addlinkedserver
@server='DBVIP2',--被访问的服务器别名
@srvproduct='',
@provider='SQLOLEDB',
@datasrc='OUJA_2' --要访问的服务器
执行在属性中看到的Provider是"SQL Native Client",Product Name是空。
导出的创建脚本是:EXEC master.dbo.sp_addlinkedserver @server = N'DBVIP', @provider=N'SQLNCLI', @datasrc=N'OUJA_2',strange!!!
/* Add login mapping for Oracle Linked Server
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'JacksonLinkedServer',@useself=N'False',@locallogin=NULL,@rmtuser=N'HLLP_SUPP',@rmtpassword='########'
这个是配置本地服务器账户和远程服务器账户间的匹配关系。
设置一些Option,如"Rpc","Rpc Out“设置为True。
在控制台"Linked Server"目录下,可以看到当前服务器可用的Provider的名称。例如,如果SQL Server所在的主机没有安装Oracle DBMS Client,那么"OraOLEDB.Oracle"是不会出现的。
第二步、进行分布式查询
如:select * into llp_isf_item_hts from OPENQUERY(JacksonLinkedServer,'select * from tempTable')
由于Oracle, SQL Server中一些数据类型的不同,需要对如Date类型字段做特殊处理,否则容易出现如"Error converting data type DBTYPE_DBTIMESTAMP to datetime"的错误信息。
如果链接服务器是SQL Server,那么采用四段命名法,如select * from linkedServerName.DBName.SchemaName.TableName也是可以的。