请教sql server7.0中附加数据库
关于sql server2000缩小日志文件的方法见过不少了
前几天遇到一个客户的sql server7.0,其日志文件每个1.6G,共有8个,最后硬盘此分区空间不够了才发现问题。当时我停止数据库服务后,删除掉日志文件,并在重新启动服务后用在sql2000联机文档里查到的附加数据库语句将数据文件附加了上去。当时数据库一切正常,但是自己现在还是没有把握,当然当时已经做了备份。
请教大家,在sql2000联机文档中查到的语句在7.0中运行有什么影响或副作用吗?
问题点数:50、回复次数:9Top
1 楼tj_dns(愉快的登山者)回复于 2003-01-11 22:16:09 得分 5
只要能运行,就说明7.0也是支持这些语句的;只要使用的合理应该没有问题,但要记住的一点就是,实验前要记着先备份数据库.Top
2 楼xxcw(Puma)回复于 2003-01-11 22:25:38 得分 5
数据库的日志文件删除后,对整个数据库有影响吗?我也时常这样做,因为ldf文件实在太大了。Top
3 楼pengdali()回复于 2003-01-11 22:25:40 得分 30
EXEC sp_attach_single_file_db @dbname = 'pubs',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'
CREATE DATABASE 你的新库名
ON PRIMARY (FILENAME = 'c:\program files\microsoft sql server\mssql\data\你的新库的文件.mdf')
FOR ATTACH
GO
你create database test 先试试!Top
4 楼pengdali()回复于 2003-01-11 22:26:44 得分 0
如果你想直接清除日志:
DUMP TRANSACTION @DataBaseName WITH NO_LOG
DBCC SHRINKFILE( @LogoFileName,@NewSize)Top
5 楼pengdali()回复于 2003-01-11 22:27:19 得分 0
或改变大小: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
Top
6 楼z5wjz(z5wjz)回复于 2003-01-12 11:33:16 得分 5
如果想缩小数据库用这个命令就可以了,
backup log yourdbname with no_log
dbcc shrinkdatabase (yourdbname)Top
7 楼zhmq()回复于 2003-01-23 13:06:59 得分 0
后来我发现在7.0里面
只要停止服务后,直接删除日志文件
再次启动服务后,它竟然自动地给创建了一个(大小不到1m),数据库无影响
请指教Top
8 楼sdiezyw(威子)回复于 2003-01-23 20:54:08 得分 5
’大力‘的sp_attach_single_file_db 命令比较好使,我已经试过了!Top
9 楼zhmq()回复于 2003-02-04 12:20:38 得分 0
sp_attach_single_file_db 我也用过
上面的现象你们遇到过吗?Top




