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

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

コミット済のデータだけを表示する画面のテストは、どのようにしたら良いですか?

2017-07-25 21:13:23 | テスト
〈 システムテスト作業方法 〉
問:

コミットする前とコミットした後のデータが期待通りであるかどうかをテストして、テスト前とテスト後のデータの中身を確認したいのですが、やり方がわかりません。
どうやってテストするのかを教えて下さい。


質問の詳細説明:

コミッテド済のデータだけを表示する画面をテストをしようとしています。
コミットは、編集したあと、最後に行っています。
そこで、コミットする前に行った仮登録が成功したのかどうかは、どうやってテストしたら良いのでしょうか?
加えて、最後にコミットを行った際には、エラーになった時にロールバックが出来たのか?もしくは成功してコミットが出来たのか?などをテストして期待通りにデータが登録されたかどうかを時系列(読み:じけいれつ)に確認したいのです。
なお、テストのエビデンス(証拠 読み:しょうこ)については、Splplus(えすきゅうえる ぷらす)を使って作成することを希望しますが、テストの方法が全くわかりません。
どうやってテストするのかについて、たとえば作業手順を含めて、時系列に出来るだけ詳しく、教えて下さい。

解答:
  解答(読み:かいとう)致します。
  以下の方法で、テストを行いましょう。


1.  まず、
コミット済のデータを検索します。

(1) オラクルに接続
   sqlplus ユーザ/パスワード@ローカル・ネーミング

(2)接続した後に、
Splplus(えすきゅうえる ぷらす)のコマンドを投入して
無名(むめい)ストアドプロシジャブロックを
実行(読み:じっこう)する。

-- ① splplusの画面に
--SQL文の実行結果を表示させる
--コマンドです。
set serveroutput on

(読み:せっと さーばー あうとぷっと おん)
-- ② 無名ストアドプロシジャブロックを
--ここから、スタートしています。
declare
 -- ③ ここには、変数を宣言します。
  -- a number(1);
begin
 -- ④ ここには、処理手続き(読み:しょり てつづき)を記述(読み:きじゅつ)します。
  -- a := 2;
COMMIT;

 -- ⑤ コミット済だけを表示するため
-- アイソレーションレベルを
-- READ COMMITTEDにして
--  'Toronto'という名前のトランザクションを
--  ここから、スタートしています。
SET TRANSACTION READ COMMITTED NAME 'Toronto';

-- ⑥ SQL文を実行しています。
--  コミット済だけを表示しています。
SELECT product_id, quantity_on_hand
FROM inventories
WHERE warehouse_id = 5
ORDER BY product_id;
   --このSQL文では、
   -- inventoriesテーブルを
   -- warehouse_id = 5をキーとして検索(読み:けんさく)し、
   -- product_id, quantity_on_handを
   --SQL文(エスキューエル ぶん)の実行結果として画面に表示
   --しています。

--  ⑦ 'Toronto'という名前の
-- トランザクションを
--  ここで、終わらせています。
COMMIT;

(読み:こみっと)
---⑧ 無名(読み:むめい)ストアドプロシジャブロックを
--ここで、終わらせています。
  /


2. 次に、
未確定(コミットしていない)を含めた
読み取り一貫性
の検索(読み:けんさく)をします。


begin
COMMIT;
SET TRANSACTION SERIALIZABLE NAME 'Toronto';
SELECT product_id, quantity_on_hand FROM invent
WHERE warehouse_id = 5
ORDER BY product_id;
COMMIT;

/




参考:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

 In the serializable transaction isolation level non-repeatable and phantom reads are not possible.
翻訳:
シリアライズ トランザクション というアイソレーションレベルでは、ノン リピータブルリードやファンタムリードは起こりません。

 With the serializable transaction isolation level, only data that was committed at the start of the transaction plus those made by the transaction itself through INSERTs, UPDATEs and DELETEs can be accessed by a query. 
翻訳:
何故ならば、シリアライズ トランザクション アイソレーションレベルでは、コミット済のデータだけではなく、
アクセス可能な追加されたデータ、書き換えられたデータ、削除されたデータを全部を対象にしているからです。

Unlike the read committed level transactions, serializable isolation level transactions will not experience non-repeatable reads or phantoms.
翻訳:
リード コミッテド レベル トランザクションと、シリアライズ アイソレーション レベル トランザクションとの違いは、ノンリピータブルリードやファンタムリードが起こらない点でもあります。

  翻訳はkotoritobuがしました




⚫どうやって、オラクルに接続するの?

参考サイト:
 SHIFT the Oracle

オラクルマスターの取得や業務でオラクルを使って開発しているシステムエンジニアを目指している人のためのサイト
オラクル入門者向けの Oracle SQL 入門、PL/SQL (ぴぃえる えすきゅうえる)プログラミングから初歩的なチューニング・運用に関する情報、SQL のリファレンスやサンプル、Oracle Tips(おらくる ちっぷす) を取り扱っています
 https://www.shift-the-oracle.com/sqlplus/tutorial/sqlplus-remote.html

ローカル・ネーミングを使用した SQL*Plus(えすきゅうえる ぷらす) の起動
SQL*Plus の起動(読み:きどう)オプション
ネットサービス名:orcl_net に接続する例
C:\>sqlplus rivus/rivus_pass@orcl_net
SQL>

ローカル・ネーミングを使用した接続には ネットサービス名 が必要。
ネットサービス名は TNSNAMES.ORA(てぃえぬえす ねーむず どっと おら) というデータベースとの接続文字列を管理した定義ファイルに格納されている。


参考:
⚫tnsnames.ora 書き方の基本 (TCP)

http://blog.goo.ne.jp/kagoshima_english_land/e/88de65df0ef89a49eb3b1cd18280c022#GO_tnsnames.ora





⚫ ISOLATION LEVEL READ COMMITTED
で、表示したい。
(コミット済みのデータだけを表示したい。= まだ、コミットしていないデータは表示したくない)


参考:ORACLE社公式サイト(日本語)
https://docs.oracle.com/cd/E16338_01/server.112/b56299/statements_10005.htm
例:
トランザクションの設定例: 次の文は、サンプルの注文入力スキーマ(oe)のトロントの倉庫にある在庫の製品と量を計算するもので、毎月の最終日の真夜中に実行されます。このレポートは、別の倉庫の在庫を追加および削除する他のユーザーの影響は受けません。
COMMIT;
SET TRANSACTION READ ONLY NAME 'Toronto';
SELECT product_id, quantity_on_hand FROM inventories
   WHERE warehouse_id = 5
   ORDER BY product_id;
COMMIT;

最初のCOMMIT文によって、SET TRANSACTIONが確実にトランザクション内の最初の文となります。最後のCOMMIT文は、実際にはデータベースに対する変更を永続化するものではありません。これは単に、この読取り専用トランザクションを終了するためのものです。

参考サイト:ORACLE社公式サイト(英語)
Oracle ® is the registered trademark of Oracle Corporation.
 https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_10005.htm#SQLRF01705

 
参考:Oracle Isolation Level Tips
Oracle Database Tips by Donald BurlesonConsulting
April 25, 2015
 http://www.dba-oracle.com/t_oracle_isolation_level.htm




⚫他には、どんな ISOLATION LEVELがあるの?(splplusでのコマンドをもっと詳しく教えて下さい)
 SET TRANSACTION
   { { READ { ONLY | WRITE }
     | ISOLATION LEVEL
       { SERIALIZABLE | READ COMMITTED }
     | USE ROLLBACK SEGMENT rollback_segment
     } [ NAME string ]
   | NAME string
   } ;




参考サイト:
 SSJ Tech Lab 公式サイト
 https://techlab.sixsquare.co.jp/archives/931

🔷オラクル
 ①UNDO(あんどぅ)レコードとは?
主に変更したデータを元に戻すために使われます。
要は現在の処理の取り消し(ROLLBACK)です。レコードを書く場所は表領域です。

②UNDOレコードの主な用途(読み:しゅな ようと)
UNDOレコードは主にトランザクションをロールバックするために使用されます。処理を開始してからデータがコミット(決定)されるまでの一連の流れのことをトランザクションと呼びます。
ROLLBACK(ロールバック)コマンドによって実行を取り消し、処理の開始時点に戻すこと(UNDO)が出来ます。
他に重要な機能として、UNDOレコードは読み取り一貫性というものを提供します。これは、検索時に一貫性のあるデータを提供する機能です。

例えば10秒間かかるSELECT(セレクト)を行うと、データ取得中に更新があった時、最初に検索されたレコード(行データ)は古いデータで、最後の方に検索されたレコードは新しいデータとなってしまうことが想定されます。Oracleではこの時に、時間断面の一貫性がとれたデータの取得を保証しています。
一貫性の取れたデータを取得するためには、この例の場合最大10秒前の過去のデータを参照する必要があります。
この10秒間において一貫性のある過去データを取得する仕組みとしてUNDOレコードが使用されます。10秒間のSELECT中に過去データが保存容量を超えて上書きされたなどの理由により参照できないと、ORA-01555(読み:おら いちごぅごぅごぅ)が発生します。

🔷 Microsoft SQL Server (マイクロソフト エスキューエル サーバー)
Microsoft SQL Server も 2005 以降はマルチバージョン制御による読み取り一貫性を実現しているらしい。「READ COMMITTED SNAPSHOT」と「スナップショット分離レベル」が用意されていて、Oracle の「Read Committed」、「Serializable トランザクション」に、tempdb が Oracle のロールバックセグメントに相当する。
参考サイト:
 Oracle はどのようにして読み取り一貫性(読み:よみとり いっかんせい)をとっているか?
  http://d.hatena.ne.jp/yohei-a/touch/20090610/1244635209



参考サイト:
 マイクロソフト公式サイト(日本語)
 https://technet.microsoft.com/jajp/library/ms189542(v=sql.105).aspx

マイクロソフト公式サイト(英語)
https://technet.microsoft.com/en-gb//library/ms189542(v=sql.105).aspx
分離プロパティは、ACID と呼ばれる 4 つのプロパティの 1 つです。
論理的な 1 つの作業単位を持ち、トランザクションとして有効である必要があります。
ACIDは、他の同時実行トランザクションによる更新の影響からトランザクションを保護する機能です。

🔷ACID(アシッド) の 4 つのプロパティ
① 原子性 (atomicity)
(読み:アトミッキティ、意味:原子性、 アトミック性)

② 一貫性原子性 (consistency)
読み:コンシステンシィ

③ 分離性 (isolation)
読み:アイソレーション、意味:独立性

④ 持続性 (durability)
読み:デュアアビリティ、意味:耐久性

参考サイト:
 IT用語のオンライン辞典
http://sp.e-words.jp/w/ACID特性.html

ACID特性 【Atomicity Consistency Isolation Durability】(読み: アシッドとくせい)
ACID特性とは、関連する複数の処理を一つの処理単位にまとめて管理するトランザクション処理に求められる( トランザクションが満たすべき四特性)4つの特性 の頭文字をつなぎ合わせたもの。


🔷トランザクション分離レベル
READ UNCOMMITTED (リード アンコミッテド)
READ COMMITTED (リード コミッテド)
REPEATABLE READ (リピータブル リード)
SNAPSHOT (スナップ ショット)
SERIALIZABLE (シリアライズ)



By Kotoritobu
ジャンル:
ウェブログ
コメント   この記事についてブログを書く
この記事をはてなブックマークに追加
« たったの1行で出来ました‼凄... | トップ | わかりにくい日本語:来て貰っ... »
最近の画像もっと見る

コメントを投稿

あわせて読む

トラックバック

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