Estou tendo algumas mensagens de erro estranhas no SQL Server 2017 CU3. Estou migrando bancos de dados e reorganizando grupos de arquivos. Ao "reorganizar", quero dizer que utilizo um procedimento armazenado que cria uma função de partição e um esquema de partição no novo grupo de arquivos para um objeto, reconstrói os índices durante o particionamento e remove o particionamento.
No final, tenho alguns grupos de arquivos vazios. Seus arquivos são removidos . Além disso, o próprio grupo de arquivos é removido. Isso funciona bem na maioria dos casos. No entanto, para dois bancos de dados, removi os arquivos ... resta um grupo de arquivos sem nenhum arquivo associado, mas
ALTER DATABASE REMOVE FILEGROUP
gera um erro 5042:
O grupo de arquivos 'xyz' não pode ser removido porque não está vazio.
Questão
Como posso me livrar desse grupo de arquivos vazio ... qual poderia ser o problema?
Eu já li alguns problemas comuns, mas eles não estão presentes no meu sistema:
Verificado:
SELECT * FROM sys.partition_schemes; SELECT * FROM sys.partition_functions;
0 linhas ... nenhum objeto de particionamento restante no banco de dados
UPDATE STATISTICS
para todos os objetos no banco de dadossem efeito
Verifica se há índices no grupo de arquivos:
SELECT * FROM sys.data_spaces ds INNER JOIN sys.indexes i ON ds.data_space_id = i.data_space_id WHERE ds.name = 'xyz'
0 linhas
Verifica objetos no grupo de arquivos:
SELECT au.*, ds.name AS [data_space_name], ds.type AS [data_space_type], p.rows, o.name AS [object_name] FROM sys.allocation_units au INNER JOIN sys.data_spaces ds ON au.data_space_id = ds.data_space_id INNER JOIN sys.partitions p ON au.container_id = p.partition_id INNER JOIN sys.objects o ON p.object_id = o.object_id WHERE au.type_desc = 'LOB_DATA' AND ds.name ='xyz'
0 linhas
Também tentei DBCC SHRINKFILE
com o parâmetro EMPTYFILE
antes de remover o arquivo do grupo de arquivos. Realmente não faz sentido para mim, no entanto, leio soluções para descrever isso como uma correção. Não teve efeito de qualquer maneira.
Eu tenho alguma esperança de ler esta pergunta com falha no servidor e tentei o seguinte:
- Atualizar todas as estatísticas
- Descarte todas as estatísticas que não estão relacionadas a índices
No entanto, isso não teve efeito. Ainda tenho um grupo de arquivos sem nenhum arquivo associado e o grupo de arquivos não pode ser excluído. Estou totalmente intrigado, pois isso acontece em alguns bancos de dados e não em outros (com a mesma estrutura). Quando executo DBCC CHECK FILEGROUP
neste grupo de arquivos vazio, recebo várias mensagens de erro como as seguintes:
Não é possível processar a identificação do conjunto de linhas 72057594712162304 do objeto "STORY_TRANSLATIONSCCC" (ID 120387498), índice "Ref90159CCC" (ID 2), porque reside no grupo de arquivos "CCC_APPLICATION_new" (ID 8), que não foi verificado.
Resultados do DBCC para 'STORY_TRANSLATIONSCCC'. Existem 0 linhas em 0 páginas para o objeto "STORY_TRANSLATIONSCCC".
Isso é normal ou aponta para algo incomum?
Essa pergunta pode ser uma duplicata, no entanto, não consigo encontrar uma correção de trabalho para mim em outras perguntas no dba.stackexchange. Por favor, dê uma olhada na lista do que eu já tentei. Isso é idêntico às soluções descritas em Não é possível remover grupos de arquivos não utilizados .
Mais detalhes
Talvez ajude a entender o que faço antes que o erro ocorra. Estou planejando uma migração para um novo servidor. Atualmente, estou testando isso em uma instância de teste. Os bancos de dados são restaurados a partir do servidor prod e o modelo de recuperação é alterado para simples. Meu objetivo é reestruturar os grupos de arquivos e passar de um modelo com um arquivo por grupo de arquivos para um modelo com dois arquivos por grupo de arquivos. Para conseguir isso, crio novos grupos de arquivos vazios com dois arquivos cada e movo os dados. Infelizmente, a maioria dos objetos possui dados LOB (XML e binários) ... então eu aproveito o particionamento como um auxiliar para mover os dados lob também. No final, todos os dados residem nos novos grupos de arquivos e os grupos de arquivos antigos estão vazios. Depois, removo todos os arquivos e também o respectivo grupo de arquivos. O grupo de arquivos primário permanece e apenas adiciona outro arquivo.pergunta minha . Esse processo funciona bem, mas em dois bancos de dados os arquivos podem ser excluídos, mas o grupo de arquivos não. Surpreendentemente, a estrutura desses bancos de dados deveria ser a mesma de outros bancos de dados, pois não foram encontrados problemas no processo de mover os dados e remover os grupos de arquivos antigos.
Então, aqui está uma lista de grupos de arquivos e arquivos dos dois bancos de dados em que o problema ocorre:
- CCC_GENTE
antes
+-----------------+------------+
| Filegroup | Filename |
+-----------------+------------+
| CCC_APPLICATION | CCC_APP |
+-----------------+------------+
| CCC_ARCHIVE | CCC_ARCHIV |
+-----------------+------------+
| CCC_AXN | CCC_AXN |
+-----------------+------------+
| CCC_GDV | CCC_GDV |
+-----------------+------------+
| PRIMARY | CCC |
+-----------------+------------+
depois de
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| Filegroup name | Filegroup temporary name | Filename (logical) | Status |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_APPLICATION | - | CCC_APP | file removed, filegroup cannot be removed (error) |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_ARCHIVE | - | CCC_ARCHIV | file and filegroup removed |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_AXN | - | CCC_AXN | file and filegroup removed |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_GDV | - | CCC_GDV | file and filegroup removed |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| PRIMARY | - | CCC | file renamed to PRIMARY_1 |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| PRIMARY | - | PRIMARY_2 | new file added |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_APPLICATION | CCC_APPLICATION_new | CCC_APPLICATION_1 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_APPLICATION | CCC_APPLICATION_new | CCC_APPLICATION_2 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_ARCHIVE | CCC_ARCHIVE_new | CCC_ARCHIVE_1 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_ARCHIVE | CCC_ARCHIVE_new | CCC_ARCHIVE_2 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_AXN | CCC_AXN_new | CCC_AXN_1 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_AXN | CCC_AXN_new | CCC_AXN_2 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_GDV | CCC_GDV_new | CCC_GDV_1 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_GDV | CCC_GDV_new | CCC_GDV_2 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
Espero que isto ajude um pouco. Há também um segundo banco de dados onde os nomes dos grupos de arquivos são diferentes, mas deixo isso de fora por uma questão de brevidade.