1 --9.收缩一下FG_Test_Id_01文件组文件 2 DBCC SHRINKFILE(FG_TestUnique_Id_01_data,1)
知识点6:DBCC SHRINKFILE(FG_TestUnique_Id_01_data,1)
SHRINKFILE的单位是MB,上面的语句就是收缩到1MB大小,其实这里如果E:\FG_TestUnique_Id_01_data.ndf文件有数据的话
并且需要占用2MB大小的空间,那么您使用DBCC SHRINKFILE(FG_TestUnique_Id_01_data,1)这句话只能收缩到2MB大小
并不会收缩到1MB大小的,因为这些数据需要占用空间,你怎麽收缩都收缩不了的,不信的话您们可以测试一下
DBCC SHRINKFILE (Transact-SQL)
user database的initial size和dbcc shrinkfile
总结
虽然移动数据的动作比较简单,但是知识点挺多的,有些人只知道怎麽做,不知道为什么我觉得这样不好
寻根问底是我的特性o(∩_∩)o 哈哈
注意:移动数据只能一张表一张表的移动,如果表里预先已经有聚集索引,需要先drop掉
移动之前查一下表中的数据在哪个文件组中
1 USE [Northwind] 2 GO 3 EXEC [sys].[sp_help] @objname = N'[dbo].[Categories]' -- nvarchar(776)
如有不对的地方,欢迎大家拍砖o(∩_∩)o
2014-1-19 补充:
有表分区的方法
大概有三种
先创建新的数据文件,文件组,分区方案,分区函数
例如创建三个新的数据文件和文件组,分区方案和分区函数对于这三个新的数据文件和文件组
旧表:无论已经分区或者还没有分区都适用下面三种方法:
方法一:建立中间表(新表),中间表建立在新的分区方案上,然后用insert into 新表 select * from 旧表的方法,插入完毕之后
drop掉旧表
方法二:建立中间表,中间表建立在新的分区方案上,然后用switch to,因为新分区方案有三个分区
那么,switch to只能够将表的全部数据切换到其中一个分区
USE Sales GO ALTER TABLE 旧表 SWITCH PARTITION 1 TO 新表 PARTITION 1 GO
或者
USE Sales GO ALTER TABLE 旧表 SWITCH PARTITION 1 TO 新表 PARTITION 2 GO
或者
USE Sales GO ALTER TABLE 旧表 SWITCH PARTITION 1 TO 新表 PARTITION 3 GO
上面的三条语句就会把旧表的所有数据移动到新表的某个分区,至于移动到哪个分区由最后那个数字来指定PARTITION 要移动到的分区的数字
完成后drop掉旧表
方法三:drop掉旧表的聚集索引(如果有),然后在旧表上创建一个聚集索引,创建聚集索引的时候指定新的分区方案
这样就会把表数据移动到新分区方案,即新的数据文件里,这个方法跟没有表分区的数据移动是一样的
参考文章:http://blog.csdn.net/smallfools/article/details/4930810
删除文件和删除文件组
删除失效文件组 (SQL Server)
--Transact-SQL USE master; GO ALTER DATABASE AdventureWorks2012 REMOVE FILE test1dat3 ; ALTER DATABASE AdventureWorks2012 REMOVE FILE test1dat4 ; GO --Transact-SQL USE master; GO ALTER DATABASE AdventureWorks2012 REMOVE FILEGROUP Test1FG1 ; GO