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"
-
30-10-2019 - |
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