2009-09-16 15 views
19

データベースの論理名に基づいてDBCC SHRINKFILEを使用してトランザクションログファイルを縮小するT-SQLルーチンを作成しようとしています。 DB_NAME()関数を使用すると、データベースの論理名が得られます。トランザクションログに相当するものはありますか?そうでない場合は、この情報を入手する他の方法がありますか?トランザクションログのデフォルト名は<<Database Name>>_logですが、これに頼ることはありません。SQL Server 2005でトランザクションログの論理名を取得する方法

答えて

35

あなたは使用することができます。

SELECT name 
FROM sys.master_files 
WHERE database_id = db_id() 
    AND type = 1 

ログファイルがsys.master_filesで見つけることができる任意のdatabase_idとすべてのデータベースのすべてのファイルの種類= 1を持っています。

EDIT:

私はあなたが定期的にログを縮小してはならないことを指摘しなければなりません。トランザクション・ログのサイズは、成長する必要がないように適切なサイズにしてから、そのサイズにしておく必要があります。トランザクション・ログはインスタント・ファイルの初期化はできません。スペースを追加すると、トランザクション・ログはゼロになります。これは、パフォーマンスを低下させる低速の順次操作です。

+2

PSを生成します。同じインスタンス上の異なるデータベースが同じログ名を使用する可能性があることに注意してください。その結果、 'DBCC SHRINKFILE( '論理ログ名'、サイズ)'を置くことに加えて、正しいDBで作業するためには、まず 'use [MyDatabase]'を置くべきです。 – JohnLBevan

12

標準のデータベース(たとえばログファイルは1つ)を想定すると、ログファイルは常にfile_id = 2になります。これは、複数のデータファイル(NDFの場合はid = 3+)があっても適用されます。

DBCCもファイルIDを取得します。したがって、DBCC SHRINKFILE (2...)は常に動作します。 DBCC内でパラメータ化することはできません。これにより、dynanmic SQLが回避されます。名前を使用する場合は、FILE_NAME(2)を使用します。

3
select Name 
from sys.database_files 

は、

SomeDb_Data 
SomeDb_Log 

のSQLServer 2012

関連する問題