DBCC OPENTRAN (Transact-SQL)

指定されたデータベース内に存在する最も古いアクティブ トランザクション、および (存在する場合は) 最も古い分散型と非分散型のレプリケートされたトランザクションに関する情報を表示します。結果は、アクティブ トランザクションが存在する場合、またはデータベースにレプリケーション情報が存在する場合にのみ表示されます。アクティブ トランザクションがない場合は、情報メッセージが表示されます。

注意

DBCC OPENTRAN は SQL Server 以外のパブリッシャーではサポートされていません。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

DBCC OPENTRAN 
[ 
        ( [ database_name | database_id | 0 ] ) ]
    { [ WITH TABLERESULTS ]
      [ , [ NO_INFOMSGS ] ]
    }
] 

引数

  • database_name | database_id| 0
    最も古いトランザクションに関する情報を表示するデータベースの名前または ID を指定します。値を指定しないか 0 を指定した場合は、現在のデータベースが使用されます。データベース名は、識別子のルールに従っている必要があります。

  • TABLERESULTS
    テーブルに読み込める表形式で結果を返すように指定します。比較用としてテーブルに挿入できる表形式の結果を得たいときは、このオプションを指定します。このオプションを指定しない場合、結果は読みやすい形式で返されます。

  • NO_INFOMSGS
    すべての情報メッセージを表示しないようにします。

説明

DBCC OPENTRAN は、開かれたトランザクションがトランザクション ログ内に存在するかどうかを調べるときに使用します。BACKUP LOG ステートメントを使用した場合は、ログの使用されていない部分しか切り捨てることができないため、開かれたトランザクションが存在すると、ログを完全に切り捨てることができなくなってしまいます。開かれたトランザクションを識別するには、sp_who を使用してシステム プロセス ID を取得します。

結果セット

開かれたトランザクションがない場合、DBCC OPENTRAN は次の結果セットを返します。

No active open transactions.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

権限

sysadmin 固定サーバー ロールまたは db_owner 固定データベース ロールのメンバーシップが必要です。

A. 最も古いアクティブなトランザクションを返す

次の例では、現在のデータベースのトランザクション情報を取得します。結果は異なる場合があります。

CREATE TABLE T1(Col1 int, Col2 char(3));
GO
BEGIN TRAN
INSERT INTO T1 VALUES (101, 'abc');
GO
DBCC OPENTRAN;
ROLLBACK TRAN;
GO
DROP TABLE T1;
GO

以下に結果セットを示します。

データベース 'master' のトランザクション情報。

最も古いアクティブなトランザクション:

SPID (サーバー プロセス ID) : 52

UID (ユーザー ID) : -1

名前          : user_transaction

LSN           : (518:1576:1)

開始時刻    : Jun 1 2004 3:30:07:197PM

SID           : 0x010500000000000515000000a065cf7e784b9b5fe77c87709e611500

DBCC の実行が完了しました。DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。

注意

"UID (ユーザー ID)" 結果は無意味であり、SQL Server の将来のバージョンでは削除される予定です。

B. WITH TABLERESULTS オプションを指定する

次の例では、DBCC OPENTRAN コマンドの結果を一時テーブルに読み込みます。

-- Create the temporary table to accept the results.
CREATE TABLE #OpenTranStatus (
   ActiveTransaction varchar(25),
   Details sql_variant 
   )
-- Execute the command, putting the results in the table.
INSERT INTO #OpenTranStatus 
   EXEC ('DBCC OPENTRAN WITH TABLERESULTS, NO_INFOMSGS');

-- Display the results.
SELECT * FROM #OpenTranStatus;
GO