紧急求教一个问题!!!(分不够另加!)

ruanuxan 2003-08-14 08:43:06
我单位的系统是NT4.0+SQL7。0,后台数据库文件有2.0多G,日志文件有0.73M,由于硬盘空间不是很大,我就用TRUNCATE和DELETE命令清除了一部分数据,然后查看数据库的“Space allocated”选项其中数据库文件有2.097M(其中used是876.81M,free是1220.19M),日志文件是0.73M(其中used是0.33M,Free是0.4M),于是我就想通过企业管理器的Shrink database 把数据库收缩小一点,可是每次收缩的时候总是提示“The database was successfully shrunk to a size of 2097MB”,也就是数据库文件根本没有变小,请问这是怎么会事?如何才能把数据库文件变小?
...全文
22 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
nchln 2003-08-15
  • 打赏
  • 举报
回复
你的数据库文件本来就很大,而日志文件1M都不到,所以用收缩肯定是不行的。如果你的数据库服务器所有的硬盘空间都不够,那就只有加硬盘,如果其他的硬盘空间足够,那就把数据库分离出来,把数据库文件拷贝到这个硬盘,然后再附加上去。
pengdali 2003-08-15
  • 打赏
  • 举报
回复
DBCC SHRINKFILE( @MdfFileName,@NewSize)
ruanuxan 2003-08-15
  • 打赏
  • 举报
回复
先谢过各位了,我尝试做在查询分析器中做DBCC SHRINKDATABASE (数据库名,50,truncateonly)这样的操作,理论上出现的后果是不是数据库文件中多余的空间会返还给操作系统,重而数据库文件变小?可是数据库文件还是没有变小。我再看看上面这位老兄的办法吧。我以前曾经收缩过别的数据库,操作什么的都和我说的一样,数据库也变小了,不知道这次是怎么会事,难道我对数据库设置有问题,还是其他的什么原因?为感谢大家支持,再加100分!!!
txlicenhe 2003-08-15
  • 打赏
  • 举报
回复
1: 删除LOG
1:分离数据库
2:删除LOG文件
3:附加数据库
此法生成新的LOG,大小只有500多K
再将此数据库设置自动收缩
2:清空日志
DUMP TRANSACTION 库名 WITH NO_LOG

再:
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
ruanuxan 2003-08-15
  • 打赏
  • 举报
回复
好象还是不行啊,收缩的时候还是不能将数据库缩小,我按照你提供的方法去做了,首先把日志清空了,可是还是不行啊。还有什么其他的办法?
pengdali 2003-08-14
  • 打赏
  • 举报
回复
windows开始菜单-->查询分析器-->写入:

DUMP TRANSACTION 你的库名 WITH NO_LOG

按下F5执行。

企业管理器-->右键你的库-->收缩
ruanuxan 2003-08-14
  • 打赏
  • 举报
回复
老大很感谢!但是我是处学者,对这些SQL命令不是很熟悉,能不能不需执行这些文件,直接就在企业管理器中操作,这样也直观一点,拜托了,非常感谢!!有没有其他的办法?
pengdali 2003-08-14
  • 打赏
  • 举报
回复
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT


USE WebRoot -- 要操作的数据库名
SELECT @LogicalFileName = 'WebRoot_log', -- 日志或数据文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
@NewSize = 100 -- 你想设定的日志文件或数据的大小(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 has not expired
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
pengdali 2003-08-14
  • 打赏
  • 举报
回复
清空日志
DUMP TRANSACTION 库名 WITH NO_LOG

34,874

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧