atualizado 3x
Estou usando o FILESTREAM, mas estou tendo problemas com a coleta de lixo. Os arquivos FILESTREAM não estão sendo limpos quando defino a coluna como nula.
No log de eventos, há um número enorme desse erro:
Internal FILESTREAM error: failed to access the garbage collection table.
É o erro número 5571 nesta página: http://msdn.microsoft.com/en-us/library/cc645602.aspx
Usando esta postagem do blog, confirmei que existe uma tabela 'tombstone', mas não posso consultá-la (
Invalid object name 'sys.filestream_tombstone_xxxxxxx'.
)Não estou excluindo linhas, estou definindo a coluna FILESTREAM como nula, conforme este artigo msdn : "Quando um campo FILESTREAM é definido como NULL, os dados BLOB associados ao campo são excluídos."
O banco de dados está em uma unidade local.
O banco de dados está usando Recuperação Simples.
Executei vários
CHECKPOINT
s quando a atividade estava muito baixa. Isso parece não ter feito nada. A mensagem de erro parece indicar que o coletor de lixo FILESTREAM está tentando coletar lixo, mas não pode acessar a tabela para descobrir o que fazer.SQL Server 2008 (10.0.2531.0, SP1, Enterprise Edition
Não há outros erros anteriores aos erros 5571 que posso ver no log do SQL Server ou no log de eventos.
DBCC CHECKDB
Foi detectado um erro. O que eu faço sobre isso?
DBCC results for 'sys.filestream_tombstone_1819153526'.
Msg 8951, Level 16, State 1, Line 1
Table error: table 'sys.filestream_tombstone_1819153526' (ID 1819153526). Data row does not have a matching index row in the index 'FSTSNCIdx' (ID 2). Possible missing or invalid keys for the index row matching:
Msg 8955, Level 16, State 1, Line 1
Data row (4:4712151:3) identified by (oplsn_fseqno = 62856 and oplsn_bOffset = 82647 and oplsn_slotid = 2) with index values 'file_id = 65537 and rowset_guid = '3F972309-9B0B-4C4F-939A-5618897050B4' and column_guid = '4A143C0D-B877-494E-B1E6-B70B0A834BB6' and oplsn_fseqno = 62856 and oplsn_bOffset = 82647 and oplsn_slotid = 2'.
There are 209624 rows in 3382 pages for object "sys.filestream_tombstone_1819153526".
Perguntas:
Como as permissões devem ser configuradas para o FILESTREAM funcionar? Outras pessoas têm acesso a este servidor e este banco de dados pode ter sido restaurado de um backup em algum momento.
Como verifico as permissões da conta de compartilhamento/contêiner do FILESTREAM (Windows) e a conta sob a qual o SQL Server é executado?
Obrigado a @vgv8 por solicitar mais informações e ideias.
Parece informação insuficiente para dizer algo definitivamente. Por exemplo, você está excluindo através do Transact-SQL ou através do Win32API, etc.
Os dados FILESTREAM não são excluídos imediatamente do sistema de arquivos porque o log de transações do SQL Server em modelos de recuperação total e em massa permite a recuperação de travamento.
Você excluiu com CHECKPOINT
ou tentou executar a instrução CHECKPOINT ou usar um modelo de recuperação simples?
Além disso, IMO,:
Verifique as seções de segurança e confiabilidade do white paper de Paul Randal
Discussões relacionadas contendo muitas sub-referências:
Atualização:
você verificou as permissões do compartilhamento/contêiner FILESTREAM (Windows) versus a conta sob a qual o SQL Server é executado. Deve ter permissões de administrador local. Recomenda-se que nenhuma outra conta receba permissões no contêiner de dados
Atualização 2:
Do white paper de Paul Randal :
Executar
DBCC CHECKDB
Update3:
Não posso treiná-lo online. Este é o quadro de perguntas e respostas. Eu já fui banido várias vezes por infringir as regras do StackExchange tendo discussões em vez de postar perguntas ou respostas
Corre
DBCC CheckDB (QPS8, repair_rebuild)e coloque a saída aqui.
Para verificar/definir permissões NTFS: clique com o botão direito do mouse na pasta no Windows --> Propriedades --> Segurança
Para verificar/definir MSSQLServer: digite na linha de comando
navegue até SQL Server Services e clique duas vezes na instância correspondente do SQL Server
Atualização 3b:
Provavelmente, você deve descartar e recriar o índice ou tem problemas mais profundos e deve restaurar o banco de dados do backup ou executar o reparo do banco de dados, permitindo a perda de dados. Este é um tópico / pergunta bastante separado.
Não quero assumir nenhuma responsabilidade para orientá-lo sobre isso.