多语言展示
当前在线:1146今日阅读:172今日分享:19

【MSSQL/t-sql】清理数据库

悲催的在买服务器的时候,硬盘选小了, 每次数据库都占了很大空间啊,每次都重复去清理它。
工具/原料

MSSQL

方法/步骤
1

清除错误日志,MSSQL的errorlog一共有6个,从errlog.1一直到errorlog.6貌似是7个。执行一次EXEC sp_cycle_errorlog就会产生一个新的errorlog,然后把errorlog.6给删掉。就是先进先出(队列类似的情况)这样循环6次就可以把errorlog都刷新一遍。老的那个就被删掉了。

2

查看各表数据记录数量SELECT dbo.sysobjects.name As TableName,id As TableId,                (Select top 1 rowcnt From dbo.sysindexes  with (nolock) Where id=dbo.sysobjects.id) As RecordCount,                ISNULL(E.name,'') As PropertyName,                ISNULL(E.value,'') As PropertyValue                FROM dbo.sysobjects                 LEFT JOIN sys.extended_properties E ON E.major_id=dbo.sysobjects.id AND E.minor_id=0                Where xtype='U' AND dbo.sysobjects.name not in ('dtproperties','sysdiagrams') Order By dbo.sysobjects.name

3

清理日志类大记录量表格,并将自增字段恢复从1开始计数 truncate table 表名或是,删除后重置自增索引列 delete from 表名 dbcc checkident (‘table_name’, reseed, new_reseed_value)  当前自增索引列值设置为  new_reseed_value。

4

整理所有表的索引,declare @table_id intDECLARE @name varchar(100)DECLARE authors_cursor CURSOR FORSelect [name]from sysobjects where xtype='u' order by idOPEN authors_cursorFETCH NEXT FROM authors_cursorINTO @nameWHILE @@FETCH_STATUS = 0BEGINset @table_id=object_id(@name)dbcc showcontig(@table_id)DBCC DBREINDEX (@name, '', 70)dbcc showcontig(@table_id)print '*******************************************************************************************************************'print ''FETCH NEXT FROM authors_cursorINTO @nameENDClose authors_cursorDeallocate authors_cursor

5

收缩库文件和日志文件use 库名ALTER DATABASE 库名SET RECOVERY SIMPLE;GO-- Shrink the truncated log file to 1 MB.DBCC SHRINKFILE (日志文件名, 1);GO-- Reset the database recovery model.ALTER DATABASE 库名SET RECOVERY FULL;GO

6

清理 tempdb,和上步一样。

推荐信息