日期:2014-05-16  浏览次数:20470 次

关于主数据文件和辅助数据文件存储表数据分配问题
create database testdb
on primary
(name=testdb_data,
 filename='d:\testdb_data.mdf',  
 size=5mb,
 maxsize=20mb,
 filegrowth=2),
 (name=testdb_data1,
  filename='d:\testdb_data2.ndf',
  size=10,
  maxsize=20,
  filegrowth=2)
 log on
 (name=testdb_log,
  filename='d:\testdb_log.ldf',
  size=2,
  maxsize=10mb,
 filegrowth=10%),
 (name=testdb_log1,
  filename='d:\testdb_log2.ldf',
  size=5,
  maxsize=15mb,
  filegrowth=1)

问题如下:
1.primary 很多教材的解释是指定主数据文件的,那么如果不加primary关键字,如上代码,后缀为.mdf格式的数据文件不也是主数据文件么,而且以前记得试验过,一个数据库下可以存在多个.mdf格式的数据文件,搞不清楚咋回事,求大神们答疑?
2.这个才是我最想问的,比如上面代码主数据文件大小为5mb,那么当我在该数据下创建了一张表并大批量导入了数据,如果该表数据量超过了主数据文件的最大容量,比如上述代码为maxsize=20mb,那么辅助数据文件是否会帮忙存储剩余的数据?另外我可不可以知道哪些数据存储在了主数据文件。哪些数据存储在了辅助数据文件呢?
这个问题记得论坛里有人提及过?但还是搞清楚

------解决方案--------------------
按比例分配,每个文件写入数据的一部分,也就是说你不知道数据实际上是在哪个文件,即使知道,用处也不大,因为数据的改动可能会一定数据的存储位置,比如本来一个表的数据存在2个文件中,但是我删了其他表的一些数据,再重建聚集索引,再做些其他操作,可能这个表的数据就全部存储到一个文件中,简单来说,可能你没办法准确知道实时的数据位置。不过作为研究,DBCC PAGE命令是可以的,但是》。。。试过你就知道有多痛苦。
另外你那个那么辅助数据文件是否会帮忙存储剩余的数据?
实际上不做特殊配置的情况下,它/它们一直在协助存储,不是仅存储到主文件组中的主要文件中的。