创建发布时无法生成快照,解决方法

引用 
主要是要注意权限的问题,一般做发布/订阅,建议你做如下准备工作: 


1.发布服务器,订阅服务器都创建一个同名的windows用户,并设置相同的密码,做为发布快照文件夹的有效访问用户 
我的电脑 
--控制面板 
--管理工具 
--计算机管理 
--用户和组 
--右键用户 
--新建用户 
--建立一个隶属于administrator组的登陆windows的用户 

2.在发布服务器上,新建一个共享目录,做为发布的快照文件的存放目录,操作: 

我的电脑--D: 新建一个目录,名为: PUB 
--右键这个新建的目录 
--属性--共享 
--选择 "共享该文件夹 " 
--通过 "权限 "按纽来设置具体的用户权限,保证第一步中创建的用户具有对该文件夹的所有权限 
--确定 


3.设置SQL代理(SQLSERVERAGENT)服务的启动用户(发布/订阅服务器均做此设置) 

开始--程序--管理工具--服务 
--右键SQLSERVERAGENT 
--属性--登陆--选择 "此账户 " 
--输入或者选择第一步中创建的windows登录用户名 
-- "密码 "中输入该用户的密码 

4.设置SQL Server身份验证模式,解决连接时的权限问题(发布/订阅服务器均做此设置) 

企业管理器 
--右键SQL实例--属性 
--安全性--身份验证 
--选择 "SQL Server 和 Windows " 
--确定 

5.在发布服务器和订阅服务器上互相注册 
企业管理器 
--右键SQL Server组 
--新建SQL Server注册... 
--下一步--可用的服务器中,输入你要注册的远程服务器名--添加 
--下一步--连接使用,选择第二个 "SQL Server身份验证 " 
--下一步--输入用户名和密码 
--下一步--选择SQL Server组,也可以创建一个新组 
--下一步--完成 

6.对于只能用IP,不能用计算机名的,为其注册服务器别名 
(在连接端配置,比如,在订阅服务器上配置的话,服务器名称中输入的是发布服务器的IP) 
开始--程序--Microsoft SQL Server--客户端网络实用工具 
--别名--添加 
--网络库选择 "tcp/ip "--服务器别名输入SQL服务器名 
--连接参数--服务器名称中输入SQL服务器ip地址 
--如果你修改了SQL的端口,取消选择 "动态决定端口 ",并输入对应的端口号 
------解决方案--------------------
在SQL Server 2000里设置和使用数据库复制之前,应先检查相关的几台SQL Server服务器下面几点是否满足: 

1、MSSQLserver和Sqlserveragent服务是否是以域用户身份启动并运行的(.administrator用户也是可以的) 

如果登录用的是本地系统帐户local,将不具备网络功能,会产生以下错误: 

进程未能连接到Distributor '@Server name ' 

(如果您的服务器已经用了SQL Server全文检索服务, 请不要修改MSSQLserver和Sqlserveragent服务的local启动。 
会照成全文检索服务不能用。请换另外一台机器来做SQL Server 2000里复制中的分发服务器。) 

修改服务启动的登录用户,需要重新启动MSSQLserver和Sqlserveragent服务才能生效。 

2、检查相关的几台SQL Server服务器是否改过名称(需要srvid=0的本地机器上srvname和datasource一样) 

在查询分析器里执行: 
use master 
select srvid,srvname,datasource from sysservers 

如果没有srvid=0或者srvid=0(也就是本机器)但srvname和datasource不一样, 需要按如下方法修改: 

USE master 
GO 
-- 设置两个变量 
DECLARE @serverproperty_servername varchar(100), 
@servername varchar(100) 
-- 取得Windows NT 服务器和与指定的 SQL Server 实例关联的实例信息 
SELECT @serverproperty_servername = CONVERT(varchar(100), SERVERPROPERTY( 'ServerName ')) 
-- 返回运行 Microsoft SQL Server 的本地服务器名称 
SELECT @servername = CONVERT(varchar(100), @@SERVERNAME) 
-- 显示获取的这两个参数 
select @serverproperty_servername,@servername 
--如果@serverproperty_servername和@servername不同(因为你改过计算机名字),再运行下面的 
--删除错误的服务器名 
EXEC sp_dropserver @server=@servername 
--添加正确的服务器名 
EXEC sp_addserver @server=@serverproperty_servername, @local= 'local '

修改这项参数,需要重新启动MSSQLserver和Sqlserveragent服务才能生效。 

这样一来就不会在创建复制的过程中出现18482、18483错误了。 

3、检查SQL Server企业管理器里面相关的几台SQL Server注册名是否和上面第二点里介绍的srvname一样 

不能用IP地址的注册名。 

(我们可以删掉IP地址的注册,新建以SQL Server管理员级别的用户注册的服务器名) 

这样一来就不会在创建复制的过程中出现14010、20084、18456、18482、18483错误了。 

4、检查相关的几台SQL Server服务器网络是否能够正常访问 

如果ping主机IP地址可以,但ping主机名不通的时候,需要在 

winntsystem32driversetchosts (WIN2000) 
windowssystem32driversetchosts (WIN2003) 

文件里写入数据库服务器IP地址和主机名的对应关系。 

例如: 

127.0.0.1 localhost 
192.168.0.35 oracledb oracledb 
192.168.0.65 fengyu02 fengyu02 
202.84.10.193 bj_db bj_db 

或者在SQL Server客户端网络实用工具里建立别名,例如: 



5、系统需要的扩展存储过程是否存在(如果不存在,需要恢复): 

sp_addextendedproc 'xp_regenumvalues ',@dllname = 'xpstar.dll ' 
go 
sp_addextendedproc 'xp_regdeletevalue ',@dllname = 'xpstar.dll ' 
go 
sp_addextendedproc 'xp_regdeletekey ',@dllname = 'xpstar.dll ' 
go 
sp_addextendedproc xp_cmdshell ,@dllname = 'xplog70.dll ' 


接下来就可以用SQL Server企业管理器里[复制]-> 右键选择 
-> [配置发布、订阅服务器和分发]的图形界面来配置数据库复制了。

原文地址:https://www.cnblogs.com/lenther2002/p/6814513.html