QA@IT
«回答へ戻る

回答を投稿

※ここの作法に叶っていないかも知れませんが、コメント欄では限界なので、
 質問の仕切り直しをさせて下さい。
 
質問:
私は、
・行バージョン有り
・スナップショット分離可能
としたSQLServer 2014、
Tomcat 8、Java 7、Microsoft JDBC Driver 4.1 for SQL Server、
Windows Server 2012R2(Windows Updateは最後まで)
のシステムにて
 
A:有る1かたまりのテーブルの読み書き →B:別の読み書き →A’Aをもう一度読み書き
(Aという処理の結果(テーブル更新)はBに影響し、Bという処理の結果(テーブル更新)は
 A’に影響する。)
 
で、折角の行バージョンを生かした、ロックのエスカレーションの無い、
多段階(Aというクラスを実行、Bいうクラスを実行、Aというクラスを実行)の
SQL読み書きをしたいが、
以下の制約から、SQLServer2014ではスナップショット分離一択である。
 
で良いでしょうか?

制約:
・そもそもSQLServerのSELECT文はすべてトランザクション単位で共有ロックを
 かけていた。
 そして残念な事に、読み取り一貫性(行バージョン)が無かった。
 
・READ_COMMITTED_SNAPSHOT ONをしたDBのSELECT文も、トランザクション単位で
 共有ロックをかけるが、それに加え行単位の読み取り一貫性(行バージョン)が増えた。
 (これがOracleのFOR UPDATE付きSELECT相当?)
 
・ALLOW_SNAPSHOT_ISOLATION ONをしたDBで、
 (処理の先頭で予期せぬトランザクションを除く為、ロールバックをした後)
 com.microsoft.sqlserver.jdbc.SQLServerConnection.TRANSACTION_SNAPSHOT
 にしたDBは、
 共有ロックをかけないし、読み取り一貫性(行バージョン)も有る上に、
 (ここまでFOR UPDATE相当なしのOracle SELECT文?)
 読み取り一貫性(行バージョン)はトランザクション単位で、挿入・更新・削除
 も有り。
 
・「共有ロックをかけないし、読み取り一貫性(行バージョン)も有る上」
 が、「読み取り一貫性(行バージョン)が行単位」の(本当のOracleと同じ)
 分離レベルは無い。

※ここの作法に叶っていないかも知れませんが、コメント欄では限界なので、
 質問の仕切り直しをさせて下さい。
 
質問:
私は、
・行バージョン有り
・スナップショット分離可能
としたSQLServer 2014、
Tomcat 8、Java 7、Microsoft JDBC Driver 4.1 for SQL Server、
Windows Server 2012R2(Windows Updateは最後まで)
のシステムにて
 
A:有る1かたまりのテーブルの読み書き →B:別の読み書き →A’Aをもう一度読み書き
(Aという処理の結果(テーブル更新)はBに影響し、Bという処理の結果(テーブル更新)は
 A’に影響する。)
 
で、折角の行バージョンを生かした、ロックのエスカレーションの無い、
多段階(Aというクラスを実行、Bいうクラスを実行、Aというクラスを実行)の
SQL読み書きをしたいが、
以下の制約から、SQLServer2014ではスナップショット分離一択である。
 
で良いでしょうか?

制約:
・そもそもSQLServerのSELECT文はすべてトランザクション単位で共有ロックを
 かけていた。
 そして残念な事に、読み取り一貫性(行バージョン)が無かった。
 
・READ_COMMITTED_SNAPSHOT ONをしたDBのSELECT文も、トランザクション単位で
 共有ロックをかけるが、それに加え行単位の読み取り一貫性(行バージョン)が増えた。
 (これがOracleのFOR UPDATE付きSELECT相当?)
 
・ALLOW_SNAPSHOT_ISOLATION ONをしたDBで、
 (処理の先頭で予期せぬトランザクションを除く為、ロールバックをした後)
 com.microsoft.sqlserver.jdbc.SQLServerConnection.TRANSACTION_SNAPSHOT
 にしたDBは、
 共有ロックをかけないし、読み取り一貫性(行バージョン)も有る上に、
 (ここまでFOR UPDATE相当なしのOracle SELECT文?)
 読み取り一貫性(行バージョン)はトランザクション単位で、挿入・更新・削除
 も有り。
 
・「共有ロックをかけないし、読み取り一貫性(行バージョン)も有る上」
 が、「読み取り一貫性(行バージョン)が行単位」の(本当のOracleと同じ)
 分離レベルは無い。