2013-03-04 54 views
1

我们有几个测试数据库,我们正在将测试索引引入,并且由于我们丢弃了表中的内容并重新填充,所以日志文件变得很快膨胀。从脚本中获取sql日志文件名

我发现,由于堆栈溢出,几个脚本,并把它们放在一起做我所需要的。

下面是脚本:

USE SSSIndexes 
GO 
ALTER DATABASE SSSIndexes SET RECOVERY SIMPLE WITH NO_WAIT 
GO 
DBCC SHRINKFILE(N'SSSIndexes_Log', 1) <-- my issue is here 
GO 

问题是日志文件的名称。有没有办法获得日志文件的名称,而无需手动查找,并将其包含在脚本中,以实现该部分的自动化?

顺便说一句,我们从来没有打算恢复这个数据库。这些是临时索引。

谢谢!

回答

6
USE SSSIndexes 
GO 
ALTER DATABASE SSSIndexes SET RECOVERY SIMPLE WITH NO_WAIT 
GO 
DECLARE @Name NVARCHAR(50) 

DECLARE cur CURSOR FOR 
SELECT [name] 
FROM [sys].[database_files] 
where [type] = 1 

OPEN cur 
FETCH NEXT FROM cur INTO @Name 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    DBCC SHRINKFILE(@Name, 1) 
    FETCH NEXT FROM cur INTO @Name 
END 
CLOSE cur 
DEALLOCATE cur 
+0

真棒!谢谢! – ErocM 2013-03-04 18:32:03

+0

如果我正确读取它,它正在缩小该实例中的所有数据库?我在想这个吗? – ErocM 2013-03-04 21:16:33

+0

不,只有一个数据库,请参阅第1行:USE SSSIndexes。 [sys]。[database_files]特定于每个数据库。 – 2013-03-05 08:55:02

0

您可以使用它来生成所有数据库的日志文件截断脚本特定服务器上......坚持到特定的数据库使用过滤器..... :-)

SELECT

' USE ['+ name +']; GO

- 通过将数据库恢复模型更改为SIMPLE来截短日志。

ALTER DATABASE ['+ name +'] SET RECOVERY SIMPLE;

GO

- 将截短的日志文件缩小到1 MB。

DECLARE @logname varchar(128); SELECT TOP 1 @ logname = [name] FROM ['+ name +']。[sys]。[database_files] WHERE [type] = 1;

DBCC SHRINKFILE(@logname,1);

GO

- 重置数据库恢复模型。

ALTER DATABASE ['+ name +'] SET RECOVERY FULL;

GO

'AS QRY FROM master.dbo.sysdatabases中

WHERE DBID> 6

相关问题