sql server2000复制中分发清除:distribution失败

http://hi.baidu.com/luck001221/blog/item/66eb3e8c60605215b21bba6d.html

2008-12-18 14:58
    前一阵子遇到一个问题,在整理删除复制和分发的时候,删除了一些没有用的复制和分发的项目。后来在运行复制监视器的时候发现在杂项代理程序里面的-->分发清除:distribution失败,作业显示的失败内容是:

执行用户: INTERPUB\Administrator。未能删除目录 '\\INTERPUB\F$\ReplData\unc\INTERPUB_PactNet_Rep_PactNet_pactnet\20081017165023\'。请检查 xp_cmdshell 的安全上下文,并关闭其它可能正在访问该目录的进程。 [SQLSTATE 42000](错误 20015) 复制 — @rowcount_only 参数值必须是 0、1 或 2。0 表示 7.0 兼容的校验值。1 表示只校验行数。2 表示版本 8.0 中新引入的校验值功能。: 已调度代理程序 distribution@rowcount_only 参数值必须是 0、1 或 2。0 表示 7.0 兼容的校验值。1 表示只校验行数。2 表示版本 8.0 中新引入的校验值功能。 以进行重试。未能清除分布式事务表。 [SQLSTATE 01000](消息 14152). 步骤失败。

当时没有时间,就没有管这个事情。因为没有什么性能和其他的影响。今天有时间重点解决了一下。开始是怀疑当初在删除复制和分发的时候有些系统表中的数据没有删除,有垃圾数据,导致了作业失败。

真正检查出问题的时候是:去分发的目录下发现了20081017165023这个目录下有4个文件,不让修改文件名,看来是有人在用着。于是复制了一份文件。结果发现复制的文件也不能打开,提示有人占用。

邪门了

找了微软的官方工具filemon,这可以查看哪个进程id占用了哪些文件,检查一看。没有任何人使用??咋会不让然改名字呢。

找了系统管理员,他一眼就看出来了,去文件夹属性里面查看了一下这个文件夹的权限设置。我也看到了,只有一个everyone的查看权限,没有别的任何账户。而清除分发的作业,正式要删除此目录内的文件。Agent启动账户没有操作此目录的权限,报错了。再看这个磁盘的所有的权限都是只有everyone的读取和运行。原来不知道是哪个贱人,更改了磁盘的权限。导致了下面的文件夹安全属性都继承了根目录的设置。真恶心。

将agent服务启动帐号,加入到安全组,赋予允许完全控制的权限,在运行作业就好了。

你可能感兴趣的:(SQL Server)