我有一個數據庫使用兩個文件組。我們稱他們爲PRIMARY和FG1。所有數據最初都是在PRIMARY中,然後移到FG1中。這通過將聚簇索引移動到FG1來實現。其他索引已刪除並重新創建,但未指定文件組,但將FG1定義爲默認值,因此它們現在已在FG1中有效。如何查找SQL Server中文件組的內容的類型和大小?
但是,PRIMARY的文件仍然會隨着時間而被填充。
如何找到保留在PRIMARY中的東西的類型,包括其大小?
我的目標是將所有事情都交給FG1,讓PRIMARY不再被填滿。
我有一個數據庫使用兩個文件組。我們稱他們爲PRIMARY和FG1。所有數據最初都是在PRIMARY中,然後移到FG1中。這通過將聚簇索引移動到FG1來實現。其他索引已刪除並重新創建,但未指定文件組,但將FG1定義爲默認值,因此它們現在已在FG1中有效。如何查找SQL Server中文件組的內容的類型和大小?
但是,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
感謝@拉斐爾奧爾索斯在對這個問題的評論的鏈接。
關於我的問題中的第二點,我無法移動PRIMARY中的剩餘對象,因爲它是LOB數據。根據CREATE TABLE的文檔,「在CREATE TABLE中指定的任何大型列數據的存儲都不能隨後更改。」厄運。
舊的答案,但我只是想澄清一下:你*可以*移動數據,但你必須通過在TEXTIMAGE_ON選項設置爲該文件組的新文件組上創建一個臨時表,然後將數據插入到該表中,刪除舊錶,並將您的臨時表重命名爲舊錶名。這是SQL服務器數據工具如何實現的。 –
@ n-west感謝您的建議。但外鍵等等呢?您可以刪除並重新創建它們,但是如何保證具有標識列的值?這太麻煩了,所以我仍然生活在這種情況下。 – Marc
對於標識列,只需使用標識插入:https://msdn.microsoft.com/en-us/library/ms188059.aspx –
http://blog.sqlauthority.com/2009/06/01/sql-server-list-all-objects-created-on-all-filegroups-in-database/或http://gallery.technet。 microsoft.com/scriptcenter/c7483555-cc22-4f6c-b9c4-90811eb3bdb6 –
我已經找到了這個sqlauthority.com條目,並在那裏執行腳本。但是它列出的所有內容已經在文件組FG1中。必須有更多... – Marc
你的第二個鏈接似乎是一個非常好的開始!它的確在PRIMARY上找到了一個聚集索引,並且有很多數據。 FG1上已經有相同的索引(同一張表,同名)。怎麼可能?我如何解決這個問題? – Marc