查看: 2211|回复: 0
打印 上一主题 下一主题

[软件应用] [转载]收缩MSSQL数据库文件的方法

[复制链接]

2569

主题

3687

帖子

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
101592
跳转到指定楼层
楼主
发表于 2013-12-23 10:37:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先提供一种复杂的方法压缩日志及数据库文件如下:
1.清空日志
   DUMP  TRANSACTION  库名  WITH  NO_LOG   
2.截断事务日志:
   BACKUP LOG 数据库名 WITH NO_LOG
3.收缩数据库文件(如果不压缩,数据库的文件不会减小
   企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
    --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
    --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
   也可以用SQL语句来完成
   --收缩数据库
   DBCC SHRINKDATABASE [数据库名]
   --收缩指定数据文件,例如:1是文件号,可以通过这个语句查询到:select * from sysfiles
   DBCC SHRINKFILE(1)
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
   a.分离数据库:
    企业管理器--服务器--数据库--右键--分离数据库
   b.在我的电脑中删除LOG文件
   c.附加数据库:
    企业管理器--服务器--数据库--右键--附加数据库
   此法将生成新的LOG,大小只有500多K
   或用代码:
   下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
   a.分离
   E X E C sp_detach_db @dbname = 'pubs'
   b.删除日志文件
   c.再附加
   E X E C sp_attach_single_file_db @dbname = 'pubs',
      @physname = 'c:Program FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
5.为了以后能自动收缩,做如下设置:
   企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
   --SQL语句设置方式:
   E X E C sp_dboption '数据库名', 'autoshrink', 'TRUE'
6.如果想以后不让它日志增长得太大
   企业管理器--服务器--右键数据库--属性--事务日志
    --将文件增长限制为xM(x是你允许的最大数据文件大小)
   --SQL语句的设置方式:
   alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)
特别注意:
   请按步骤进行,未进行前面的步骤,请不要做后面的步骤
   否则可能损坏你的数据库.
   一般不建议做第4,6两步
   第4步不安全,有可能损坏数据库或丢失数据
   第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.
另外提供一种更简单的方法,本人屡试不爽,建议大家使用。
更简单的方法:
   1。右建数据库属性窗口--故障还原模型--设为简单
   2。右建数据库所有任务--收缩数据库
   3。右建数据库属性窗口--故障还原模型--设为大容量日志记录

   请按步骤进行,未进行前面的步骤,请不要做后面的步骤
   否则可能损坏你的数据库.
   一般不建议做第4,6两步
   第4步不安全,有可能损坏数据库或丢失数据
   第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复库

以下适用MSSQL2005或以上:
一、简单恢复模式下的日志收缩
  当数据库的恢复模式为“简单”的时候,日志文件会在以下情况被截断:
(1)完整备份
(2)遇到检查点(checkpoint)

  当日志被截断后,日志文件的内部空间就会标记为“可复用”,因此日志文件就不需要持续增长。


二、完整恢复模式下的日志收缩
  在完整恢复模式下,对数据进行完整备份或者遇到检查点,都不会对日志造成影响。因此,可能会导致日志文件不能被截断(也就不能“可复用”)。日志文件将持续增长,甚至直逼硬盘空间的极限,即使手动收缩也不会减小文件空间,因为空间都被占用着。

1、确认恢复模式
  以下是使用SQL Server Management Studio检查数据库的恢复模式。



2.完整备份
  日志备份之前,必须做过完整备份。


注意:不要勾选“仅复制备份”选项。“仅复制备份”不会影响日志。

3.事务日志备份
  做过完整备份之后,可以随时进行事务日志备份。


  默认的选项,是备份后截断事务日志。



4.手动收缩日志文件
  做过日志备份之后,日志被截断,大量空间被标记为“可复用”。可以进行“收缩文件”操作,以将“可复用”的空间从日志文件中移出,从而减小日志文件。



三、非官方的操作方法
1、临时改用简单恢复模式
  临时改为简单恢复模式,然后做一次完整备份,或者运行checkpoint执行检查点。当日志被截断后,再收缩日志文件,最后再改回完整恢复模式。
注意:改回完整恢复模式后,请务必再做事务日志备份。

2、with no_log选项
  在旧版本里,可以使用BACKUP LOG WITH NO_LOG,或者WITH TRUNCATE_ONLY。但是,SQL Server 2008已经删除了这些选项。

3、分离后再附加
  分离这个数据库,然后删除日志文件。然后重新附加这个数据库,SQL Server就会警告丢失了日志文件,可以忽略这个警告,系统会自动创建一个空的日志文件。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


快速回复 返回顶部 返回列表