平台说明:两台sql server2005服务器,上面装了两个相同的数据库
最近由于项目需要,需要将其中一台服务器上的数据库的数据拷贝到另外一台服务器上的数据库上,经过了很多google后终于完成了,在此做个详细的记录,希望能够帮到大家及自己。
一、第一步:sql添加服务器
首先,我们需要用sql 脚本连接上另外一个服务器,
use master go /*添加服务器*/ EXEC sp_addlinkedserver @server = 'hang', /*此名字可以随便取*/ @srvproduct = 'SQL', @provider = 'SQLOLEDB', @datasrc = '10.130.26.x' /*说明:另外一台服务器的IP*/ go /*登陆服务器*/ EXEC sp_addlinkedsrvlogin @rmtsrvname ='hang', /*需要跟前面连接的同一个名字*/ @useself = 'false', @locallogin = 'sa', @rmtuser = 'sa', @rmtpassword = 'wlw' /*登陆密码*/上面的代码是sql连接sql的代码,其他数据库之间的连接可参考:http://msdn.microsoft.com/zh-cn/library/ms190479.aspx
二、第二步: 编写脚本测试
这里需要说明一下的是,当我们用上面的代码添加好服务器之后,以后就不用再次连接了,比如我要查询:
select * from hang.epark.dbo.parkHistory /*hang是刚刚我建立的服务器名字,epark是服务器上的数据库,dbo.parkHistory是具体的表*/
然后就可以编写我们需要用到的代码先在查询窗口测试一下,是否能够成功执行
insert hang.epark.dbo.parkHistory(userNo,cardID,parkingNo_longquan) select userNo,cardID,parkingNo from epark.dbo.parkHistory where not exists(select * from hang.epark.dbo.parkHistory where parkingNo_longquan=epark.dbo.parkHistory.parkingNo)这里用到表的复制语句:insert into ()selcet ,还有not exists(),这个not exists就是将一个表中有,而另外一个表没有的列返回。比如我的这个语句,因为我需要定时将一台服务器上的parkHistory更新的数据上传到另外一台服务器上的parkHistory上面,所以我已经上传过的数据就不再上传,not exists就是这么个功能。
代码测试通过后,我们就可以建立定时任务了。
三、第三步: 添加定时任务
首先我们打开数据库后在 服务器对象->连接服务器,如图
然后右键hang(具体是你自己连接的数据库,这个就是我之前用sql语句连接的)->属性
如图:
原本是没有NT AUTHORITY\SYSTEM账号的,这是我自己添加的,你也需要将NT AUTHORITY\SYSTEM添加到用户映射,远程用户和远程密码就是另外一台数据库登陆的密码,一般用sa,或是你自己建的用户名。然后在下面选择用 使用此安全上下文建立连接 然后输入用户名和密码;以上这个操作主要是为了避免出现“已以用户 NT AUTHORITY/SYSTEM 的身份执行。 用户 ‘NT AUTHORITY/ANONYMOUS LOGON‘ 登录失败。 [SQLSTATE 28000] (错误 18456). 该步骤失败。”的错误
接下来需要打开sql server代理服务:开始-->>>运行-->>>输入"services.msc"-->>>进入服务,开启SQL Server Agent服务,并设置为自动
接下来开启一个任务:http://www.cnblogs.com/IPrograming/archive/2012/03/08/2384776.html
注:错误处理
SQL SERVER2005里面,启动SQL代理服务,启动正常,但是在sql server 代理还是显示已禁用代理 xp ,在查询窗口执行以下代码:
- sp_configure ‘show advanced options‘, 1;
- GO
- RECONFIGURE WITH OVERRIDE; --加上WITH OVERRIDE
- GO
- sp_configure ‘Agent XPs‘, 1;
- GO
- RECONFIGURE WITH OVERRIDE --加上WITH OVERRIDE
- GO