(4.18)SQL server 2008一些常见配置之二(链接服务器配置,访问其他数据库)
Posted gered
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(4.18)SQL server 2008一些常见配置之二(链接服务器配置,访问其他数据库)相关的知识,希望对你有一定的参考价值。
SQL server 2008一些常见配置之二(链接服务器配置,访问其他数据库)
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一些常见配置之二(链接服务器配置,访问其他数据库)的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 索引最佳实践(SQL Server 2008)[关闭]
SQL Server 2008 到 SQL Server Compact Edition?