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

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
在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐