楽しい英会話の世界 by Kagoshima artists.

鹿児島在住の元英語教師が、親子の会話やお仕事で使う英語、方言や日本語学研究をご紹介。よみがなには、カタカナを使用します。

データベースのメモ

2017-07-10 00:59:57 | テスト
データベースのメモ
以下の内容はランダムに調べました。
 

時期、記述内容に誤りがあるかもしれません。 少しずつ、整理して
こうした話を日本人とも話せるし英会話でも話せるようになりたいということが私の夢です。 まだ日本人とも上手く話し合えません。 まだまだ、勉強不足です。

 by  kotoritobu

🔷セッション

Oracleが管理するジョブ(JOB)またはタスク( task)は、セッション( session)と呼ばれます。

Google英訳:  A job or task managed by Oracle is called a session.

アプリケーション・プログラム( application program)またはOracle Formsなどのツール( tool)を実行してOracleに接続すると、ユーザー・セッション( User session)が開始されます。

Weblio英訳:  Application program (when I carry out tool such as application program) or Oracle Forms and am connected to Oracle, user session is started.

Oracleでは、ロックを使用して、データへの同時アクセスを制御します。 ロックを使用すると、データの表または行などのデータベース・リソースを一時的に専有できます。 その結果、そのユーザーがデータへのアクセスを終了するまで、他のユーザーはデータに変更を加えることはできません。

🔷トランザクション

Oracleの場合は常にトランザクションが有効であるため,明示しなくてもトランザクションは開始する。CREATE TABLE文などがあるとCOMMIT(確定)文が発行されなくてもコミットされるし,データベース接続が切断されてもコミットされてしまう。


🔷トランザクション分離レベル 
Transaction Isolation Level
( 読み方:トランザクション アイソレーション レベル)「パフォーマンスを上げるためにある程度の読み込み不都合を妥協するか、パフォーマンスを落としてもいいから不都合を発生しないようにするか」


デフォルトのトランザクション分離レベル

IBM DOCUMENT REPEATABLE READ (RR)./a> = This isolation level corresponds with ANSI SQL SERIALIZABLE.
 IBM DOCUMENTの、 REPEATABLE READ (RR).はANSI規格のSERIALIZABLEに準拠しています。

MySQL(InnoDB) REPEATABLE READ
PostgreSQL READ COMMITTED
Oracle  READ COMMITTED
SQL Server READ COMMITTED

ANSI規格では,4つのレベルがある。

 READ UNCOMMITTED (一番低い)
 READ COMMITTED
 REPEATABLE READ
 SERIALIZABLE(一番高い)


The IsolationLevel property on a Connection object indicates the level of isolation for a Connection object. This property sets or returns a Long value representing an IsolationLevelEnum. The default value for this property is adXactChaos

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ⬛ActiveX® Data Objects (ADO) IsolationLevel
propertyとANSI規格の対比を以下に記します。
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

When used with the Microsoft OLE DB Provider for DB2 or the Microsoft OLE DB Driver for DB2, the ActiveX® Data Objects (ADO) IsolationLevel property corresponds with the isolation level defined by the ANSI SQL standard and with IBM's DB2 implementation of isolation level.
翻訳:マイクロソフト社製品であるオーエルイー デービー プロバイダー フォー デービーツゥ または ザ マイクロソフト オーエルイー デービー ドライバー フォー デービーツゥ、ザ アクティブエックス データー オブジェクト(エーディーオー) アイソレーション レベル プロパティ コレスポンズ は、アンシー エスキューエル 標準規定 に準拠しています。アイビーエム社製品であるデービーツゥに搭載しているアイソレーション レベルとも準拠しています。

  By kotoritobuが翻訳しました

The table below indicates ADO IsolationLevel property corresponds with the terms used by ANSI SQL for isolation level and with IBM documentation for isolation level in DB2.


⬛ANSI SQL isolation level ANSI規格

AUTOCOMMITTED (Note that this applies only to DB2/400 and does not correspond with an ANSI SQL isolation level

🔷IBM DOCUMENT
COMMIT(*NONE) (NC).

This isolation level is used in DB2/400 auto-commit mode only and has no corresponding isolation level on other DB2 platforms or in ANSI SQL.

🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯

読み:アクティブエックス
 データオブジェクト(エーディーオー) 
     アイソレーションレベルの
   アド ザクト リード コミッティド
ActiveX® Data Objects (ADO) IsolationLevel
adXactReadUncommitted


読み:アンシー エスキューエル 
アイソレーションレベルの
リード アンコミッティド

 ⬛ANSI SQL  isolation level
READ UNCOMMITTED


読み:アイビィエム 
ドキュメントの
アンコミッティド リード
(略称:アール アール)

デフォルト 

🔷IBM DOCUMENT
UNCOMMITTED READ (UR).

This isolation level corresponds with ANSI SQL READ UNCOMMITTED.

🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯

読み:アクティブエックス 
データオブジェクト(エーディーオー) 
アイソレーションレベルの
アドザクト リード コミッティド または
アドザクト カーソル スタビリティ
ActiveX® Data Objects (ADO) IsolationLevel
adXactReadCommitted or
adXactCursorStability


読み:アンシー エスキューエル 
アイソレーションレベルの
リード コミッティド
 
デフォルト 

⬛ANSI SQL isolation level
READ COMMITTED


読み:アイビィエム ドキュメントの
カーソル スタビリティ
(略称:シー エス)
 

🔷IBM DOCUMENT
CURSOR STABILITY (CS).

This isolation level corresponds with ANSI SQL READ COMMITTED.


  
リードコミッティド分離レベル
ORACLE PostgreSQL SQL Server
 に於いての デフォルト分離レベルです
  
Read committed isolation level is ORACLE PostgreSQL SQL Server In Default isolation level By Google英訳
リードコミッティド分離レベル
では,『ダーティーリード』は発生しませんが,『ファジーリード』が発生してしまいます

リードコミッティドはまだコミットしていないデータを読まないのですが、コミットしてしまえば読んでしまいます。専有するわけではないので、他のユーザがコミットして変更すると読んでしまうのです(他のユーザが変更すると、待ち状態になり、コミットされたら読むので、エラーにはならないけど、ファントムリードになります)
他のユーザが変えた値の影響で、自分が変えたわけではない値の変化が起きてしまうということです。
ファントムリードが発生するのは、他のユーザによって削除されたレコードに対して修正した時と、他のユーザによって追加されたレコードを再読み込みした時です。 他のユーザが変えた値の影響を完全に受けないようにするには参照しているレコードをテーブル全体で、専有するしかないのです。
テーブル単位で、ユーザがデータを専有して、他のユーザが決して更新しないようにする方法は2つあります。1つは、ORACLEはテーブル単位でロックすることはないので、一時テーブルなどの物理的に独立したテーブルを利用する方法です。
もう1つは対象となるテーブルにロックをかけて排他制御するという方法です。
しかし、ロックをかけて専有することは、複数ユーザが同時にテーブルにアクセスして更新をする場合にはロックが終わるまで誰も更新出来なくなりパフォーマンスは格段に悪くなるというリスクを背負うことにもなり、ロックするかしないかの判断には、運用スケジュールに対する綿密な話し合い、お客様の理解が必要なことに注意が必要です。また、たとえロックをしても追加によるファントムリードを避けることは出来ません。
こうしたアイソレーションレベルの特徴を効果的に簡単に実現する方法として、マスタメンテナンスなどユーザが少ない人数で運用する場合にはテーブルを専有するわけではないので他のユーザが更新することを避けることが出来る最も強固なアイソレーションレベルである ⬛ANSI SQL  isolation level SERIALIZABLE(読み:シリアライズ)を採用することが一般的です。
先に追加更新削除をしたユーザがテーブル全体をロックし、他のユーザはいつ終わるかわからないコミットをいつ終わるかどうかの宛もなく待つのではなく、先にロックした他のユーザが使用中だからコミットするまで他の作業をするように導くという運用が即座に逐一提供することが可能になるのが、SERIALIZABLEなのです。
一時テーブルを作りセッション終了時にその一時テーブルをドロップするという高度なテクニックを使わなくても、アイソレーションレベルをSERIALIZABLEにするだけで、一時テーブルを利用することと代わらないパフォーマンスを発揮出来るのです。

🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯

読み:アクティブエックス 
データオブジェクト(エーディーオー) 
アイソレーションレベルの
アドザクトリピータブルリード
ActiveX® Data Objects (ADO) IsolationLevel
adXactRepeatableRead


読み:アンシーエスキューエル 
アイソレーションレベルの
リピータブルリード
 
デフォルト 

⬛ANSI SQL isolation level
REPEATABLE READ


読み:アイビィエム ドキュメントの
リード スタビリティ
(略称:アール エス)
 

🔷IBM DOCUMENT
READ STABILITY (RS).

This isolation level corresponds with ANSI SQL REPEATABLE READ.

🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯🔯

読み:アクティブエックス 
データオブジェクト(エーディーオー) 
アイソレーションレベルの
アドザクトシリアライズ または
アドザクトアイソレイテッド
ActiveX® Data Objects (ADO) IsolationLevel
adXactSerializable or adXactIsolated


読み:アンシー エスキューエル 
アイソレーションレベルの
シリアライズ
 
デフォルト 

⬛ANSI SQL  isolation level
SERIALIZABLE


読み:アイビィエム ドキュメントの
リピータブル リード
(略称:アール アール)
 

🔷IBM DOCUMENT
REPEATABLE READ (RR).

This isolation level corresponds with ANSI SQL SERIALIZABLE.

データベース管理システム上での一括処理(トランザクション)が複数同時に行われた場合に、どれほどの一貫性、正確性で実行するかを4段階で定義したものを トランザクション分離レベルという。

🔷分離レベルの矛盾

🌟ダーティリード 
(dirty read)🌟

別のトランザクションでまだコミットされてないデータが読み取れる現象。 ダーティーリードとは、トランザクション処理において、あるトランザクションが更新されている最中に、他のトランザクションからデータを読み出すことができてしまう現象のことである。
トランザクション処理においては、本来ならば更新されるデータは更新が完了しなくてはデータを見ることができない。これはトランザクション処理における機能の条件(ACID特性)と矛盾する。
 ダーティーリードを禁止することは比較的容易に実現できるが、多くの場合、禁止を実行するとオーバーヘッドを生じさせてしまうことになり、アプリケーションの実行速度を低下させてしまう。同様に、システムの平行性を低下させてしまうことも多い。

🌟 ファジーリード
(非再現リード,ノンリピータブルリード)🌟
Non-Repeatable Read
(非リピータブル・リード)
別のトランザクションで更新後データを読むことにより、一貫性がなくなる現象。
🌟 ファントムリード 
 ( Phantom Read)🌟

別のトランザクションで挿入されたデータが見えることにより、一貫性がなくなる現象。

🔷排他制御(読み:はいた せいぎょ)

排他制御には、大きく次の2つの方法があります。


読み:ひかんてき はいた せいぎょ
🌟悲観的排他制御
(Pessimistic, ペシミスティック)🌟

 悲観的排他制御では、更新対象のデータを読み出してから更新を終えるまでの間、他のユーザーがそのデータに触れないようロックします。ロックを取得したユーザーのみ更新が行える。トランザクションが長くなるとロック期間が長くなり、全体としてのパフォーマンスが落ちる。 従って、トランザクションが短く、頻繁に更新され、なおかつ同時更新が多発するような場合、例えば金額の管理に向いています。

読み:らっかんてき はいた せいぎょ
🌟楽観的排他制御
(Optimistic, オプティミスティック)🌟 

楽観的排他制御では、更新対象データを最初に取得した時点ではデータをロックしません。 そのかわり、データを更新する直前に、他のユーザーによって更新されていないかどうかをチェックします。この時初めて対象データをロックします。 そして、他のユーザーによってすでに更新されていた場合、更新処理をキャンセルします。ユーザーにはキャンセルしたことを伝え、もう一度処理をやり直してもらうよう促します。複数のユーザーが並行して更新処理を行える反面、データの衝突(コンフリクト)が発生しやすい。 従って、更新頻度がそれほど高くなく、同時に編集するユーザーが少ないような場合、例えばマスターメンテナンスなどでよく用いられます。

🔷読み取り一貫性
(読み:よみとり いっかんせい)

ORACLEは読み取り一貫性があるので同一テーブルを複数のユーザが参照する際にコミットしていなくてもコミット後の状態ですべてのユーザが一貫して参照することが出来てしまいます。 更新前データを読み取れる機能。 「ロックが掛けられた行を他のユーザ(トランザクション)が参照しても、ロック解除まで検索を待つことはない」したがって、ORACLEではどんな トランザクションの分離レベル( Isolation)でもダーティリードにはなるということです。まだコミットしていなくても他のユーザから参照することは出来て、それこそが読み取り一貫性なのです。

🔷排他制御
(ロック、読み:はいた せいぎょ)

OracleではDML文の発行時に、自動的に以下の2種類のロックが取得される。
・行に対する排他行ロック・・・同一レコードに対するDML文を防止
・表に対する共有表ロック・・・同一表に対するDDL文を防止
これだけからも分かる通りSelectを防止するロックは一切かからない。



まだ、知識が整理出来ていません。
専門用語や知識、勉強不足です。

By kotoritobu

『鹿児島県』 ジャンルのランキング
コメント   この記事についてブログを書く
この記事をはてなブックマークに追加
« 白状しちゃいなさいよ(●^o^●) | トップ | 日本語は敬語の方が感じが良... »
最近の画像もっと見る

コメントを投稿

テスト」カテゴリの最新記事

トラックバック

この記事のトラックバック  Ping-URL
  • 30日以上前の記事に対するトラックバックは受け取らないよう設定されております。
  • 送信元の記事内容が半角英数のみのトラックバックは受け取らないよう設定されております。
  • このブログへのリンクがない記事からのトラックバックは受け取らないよう設定されております。
  • ※ブログ管理者のみ、編集画面で設定の変更が可能です。