我有一个使用两个文件组的数据库。我们称它们为 PRIMARY 和 FG1。所有数据最初都在 PRIMARY 中,然后移到 FG1 中。这是通过将聚集索引移动到 FG1 来实现的。其他索引在没有指定文件组的情况下被删除并重新创建,但 FG1 被定义为默认值,因此它们现在有效地位于 FG1 中。
但是,PRIMARY 的文件仍然会随着时间的推移而被填满。
我怎样才能找到 PRIMARY 中保留的东西的类型,包括它的大小?
我的目标是把所有东西都交给FG1,这样PRIMARY就不会再被填满了。
我有一个使用两个文件组的数据库。我们称它们为 PRIMARY 和 FG1。所有数据最初都在 PRIMARY 中,然后移到 FG1 中。这是通过将聚集索引移动到 FG1 来实现的。其他索引在没有指定文件组的情况下被删除并重新创建,但 FG1 被定义为默认值,因此它们现在有效地位于 FG1 中。
但是,PRIMARY 的文件仍然会随着时间的推移而被填满。
我怎样才能找到 PRIMARY 中保留的东西的类型,包括它的大小?
我的目标是把所有东西都交给FG1,这样PRIMARY就不会再被填满了。
这是一个列出所有文件组中所有对象和所有索引的脚本:http:
//gallery.technet.microsoft.com/scriptcenter/c7483555-cc22-4f6c-b9c4-90811eb3bdb6
-- List all Objects and Indexes
-- per Filegroup / Partition and Allocation Type
-- including the allocated data size
SELECT DS.name AS DataSpaceName
,AU.type_desc AS AllocationDesc
,AU.total_pages / 128 AS TotalSizeMB
,AU.used_pages / 128 AS UsedSizeMB
,AU.data_pages / 128 AS DataSizeMB
,SCH.name AS SchemaName
,OBJ.type_desc AS ObjectType
,OBJ.name AS ObjectName
,IDX.type_desc AS IndexType
,IDX.name AS IndexName
FROM sys.data_spaces AS DS
INNER JOIN sys.allocation_units AS AU
ON DS.data_space_id = AU.data_space_id
INNER JOIN sys.partitions AS PA
ON (AU.type IN (1, 3)
AND AU.container_id = PA.hobt_id)
OR
(AU.type = 2
AND AU.container_id = PA.partition_id)
INNER JOIN sys.objects AS OBJ
ON PA.object_id = OBJ.object_id
INNER JOIN sys.schemas AS SCH
ON OBJ.schema_id = SCH.schema_id
LEFT JOIN sys.indexes AS IDX
ON PA.object_id = IDX.object_id
AND PA.index_id = IDX.index_id
ORDER BY DS.name
,SCH.name
,OBJ.name
,IDX.name
感谢@Raphaël Althaus 在问题评论中提供链接。
关于我问题的第二点,我无法从 PRIMARY 中移动剩余的对象,因为它是 LOB 数据。根据 CREATE TABLE 的文档, “CREATE TABLE 中指定的任何大列数据的存储都不能随后更改。” 厄运。