2014-01-08 54 views
0

我有一個數據庫使用兩個文件組。我們稱他們爲PRIMARY和FG1。所有數據最初都是在PRIMARY中,然後移到FG1中。這通過將聚簇索引移動到FG1來實現。其他索引已刪除並重新創建,但未指定文件組,但將FG1定義爲默認值,因此它們現在已在FG1中有效。如何查找SQL Server中文件組的內容的類型和大小?

但是,PRIMARY的文件仍然會隨着時間而被填充。

如何找到保留在PRIMARY中的東西的類型,包括其大小?
我的目標是將所有事情都交給FG1,讓PRIMARY不再被填滿。

+1

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 –

+0

我已經找到了這個sqlauthority.com條目,並在那裏執行腳本。但是它列出的所有內容已經在文件組FG1中。必須有更多... – Marc

+0

你的第二個鏈接似乎是一個非常好的開始!它的確在PRIMARY上找到了一個聚集索引,並且有很多數據。 FG1上已經有相同的索引(同一張表,同名)。怎麼可能?我如何解決這個問題? – Marc

回答

0

這裏有一個腳本,它列出了所有的文件組中的所有對象和所有索引:
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中指定的任何大型列數據的存儲都不能隨後更改。」厄運。

+0

舊的答案,但我只是想澄清一下:你*可以*移動數據,但你必須通過在TEXTIMAGE_ON選項設置爲該文件組的新文件組上創建一個臨時表,然後將數據插入到該表中,刪除舊錶,並將您的臨時表重命名爲舊錶名。這是SQL服務器數據工具如何實現的。 –

+0

@ n-west感謝您的建議。但外鍵等等呢?您可以刪除並重新創建它們,但是如何保證具有標識列的值?這太麻煩了,所以我仍然生活在這種情況下。 – Marc

+0

對於標識列,只需使用標識插入:https://msdn.microsoft.com/en-us/library/ms188059.aspx –

相關問題