データベースの論理名に基づいてDBCCSHRINKFILEを使用して、トランザクションログファイルを縮小するT-SQLルーチンを作成しようとしています。このDB_NAME()
関数は、データベースの論理名を提供します。トランザクションログに相当するものはありますか?そうでない場合、この情報を取得する他の方法はありますか?トランザクションログのデフォルト名はですが<<Database Name>>_log
、私はこれに依存したくありません。
52049 次
4 に答える
47
次を使用できます。
SELECT name
FROM sys.master_files
WHERE database_id = db_id()
AND type = 1
ログファイルのタイプはすべてのdatabase_idに対して1であり、すべてのデータベースのすべてのファイルはsys.master_filesにあります。
編集:
定期的にログを縮小するべきではないことを指摘しておく必要があります。トランザクションログは、拡大する必要がないように適切なサイズにしてから、そのサイズのままにしておく必要があります。トランザクションログをインスタントファイルで初期化することはできず、スペースが追加されたときにゼロにする必要があります。これは、パフォーマンスを低下させる低速のシーケンシャル操作です。
于 2009-09-16T23:09:09.787 に答える
6
select Name
from sys.database_files
生成し、
SomeDb_Data
SomeDb_Log
SqlServer 2012
于 2014-10-18T14:29:30.980 に答える
2
DECLARE @command varchar(1000)
SELECT @command = 'USE [?] DBCC SHRINKFILE (2 , 0, TRUNCATEONLY)'
EXEC sp_MSforeachdb @command
-または単に
EXEC sp_MSforeachdb 'USE [?] DBCC SHRINKFILE (2 , 0, TRUNCATEONLY)'
于 2021-05-11T05:55:57.023 に答える