我在数据库中有一些巨大的表。它们分为多个文件组。我通过右键单击并查看数据库属性来检查这些文件组的位置。但其中一些文件组存储在多个驱动器上。
基本上我有一个存储在文件组ARCHIVE上的表ABC,存储在D:\ Archive,E:\ Archive,H:\ Archive等等。有没有办法可以找出ABC存储在驱动器上的位置?
我需要这个信息,因为其中一个驱动器已满,我不确定哪些不必要的表存储在它上面所以我可以摆脱它们。我正在使用SSMS 2008。
答案 0 :(得分:1)
似乎表可以存在于文件组中的多个数据文件中。所以我不确定你是否能真正找到表存储在驱动器上的位置,因为它可以存储在多个数据文件的各个部分中。
来源:https://dba.stackexchange.com/a/42680
文件组中的对象将使用文件组中的所有数据文件。任何 FG1中的表同样驻留在Datafile1,Datafile2和Datafile3上。如果 您需要控制创建不同文件组所需的位置。 要从文件组中删除文件,请使用
DBCC SHRINKFILE EMPTYFILE
。
答案 1 :(得分:0)
看一下我写的小实用程序存储过程,以获取详细的数据库信息。
它基本上在每个数据库上都有一个sp_heldb。它在有限数量的数据库上使用游标。
大量信息。如果您只想要文件信息,请将呼叫更改为
select * from sys.dastabase_files
(可选)将信息写入临时表,例如我的usp_who2实用程序。
http://craftydba.com/wp-content/uploads/2011/09/usp-who2.txt
然后,您可以使用SELECT语句对数据进行切片和切块。
PS:Aaron有一个很好的建议,干净的房子在运行之前。