2013-03-04 51 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

相關問題