SQL Server:孤立したファイルスクリプトIDファイルがパーティションスキーマ/インデックスにありません。削除が試行されたときにSQLServerが「空ではない」とスローするファイルを返しています
a)「孤立した」ファイル(パーティションスキーマまたはインデックスに関連しない「孤立した」ファイルグループ/ファイル)のみを返すために、このスクリプトにさらに何ができるでしょうか。
b)これで十分な場合、alter db removeファイルが発行されたときにファイルの1つが返されるのはどうしてですか?dbは「空ではありません」とスローしますか?
b1)ファイル/ファイルグループはかつてパーティションの一部でしたが、マージされました。これをSQLと@パーティションスキーマで確認しました
b2)ファイルは128のサイズを示しています。これは、ファイルの可能な最小サイズとして私が観察したものです。
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
友達の思いで、私はファイルを縮小して、合計1 mb(.88 mb無料)を見に行きました。次に、空になると予想していた@他のファイルを調べました。それらの大部分は合計1mbのスペースで、.94mbの空きスペースを示しています。