今天遇到"无法为数据库 'XXXX' 中的对象 'XXXXX' 分配空间,因为 'PRIMARY' 文件组已满。请删除不需要的文件、删除文件组中的对象"在论坛搜索了一下,有好多跟我类似问题,但解决方案都不能解决我的问题
1、SqlServer 2008企业版 现在数据文件已经110G,日志文件每天清除,保持在800M左右。
2、数据文件所在磁盘共390G,还有可用空间170G。
3、数据文件增加类型为12%,不限制增长,日志为2%,不限制增长请大家考虑一下,还有哪种方案可以解决我的问题sqlserver数据库 PRIMARY 文件组已满 

解决方案 »

  1.   

    1、如果你priamry文件组有设定最大大小,清理日志是没用的。如果没有,保证所在磁盘的空间可用
    2、可以通过新建文件组到别的盘,然后通过对大表重建聚集索引,重建同时指定新文件组的方式来移动数据到别的盘,然后进行压缩(2008才有)、重建聚集索引、收缩文件等方法减少空间。
    3、12%貌似多了,你的库大小不应该用百分比,1~500M每次比较好。
      

  2.   

    我建议你先通过第二步把空间清出来先,然后再考虑配置问题。第二步可以通过逆向操作把数据移回primary文件组
      

  3.   

    试试: 
    1.检查你的磁盘剩余空间是否足够,如果没有磁盘剩余空间,则清理磁盘,腾出空间。 
    2.检查你的磁盘分区格式:如果是FAT16,则数据文件最大只能是2G,如果是FAT32,则数据文件最大只能是4G,改为NTFS分区则没有这种限制。 
    3.检查一下你有没有限制数据库文件的大小: 
    企业管理器--右键你的数据库--属性--文件增长限制--如果有限制大小,取消限制。 
    4.检查你的SQL版本,如果你用MSDE,则限制了数据文件最大是2G。 
    5.你也可以为 primary 组添加新的数据文件来解决这个问题 
    alter database 库名 add file(NAME = 逻辑文件名,FILENAME = 'c:实际文件名.ndf'。(其实通过企业管理器选择数据库"属性"》数据库文件更方便。 
      

  4.   

    try this,use masterdbcc shrinkdatabase(tempdb,40)参考 http://social.msdn.microsoft.com/Forums/sqlserver/en-US/571d4aa5-fe11-438e-88cd-c9cc22f2276b/could-not-allocate-space-for-object-dbo-because-the-primary-filegroup-is-full-create-disk-space
      

  5.   

    导致你的问题的,应该有2种可能性:1、存放你的primary文件组的磁盘,已经满了:
    use master--你的数据库名称
    go--看看你的primary组里的文件select ds.name,
           df.physical_name,  --主文件组的物理文件的路径
                              --打开我的电脑,查看文件所在盘,是否磁盘已满
                              
           df.is_percent_growth, --是否自动增长
           df.growth             --增长多少
    from sys.data_spaces ds
    inner join sys.database_files df
            on ds.data_space_id = df.data_space_id
    where ds.name = 'primary'
    2、如果盘没有满,那么可能是你的文件组没有设置自动增长,也就是上面的is_percent_growth为0,那么需要设置:use master--你的数据库名称
    go--看看你的primary组里的文件select ds.name,
           df.physical_name,  --主文件组的物理文件的路径
                              --打开我的电脑,查看文件所在盘,是否磁盘已满
                              
           df.name  ,         --物理文件所对应的逻辑名称  
                         
           df.is_percent_growth, --是否自动增长
           df.growth             --增长多少
    from sys.data_spaces ds
    inner join sys.database_files df
            on ds.data_space_id = df.data_space_id
    where ds.name = 'primary'
    --物理文件所对应的逻辑名称,上面的语句就可以查询到
    ALTER DATABASE 数据库名称 
    MODIFY FILE ( NAME = N'物理文件所对应的逻辑名称', FILEGROWTH = 10%)