SQL Server: файлы идентификаторов сценариев потерянных файлов, отсутствующие в схемах / индексах разделов. Возвращает файл - SQL Server выдает поговорку "не пусто" - PullRequest
2 голосов
/ 08 февраля 2011

SQL Server: файлы идентификаторов сценариев потерянных файлов, отсутствующие в схемах / индексах разделов. Возвращает файл, который при попытке удаления SQL Server выдает «не пуст»

a) что еще можно сделать с этим сценарием, чтобы он возвращал только "потерянные" файлы - "потерянные" файловую группу / файл, не связанный со схемой или индексом раздела?

b) если этого достаточно, как может получиться, что один из файлов вернулся, когда выдан файл удаления alter db - db выдает «not empty»?

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 МБ - 0,88 МБ бесплатно. Затем я посмотрел @ другие файлы, которые я ожидал пустыми. Большинство из них при общем объеме 1 МБ показывают свободное пространство в размере 0,94 МБ.

1 Ответ

1 голос
/ 08 февраля 2011

Ошибка в Microsoft Sql Server.

См. Последнее сообщение о: http://www.sqlservercentral.com/Forums/FindPost681162.aspx

Попробовал это в моей ситуации и смог удалить файл.

...