如何在SQLServer2000中用SQL语句清除远程数据库的日志?怎样用语句压缩远程数据库?

king8192 2005-10-19 04:22:33
如何在SQLServer2000中用SQL语句清除远程数据库的日志?怎样用语句压缩远程数据库?
...全文
333 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yhycsb2001 2005-10-21
----压缩日志文件
BACKUP LOG 数据库名 WITH NO_LOG
Use 数据库名
DBCC SHRINKFILE (2,10)
DBCC SHRINKDATABASE (数据库名, 10)
回复
Forwardrun 2005-10-21
服务器: 消息 170,级别 15,状态 1,行 35
第 35 行: ';' 附近有语法错误。
服务器: 消息 156,级别 15,状态 1,行 37
在关键字 'AND' 附近有语法错误。
服务器: 消息 170,级别 15,状态 1,行 40
第 40 行: ';' 附近有语法错误。
回复
cnlixb 2005-10-19
相关脚本你可以在论坛查找一下其它贴子:

转贴:缩小SQL SERVER日志文件

前几天也碰到日志文件过大的问题,数据库实际大小为600M, 日志文件实际大小为33M, 但日志文件占用空间为2.8G!!!
试了多种方式,SHIRNK DATABASE, TRUNCATE LOG FILE, 都没办法将文件缩小。无论如何,这应该算SQL SERVER的一个BUG吧。

后来找到下面的代码,就可以将日志文件缩小到自己想要的大小了。把代码COPY到查询分析器里,,然后修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大小),运行即可(我已经用过多次了)
-----
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT


USE Marias -- 要操作的数据库名
SELECT @LogicalFileName = 'Marias_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

回复
love16 2005-10-19
EXEC sp_detach_db @dbname = '数据库名'
/*
先执行上面语句,再访问到那个数据库目录下删除日志文件后,执行下面语句!
*/
EXEC sp_attach_single_file_db @dbname = '数据库名',
@physname = 'd:\Microsoft SQL Server\MSSQL\Data\数据库名'_Data.mdf'
回复
cnlixb 2005-10-19
你用SQL 查询分析器连接远程SQL服务器,执行相应的脚本.
回复
churchatp1 2005-10-19
保存一下应该就会截断日志了吧
回复
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2005-10-19 04:22
社区公告
暂无公告