在64位SQL Server中创建Oracle的链接服务器 Link Serv(2)

如果要用组件访问Oracle数据库,那么就要根据需要配置tnsnames.ora文件,并存放于%ORACLE_HOME%\network\admin目录下。 我的tnsnames.ora文件格式如下,供参考:

NALGENE =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.1.127)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = nalgene)
    )
  )

在64位SQL Server中创建Oracle的链接服务器 Link Serv

三、在64位SQL Server中创建Oracle的链接服务器

注意以下数据源填写的是tnsname.ora文件中左上角的参数名,而不是红色框中的名字

在64位SQL Server中创建Oracle的链接服务器 Link Serv

在64位SQL Server中创建Oracle的链接服务器 Link Serv

在64位SQL Server中创建Oracle的链接服务器 Link Serv

运行效果如下

在64位SQL Server中创建Oracle的链接服务器 Link Serv

创建一个sqlserver对Oracle的数据库链接:

create view vvv as select * from TESTORACLE..SCOTT.SYS_USER
 select * from vvv;
其中SCOTT为远程oracle数据库服务器的一个用户名,SYS_USER为该用户在该服务器上的一个表,要非常注意的是:数据库链接(TESTORACLE)后面有两个点(..),再往后面必须全部大写,查询的对象一般为表格或者视图,不能查询同义词。

--1.配置LinkServer语句如下(链接服务器为Oracle,使用oracle的oledb库MSDAORA)
--
1.1为建立链接服务器
EXEC master.dbo.sp_addlinkedserver 
@server = N'TESTORACLE'  --要创建的链接服务器名称
@srvproduct=N'ORACLE'  --产品名称
@provider=N'OraOLEDB.Oracle'  --OLE DB 字符 
@datasrc=N'SEINESCM_97'  --数据源


--1.2为创建连接服务器登陆
EXEC master.dbo.sp_addlinkedsrvlogin 
@rmtsrvname=N'TESTORACLE'
,@useself=N'False'
,@locallogin=NULL
,@rmtuser=N'SYSTEM'
,@rmtpassword='########'

GO


--1.3为设置链接服务器属性
exec sp_serveroption @server='TESTORACLE',
                     @optname = 'rpc',      --从给定的服务器启动rpc
                     @optvalue ='true'      --这样可以调用远程的存储过程
 
exec sp_serveroption @server='TESTORACLE',
                     @optname = 'rpc out'--对给定的服务器启动rpc 
                     @optvalue ='true'      --在远程执行DDL语句


--2.执行操作语句如下方一:
select * from TESTORACLE..SCOTT.EMP
--将ORACLE数据插入到SQLSERSVER
select * into aaa  from TESTORACLE..SCOTT.EMP
--往ORALCE插入数据
insert into  TESTORACLE..SCOTT.EMP values(9999,'ename','job',888,getdate(),10000,1000,20)
update  TESTORACLE..SCOTT.EMP set empno=8888 where empno=9999
delete from  TESTORACLE..SCOTT.EMP where empno=8888

--如下语法创建表出错 对象 名称 'TESTORACLE..SCOTT.EMP2' 包含的前缀超出了最大限值。最多只能有 2 个。
create table TESTORACLE..SCOTT.EMP2(iddd number)
--使用如下语法才可以创建表
exec('create table SCOTT.EMP2(iddd number)') at [TESTORACLE]

--创建视图
create view v_test as select * from TESTORACLE..SCOTT.EMP
select * from v_test


--3.执行操作语句如下方二:
--
3.1为在远程服务器上执行DDL语句新建表,用oracle的方式书写语句
exec('create table STG.TEST(iddd number)') at [TESTORACLE]

--3.2为opendatasource函数,查询一下oracle中的数据 ok
select * from openquery([TESTORACLE],'select * from STG.TEST')
--等待于
select * from TESTORACLE..SCOTT.EMP

select * 
from 
opendatasource('OraOLEDB.Oracle','Data Source=SEINESCM_97;
                          User ID=scott;
                          password=scott
')..SCOTT.TEST


--3.3用openrowset函数,把oracle的数据直接新建表的同时插入数据
select * 
INTO EMP_X 
from openrowset('OraOLEDB.Oracle','SEINESCM_97';'scott';'scott',SCOTT.EMP)
 
select * 
INTO EMP_X 
from openrowset('OraOLEDB.Oracle','SEINESCM_97';'scott';'scott','select * from SCOTT.EMP'

有人反应64bit系统安装ODAC要安装32bit版本(即oracle 11g Client 为32bit的),否则会出现ODAC无法使用状况。但我测试是没问题的

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/fd1f355cf1ea6a070de70c3c49d97f2e.html