2008-09-05 20 views
4

我们有一台运行大量数据库的SQL Server 2005 SP2计算机,所有这些数据库都包含全文目录。每当我们尝试删除其中一个数据库或重建全文索引时,删除或重建过程将无限期地挂起MSSEARCH等待类型。该进程无法被终止,并且需要重新启动服务器才能重新运行。基于微软论坛帖子1,看来问题可能是不正确地删除了全文目录。任何人都可以推荐一种方法来确定哪些目录导致问题,而不必删除所有这些问题?SQL Server全文搜索:使用MSSEARCH等待类型挂起进程

1 [http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2681739&SiteID=1] “是的,我们确实有在数据库中全文目录,但因为我有数据库禁用全文搜索,和残疾人MSFTESQL,我不怀疑他们。然而,我得到了来自Microsoft支持部门的一篇文章,向我展示了如何测试未正确删除的目录。所以我发现,但仍存在着一个古老的目录,这是我,以后只有经过重新启用全文搜索,能够删除,从此我的备份已制定”

回答

1

您是否尝试过运行过程监控,当它挂起并查看底层错误是什么?使用进程监视器,你应该能够告诉正在等待/错误的whick文件/资源​​。

+0

有趣。 ProcMon报告来自服务器上其他数据库之一的全文索引文件的共享冲突。所以重建它可能会有所帮助。错误的发生非常间歇,所以需要一段时间才能确定它是否修复。 – RedGreenCode 2008-10-30 17:57:38

2

这是一个建议。我没有任何损坏的数据库,但你可以试试这个:

declare @t table (name nvarchar(128)) 
insert into @t select name from sys.databases --where is_fulltext_enabled 

while exists(SELECT * FROM @t) 
begin 
    declare @name nvarchar(128) 
    select @name = name from @t 
    declare @SQL nvarchar(4000) 
    set @SQL = 'IF EXISTS(SELECT * FROM '[email protected]+'.sys.fulltext_catalogs) AND NOT EXISTS(SELECT * FROM sys.databases where is_fulltext_enabled=1 AND name='''[email protected]+''') PRINT ''' [email protected] + ' Could be the culprit''' 
    print @sql 
    exec sp_sqlexec @SQL 
    delete from @t where name = @name 
end 

如果它不工作,取下过滤网检查sys.databases

+0

感谢您的建议。但是,没有一个数据库被标记为潜在的罪魁祸首。 – RedGreenCode 2008-10-30 17:50:13

1

我有一个无效的全文目录位置类似的问题。 服务器在启动时不会将所有数据库联机。它将按照dbid顺序处理数据库,并在中途停止。只有较旧的数据库才能上网,其余的数据库无法访问。 查看sysprocesses显示了十几个或更多的进程,waittype = 0x00CC,lastwaittype = MSSEARCH。 MSSEARCH无法停止。 这个问题是由于我们重新部署了全文目录而导致的,但是在运行alter database ... modifyfile命令时输入了其中一个错误的路径。 解决方案是禁用MSSEARCH,重新启动服务器,允许所有数据库联机,查找违规数据库,使其脱机,使用alter database命令纠正文件路径,并使数据库联机。然后启动MSSEARCH并设置为自动启动。