SQL Server创建链接服务器的几种方式

当我们需要从别人的数据库服务器上将数据复制到本地时,除了编写程序来实现之外,作为数据库管理员或者普通的数据库用户来说,如果不会编写外挂程序,那怎么办呢?冷静,链接服务器来帮你解决。有了链接服务器,我们不需要写任何的程序,就可以实现将一个数据库的数据复制到另一个数据库。

SQL Server链接服务器不仅可以帮助你链接SQL Server,还可以链接Oracle、Access、MySQL、ODBC数据源。

1. SQL Server链接SQL Server

我这里两台SQL的服务器分别为SQL1.abc.com和SQL2.abc.com。

在SQL1上新建链接服务器:

在这里插入图片描述
在这里插入图片描述
接下来我们左边选择“安全性”,配置远程链接的账号密码:
这里一定注意配置登录映射的时候,“本地登录”的账号必须与你本地数据库登录的账号一致,即图中1与2处的账号要相同。如果不相同,会出现后面“访问遭拒绝,不存在登录映射的问题”。一旦配置出错,建议关闭,退出重新来过,重新创建链接服务器,否则会出现各种奇奇怪怪的报错,比如,明明输入了账号sa,提示输入的账号是s,登录失败。

下面是错误的示范:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
正确的示范:
在这里插入图片描述
注意这个选项:

在这里插入图片描述
这个选项是专门针对有多个数据库登录用户的情况,如果没有在上面进行登录映射定义,他们就无法建立连接。还有一个“使用此安全上下文建立连接”,这个选项可以不配置前面的登录映射,直接在这里配置远程的登录名和密码,全部使用这个账号密码建立连接。
在这里插入图片描述

建立链接服务器完成之后(如下图),那怎么使用呢?
在这里插入图片描述
[链接服务器名].数据库名.架构名.表名

select * from [SQL2.abc.com].test.dbo.test

注意:这里的链接服务器名一定要用中括号"[]"括起来,不然又会报错:

在这里插入图片描述

2. 使用ODBC链接SQL Server

在这里插入图片描述

在这里插入图片描述
安全性设置和之前一样就不说了。

3. 使用ODBC链接MySQL

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查询:

SELECT * FROM OPENQUERY (LINK_ODBC_MYSQL, 'select * from test')

添加:

Insert openquery(LINKDB_MYSQL, 'select * from test') (Address) values('云南')

删除:

delete openquery(LINKDB_MYSQL, 'SELECT * FROM test where id=2')

或者:

delete openquery(LINKDB_MYSQL, 'SELECT * FROM test ')where id=5

更新:

update openquery(LINKDB_MYSQL, 'SELECT * FROM test') SET Address = '北京' WHERE id = 1

如果出现链接好之后,查询提示“Source character set not supported by client”说明数据库驱动版本不够,像上面我使用的是mysql8.0.13,但是我的odbc驱动是5.3,就会出现这个问题,更换odbc驱动为8.0.18之后正常访问。

在这里插入图片描述

4. 使用ODBC链接Oracle

基本跟链接MySQL差不多,驱动不同而已。
首先需要安装Oracle驱动instant client,点我这个链接直接去Oracle官网找。根据自己的需要下载相关的驱动及工具包。我这里只需要basic(这是必须的)和odbc驱动(这也是必须的,因为需要创建ODBC数据源连接Oracle数据库),因为我是64位的,所以我需要下64位的包,如下图:
在这里插入图片描述
这个安装教程其实很简单,我有一个文档在我的下载资源里,这里也简单写写吧,方便没有积分的朋友。
将两个压缩包解压,将里面的内容合并到同一个文件夹中。否则后面安装ODBC时会提示找不到instant client。我合并后的文件夹instantclient_11_2放在路径: C:\Program Files\Oracle\instantclient_11_2,在C:\Program Files\Oracle\instantclient_11_2目录下创建子文件夹network\admin,绝对路径也就是:C:\Program Files\Oracle\instantclient_11_2\network\admin,在该目录下新建文件tnsnames.ora和sqlnet.ora。文件中的详细内容配置可自行百度,关于sqlnet和tnsnames文件的作用也自行百度。
sqlnet.ora文件内容如下:

SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

tnsnames.ora文件内容如下:

ORCL_TEST=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 你的Oracle主机名)(PORT = 1521))  
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = 服务名,我这里是默认的orcl)
    )
  )

设置系统环境变量:

Path	      C:\Program Files\Oracle\instantclient_11_2
在Path后面追加instantclient路径
TNS_ADMIN	  C:\Program Files\Oracle\instantclient_11_2\network\admin
tnsnames.ora所在路径
NLS_LANG	SIMPLIFIED CHINESE_CHINA.ZHS16GBK
设置Oracle字符语言集,此字符集支持中文

进入到instantclient_11_2目录,运行刚合并进来的odbc_install.exe安装ODBC驱动。直接双击运行一闪而过,看不到是否安装成功,可以通过cmd运行查看运行结果。
至此,配置全部完成。可以通过ODBC创建数据源连接Oracle数据库了,如果在程序中调用DSN时出现驱动程序与应用程序体系结构不匹配,则说明所安装的版本不正确(若安装的64位则更换32位即可解决)。
在这里插入图片描述
在这里插入图片描述

SELECT * FROM OPENQUERY (ORCL, 'select * from test')

在这里插入图片描述
增删改查写法参考MySQL部分

5. 使用Oracle OLEDB驱动提供程序链接Oracle数据库

Oracle Data Access Components (ODAC)
这种方法与第四种instant client创建odbc驱动链接的方式存在冲突,OLEDB驱动安装之后也会安装instant client的basic组件。所以需要删除之前的Path环境变量中instant client的路径,修改为稍后要创建的新路径。或者将之前的ODBC驱动重新安装到这个instant client目录中,不再使用之前的instant client。
首先需要下载OLEDB驱动,同样,我下载64位版本:https://www.oracle.com/database/technologies/odac-downloads.html

在这里插入图片描述
在这里插入图片描述
解压:
在这里插入图片描述

这个压缩包是包含了安装说明的文档的,里面有readme.htm。文档里也有讲,可以全部安装,也可以选择需要的组件进行安装。我这里就只安装我需要的就行了。在当前目录打开命令窗口,输入:

install.bat oledb c:\oracleOLEDB ODAC

在这里插入图片描述
其中oledb代表要安装的组件,c:\oracleOLEDB为安装目录,ODAC为注册表项Oracle Home的名称,卸载的时候使用uninstall.bat(需要到安装目录下使用这个命令,而不是刚刚的解压目录里),带这个名字或者目录都行。卸载命令:

uninstall.bat all ODAC

安装完成之后,就会出现OraOLEDB.Oracle这个访问接口了
在这里插入图片描述
在这里插入图片描述
接口的属性里有一些设置选项,自己酌情勾选,建议勾选"允许进程内"。
别着急去创建链接服务器,在系统环境变量中,为Path添加“C:\oracleOLEDB;C:\oracleOLEDB\bin;”(计算机属性-高级系统设置-高级-环境变量-系统环境变量-Path),如果之前安装过instant client,需要删除其路径,否则在SQL Server管理工具创建链接服务器时会卡死。
如果是供外部应用程序访问,还需要配置TNS_ADMIN和NLS_LANG环境变量,配置方式参考第四步。
最后创建链接服务器:
在这里插入图片描述
由于OLEDB驱动支持EZCONNECT,所以不配置tnsnames.ora也是可以的,使用IP:端口号/实例名也可以:
在这里插入图片描述

安全性设置不用说了,一样。
这种驱动创建的链接服务器可以使用下面这种方式进行查询,也可以使用前面的openquery方式查询。

select * from ORACLEOLEDB..SYSTEM.TEST

SYSTEM是我TEST表创建时选择的方案,注意方案前面试两个点。注意Oracle区分大小写,否则会无法查询。

以下引用内容出自:https://blog.csdn.net/jack_33/article/details/7620100

通过OleDB连接Oracle数据库,一般有两种provider
A:provider=MSDAORA.1
B:provider=OraOLEDB.Oracle
第一种为微软公司的oracle组件,第二种为oracle的访问组件。
Oracle数据库经常使用的两种字符集
C:英文:SIMPLIFIED CHINESE_CHINA.US7ASCII
D:中文:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
A与C、D搭配,数据读写没有乱码问题,如果出现乱码,则修改系统级(非用户级)的环境变量nls_lang为数据库所使用的字符集,重启电脑即可。
缺点:不支持long/Clob/Blob大字段。
B支持大字段,与D搭配最为完美。如果BC搭配使用,读出无乱码,写入为乱码,做为where条件传进去的中文参数为乱码。无法使用。如果数据库字符集为C,则只能使用A。如果要读取大字段,只得使用B新建连接

MSDAORA仅支持32位,64位机器上可能已经没有带该驱动了。
下载链接:https://www.microsoft.com/zh-CN/download/details.aspx?id=5793
在这里插入图片描述

  • 23
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SQL Server无法连接服务器时,可能出现以下几种情况: 1. 服务器未启动:在连接之前,确保SQL Server服务已经成功启动。可以通过在Windows任务管理器中查看相关进程是否正在运行来确认。 2. 防火墙阻止连接:如果服务器上的防火墙配置不正确,可能会阻止外部应用程序连接到SQL Server。在服务器的防火墙设置中,确保允许入站和出站的SQL Server端口(默认为1433)。 3. 网络问题:检查网络连接是否正常,确保客户端和服务器之间的网络连接是稳定的。可以尝试使用ping命令测试与服务器的连接,如果无法ping通,可能需要联系网络管理员来修复网络问题。 4. SQL Server配置问题:确保SQL Server的网络配置正确。可以在SQL Server配置管理器中检查TCP/IP协议是否已启用,确保监听所有IP地址,并检查TCP/IP端口是否正确配置。 5. 访问权限问题:确保使用的登录账户具有连接到SQL Server的适当权限。可以尝试使用sa账户或其他具有足够权限的账户进行连接,如果可以连接,则说明问题可能是由于权限不足而导致的。 6. 服务器负载过高:如果服务器的负载过高,可能会导致连接超时或连接失败。可以尝试等待一段时间,然后再次尝试连接,或者与系统管理员讨论可能的服务器负载问题。 如果尝试了以上解决方法仍然无法解决问题,可能需要进一步的故障排除或联系技术支持来获得更详细的帮助。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值