4

テストインデックスをスローするテストデータベースがいくつかありますが、テーブルの内容を削除して再入力するため、ログファイルはすぐに肥大化します。

Stack Overflowのおかげで、いくつかのスクリプトを見つけて、それらを組み合わせて必要なことを実行できるようになりました。

スクリプトは次のとおりです。

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

問題はログファイル名です。ログファイル名を手動で検索してスクリプトに含め、この部分が自動化される場所に含めることなく、ログファイル名を取得する方法はありますか?

ところで、このデータベースを復元するつもりはありません。これらは一時的なインデックスです。

ありがとう!

4

3 に答える 3

10
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
于 2013-03-04T18:16:17.917 に答える
0

これを使用して、特定のサーバー上のすべてのデータベースのログ ファイルを切り捨てるためのスクリプトを生成できます。特定のデータベースに固執するには、フィルターを使用します。

SELECT
' USE [' + name + ']; GO

-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE [' + name + '] SET RECOVERY SIMPLE;
GO

-- Shrink the truncated log file to 1 MB.
DECLARE @logname varchar(128);
SELECT TOP 1 @logname=[name] FROM [' + name + '].[sys].[database_files] WHERE [type] = 1;
DBCC SHRINKFILE (@logname, 1);
GO

-- Reset the database recovery model.
ALTER DATABASE [' + name + '] SET RECOVERY FULL;
GO

' AS qry FROM master.dbo.sysdatabases
WHERE dbid > 6

于 2016-06-28T06:13:44.673 に答える