私は、データローダーによって生のテーブルにデータをロードするデータベースで作業しています。しかし今日、データローダーは不明な理由で立ち往生しました。次に、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です。
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
これが役立つことを願っています:)
しばらく経ちましたが、前回は似たようなものがありました。
ROLLBACK TRAN
またはしようとしている
COMMIT
すでに行われていたものがすべて解放されたので、物事を整理してやり直すことができました。
これを防ぐには、すべてのBEGIN TRANSACTIONにCOMMITがあることを確認してください
以下は成功したと言いますが、コミットされていないトランザクションを残します:
BEGIN TRANSACTION
BEGIN TRANSACTION
<SQL_CODE?
COMMIT
コミットされていないトランザクションでクエリウィンドウを閉じると、トランザクションをコミットするように求められます。通常、これによりエラー1222メッセージが解決されます。
オプションのクエリ実行でこれらのSQL動作設定を有効にしました:ANSI SET IMPLICIT_TRANSACTIONSチェック。クエリの作成(テーブルの作成、変更、ストアドプロシージャなど)では、COMMITする必要があります。
COMMITと入力して実行するだけです F5