shrinkfile 是针对文件,需指定shrinkdatabase  指定数据库进行处理(无需指定数据文件或日志文件,均包含)

解决方案 »

  1.   

    dbcc shrinkfile是指收缩指定的文件,而由于一个数据库是由多个文件组成的,所以dbcc shrinkdatabase 可以收缩整个数据库中的多个文件。应该说两者的粒度不同。
    /*================================================
    显示数据库的空间使用情况:1.DATABASE_SIZE = RESERVED + UNALLOCATED SPACE(还没有分配) + 日志空间
      所以DATABASE_SIZE总是大于reserved + unallocated space之和
      
    2.RESERVED = DATA + INDEX_SIZE + UNUSED(已经分配但还没使用)3.当delete或truncate一个大型对象后,sp_spaceused返回的值
      可能不正确,这时可以用@updatesuage='true'来更新统计信息,
      由于此操作可能会花费一些时间,所以只有确定这么做对其他进程没有负面应影响时才使用.
      在删除或重新生成大型索引时,或者在删除或截断大型表时,
      数据库采用延迟操作,数据库在事务提交后,才会释放这些延迟操作所占资源。
      此外,延迟的删除操作不会立即释放已分配的空间,
      所以sp_spaceused不能准确显示实际可用空间值.
    ==================================================*/--显示当前数据库的空间使用情况
    EXEC sp_spaceused
    --显示表的空间使用
    exex sp_spaceused
    @objname = 'wcT',
    @updateusage = 'true'
    --显示整个服务器中所有数据库的日志使用情况
    DBCC SQLPERF(LOGSPACE)  
    --收缩数据库
    DBCC SHRINKDATABASE('WC',  --要收缩的数据库名称或数据库ID
                        10     --收缩后,数据库文件中空间空间占用的百分比
                        )DBCC SHRINKDATABASE('WC',  --要收缩的数据库名称或数据库ID
                        10,    --收缩后,数据库文件中空闲空间占用的百分比
                        NOTRUNCATE --在收缩时,通过数据移动来腾出自由空间
                        )
                        
    DBCC SHRINKDATABASE('WC',  --要收缩的数据库名称或数据库ID
                        10,    --收缩后,数据库文件中空间空间占用的百分比
                  TRUNCATEONLY --在收缩时,只是把文件尾部的空闲空间释放
                        )
                        --收缩文件
    DBCC SHRINKFILE(wc_fg8,   --要收缩的数据文件逻辑名称
                    7         --要收缩的目标大小,以MB为单位
                    )
                    
    DBCC SHRINKFILE(wc_fg8,   --要收缩的数据文件逻辑名称
                    EMPTYFILE --清空文件
                    )