当前位置:Gxlcms > 数据库问题 > (4.18)SQL server 2008一些常见配置之二(链接服务器配置,访问其他数据库)

(4.18)SQL server 2008一些常见配置之二(链接服务器配置,访问其他数据库)

时间:2021-07-01 10:21:17 帮助过:26人阅读

SQL server 2008一些常见配置之二(链接服务器配置,访问其他数据库)

  一、访问Oracle数据库

 

 

      Oracle是目前排名第一的数据库,一般对数据安全和性能要求极高的公司都会选择它。下面一起学习一下如何通过SQL server来访问Oracle数据库数据和一些注意事项。

 

技术分享图片

 

      DB-Engines 发布了 2018 年数据库排名,排前10 名的数据库中,Oracle 稳居第一。

技术分享图片

(一)先在SQL server服务器安装Oracle客户端

      要访问Oracle数据库,必须先安装Oracle客户端,并配置好tnsnames.ora文件,SQL server也不例外,具体安装办法可以百度【Oracle客户端安装办法】,比较简单,这里不做赘述。

 

假设tnsnames.ora文件内容为

itower_241 =
 (DESCRIPTION =
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 101.241.241.241)(PORT = 1521))
   )
    (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = prod)
   )
 )

 

(二)通过增加数据源(ODBC)办法验证Oracle服务器是否可以正常访问。

 

1.打开路径:控制面板->管理工具->数据源(ODBC)

技术分享图片

 

或者直接运行:cmd->ODBC

技术分享图片

 

2.Oracle客户端正常安装的话,这里就会出现“Oracle in OraDB12Home1”选项。

技术分享图片

 

3.注意填写规范,TNS这里填写的是tnsnames.ora里面的服务器配置。数据源名、描述可以随便起一个或者不填,现在只是为了验证是否可以正常访问Oracle数据库,我们不通过ODBC名字来访问,而是通过tnsnames.ora配置的服务器名字来访问。直接点“测试连接”,输入账户和密码,点确认(OK)。

技术分享图片

 

4.测试成功提示:

技术分享图片

 

      如果测试失败,请根据失败提示仔细检查tnsnames.ora和Oracle客户端安装情况。

 

5.或者通过PL/SQL来验证:

技术分享图片

 

(三)在SQL server配置Oracle链接服务器

 

      服务器对象->链接服务器(右键)->新建链接服务器

技术分享图片

 

1.链接服务器(名称):ORACLE1(在SQL查询时用到)

2.访问接口:选择 Oracle Provider for DLE DB

3.数据源:为tnsnames.ora所配置的Oracle服务器名称

技术分享图片

 

注意:这里的数据源也可以使用通过ODBC设置的数据源,殊途同归。

 

4.安全性:输入Oracle账户和密码

技术分享图片

 

5.点确定后,即开始验证接口的合规性和合法性。如果验证通过的话会自动关闭这个窗口,并在链接服务器出现【ORACLE1】这个接口,说明配置基本完成,如果没通过会出现具体的错误提示。

技术分享图片

 

(1)可以逐层打开查看Oracle服务器对象。

技术分享图片

 

(2)在这里可以查看到完整的建立链接服务器的SQL脚本

技术分享图片


/****** Object:  LinkedServer [ORACLE1]    Script Date: 09/17/2018 12:48:37 ******/
EXEC master.dbo.sp_addlinkedserver @server = N‘ORACLE1‘, @srvproduct=N‘ORACLE‘, @provider=N‘OraOLEDB.Oracle‘, @datasrc=N‘itower_241‘
 /* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N‘ORACLE1‘,@useself=N‘False‘,@locallogin=NULL,@rmtuser=N‘ITOWER_VIF_gxfgs‘,@rmtpassword=‘########‘

GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘collation compatible‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘data access‘, @optvalue=N‘true‘
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘dist‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘pub‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘rpc‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘rpc out‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘sub‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘connect timeout‘, @optvalue=N‘0‘
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘collation name‘, @optvalue=null
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘lazy schema validation‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘query timeout‘, @optvalue=N‘0‘
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘use remote collation‘, @optvalue=N‘true‘
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘remote proc transaction promotion‘, @optvalue=N‘true‘
GO

 

注意:当然,这里的 @rmtpassword 显示的是加密后的数据,还需使用者自行修改为真正的密码。

 

6.访问数据验证:

 

(1)SQL server访问Oracle的语法一般有两种方式:

1)PL/SQL语法格式:这里使用的是PL/SQL的语法,比如PL/SQL特有的rownum、rowid等在这里都能用上。

select * 
  from openquery(ORACLE1,‘select rowid,a.* from itower.v_if_prov_org_gxfgs a where rownum<100‘);

技术分享图片

 

--查看Oracle版本
select * from openquery(ORACLE1, ‘select * from v$version‘);

技术分享图片

注意:这里用到的是 ORACLE1 这个名称,在建立链接服务器的时候要特别留意。

 

2)SQL server语法格式:

select top 10 *
  from [ORACLE1]..[ITOWER].[V_IF_PROV_ORG_GXFGS]
go

技术分享图片

 

如果忘记语法,可以这样去查看:

技术分享图片

 

(2)注意事项:SQL server不支持Oracle一些特殊字段类型,如果Oracle存在特殊要极其留意。

 

1)访问失败的例子一:

select * from openquery(ORACLE1,‘select * from itower.v_if_prov_station_gxfgs where rownum<100‘);

技术分享图片

 

2)访问失败的例子二:

select top 10 *
  from [ORACLE1]..[ITOWER].v_if_prov_station_gxfgs

技术分享图片

 

3)此时,表名(V_IF_PROV_STATION_GXFGS)应用大写

select top 10 *
  from [ORACLE1]..[ITOWER].V_IF_PROV_STATION_GXFGS

技术分享图片

 

      这样可以得到准确的错误提示:GEOMETRY 这个字段的数据类型SQL server不支持。在获取这个表信息的时候,就应避开或转换为SQL server支持的格式。

 

7.或者你很懒干脆不想建立链接服务器,想直接访问Oracle,可以通过函数openrowset来实现。

select * 
  from openrowset(‘OraOLEDB.Oracle‘,‘itower_241‘;‘<Oracle账户>‘;‘<Oracle账户密码>‘,
                  ‘select * from itower.v_if_prov_org_gxfgs‘)

技术分享图片

注意:<Oracle账户> <Oracle账户密码>需要您手工填写。

 

8.删除链接服务器:删除就比较简单了,在链接服务器名称->右键->删除即可,或者使用脚本删除:

USE [master]
GO
/****** Object:  LinkedServer [ORACLE1]    Script Date: 09/17/2018 13:02:24 ******/
EXEC master.dbo.sp_dropserver @server=N‘ORACLE1‘, @droplogins=‘droplogins‘
GO

 

      SQL server 访问Oracle数据库就一起学习到这里。

 

 

二、访问MySQL数据库

 

 

    MySQL数据库由于免费性和开源性,近年来普及非常迅速,MySQL还支持linux下的安装,所以得到很多人的青睐,其排名第二名,有赶上Oracle数据库的趋势。

 

技术分享图片

 

(一)先安装MySQL驱动。

建议在官网下载:

http://dev.mysql.com/downloads/connector/odbc/

 

(二)在ODBC增加MYSQL数据源(上面有详细讲述,这里简略说明),测试是否可以正常访问MySQL服务器。

 

1.注意点:

(1)是系统DSN,不是用户DSN。

(2)驱动程序选择:MYSQL ODBC 5.3 Unicode DRIVER

技术分享图片

2.输入数据源名称、IP、账户和密码,并点测试(test)。

技术分享图片

     测试成功后,可以在这里选择默认数据库。

技术分享图片

技术分享图片

 

(二)在SQL server配置MySQL server的链接服务器

 

1.链接服务器(名称):TO_MYSQL34(在SQL查询时用到)

2.访问接口:选择 Microsoft OLE DB Provider for ODBC Drivers

3.数据源:填写ODBC所配置的数据源名称 MYSQL34

技术分享图片

 

注意:如果不配置ODBC的话,也可以直接在“访问接口字符串”进行设置,同时“数据源”留空,但这样容易暴露数据库账户和密码,不利于账户安全性管理:

Driver={MySQL ODBC 5.3 Unicode Driver};Server=<MySQL服务器IP>;Database=<实例名>;User=<数据库账户>;Password=<数据库密码>;Option=3;

 

4.安全性设置

技术分享图片

 

5.点确定后,即开始验证接口的合规性和合法性。如果验证通过的话会自动关闭这个窗口,并在链接服务器出现【TO_MYSQL34】这个接口,说明配置基本完成,如果没通过会出现具体的错误提示。

 

6.创建脚本

/****** Object:  LinkedServer [TO_MYSQL34]    Script Date: 09/17/2018 16:58:22 ******/
EXEC master.dbo.sp_addlinkedserver @server = N‘TO_MYSQL34‘, @srvproduct=N‘MySQL‘, @provider=N‘MSDASQL‘, @datasrc=N‘MYSQL34‘
 /* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N‘TO_MYSQL34‘,@useself=N‘False‘,@locallogin=NULL,@rmtuser=N‘ttgl‘,@rmtpassword=‘########‘

GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘collation compatible‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘data access‘, @optvalue=N‘true‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘dist‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘pub‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘rpc‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘rpc out‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘sub‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘connect timeout‘, @optvalue=N‘0‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘collation name‘, @optvalue=null
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘lazy schema validation‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘query timeout‘, @optvalue=N‘0‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘use remote collation‘, @optvalue=N‘true‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘remote proc transaction promotion‘, @optvalue=N‘true‘
GO

 

注意:当然,这里的 @rmtpassword 显示的是加密后的数据,还需使用者自行修改为真正的密码。

 

7.访问数据验证:和访问Oracle语法差不多,又有一定区别。

--查看版本
select * from openquery(TO_MYSQL34, ‘select @@version‘);

 

技术分享图片

 

--查询
select top 10 * from openquery(TO_MYSQL34, ‘select * from zxhc_image‘);

--理论上可以跨服务器进行增、删、改操作,但极不赞同这么操作,要修改的话建议直接到对端服务器去修改。

--修改
update openquery(TO_MYSQL34, ‘select * from zxhc_image where image_id = 1319 and 1=2 ‘) set [status] = ‘2‘;
--or
update openquery(TO_MYSQL34, ‘select * from zxhc_image ‘) set [status] = ‘2‘ where image_id = 1319;

--添加
insert into openquery(TO_MYSQL34, ‘select * from zxhc_image where 1=0‘) values (‘11‘,‘22‘,‘22‘);  

--删除
delete  from openquery(TO_MYSQL34, ‘select * from zxhc_image where image_id = 1319 ‘);

技术分享图片

 

8.删除链接服务器脚本(或链接服务器名称->右键->删除)

USE [master]
GO
/****** Object:  LinkedServer [TO_MYSQL34]    Script Date: 09/17/2018 16:58:15 ******/
EXEC master.dbo.sp_dropserver @server=N‘TO_MYSQL34‘, @droplogins=‘droplogins‘
GO

 

 

 

三、访问其它SQL server数据库

 

 

    SQL server数据库排名第三名,是微软公司的产品,只能在Windows上安装,但对同样是微软公司产品的Execl支持相当好,这是一个重要优势,适合初学者选用。

 

技术分享图片

 

(一)在SQL server配置其它SQL server的链接服务器

 

1.常规配置:链接服务器名称为

1.链接服务器(名称):TO_SQL33(在SQL查询时用到)

2.访问接口:选择 Microsoft OLE DB Provider for SQL Server

3.数据源:直接填写SQL server服务器IP即可

技术分享图片

 

4.安全性:输入账户和密码,确定

技术分享图片

5.点确定后,即开始验证接口的合规性和合法性。如果验证通过的话会自动关闭这个窗口,并在链接服务器出现【TO_SQL33】这个接口,说明配置基本完成,如果没通过会出现具体的错误提示。

 

6.创建脚本

/****** Object:  LinkedServer [TO_SQL33]    Script Date: 09/17/2018 15:39:50 ******/
EXEC master.dbo.sp_addlinkedserver @server = N‘TO_SQL33‘, @srvproduct=N‘MySQL‘, @provider=N‘SQLNCLI‘, @datasrc=N‘10.8.1.33‘
 /* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N‘TO_SQL33‘,@useself=N‘False‘,@locallogin=NULL,@rmtuser=N‘tower‘,@rmtpassword=‘########‘

GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘collation compatible‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘data access‘, @optvalue=N‘true‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘dist‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘pub‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘rpc‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘rpc out‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘sub‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘connect timeout‘, @optvalue=N‘0‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘collation name‘, @optvalue=null
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘lazy schema validation‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘query timeout‘, @optvalue=N‘0‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘use remote collation‘, @optvalue=N‘true‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘remote proc transaction promotion‘, @optvalue=N‘true‘
GO

注意:当然,这里的 @rmtpassword 显示的是加密后的数据,还需使用者自行修改为真正的密码。

 

7.访问数据验证:和访问Oracle语法基本一致。

--查看版本
select * from openquery(TO_SQL33, ‘select @@version‘);

技术分享图片

 

--查询
select * from openquery(TO_SQL33, ‘select top 10 * from [dbo].[zy_站址]‘);
select top 10 * from [TO_SQL33].[tower].[dbo].[zy_站址];

--理论上可以跨服务器进行增、删、改操作,但极不赞同这么操作,要修改的话建议直接到对端服务器去修改。

--修改
update openquery(TO_SQL33, ‘select * from [dbo].[zy_站址] where [站址编码] = ‘‘45010200000003‘‘ ‘) set [站址名称] = ‘2‘;
--or
update openquery(TO_SQL33, ‘select * from [dbo].[zy_站址] ‘) set [站址名称] = ‘2‘ where [站址编码] = ‘45010200000003‘;

--添加
insert into openquery(TO_SQL33, ‘select * from [dbo].[zy_站址] where 1=0‘) values (‘11‘,‘22‘,‘22‘);  

--删除
delete  from openquery(TO_SQL33, ‘select * from [dbo].[zy_站址] where [站址编码] = ‘‘45010200000003‘‘ ‘);

技术分享图片

 

8.删除链接服务器脚本(或链接服务器名称->右键->删除)

USE [master]
GO
/****** Object:  LinkedServer [TO_SQL33]    Script Date: 09/17/2018 15:31:07 ******/
EXEC master.dbo.sp_dropserver @server=N‘TO_SQL33‘, @droplogins=‘droplogins‘
GO

 

 

 

四、题外话

 

 

      人,是个奇怪的动物,整天想东想西,搞的脑子里面整天都乱哄哄的。睡觉不是睡觉,吃饭不是吃饭,让忙碌多年的心静下来其实很难。那么,什么是静心? 

 

      释迦摩说:应如是住,如是降伏其心

 

      奥修说得更加易懂:不要与头脑抗争,不要控制头脑,不要专注。不要有任何干涉,只要静静地观照着头脑,不要有任何判断或评价。放松、观照和不判断,渐渐、渐渐地,就会有很深的宁静降临到你身上。

(4.18)SQL server 2008一些常见配置之二(链接服务器配置,访问其他数据库)

标签:mysq   免费   oracle   plog   信息   block   mp3   还需   fse   

人气教程排行