金沙澳门唯一官网Sql2008连接访问Oracle

2019-11-14 17:14 来源:未知

急需描述:

  1. 连年方式

    透过SQL server 的 linkedserver的效能连接

  2. 实质上操作

    SQL Server数据库连接Oracle数据库

有备无患专门的学问

 

先行在急需拜谒Oracle 数据库的主机上实现以下职业:

标准化计划:

  1. 安装SQL Server 数据库:SQL Server 2008 R2 Express

  2. 安装Oracle 顾客端访谈程序:Oracle 11g Client

  3. 安插Oracle 顾客端tnsnames.ora 文件,个中须求留意文件中的数据库别称"ORADB",该名称在下文创造Linked Server 时将会动用到。

    SQL Server数据库,SQL Server 2008R2

ORADB =  

    Oracle数据库,Oracle 12.2.0.1.0

 (DESCRIPTION =  

    Oracle客户端,Oracle 11g Client或Oracle 12c Client

 (ADDRESS = (PROTOCOL = TCP)(HOST = HOSTIP)(PORT = 1521))   (CONNECT_DATA = (SID = DBNAME)) ) 

 

  1. 保障主机可以透过SQLPlus 访谈远程Oracle 数据库。

    必得在SQL Server数据库主机安装Oracle顾客端(ODBC驱动),并布署tnsnames.ora

金沙澳门唯一官网 1

 

创建Linked Server

连续几天来方式

 

    使用  linked server 或 rowset function

配备OraOLEDB.Oracle 勾选箭头方向

 

金沙澳门唯一官网 2

    linked server情势,首借使运用sp函数包进行布局和连接Oracle数据库(其余数据库也长久以来适用)

张开SQL Server Management Studio 步向服务器对象 列表,右键链接服务器,点击"新建链接服务器…"

语法 
sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ] [ , [ @provider= ] 'provider_name' ] [ , [ @datasrc= ] 'data_source' ] [ , [ @location= ] 'location' ] [ , [ @provstr= ] 'provider_string' ] [ , [ @catalog= ] 'catalog' ]

 provider可选值【SQLNCLI | SQLOLEDB】->SQL Server、【OraOLEDB.Oracle】->Oracle、【MSDASQL】->POSTGRESQL、【 Microsoft.Jet.OLEDB.4.0】->EXCEL

金沙澳门唯一官网 3

 

在General 界面中填写上边几项内容:

    举例:

链接服务器: 自定义填写名称

        

做客接口:采纳Oracle Provider for OLE DB

--创建链接别名
exec master.dbo.sp_addlinkedserver
@server = 'Oraclelink',--指定链接数据库的别名
@srvproduct = 'oracle',--链接对象数据库的产品
@provider = 'OraOLEDB.Oracle',--驱动器
@datasrc = 'HMDB0'--要访问的服务器,oracle需提供tnsnames.ora配置的别名
go


--登录链接数据库
exec master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = 'Oraclelink',--指定需登录的数据库链接别名
@locallogin = NULL,--本地服务器的登录名,直接访问Windows Server组成员
@useself = 'false',--关闭本地登录,true值使用本地账户认证,会忽略rmtuser和rmtpassword参数
@rmtuser = 'dbmonitor',--登录数据库用户名
@rmtpassword = 'xxxxxx'--登录密码
go

--查询oracle数据库测试
--数据库的格式必须是 链接别名..ORACLE用户名.表名
select * from Oraclelink..DBMONITOR.UNIQUE_T;
go


--查看当前所有链接列表
exec sp_linkedservers


--删除linked server
Exec sp_droplinkedsrvlogin Oraclelink,NULL --删除链接服务器的登陆帐户
Exec sp_dropserver Oraclelink --删除链接数据库别名

产物名称:自定义填写

 

数据源:填写上边提到的数目库别称ORADB

 金沙澳门唯一官网 4

金沙澳门唯一官网 5

   

点击安全性 ,点选"使用此安全上下文创设连接",假如Oracle 数据库有一个称号为system的顾客ID,在"远程登入"中输入访谈帐号,点击"明显"截止创制。

    

 

    rowset function方式

形成后链接服务器中会看见刚创造的Oracle 数据库链接。

                 首先图形分界面创设链接数据库别称

金沙澳门唯一官网 6

      金沙澳门唯一官网 7

访问Oracle

                金沙澳门唯一官网 8

接下去就可以在SQL Server 端访谈Oracle 数据库了,查询语法如下:

      金沙澳门唯一官网 9

  1. SELECT * FROM LINKED_NAME..ACCOUNT_NAME.TABLE_NAME; 

      金沙澳门唯一官网 10

结合上面的实例,假如要查询system
用户下jobs 表的内容,则相应SQL 语句应为: 

                    测量试验成功

  1. SELECT * FROM ORASVR..system.JOBS; 

       金沙澳门唯一官网 11

使用上述方法进行数据查询时,若Oracle
表有NUMBER 列时会出现转化错误,这时可以将NUMBER
类型转化为字符串(也有将该列属性修改成NUMBER(10),为NUMBER
列设定好位数)。考虑到View
查询等因素个人感觉还是转为字符串的方式较为通用。 

当然如果查询的列过多,每个NUMBER
列都转为VARCHAR
的话工作量也的确不小,这时最好的方法就是使用OPENQUERY 函数: 

      金沙澳门唯一官网 12

  1. SELECT * FROM OPENQUERY(LINKED_NAME,'SELECT * FROM TABLE_NAME'); 

    

按照OPENQUERY 的语法上面SQL
语句应变为: 

  行集函数重回二个可用代替Transact-SQL语句中表援引的目的

  1. SELECT * FROM OPENQUERY(ORASVR,'SELECT * FROM JOBS'); 

                 OPENQUERY

这样我们就可以在SQL Server
端方便的访问Oracle 数据库,并做相应的数据调整。 

                      语法: OPENQUERY ( linked_server ,'query' )

 

                        SELECT  * FROM OPENQUERY  ( ORACLELINK,'SELECT * FROM UNIQUE_T');

                        

       金沙澳门唯一官网 13

INSERT
   INSERT OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles')  VALUES ('NewTitle');
UPDATE
   UPDATE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE id = 101')   SET name = 'ADifferentName';
DELETE
   DELETE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE name = ''NewTitle''');

 

参考:

 

TAG标签:
版权声明:本文由金沙澳门唯一官网发布于数据库管理,转载请注明出处:金沙澳门唯一官网Sql2008连接访问Oracle