最近在做跨主机的数据库交互,大概就是把DB1的某些数据搬到另外一台服务器的DB2
最佳的方法,就是用SQLServer的代理服务做定时任务,执行SQL脚本
同一个主机的数据库相互访问这个很容易,但跨主机的就比较麻烦,常见的做法就是用“链接数据库”的方式。
1. 如图,用sa(其他帐户未必有权限)登陆DB1,然后点右键,“新建链接服务器”
2. 接着,链接服务器这里填写DB2所在服务器IP。服务器类型这里我选择“SQLServer", 因为DB1和DB2都是同版本的SQLServer。 (如果选择”其他数据源“,听说是可以连接MySql,Oraclet等数据库,甚至Excel都可以,这里没有尝试过,不敢发言)。
点确定之后,最常见的数据在于身份认证失败,如图:
如果你用错误信息的标题“链接服务器已创建但连接测试失败”这个去百度搜索,似乎很难搜索到解决方案,很多说是防火墙或者MSDTC服务的问题。
其实这里报的错误,最关键的是“身份验证失败”这个错误信息。
我们会看到,刚刚几步都没有填写DB2的帐户信息,所以报身份验证失败再正常不过了。
在第二步输入完DB2的IP之后,还要做第3步
3. 点左边的菜单“安全性”,点“添加”,在远程用户和密码输入DB2的帐户信息,下面勾选“使用登录名的当前安全上下文建立连接”,这是最重点
这时候点“确认”,就成功生成了一个“链接服务器”
4. 验证,在查询框,输入“select * from [10.2.0.24].qcwybase.dbo.sy_user",成功返回
5. 通过链接服务器,DB1并非能对DB2进行所有的SQL语句,摘自博文:(血泪经验分享--->SQL Server 2012建立链接服务器)
链接服务器有两个特点:
1:通过链接服务器不能删除(including truncate)链接源服务器的任何对像.
2:能过链接服务器可以对链接源服务器的表进行insert,updae,delete操作.
参考文章:SQL SERVER – FIX – Linked Server Error 7399 Invalid authorization specification