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

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

3
常にトランザクションを作成することは悪い習慣ですか?
常にトランザクションを作成することは悪い習慣ですか? たとえば、1つだけのトランザクションを作成することをお勧めしSELECTますか? トランザクションが本当に必要でない場合、トランザクションを作成するコストはいくらですか? のような分離レベルを使用している場合でも、READ UNCOMMITTEDそれは悪い習慣ですか?

6
sql-serverでコミットスナップショットの読み取りを有効にした場合、どのようなリスクがありますか?
ここでは、行ごとにいくつかの追加データが保存されるため、パフォーマンスの低下が見られる可能性があることを読みましたが、他にどのようなリスクがありますか? 例えば。これはデータベースの回復に影響しますか?これを利用するために私たちがしなければならないことは他にありますか? これらのコマンドを実行する予定です。 ALTER DATABASE DatabaseName SET READ_COMMITTED_SNAPSHOT ON ALTER DATABASE DatabaseName SET ALLOW_SNAPSHOT_ISOLATION ON これにより、1つのトランザクションが他のトランザクションを更新している場合でも古いデータを読み取ることができるオラクルに近いものが得られると思います。これは正しいです? SQL Server 2005のロックの問題にうんざりしているので、これを検討しています。これにより、ユーザーが時折発生するデッドロックを減らし、アプリケーションの全体的なパフォーマンスを向上させ、恐れ。

9
トランザクションを使用せず、回避策を使用して1つをシミュレートするように要求
私は数年間T-SQLを開発してきましたが、常に掘り下げて、言語のすべての側面についてできる限りのことを学び続けています。私は最近新しい会社で働き始め、取引に関して奇妙な提案だと思うものを受け取りました。それらを使用しないでください。代わりに、トランザクションをシミュレートする回避策を使用してください。これは、1つのデータベースで多くのトランザクションを処理し、その後多くのブロッキングを行うDBAによるものです。私が主に作業しているデータベースはこの問題の影響を受けず、トランザクションは過去に使用されたことがあります。 トランザクションはブロックすることが本来の性質であるため、トランザクションでブロックすることが期待されていることを理解しています。しかし、各ステートメントが正常に実行されなければならない場合が多くあります。1つが失敗した場合、それらはすべてコミットに失敗する必要があります。 私は常にトランザクションの範囲をできる限り狭く保ち、常にSET XACT_ABORT ONと組み合わせて使用​​し、常にTRY / CATCH内で使用しています。 例: CREATE SCHEMA someschema; GO CREATE TABLE someschema.tableA (id INT NOT NULL IDENTITY(1, 1) PRIMARY KEY, ColA VARCHAR(10) NOT NULL ); GO CREATE TABLE someschema.tableB (id INT NOT NULL IDENTITY(1, 1) PRIMARY KEY, ColB VARCHAR(10) NOT NULL ); GO CREATE PROCEDURE someschema.ProcedureName @ColA …

4
SQL Serverのデータを削除したユーザーを見つける方法
私の上司は昨日、SQL Serverデータベースのデータを削除した人を見つける方法を尋ねる顧客からの問い合わせがありました(それが重要な場合はエクスプレス版です)。 これはトランザクションログから見つけることができると思いました(切り捨てられていなかった場合)-これは正しいですか?もしそうなら、この情報を実際にどのように見つけ出しますか?

3
「Chaos」分離レベルとは何ですか、いつ使用する必要がありますか?
ADO.NETのドキュメントには、SQLトランザクションのトランザクションレベルをChaosに設定する可能性が示されています。不快に聞こえますが、機能が存在する場合は、おそらく正当な使用方法があります。 BOL のSET TRANSACTION ISOLATION LEVELコマンド(ああ!わかりました、GoogleとBOLを使用できます)は何も「カオス」という名前ではないようです。ADO.NETには、「カオス」に加えて文書化されたレベル このカオスのレベルは何ですか?(そして、なぜそれは非友好的な名前を持っていますか?) 参照: ADO.NET列挙型

1
トランザクションと組み合わせてトリガーする
次の状況があると仮定します。 Table_Aトリガーがオンになっているテーブル(たとえば)がありINSERTます。トリガージョブはtable_B、に挿入された値に基づいていくつかの行を更新しtable_Aます。 さて、テーブルに単純に行を挿入するだけで問題ありませんが、トランザクションを介してデータを挿入する状況についてはどうでしょうか?トリガーは、すべてのトランザクションステートメントが正常に実行されるまで待機しますか、それとも挿入を認識するとすぐに起動しますか?最初の挿入を認識するとすぐにトリガーが起動する場合、最後の行でトランザクションが失敗するとどうなりますか?その状況に何らかのメカニズムがありますか?

2
MySQLのトランザクションDDLワークフロー
私は少しはDDL文(ことを発見して驚いたalter table、create indexなど)が暗黙のMySQLで現在のトランザクションをコミットします。MS SQL Serverから来て、トランザクションでデータベースの変更をローカルで行う機能(その後ロールバックされた機能)は、ワークフローの重要な部分でした。継続的な統合では、何らかの理由で移行が中断した場合にロールバックが使用されたため、少なくともデータベースが半分移行された状態のままになりませんでした。 MySQLを移行と継続的インテグレーションで使用する場合、これら2つの問題をどのように解決しますか?

7
Oracle-特定のテーブルに対するコミットされていない変更を表示する方法はありますか?
現在、多くのDMLステートメントを実行するバッチプロセスを介してデバッグしていますが、すぐにはコミットしません。トランザクションがコミットされていないときに、別のセッションからの「保留中」の変更を表示できると便利です。これは可能ですか? 例: Insert into table myTable (col1, col2) values ("col1", "col2"); --Somehow view the pending transaction maybe by system view?.... ...other DML statements.... commit;

2
1つのストアドプロシージャから3つのストアドプロシージャが開始されたときにロールバックする方法
内部で3つのストアドプロシージャのみを実行するストアドプロシージャがあります。マスターSPが成功した場合、1つのパラメーターのみを使用して保存します。 マスターストアドプロシージャで最初のストアドプロシージャが正常に機能するが、2番目のストアドプロシージャが失敗した場合、マスターSPのすべてのSPが自動的にロールバックされますか、それともコマンドを実行する必要がありますか? 私の手順は次のとおりです。 CREATE PROCEDURE [dbo].[spSavesomename] -- Add the parameters for the stored procedure here @successful bit = null output AS BEGIN begin transaction createSavebillinginvoice begin Try -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; BEGIN EXEC [dbo].[spNewBilling1] END …

1
MySQLトランザクションサイズ-大きすぎますか?
頻繁に実行されるインポートプロセスがあり、それを「すべてまたは何もしない」種類の取引、つまりトランザクションにしたいのです。 多くの側面があり、インポートによって100k-1mil +のレコードが生成される場合があります。これは、数MBから数百MBのデータのペイロードに相当します。 私は一時テーブルが別のオプションであることを知っています-しかし、この方法はとても便利なようです。 コミット間で大量のデータ操作を行うこの種のプラクティスに関して注意すべき注意事項はありますか?(コミット後の一般的な書き込み/インデックス作成の負荷バーストの外側)

2
同じコミットされていないトランザクションに挿入されたデータを選択できますか?
たぶんこれは愚かな初心者の質問ですが、どこにも答えが見つかりません。どこでもTransaction Isolation、同時トランザクション内のデータの可視性を解決する方法について読んでいます。私の懸念は、単一のトランザクション内の動作です。 トランザクションを開始し、いくつかのデータを挿入した場合、すぐにそれらを選択できますか?まだ同じ、まだコミットされていないトランザクション内ですか?はいの場合、この動作は、並行トランザクションの場合の前述のトランザクション分離と同様の方法で変更できますか? 具体的には、PostgreSQL 9.4をターゲットにしています。

1
SQL Server DDLでトランザクションを使用するには?
すべての挿入が単一のストアドプロシージャによって行われるログインテーブルがあります。 CREATE TABLE dbo.LogTable( LogRefnr int IDENTITY(1, 1) NOT NULL, LogQuery varchar(255) NOT NULL, LogTime datetime NOT NULL, logQueryDuration int NULL, LogSessionID int NULL, CONSTRAINT PK_Log PRIMARY KEY CLUSTERED (LogRefnr) ) go Create procedure DBO.LogInsert ( @Query varchar(255), @time datetime, @duration int, @SessinID int) as begin Insert into LogTable ( …


4
トランザクション内のトランザクション
たとえば、以下のスクリプトが呼び出された場合、PostgreSQLはどのような動作を示しますか BEGIN; SELECT * FROM foo; INSERT INTO foo(name) VALUES ('bar'); BEGIN; <- The point of interest END; PostgreSQLは2番目を破棄しますか、BEGINそれともコミットが暗黙的に決定さBEGIN ENDれ、最後に別のトランザクションとしてブロックを実行しますか?

3
他のトランザクションをブロックするSPIDのスリープ
私が経験しているいくつかのブロッキングを追跡するのに本当に苦労しています。 ルートブロックSPIDのステータスは「sleeping」、cmdは「AWAITING COMMAND」、およびはsqltextですSET TRANSACTION ISOLATION LEVEL READ COMMITTED。 [ブロックされたトランザクション数別の上位トランザクション]レポートを表示すると、ブロックSQLステートメントは「-」です。 SQLでトレースを実行し、ルートブロッキングSPIDをトレースしてブロッキングが発生した場合、実際にはどこにも導かれていません。最後のtraceステートメントは同じであるsqltext以上SET TRANSACTION ISOLATION LEVEL READ COMMITTED。 関連するすべてのストアドプロシージャをチェックして、それらにTRY / CATCH BEGIN TRAN / COMMIT TRAN / ROLLBACK TRANステートメントがあることを確認しました(すべてにストアドプロシージャを使用しているため、スタンドアロンのステートメントは実行されません)。この問題は過去24時間に発生し始めたばかりで、システムに変更を加えたと主張する人はいません。 解決策:めったに使用されないストアドプロシージャの1つに挿入のエラーがありました(列の数が一致しませんでした)が、正確に何が起こっているのかまだ混乱しています。 すべてのトレース情報を確認すると、このストアドプロシージャのEXECステートメントが時々リストされましたが、ブロックするSPIDでBLOCKが発生する直前には決してありませんでした。ブロックを開始すると、トレースはその実行(またはその中のステートメントのいずれか)を記録しなかったようです。ただし、トレースがその実行を記録し、ブロッキングが発生しなかった場合もあります。 ストアドプロシージャのエラーレポートはユーザーから送信されたものであり、トレースで複数のEXECステートメントを見つけてSSMSで実行することができました。それらを実行したとき、ブロッキングが発生したりハングしたりすることはありませんでした。それらは期待通りに実行されました(catchブロックが起動し、エラー後にトランザクションをロールバックしました)。ストアドプロシージャの修正を解決した後、問題は再び発生していません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.