タグ付けされた質問 「transaction」

一貫性のある一連の変更をアトミックにデータベースにコミットするメカニズム。

2
SQLサーバーのバッチ中止エラーのリスト
SQL Serverでは、XACT_ABORTがオフの場合、いくつかのエラーが現在のステートメントを終了し(たとえば、一部のパラメーターを受け取るストアドプロシージャに不正なパラメーターの数を指定)、一部のエラーはバッチ全体を中止します(たとえば、ストアにパラメーターを指定します)パラメータを取らない手続き)。[参照]:http : //www.sommarskog.se/error-handling-I.html#scope-abortion。 私が知りたいのは、どのエラーがバッチアボートであり、どのエラーがステートメントの終了であるかの明確なリストがあるかどうかです。

2
SQL ServerジョブでのトランザクションとTry-Catch
SQL Serverジョブの各ステップにはDML操作があります。更新を確保するために/挿入は、何かがうまくいかない場合にはロールバックされます、私はのデータ修正包まれている各ステップをにTRY CATCHしてTRANSACTIONブロック: BEGIN TRY BEGIN TRANSACTION [[INSERT/update statements]] ... IF @@TRANCOUNT > 0 BEGIN COMMIT TRANSACTION PRINT 'Successful.' END END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE() AS ErrorState, ERROR_PROCEDURE() AS ErrorProcedure, ERROR_LINE() AS ErrorLine, ERROR_MESSAGE() AS ErrorMessage IF @@TRANCOUNT > 0 BEGIN ROLLBACK TRANSACTION …

2
SQL Serverトランザクションタイムアウト
SQL Server 2008 R2には、トランザクションを含むデータベース変更のタイムアウトを引き起こす方法はありますか?アプリケーションコードがハングまたは例外をスローし、ロールバックまたはコミットの実行に失敗するシナリオがあります。これにより、トランザクションが完了するまで他のセッションがハングします。

3
SQL Server-非ブロッキングselectステートメントの分離レベルは何ですか?
SQL Server 2008 R2のテーブルで一部の削除、更新、および挿入を実行する長時間実行トランザクション(たとえば、T1と呼ばれます)があります。同時に、別のプロセスが定期的にこのテーブルの選択ステートメントを実行します。 デフォルトの分離設定(READ COMMITTEDだと思いますか?)では、T1は、トランザクションがコミットまたはロールバックされるまで、selectステートメントの実行をブロックします。 私が見たいのは、トランザクションが進行中でも、selectステートメントが一貫したデータで機能することです。スナップショット分離が役立つと思いますが、正しい方向に進んでいるかどうかはわかりません。これは、このアプリケーションに最適な分離レベルでしょうか? 次に、selectステートメントを呼び出しているプロセスを制御することはできませんが、T1を呼び出す.NETアプリケーションを制御します。selectステートメントとT1の両方で分離レベルの変更が必要ですか、それともT1だけを別の分離レベルとしてマークするだけで十分でしょうか?

3
RAMまたは物理ファイルのトランザクションログ?
私はトランザクションの初心者ですが、トランザクションログに関する質問です。トランザクションをコミットすると、変更はトランザクションログに書き込まれますが、トランザクションログはRAMまたは物理ファイルにありますか?RAM内にあり、システム障害が発生した場合、明らかにRAMが再消去されるため、トランザクション情報が失われるので、コミットを回復するにはどうすればよいでしょうか。

2
COMMITはPostgreSQL 9.5の匿名のplgpsql関数内で機能しますか?
匿名のplpgsqlコードブロック内のループを使用して、多数の大きなファイルをいくつかのテーブルにインポートしてパーティション分割します$do$。 $do$ BEGIN FOR yyyy in 2012..2016 THEN EXECUTE $$COPY table$$||yyyy||$$ FROM 'E:\data\file$$||yyyy||$$.csv DELIMITER ',' CSV;$$; END LOOP; END; $do$ LANGUAGE plpgsql このプロセス全体には約15時間かかります。ある時点でインポートエラーが発生した場合、すべてのインポートがロールバックされないことを願っています。 IIRC COMMITは、関数全体が単一のトランザクションとして扱われるため、ストアド関数内では機能しません。 のドキュメントから$do$ コードブロックは、パラメーターのない関数の本体であるかのように扱われ、voidを返します。解析と実行は1回です。 これは、全体$do$が1つのトランザクションであるため、ブロック内のコミットが機能しないことを想定しています。私は正しいですか?

3
テンポラルテーブルがトランザクションの開始時間を記録するのはなぜですか?
テンポラルテーブルの行を更新するとき、行の古い値は、トランザクションの開始時刻をとして履歴テーブルに保存されますSysEndTime。現在のテーブルの新しい値には、トランザクションの開始時刻としてがありSysStartTimeます。 SysStartTimeそして、SysEndTimeされているdatetime2行が現在のバージョンであったときに記録する時間テーブルによって使用されるカラム。トランザクション開始時間は、更新を含むトランザクションが開始した時間です。 BOLさんのコメント: システムのdatetime2列に記録される時間は、トランザクション自体の開始時間に基づいています。たとえば、単一のトランザクション内に挿入されたすべての行は、SYSTEM_TIME期間の開始に対応する列に記録された同じUTC時間を持ちます。 例: Ordersテーブルのすべての行の更新を開始20160707 11:00:00し、トランザクションの実行に5分かかります。これにより、履歴テーブルにSysEndTimeas を使用して各行の行が作成され20160707 11:00:00ます。現在のテーブルのすべての行がありますSysStartTimeのを20160707 11:00:00。 誰かが20160707 11:01:00(更新の実行中に)クエリを実行すると、古い値が表示されます(デフォルトの読み取りコミット分離レベルを想定)。 しかし、誰かがAS OF構文を使用してテンポラルテーブルをそのままクエリする20160707 11:01:00と、新しい値が表示されSysStartTimeます20160707 11:00:00。 これは、当時のようにそれらの行が表示されないことを意味します。トランザクションの終了時刻を使用した場合、問題は存在しません。 質問:これは仕様ですか?何か不足していますか? トランザクションの開始時間を使用していると考えることができる唯一の理由は、それがトランザクションの開始時に唯一「既知」であるということです。開始時にトランザクションがいつ終了するかは不明であり、終了時に終了時刻を適用するのに時間がかかり、適用していた終了時刻が無効になります。これは理にかなっていますか? これにより、問題を再現できます。

1
読み取り専用トランザクションのコミットとロールバックにパフォーマンスの違いはありますか?
(繰り返し可能な読み取り)トランザクション(BEGIN TRAN)を開いて、特定のレコードに対していくつかの作業を行います。まず、変更する必要があるデータがデータベースにあるかどうかを確認します。いくつかのケースでは、それがあり、それから私の変更に進みます。しかし、場合によっては何もすることはありません。この場合、私はCOMMIT TRANまたはまたはROLLBACK TRANストアドプロシージャから戻ります。現時点ではまだデータは変更されていないため、コミットとロールバックの効果は同じです。 コミットとロールバックのどちらを選択するかについて知っておくべき考慮事項はありますか?異なるパフォーマンスコストはありますか?その他の考慮事項?

1
IO_COMPLETIONを待機している中断されたSQL Serverトランザクションを終了する方法は?
5時間以上実行されているトランザクションがあります。ディスク領域が不足しています。セッションは強制終了されましたが、IO_COMPLETIONを待機しています。実際、wait_typeはPAGEIOLATCH_EXに変更されました。一時停止したSQL Serverトランザクションを終了するにはどうすればよいですか?データはすべて再入力できるため、データが失われる心配はありません。 session_id: 54 STATUS: suspended blocked by: 0 wait_type: PAGEIOLATCH_EX Elapsed Time (in Sec): 19750.420000 open_transaction_count: 2

3
「接続が閉じてプールに戻されると、最後のSET TRANSACTION ISOLATION LEVELステートメントからの分離レベルが保持されます」?
MSDNオンライン記事「SQL Serverのスナップショット分離」には、次のように記載されています。 「分離レベルには接続全体のスコープがあり、SET TRANSACTION ISOLATION LEVELステートメントを使用して接続に設定されると、接続が閉じられるか、別の分離レベルが設定されるまで有効です。接続が閉じられ、プールに戻されるとき、最後のSET TRANSACTION ISOLATION LEVELステートメントからの分離レベルが保持されます。プールされた接続を再利用する後続の接続では、接続がプールされたときに有効だった分離レベルが使用されます。 自己矛盾する段落ではありませんか(「まで」と「保持」)。 次に、接続を閉じてプールに戻した後、「最後のSET TRANSACTION ISOLATION LEVELステートメントからの分離レベルが保持されている」場合、それをどのように理解する必要がありますか。 デフォルトの分離レベルは任意の値になります(プール内の異なる接続には異なる分離レベルがあり、その値は再オープンされる接続に依存します)? または、プール内のすべての接続のすべてのデフォルト値が最後の値に変更されますか?しかし、手に入る前にまた全く未知ですか?

1
UserDB選択の特定のTempDB挿入により、SOS_SCHEDULER_YIELDからENCRYPTION_SCANが返されます。
実稼働システムの1つで、ユーザーデータベースから一時テーブルへの1つの挿入ステートメントに問題が発生しています。挿入/選択をコメントアウトすると、問題のストアドプロシージャがタイムリーに実行されるため、問題の切り分けに自信があります。 問題の挿入/選択のコメントを解除すると、呼び出された一連のストアドプロシージャが基本的に停止して停止します。tempdbやユーザーデータベースで、年齢別の上位トランザクションに何も表示されません。データベースが「静止」しているときに、アクティビティモニターの情報から逸脱するアクティビティモニターに何も表示されません。ただし、CPUは約20%で平坦化されます。 動作は次のとおりです。再生ケースをセットアップして実行すると、問題の挿入/選択に到達すると、SOS_SCHEDULER_YIELDが表示され、ENCRYPTION_SCANが表示されます。約5時間後、ストアドプロシージャの処理が再開され、アクティビティが完了します(すべての個別の操作の周りに、迅速でダーティなログステートメントを配置します)。 また、挿入の選択部分の変数を実行時の値に置き換え、選択クエリ自体を実行したところ、5秒で戻りました。 問題のユーザーデータベースは、tempdbと同様に、暗号化が有効な値としてFALSEを持っています。問題の操作は約6万5千行のデータで発生し、1千行のみで試したところ、動作は持続しましたが、所要時間ははるかに短かったです。 シングルユーザーデータベースは、この動作の唯一のインスタンスです。そのユーザーデータベースのバックアップを介してローカルで再現しました。この問題を示さないソフトウェアのユーザーが約70人います。 上記の情報を踏まえて、私の質問は、ストアドプロシージャの処理が停止するのはなぜですか?正確な答えを期待することはおそらく楽観的であるため、これをデバッグするための正しい手順は何ですか?おそらく、dm_tran_locks、dm_exec_requests、dm_tran_database_transactions、dm_os_schedulers、dm_exec_sessionsなどのDMVの1つに何かがあり、それらは私にいくつかの情報を提供しましたが、解決策を指すような方法で出力を解釈または理解していません。 以下は問題の挿入/選択です: INSERT INTO #TS_EVENT_DATA ( EVENT_FK, EVENT_TYPE_CR_FK, EVENT_ENTITY_CLASS_CR_FK, userDatabase_ID, DATA_NAME_FK, IMPORT_JOB_FK, PRODUCT_STRUCTURE_FK, ORG_ENTITY_STRUCTURE_FK, ENTITY_CLASS_CR_FK, ENTITY_DATA_NAME_FK, ENTITY_STRUCTURE_FK, DATA_SET_FK, DATA_TYPE_CR_FK, ORG_IND, TABLE_NAME, NET_VALUE1_NEW, NET_VALUE2_NEW, NET_VALUE3_NEW, NET_VALUE4_NEW, NET_VALUE5_NEW, NET_VALUE6_NEW, NET_VALUE1_CUR, NET_VALUE2_CUR, NET_VALUE3_CUR, NET_VALUE4_CUR, NET_VALUE5_CUR, NET_VALUE6_CUR, PERCENT_CHANGE1, PERCENT_CHANGE2, PERCENT_CHANGE3, PERCENT_CHANGE4, PERCENT_CHANGE5, PERCENT_CHANGE6, VALUE_UOM_CODE_FK, ASSOC_UOM_CODE_FK, VALUES_SHEET_NAME, UOM_CONVERSION_FACTOR, END_DATE_CUR, …

2
トランザクション、参照、および複式簿記を実施する方法は?(PG)
複式簿記は すべてのトランザクションまたはイベントが少なくとも2つの異なる名目元帳勘定を変更する財務会計システムで財務情報を記録するための一連のルール。 アカウントは「借方」または「貸方」にすることができ、すべての貸方の合計は、すべての借方の合計と等しくなければなりません。 これをPostgresデータベースにどのように実装しますか?次のDDLを指定します。 CREATE TABLE accounts( account_id serial NOT NULL PRIMARY KEY, account_name varchar(64) NOT NULL ); CREATE TABLE transactions( transaction_id serial NOT NULL PRIMARY KEY, transaction_date date NOT NULL ); CREATE TABLE transactions_details( id serial8 NOT NULL PRIMARY KEY, transaction_id integer NOT NULL REFERENCES transactions (transaction_id) ON UPDATE …

2
トランザクションログを使用してデータベースを再構築できますか?
データが失われ、信頼できるバックアップがないようです。非常に大きなトランザクションログがあり、これらを使用して特定のポイントに戻ることができるかもしれないという考えがありました。 トランザクションログを使用してデータベースの再構築を支援することは可能ですか? SQL Server 2008 R2、ところで。 (stackoverflowからx-posted)

3
MySQLトリガーまたはトランザクションを使用していますか?
MySQLトリガーまたはWebサイトでのトランザクションの使用について、ご意見をお聞かせください。 実際、私はpayment-で履歴テーブルを持っていますUserId | OperationId | Comment | Credits | Sign (debit or credit)。したがって、各支払い操作がこのテーブルに挿入されます。 ただし、ユーザーがアクションを実行するたびに、ユーザーの合計クレジット額を計算するのに時間がかかります。そのため、各ユーザーの合計クレジット額をユーザーprofileテーブルに保持することをお勧めします。 ここに問題があります。profileテーブルの合計クレジット額がpayment履歴テーブルの操作と常に同期していることを確認するにはどうすればよいですか? 私は2つの方法を使用すると思いました: MySQLトリガーまたは ソースコードでコーディングされたトランザクション どちらがより信頼できますか?大規模なデータベース(100.000ユーザー以上)がある場合はどうなりますか? これを行うための提案はありますか? BD MySQLエンジンはInnoDBです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.