社区
MS-SQL Server
帖子详情
SQL2000 收缩数据库 为何没有效果
gengycn
2007-12-13 10:06:54
数据库文件43G,日志文件130M
先收缩了日志文件到500K
然后再收缩数据库后,数据库文件变成39G
但奇怪的是再向数据库中导入表的话
数据库文件就变回43G,日志文件也变回130M
请问是什么原因?
怎样才能正确收缩数据库?
谢谢!!
...全文
1156
13
打赏
收藏
SQL2000 收缩数据库 为何没有效果
数据库文件43G,日志文件130M 先收缩了日志文件到500K 然后再收缩数据库后,数据库文件变成39G 但奇怪的是再向数据库中导入表的话 数据库文件就变回43G,日志文件也变回130M 请问是什么原因? 怎样才能正确收缩数据库? 谢谢!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
rouqu
2007-12-13
打赏
举报
回复
要是磁盘快没空间了 可以分一部分数据出去
andy84
2007-12-13
打赏
举报
回复
你可以先完全备份 再收缩
rouqu
2007-12-13
打赏
举报
回复
39G和43G相差很多吗...你现在空间又是43G 不等于这里面已经写
实
了
膨胀是数据库本身的一个特点 你可以调低它的伸缩比例(如5%) 但是如果DML操作频繁 对性能是要大打折扣的
gengycn
2007-12-13
打赏
举报
回复
那能否控制膨胀比例?
或者是否有其他方法解决??
rouqu
2007-12-13
打赏
举报
回复
其实SQL2K里数据库默认设置就是按照10%比例膨胀(从操作系统申请空间分配)
rouqu
2007-12-13
打赏
举报
回复
根据你对数据库设置的膨胀比率 如10% 当39G数据文件内部空间比较紧密 新的数据无法容纳的情况下 则它会从OS申请39G*10%的空间 这样加起来差不多43G
gengycn
2007-12-13
打赏
举报
回复
1L:我有搜到,就是按那样做的也不行。
3L:是空间问题,而且删除多余表后数据库文件并不减小。
rouqu
2007-12-13
打赏
举报
回复
压缩似乎没有问题 可以这样理解
■ ■■■■ ■■■■■■ ■■■■■ ■■■■■■■ 43G
■ ■■■■■■■■■■■■■■■■■■■■■■ 39G
■ ■■■■■■■■■■■■■■■■■■■■■■ ■ 43G
w2jc
2007-12-13
打赏
举报
回复
收缩数据库的目的何在?
如果空间不是问题最好不要收缩,
否则应该考虑增加空间,而不是收缩...
-狙击手-
2007-12-13
打赏
举报
回复
清除日志:
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT
USE szwzcheck -- 要操作的数据库名
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换成你数据库的名字即可,在查询分析器里面运行。
有全角的空格(为了显示好看),你自己把他换一下.
收缩日志:
企业管理器--所有任务--收缩数据库--文件--选日志文件收缩
-狙击手-
2007-12-13
打赏
举报
回复
1: 删除LOG
1:分离数据库 企业管理器->服务器->数据库->右键->分离数据库
2:删除LOG文件
3:附加数据库 企业管理器->服务器->数据库->右键->附加数据库
此法生成新的LOG,大小只有500多K
再将此数据库设置自动收缩
或用代码:
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
EXEC sp_detach_db @dbname = 'pubs'
EXEC sp_attach_single_file_db @dbname = 'pubs',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'
2:清空日志
DUMP TRANSACTION 库名 WITH NO_LOG
再:
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
3: 果想以后不让它增长
企业管理器->服务器->数据库->属性->事务日志->将文件增长限制为2M
1、设置数据库为简单模式
-->数据库的属性
-->“选项”页
-->“模型”选为“简单”
2、截断日志,收缩数据库
backup log 数据库名 with no_log
go
dbcc shrinkdatabase(数据库名)
go
rouqu
2007-12-13
打赏
举报
回复
收缩有效果 但不是每次都很明显 完全备份本身和收缩没有关系
gengycn
2007-12-13
打赏
举报
回复
意思就是想先备份后收缩的
但是看到收缩没有效果,才没有完全备份的
sql
sql
server2005
数据库
收缩
功能使用
sql
sql
server2005
数据库
收缩
功能使用
sql
2000
重建索引
收缩
数据库
sql
2000
重建索引
收缩
数据库
!相当好的本人收藏。
sql
2012的
收缩
数据库
的
sql
脚本,绝对好用
sql
2012的
收缩
数据库
的
sql
脚本,绝对好用
sql
server 2008
数据库
日志
收缩
sql
server 2008
数据库
日志
收缩
数据库
日志
收缩
脚本
数据库
日志
收缩
脚本,适用于
SQL
server 2005, 2008, 2012
MS-SQL Server
34,593
社区成员
254,590
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章