web-dev-qa-db-ja.com

SQL Serverエラー1222 i.e SQL Serverテーブルのロックを解除する方法

私は、データローダーによって生のテーブルにデータをロードするデータベースで作業しています。しかし今日、データローダーは不明な理由で立ち往生しました。次に、Windowsタスクマネージャーからデータローダーを停止しました。しかし、その後、未処理のテーブルにデータを再度ロードしようとしましたが、ロックされていることがわかり、操作ができませんでした。 SQL Serverサービスを再起動しようとしましたが、解決しませんでした。そして、このサーバー上のプロセスを強制終了する権限がありません。

以下は、SQL Serverによって表示されるメッセージです。

Transact-SQLステートメントまたはバッチの実行中に例外が発生しました。 (Microsoft.SqlServer.ConnectionInfo)

プログラムの場所:

microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand、ExecutionTypes executionType)で
at at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(StringCollection sqlCommands、ExecutionTypes executionType)
Microsoft.SqlServer.Management.Smo.ExecutionManager.ExecuteNonQuery(StringCollectionクエリ)
at Microsoft.SqlServer.Management.Smo.SqlSmoObject.ExecuteNonQuery(StringCollectionクエリ、ブールincludeDbContext)
at Microsoft.SqlServer.Management.Smo.NamedSmoObject.RenameImplWorker(String newName)
at Microsoft.SqlServer.Management.Smo.NamedSmoObject.RenameImpl(String newName)

===================================

ロック要求のタイムアウト期間を超えました。パラメーター@objnameがあいまいであるか、要求された@objtype(OBJECT)が間違っています。 (.Net SqlClient Data Provider)


サーバー名:162.44.25.59エラー番号:1222
重大度:16状態:56
手順:sp_rename行番号:282

私のSQL Serverバージョンは2008 R2です。

69
user960340

SQL Server Management Studioで、アクティブなトランザクションの詳細を確認するには、次のコマンドを実行します

DBCC opentran()

アクティブなトランザクションの詳細を取得し、アクティブなトランザクションのSPIDから、次のコマンドを使用してSPIDに関する詳細を取得します。

exec sp_who2 <SPID>
exec sp_lock <SPID>

たとえば、SPIDが69の場合、コマンドを次のように実行します

exec sp_who2 69
exec sp_lock 69

これで、次のコマンドを使用してそのプロセスを強制終了できます

KILL 69

これが役立つことを願っています:)

163

しばらく経ちましたが、前回は似たようなものがありました。

ROLLBACK TRAN

またはしようとしている

COMMIT

すでに行われていたものがすべて解放されたので、物事を整理してやり直すことができました。

19
shawty

これを防ぐには、すべてのBEGIN TRANSACTIONにCOMMITがあることを確認してください

以下は成功したと言いますが、コミットされていないトランザクションを残します:

BEGIN TRANSACTION
BEGIN TRANSACTION
<SQL_CODE?
COMMIT

コミットされていないトランザクションでクエリウィンドウを閉じると、トランザクションをコミットするように求められます。通常、これによりエラー1222メッセージが解決されます。

3
Paul Totzke

オプションのクエリ実行でこれらのSQL動作設定を有効にしました:ANSI SET IMPLICIT_TRANSACTIONSチェック。クエリの作成(テーブルの作成、変更、ストアドプロシージャなど)では、COMMITする必要があります。

COMMITと入力して実行するだけです F5

0
Jerry Iriri