Neste artigo vou tomar como cenário inicial que restauramos um database em outro servidor, e este possui um full text catalog definido.
Cenário 1: Remover as referências do full text catalog das tabelas e apagar o FT.
Muito bem, vamos supor que nosso database chama-se DBTESTE e temos definido um full text catalog de nome FT_TESTE que contém as seguintes tabelas com full text index definidos:
– PUBLICACAO
– GRUPO_PUBLICACAO
Caso você não saiba ou não lembre o nome do catálogo, podemos identificá-lo através de uma query na system table sysfulltextcatalogs.
Exemplo:
SELECT * FROM sysfulltextcatalogs
Para identificarmos os objetos que estão referenciando o FT, podemos novamente utilizar outra system table- a sysobjects.
Exemplo:
SELECT name, ftcatid FROM sysobjects
WHERE ftcatid > 0
Esta query retorna os objetos que fazem referência a um determinado FT.
Nota: O campo ftcatid é FK da tabela sysfulltextcatalogs.
Agora que já identificamos o nosso FT e nossos objetos, vamos tentar removê-los com as stored procedures do SQL Server 2000.
Primeiro devemos retirar os full text indexes das tabelas que fazem referência ao nosso FT. Isso pode ser feito usando o script abaixo:
EXEC sp_fulltext_table ‘GRUPO_PUBLICACAO’, ‘drop’
GO
EXEC sp_fulltext_table ‘PUBLICACAO’, ‘drop’
GO
Server: Msg 7605, Level 17, State 2, Procedure sp_fulltext_table, Line 132
Full-text catalog ‘FT_TESTE’ has been lost. Use sp_fulltext_catalog to rebuild and to repopulate this full-text catalog.
Server: Msg 7605, Level 17, State 2, Procedure sp_fulltext_table, Line 132
Full-text catalog ‘FT_TESTE’ has been lost. Use sp_fulltext_catalog to rebuild and to repopulate this full-text catalog.
Veja que como restauramos o FT em outro servidor e pelo fato dos arquivos e o path deste ser diferente acabamos perdendo as referências para o FT.
Pois bem, porém a mensagem no diz para tentarmos fazer um rebuild no FT para assim este ser repopulado. Podemos fazer isso usando o script abaixo.
EXEC sp_fulltext_catalog ‘FT_TESTE’, ‘rebuild’
Server: Msg 7610, Level 16, State 1, Procedure sp_fulltext_catalog, Line 276
Access is denied to ‘j:/s6000db25/MSSQL$I6000SQL04/FTData/FTTESTE’, or the path is invalid. Full-text search was not installed properly.
Note que não conseguimos fazer um rebuild no FT, pois os arquivos de full text index não existem e nosso path é diferente. Sendo assim vamos tentar removê-lo, assim podemos recriá-lo com êxito.
EXEC sp_fulltext_catalog ‘FT_TESTE’, ‘drop’
Server: Msg 15604, Level 16, State 1, Procedure sp_fulltext_catalog, Line 75
Cannot drop full-text catalog ‘FT_TESTE’ because it contains a full-text index.
Veja que a mensagem nos retorna ao início do nosso cenário, existem objetos com full text index definidos e o FT não pode ser removido.
Com isso não conseguimos remover ou recriar nada, pois o SQL Server 2000 perdeu as referências para o FT. A solução para este problema é então remover as referências manualmente, como descrito nos passos abaixo.
Passo 1: Vamos remover a referência dos objetos para este FT.
EXEC sp_configure ‘allow updates’, 1
RECONFIGURE WITH OVERRIDE
GO
UPDATE sysobjects SET ftcatid = 0
WHERE ftcatid IN (SELECT ftcatid FROM sysfulltextcatalogs)
GO
EXEC sp_configure ‘allow updates’, 0
RECONFIGURE WITH OVERRIDE
GO
OU
UPDATE sysobjects
SET ftcatid = 0
WHERE ftcatid = 5 -Este é o id do Full Text no meu ambiente de teste
Passo 2: Vamos remover o full text catalog.
DELETE FROM sysfulltextcatalogs
WHERE ftcatid = 5
OU
DELETE FROM sysfulltextcatalogs –Caso exista apenas um full text catalog definido
Agora que removemos as referências do full text catalog, podemos recriá-lo neste novo servidor.
Cenário 2: Neste segundo cenário vamos restaurar o FT sem remover as suas referências.
Passo 1: Vamos fazer um rebuild no FT.
EXEC sp_fulltext_catalog ‘FT_TESTE’, ‘rebuild’
Server: Msg 7610, Level 16, State 1, Procedure sp_fulltext_catalog, Line 276
Access is denied to ‘j:/s6000db25/MSSQL$I6000SQL04/FTData/FTTESTE’, or the path is invalid. Full-text search was not installed properly.
Observer que neste caso recebemos o mesmo erro do cenário 1, isto deve-se ao fato do path estar diferente no novo servidor e não existir os arquivos de índice.
Passo 2: Neste passo vamos acertar o path para o novo servidor. Como exemplo estou alterando o path para ‘D:/S6000DB10/MSSQL/FTDATA/FTTESTE’.
Nota: Não esqueça de alterar a barra (/) do caminho abaixo!!
SELECT * FROM sysfulltextcatalogs
WHERE ftcatid = 5
UPDATE sysfulltextcatalogs
SET path = ‘D:/S6000DB10/MSSQL/FTDATA/FTTESTE’
WHERE ftcatid = 5
Agora que já acertamos o path para se adequar ao novo servidor, podemos fazer um rebuild no FT.
EXEC sp_fulltext_catalog ‘FT_TESTE’, ‘rebuild’
Após realizarmos um rebuild com êxito, vamos popular o FT.
EXEC sp_fulltext_catalog ‘FT_TESTE’, ‘start_full’
Para maiores informações das procedures aqui utilizadas, consulte o BOL do SQL Server 2000.
Abraços e até a próxima!
Rodrigo Fernandes (RFernandes)

