导航

把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也是可以的。