收缩数据库

简介:
大家都用过企业管理器中的--“收缩数据库”,里面的功能的确可以收缩数据库的日志文件(.ldf)和数据文件(.mdf),但都会发现同样的问题,在收缩“数据文件”(.mdf)时根本收缩不了多少。最多截段自动增长部份的,没有根本释放在日常操作中删除数据库的沉冗空间。

  上述应该是很多人遇到过的,笔者也千试万试试出来的方法,为了确定您的数据库安全,在执行下例的操作前,请先备份你的数据库。

  1.首先你要找到你的数据库最大的表,一般是数目最大的表,如果不清楚,请在查询分析器查询:

  DBCC SHOWCONTIG

  接着用 sp_spaceused 表 来查询reserved 的值和 data 的值 的差异可看来此表比较沉冗。

  2.复制你的转移旧表的数据到新表;

  SELECT * INTO 新表 FROM 旧表

  (如果你数据比较多,可能你会看到待压缩的数据库对应的mdf和ldf文件大小在猛增,没事在复制表)

  注:此命令不能把数据库结结构完全复制,需要您重新把旧表与新表对应的主键,自动增长值,索引,默认值等修改。

  3.更新一下;

  DBCC UPDATEUSAGE (0)

  4.把旧表删除,然后把新表的名字改成旧表的名字,这些可以到企业管理器里操作(注意重命名名时的提示);

  5.收缩mdf文件,也是最想要实现的一步;

  DBCC SHRINKDATABASE('库名')

  DBCC shrinkfile(2,0)

  DBCC UPDATEUSAGE (0)

  /*

  2 -> 要收缩的文件的fileid,对应sysfiles中的fileid。

  0 -> 收缩到初始大小

  */

  (注:红字是收缩你的数据库mdf文件,时间可能有点长;蓝字是收缩ldf文件;紫字是更新一下,非重要)

  完工,这时候你应该可以看到数据库的mdf文件大小变化差异,不说几十M,笔者的数据库就从6G收缩到1G左右,再次执行查询一些数据,明显快多了。




    本文转自 Fanr_Zh 博客园博客,原文链接:http://www.cnblogs.com/Amaranthus/archive/2011/03/23/1992417.html,如需转载请自行联系原作者





相关文章
|
6月前
|
SQL 监控 数据库
sql2012收缩数据库
在 SQL Server 2012 中,\移动后,释放不再使用的空间。这可以通过几种不同的方法来实现,具体取决于你希望如何管理这个过程。以下是一些常见的方法和步骤来收缩 SQL Server 数据库:
|
3月前
|
NoSQL 安全 关系型数据库
合适的数据库
合适的数据库
22 7
|
SQL 存储 安全
【数据库】01——精通数据库需要掌握这九个维度 1
【数据库】01——精通数据库需要掌握这九个维度
|
关系型数据库 MySQL 数据库
数据库基础(二)----- 约束,数据库的设计、备份和还原
数据库基础(二)----- 约束,数据库的设计、备份和还原​ 约束 ✔  概念: 对表中的数据进行限定,保证数据的正确性、有效性和完整性 ✔  分类:     1. 主键约束:primary key     2. 非空约束:not null     3. 唯一约束:unique     4. 外键约束:foreign key ✔  非空约束:not null,值不能为null      1. 创建表时添加约束 CREATE TABLE stu( id INT, NAME VARCHAR(20) NOT NULL -- name为非空 );      2. 创建表
数据库基础(二)----- 约束,数据库的设计、备份和还原
|
数据库 Go
收缩数据库日志
原文:收缩数据库日志 USE DATABASENAME; GO --不得已时再用这个 DUMP TRANSACTION DATABASENAME WITH NO_LOG --先截断事务日志 BACKUP LOG DATABASENAME TRUNCATE_ONLY|WITH NO_LOG|TO DISK='文件路径' --再收缩日志 DBCC SHRINKFILE (2, 7)|SHRINKFILE (DATABASENAME); --要收缩的文件的fileid,对应sysfiles中的fileid。
927 0
|
关系型数据库 数据库 MySQL