SQL Server: file di ID script di file orfani non in schemi/indici di partizione. Sta restituendo un file - SQL Server lancia dicendo "non vuoto"

StackOverflow https://stackoverflow.com/questions/4934727

Domanda

SQL Server: file di ID script di file orfani non in schemi/indici di partizione. Sta restituendo un file che quando viene tentata la delete, SQL Server lancia dicendo "non vuoto"

a) Cosa potrei fare di più a questo script per restituire solo file "orfani" - filegroup / file orfano "non correlato a uno schema o indice di partizione?

b) Se questo è sufficiente, come potrebbe essere che uno dei file restituiti, quando viene emesso il file di rimozione DB alter - DB lancia dicendo "non vuoto"?

B1) Il file / filegroup faceva una volta parte di una partizione, ma è stato fuso. Verificato questo da SQL e guardando @ Schemi di partizione

b2) il file mostra dimensioni di 128, che ho osservato come dimensione più piccola possibile per un file

WITH cte_file_relations
AS(
SELECT
related_to_nothing = CASE WHEN dataspaces_n_indexes.data_space_id IS NULL
AND dds.partition_scheme_id IS NULL
AND ds_alloc_units.data_space_id IS NULL
AND dataspaces_n_full_text_indexes.data_space_id IS NULL
THEN 1
ELSE 0 END
-- 
, [file_group_name] = fg.name
, filegroup_type_desc = fg.type_desc
, [filegroup_is_empty] = CASE WHEN df.data_space_id IS NULL THEN 1 ELSE 0 END
-- 
, [file_logical_name] = df.name
, [file_phys_name] = df.physical_name
, [file_empty?] = CASE df.size WHEN 128 THEN ''looks empty'' ELSE ''NOT empty'' END
--
, part_of_Partition_Scheme = CASE WHEN dds.partition_scheme_id IS NULL THEN 0 ELSE 1 END
, part_of_index = CASE WHEN dataspaces_n_indexes.data_space_id IS NULL THEN 0 ELSE 1 END
, part_of_full_text_index = CASE WHEN dataspaces_n_full_text_indexes.data_space_id IS NULL THEN 0 ELSE 1 END
, part_of_alloc_units = CASE WHEN ds_alloc_units.data_space_id IS NULL THEN 0 ELSE 1 END
FROM
sys.filegroups fg WITH ( NOLOCK )

LEFT JOIN sys.database_files df WITH ( NOLOCK )
ON fg.data_space_id = df.data_space_id

LEFT JOIN sys.destination_data_spaces dds
ON fg.data_space_id = dds.data_space_id

LEFT JOIN ( SELECT i.data_space_id FROM sys.indexes i GROUP BY i.data_space_id ) dataspaces_n_indexes
ON fg.data_space_id = dataspaces_n_indexes.data_space_id

LEFT JOIN ( SELECT i.data_space_id FROM sys.fulltext_indexes i GROUP BY i.data_space_id ) dataspaces_n_full_text_indexes
ON fg.data_space_id = dataspaces_n_full_text_indexes.data_space_id

LEFT JOIN ( SELECT data_space_id FROM sys.allocation_units GROUP BY data_space_id ) ds_alloc_units
ON fg.data_space_id = ds_alloc_units.data_space_id
)
select *
from cte_file_relations
WHERE related_to_nothing = 1

Su un amico di amici, sono andato a ridurre il file e vedere da 1 MB totale - .88 MB gratuito. Poi ho guardato @ altri file che mi aspettavo di essere vuoto. La maggior parte di loro @ 1 MB di spazio totale, mostra spazio libero .94 MB.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top