加入收藏 | 设为首页 | 会员中心 | 我要投稿 上海站长网 (https://www.021zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql数据库空间太大,怎么减小

发布时间:2022-11-18 14:03:44 所属栏目:MsSql教程 来源:互联网
导读: sql数据库空间太大,如何减小.
我们有个数据库大小有14G,但实际表的的数据库根本没有这么大.请问是怎么回事呢?
我已经做了数据库收缩了.
------解决方案--------------------
清除日志:
DE

sql数据库空间太大,如何减小.

我们有个数据库大小有14G,但实际表的的数据库根本没有这么大.请问是怎么回事呢?

我已经做了数据库收缩了.

------解决方案--------------------

清除日志:

DECLARE @LogicalFileName sysname,

@MaxMinutes INT,

@NewSize INT

USEszwzcheck-- 要操作的数据库名

SELECT @LogicalFileName = 'szwzcheck_Log', -- 日志文件名

@MaxMinutes = 10,-- Limit on time allowed to wrap log.

@NewSize = 20-- 你想设定的日志文件的大小(M)

-- Setup / initialize

DECLARE @OriginalSize int

SELECT @OriginalSize = size

FROM sysfiles

WHERE name = @LogicalFileName

SELECT 'Original Size of ' + db_name() + ' LOG is ' +

CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +

CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'

FROM sysfiles

WHERE name = @LogicalFileName

CREATE TABLE DummyTrans

(DummyColumn char (8000) not null)

DECLARE @Counter INT,

@StartTime DATETIME,

@TruncLog VARCHAR(255)

SELECT @StartTime = GETDATE(),

@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'

DBCC SHRINKFILE (@LogicalFileName, @NewSize)

EXEC (@TruncLog)

-- Wrap the log if necessary.

WHILE@MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time

AND @OriginalSize = (SELECT size FROM sysfiles WHERE name =

@LogicalFileName)

AND (@OriginalSize * 8 /1024) > @NewSize

BEGIN -- Outer loop.

SELECT @Counter = 0

WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))

BEGIN -- update

INSERT DummyTrans VALUES ('Fill Log')

DELETE DummyTrans

SELECT @Counter = @Counter + 1

END

EXEC (@TruncLog)

END

SELECT 'Final Size of ' + db_name() + ' LOG is ' +

CONVERT(VARCHAR(30),size) + ' 8K pages or ' +

CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'

FROM sysfiles

WHERE name = @LogicalFileName

DROP TABLE DummyTrans

SET NOCOUNT OFF

把szwzcheck换成你数据库的名字即可,在查询分析器里面运行。

有全角的空格(为了显示好看),你自己把他换一下.

收缩日志:

企业管理器--所有任务--收缩数据库--文件--选日志文件收缩

------解决方案--------------------

*--压缩数据库的通用存储过程

压缩日志及数据库文件大小

因为要对数据库进行分离处理

所以存储过程不能创建在被压缩的数据库中

--邹建 2004.03(引用请保留此信息)--*/

/*--调用示例

exec p_compdb 'test '

--*/

use master --注意,此存储过程要建在master数据库中

go

if exists (select * from dbo.sysobjects where id = object_id(N '[dbo].[p_compdb] ') and OBJECTPROPERTY(id, N 'IsProcedure ') = 1)

drop procedure [dbo].[p_compdb]

GO

create proc p_compdb

@dbname sysname, --要压缩的数据库名

@bkdatabase bit=1, --因为分离日志的步骤中,可能会损坏数据库,所以你可以选择是否自动数据库

@bkfname nvarchar(260)= ' ' --备份的文件名,如果不指定,自动备份到默认备份目录,备份文件名为:数据库名+日期时间

as

--1.清空日志

exec( 'DUMP TRANSACTION [ '+@dbname+ '] WITH NO_LOG ')

--2.截断事务日志:

exec( 'BACKUP LOG [ '+@dbname+ '] WITH NO_LOG ')

--3.收缩数据库文件(如果不压缩,数据库的文件不会减小

exec( 'DBCC SHRINKDATABASE([ '+@dbname+ ']) ')

--4.设置自动收缩

exec( 'EXEC sp_dboption ' ' '+@dbname+ ' ' ', ' 'autoshrink ' ', ' 'TRUE ' ' ')

--后面的步骤有一定危险,你可以可以选择是否应该这些步骤

--5.分离数据库

if @bkdatabase=1

begin

if isnull(@bkfname, ' ')= ' '

set @bkfname=@dbname+ '_ '+convert(varchar,getdate(),112)

+replace(convert(varchar,getdate(),108), ': ', ' ')

select 提示信息= '备份数据库到SQL 默认备份目录,备份文件名: '+@bkfname

(编辑:上海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!