データベースの論理名に基づいてDBCC SHRINKFILEを使用してトランザクションログファイルを圧縮するT-SQLルーチンを記述しようとしています。 DB_NAME()
関数は、データベースの論理名を提供します。トランザクションログに同等のものはありますか?そうでない場合、この情報を取得する他の方法はありますか?トランザクションログのデフォルト名は<<Database Name>>_log
、しかし私はむしろこれに依存したくない。
以下を使用できます。
SELECT name
FROM sys.master_files
WHERE database_id = db_id()
AND type = 1
ログファイルは、すべてのdatabase_idに対してtype = 1であり、すべてのデータベースのすべてのファイルはsys.master_filesにあります。
編集:
日常的にログを縮小するべきではないことを指摘しておきます。トランザクションログのサイズを適切に設定して、大きくならないようにし、そのサイズのままにする必要があります。トランザクションログをインスタントファイルで初期化することはできず、スペースが追加されたときにゼロにする必要があります。これは、低速の順次処理であり、パフォーマンスが低下します。
標準データベース(たとえば、1つのログファイルのみ)を想定すると、ログファイルは常にfile_id = 2です。これは、複数のデータファイルがある場合にも適用されます(NDFの場合はid = 3+)。
[〜#〜] dbcc [〜#〜] もファイルIDを取ります。したがって、DBCC SHRINKFILE (2...)
は常に機能します。 DBCC内でパラメーター化できないため、動的SQLを回避できます。名前が必要な場合は、 FILE_NAME (2)を使用します。
select Name
from sys.database_files
生成、
SomeDb_Data
SomeDb_Log
SqlServer 2012