• 検索結果がありません。

[Lab 2]Oracleからの移行を促進する新機能

N/A
N/A
Protected

Academic year: 2021

シェア "[Lab 2]Oracleからの移行を促進する新機能"

Copied!
24
0
0

読み込み中.... (全文を見る)

全文

(1)

[Lab

[Lab

[Lab

[Lab 2

2

2]

2

]

]

]

Oracle

Oracle

Oracle

Oracle

からの移行を促進

からの移行を促進

からの移行を促進

からの移行を促進

する新機能

する新機能

する新機能

する新機能

(2)

Contents

CONTENTS ... 2

1.

1.

1.

1.

はじめに

はじめに ... 3

はじめに

はじめに

2.

2.

2.

2.

内容

内容 ... 3

内容

内容

3.

3.

3.

3.

レジストリ変数の設定とデータベースの作成

レジストリ変数の設定とデータベースの作成 ... 3

レジストリ変数の設定とデータベースの作成

レジストリ変数の設定とデータベースの作成

3.1

レジストリ変数なしでのデータベースの作成

... 3

3.2

レジストリ変数ありでのデータベースの作成

... 4

3.3

データタイプの互換性パラメーターの確認

... 5

4.

4.

4.

4.

ORACLE

ORACLE

ORACLE

ORACLE

固有のデータ・タイプの使用

固有のデータ・タイプの使用

固有のデータ・タイプの使用

固有のデータ・タイプの使用

... 6

4.1

互換機能が無効なデータベースでの使用

... 6

4.2

互換機能が有効なデータベースでの使用

... 7

4.3

データの挿入と参照

... 7

5.

5.

5.

5.

ORACLE

ORACLE

ORACLE

ORACLE

互換のビルトイン関数の使用

互換のビルトイン関数の使用

互換のビルトイン関数の使用

互換のビルトイン関数の使用... 9

6.

PL/SQL

の無名ブロックの実行

の無名ブロックの実行

の無名ブロックの実行

の無名ブロックの実行 ... 11

7.

7.

7.

7.

PL/SQL

PL/SQL

PL/SQL

PL/SQL

パッケージの作成と実行

パッケージの作成と実行

パッケージの作成と実行

パッケージの作成と実行 ... 13

7.1

PL/SQL パッケージの作成

... 13

7.2

パッケージの実行

... 15

8.

8.

8.

8.

新しいロック方式(

新しいロック方式(CURRENTLY COMMITTED

新しいロック方式(

新しいロック方式(

CURRENTLY COMMITTED

CURRENTLY COMMITTED)の確認

CURRENTLY COMMITTED

)の確認

)の確認 ... 17

)の確認

8.1

パラメーターの無効化

... 17

8.2

テスト準備

... 18

(3)

1.

1.

1.

1.

はじめに

はじめに

はじめに

はじめに

このハンズオンでは、Oracle 互換機能のいくつかの機能を実際に実行し、これらの機能の理

解を深めます。

2.

2.

2.

2.

内容

内容

内容

内容

このハンズオンでは以下の内容を実施します。

 レジストリ変数の設定とデータベースの作成

 Oracle 固有のデータ・タイプの使用

 Oracle 互換のビルトイン関数の使用

 PL/SQL の無名ブロックの実行

 PL/SQL パッケージの作成と実行

 新しいロック方式(CURRENTLY COMMITED)の確認

3.

3.

3.

3.

レジストリ変数の設定

レジストリ変数の設定

レジストリ変数の設定

レジストリ変数の設定とデータベースの作成

とデータベースの作成

とデータベースの作成

とデータベースの作成

3.1

3.1

3.1

3.1

レジストリ変数なしでの

レジストリ変数なしでの

レジストリ変数なしでの

レジストリ変数なしでの データベースの作成

データベースの作成

データベースの作成

データベースの作成

_データベースの作成

最初にレジストリ変数 DB2_COMPATIBILITY_VECTOR を設定していない状態でデータベース

を作成します。

Terminal

を開き、db2inst1 ユーザーで以下のコマンドを実行し、データベースを作成します。

コマンド

su - db2inst1

db2start

db2 create db oratest1 on /db2 using codeset utf-8 territory

jp

(4)

3.2

3.2

3.2

3.2

レジストリ変数ありでのデータベースの作成

レジストリ変数ありでのデータベースの作成

レジストリ変数ありでのデータベースの作成

レジストリ変数ありでのデータベースの作成

_レジストリ変数の設定

次にレジストリ変数

DB2_COMPATIBILITY_VECTOR=ORA を設定した状態でデータベースを作

成します。レジストリ変数 DB2_COMPATIBILITY_VECTOR=ORA と同時に

DB2_DEFERRED_PREPARE_SEMANTICS=YES の設定も行います。

Terminal

を開き、db2inst1 ユーザーで以下のコマンドを実行します。

レジストリ変数の設定後、インスタンスの再起動も行います。

コマンド:

db2set DB2_COMPATIBILITY_VECTOR=ORA

db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES

db2stop force

db2start

db2set –all

実行例

_データベースの作成

レジストリ変数の設定後、データベースの作成を行います。

以下のコマンドを、db2inst1 ユーザーで実行します。

コマンド

db2 create db oratest2 on /db2 using codeset utf-8

territory jp

db2inst1@db2V97onSLES10:~> db2set DB2_COMPATIBILITY_VECTOR=ORA db2inst1@db2V97onSLES10:~> db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES db2inst1@db2V97onSLES10:~> db2stop force

2009-08-06 20:55:35 0 0 SQL1064N DB2STOP の処理が正常に終了しました。 SQL1064N DB2STOP の処理が正常に終了しました。

db2inst1@db2V97onSLES10:~> db2start

08/06/2009 20:55:40 0 0 SQL1063N DB2START の処理が正常に終了しました。 SQL1063N DB2START の処理が正常に終了しました。

db2inst1@db2V97onSLES10:~> db2set -all [i] DB2_DEFERRED_PREPARE_SEMANTICS=YES [i] DB2_COMPATIBILITY_VECTOR=ORA [i] DB2COMM=tcpip

[g] DB2SYSTEM=db2V97onSLES10 db2inst1@db2V97onSLES10:~>

(5)

_データベース構成パラメーターの確認

データベースの作成後、ORATEST1 と ORATEST2 のデータベース構成パラメーターを確認し

ます。データ・タイプの互換性機能のパラメーターを確認します。

以下のコマンドを、db2inst1 ユーザーで実行します。

コマンド

db2 get db cfg for oratest1 | grep 互換性

db2 get db cfg for oratest2 | grep 互換性

実行例

レジストリ変数

DB2_COMPATIBILITY_VECTOR を設定する前に作成したデータベース

ORATEST1

では、データ・タイプの互換性に関連するパラメーターが OFF になっていることが

確認できます。

レジストリ変数

DB2_COMPATIBILITY_VECTOR=ORA を設定後に作成したデータベース

ORATEST2

では、データ・タイプの互換性に関連するパラメーターが ON になっていることが確

認できます。

db2inst1@db2V97onSLES10:~> db2 get db cfg for oratest1 | grep 互換性

NUMBER データ・タイプの互換性 = OFF

VARCHAR2 データ・タイプの互換性 = OFF

データ・タイプ DATE の TIMESTAMP(0) への互換性 = OFF

db2inst1@db2V97onSLES10:~> db2 get db cfg for oratest2 | grep 互換性

NUMBER データ・タイプの互換性 = ON

VARCHAR2 データ・タイプの互換性 = ON

(6)

4.

4.

4.

4.

Oracle

Oracle

Oracle

Oracle

固有のデータ・タイプ

固有のデータ・タイプの使用

固有のデータ・タイプ

固有のデータ・タイプ

の使用

の使用

の使用

4.1

4.1

4.1

4.1

互換機能が無効な

互換機能が無効な

互換機能が無効な

互換機能が無効なデータベース

データベース

データベース

データベースでの使用

での使用

での使用

での使用

_表の作成の失敗

Oracle 固有のデータ・タイプである、VARCHAR2

型、NUMBER 型、DATE 型の列を持つ表を

ORATEST1、ORATEST2 に作成します。

最初に ORATEST1 データベースに接続して、CREATE TABLE 文を実行します。

以下のコマンドを実行します。

コマンド

db2 connect to oratest1

db2 “create table t1(c1 varchar2(10),c2 number(10,2),c3

date)”

実行例

データ・タイプの互換性のパラメーターが OFF のため VARCHAR2 型や

NUMBER 型の列を持

つ表の作成に失敗します。VARCHAR2 型や NUMBER 型が認識されないため、文法エラー

(SQL0104N)となります。

db2inst1@db2V97onSLES10:~> db2 connect to oratest1 データベース接続情報

データベース・サーバー = DB2/LINUX 9.7.0 SQL 許可 ID = DB2INST1 ローカル・データベース別名 = ORATEST1

db2inst1@db2V97onSLES10:~> db2 "create table t1(c1 varchar2(10),c2 number(10,2),c3 date)" DB21034E コマンドが、有効なコマンド行プロセッサー・コマ ンドでないため、 SQL ステートメントとして処理されました。 SQL 処理中に、そのコマンドが返されました。 SQL0104N "create table T1(C1 " に続いて予期しないトークン "varchar2" が見つかりました。 予期されたトークンに "VARCHAR" が含まれている可能性があります。 SQLSTATE=42601 db2inst1@db2V97onSLES10:~>

(7)

4.2

4.2

4.2

4.2

互換機能が有効なデータベースでの使用

互換機能が有効なデータベースでの使用

互換機能が有効なデータベースでの使用

互換機能が有効なデータベースでの使用

_表の作成

次に ORATEST2 データベースに接続して、同じ CREATE TABLE 文を実行してみます。

次のコマンドを実行します。

コマンド

db2 connect to oratest2

db2 "create table t1(c1 varchar2(10),c2 number(10,2),c3

date)"

実行例

データ・タイプの互換性のパラメーターが ON

のため VARCHAR2 型や

NUMBER 型の列を持つ

表の作成が成功します。

4.3

4.3

4.3

4.3

データの挿入と参照

データの挿入と参照

データの挿入と参照

データの挿入と参照

_表へのデータの挿入、参照

次にこの表に対して列属性の確認を行い、データの挿入、参照を行ってみます。

以下のコマンドを実行します。

コマンド

db2 describe table t1

db2 "insert into t1 values (100,10.2,sysdate)"

db2 "select * from t1"

db2inst1@db2V97onSLES10:~> db2 connect to oratest2 データベース接続情報

データベース・サーバー = DB2/LINUX 9.7.0 SQL 許可 ID = DB2INST1 ローカル・データベース別名 = ORATEST2

db2inst1@db2V97onSLES10:~> db2 "create table t1(c1 varchar2(10),c2 number(10,2),c3 date)" DB20000I SQL コマンドが正常に完了しました。

(8)

実行例

DESCRIBE TABLE コマンドで列属性を確認すると VARCHAR2 で作成された列は

VARCHAR、

NUMBER

で作成された列は

DECIMAL、DATE で作成された列は

TIMESTAMP(0)として作成さ

れていることがわかります。

INSERT 文では、VARCHAR

列に数値を指定しても暗黙的に変換が行われ INSERT 文が成功

しています。また、SYSDATE 関数の使用も可能です。この暗黙的な型変換や SYSDATE 関数

は、DB2_COMPATIBILITY_VECTOR

の設定とは関係なく使用できます。

db2inst1@db2V97onSLES10:~> db2 describe table t1

データ・タイ データ・ 列の スケ 列名 プ・スキーマ タイプ名 長さ ール NULL --- --- --- --- --- --- C1 SYSIBM VARCHAR 10 0 はい C2 SYSIBM DECIMAL 10 2 はい C3 SYSIBM TIMESTAMP 7 0 はい 3 レコードが選択されました。

db2inst1@db2V97onSLES10:~> db2 "insert into t1 values (100,10.2,sysdate)" DB20000I SQL コマンドが正常に完了しました。

db2inst1@db2V97onSLES10:~> db2 "select * from t1" C1 C2 C3

--- --- --- 100 10.20 2009-08-06-22.55.07 1 レコードが選択されました。

(9)

5.

5.

5.

5.

Oracle

Oracle

Oracle

Oracle

互換のビルトイン関数の使用

互換のビルトイン関数の使用

互換のビルトイン関数の使用

互換のビルトイン関数の使用

_TO_CHAR

関数の使用

ここでは、Oracle 互換のビルトイン関数を使用してみます。

最初に TO_CHAR 関数を使用してみます。以下のコマンドを実行します。

コマンド

db2 connect to oratest2

db2 "select sysdate,to_char(sysdate,'HH:MI:SS') from dual"

実行例

TO_CHAR 関数によって出力フォーマットを指定しています。

_TO_NUMBER,TO_DATE 関数の使用

次に TO_NUMBER 関数と TO_DATE 関数を使用してみます。以下のコマンドを実行します。

コマンド

db2 "select to_number('123,456,789','999,999,999') from dual"

db2 "select to_date('2000/10/10','yyyy/mm/dd') from dual"

db2inst1@db2V97onSLES10:~> db2 connect to oratest2

データベース接続情報

データベース・サーバー = DB2/LINUX 9.7.0 SQL 許可 ID = DB2INST1 ローカル・データベース別名 = ORATEST2

db2inst1@db2V97onSLES10:~> db2 "select sysdate,to_char(sysdate,'HH:MI:SS') from dual"

1 2

--- --- 2009-08-11-11.04.05 11:04:05

(10)

実行例

TO_NUMBER

関数では、指定されたフォーマットを使用して文字列から数値データを取

り出しています。TO_DATE

関数では、指定されたフォーマットを使用して文字列から

TIMESTAMP データを取り出しています。

db2inst1@db2V97onSLES10:~> db2 "select to_number('123,456,789','999,999,999') from dual" 1

--- 123456789 1 レコードが選択されました。

db2inst1@db2V97onSLES10:~> db2 "select to_date('2000/10/10','yyyy/mm/dd') from dual" 1

--- 2000-10-10-00.00.00.000000 1 レコードが選択されました。

(11)

6.

PL/SQL

の無名ブロックの実行

の無名ブロックの実行

の無名ブロックの実行

の無名ブロックの実行

_PL/SQL 無名ブロックの記述

PL/SQL の無名ブロックをファイルに作成し、実行します。

vi を起動して PL/SQL の無名ブロックを記述します。

(/workshop/lab2 ディレクトリに plsqltest.sql

があります。お時間のない場合や

vi の操作に慣

れていない方はこちらのファイルをご使用ください。)

コマンド

cd /workshop/lab2

vi plsqltest.sql

ファイルには以下の内容を記述します。

plsqltest.sql

_

PL/SQL

無名ブロックの実行

db2inst1 ユーザーで

ORATEST2 データベースに接続して、以下のコマンドで plsqltest.sql

ファ

イルに記述された PL/SQL の無名ブロックを実行します。

コマンド

db2 connect to oratest2

db2 -tvf plsqltest.sql

set sqlcompat plsql;

set serveroutput on;

declare

rec t1%rowtype;

begin

delete from t1;

for i in 1..3 loop

insert into t1 values (i,i,add_months(sysdate,i) )

returning c1,c2,c3 into rec;

dbms_output.put_line('inserted : '||rec.c1

||','||rec.c2||','||rec.c3);

end loop;

end;

/

set sqlcompat db2;

set serveroutput off;

(12)

実行例

この

PL/SQL の無名ブロックでは、T1 表のデータを削除し、3 行のデータを挿入しています。

挿入後、挿入したデータを DBMS_OUTPUT.PUT_LINE プロシージャーで出力しています。

_データの確認

実際に T1 表にデータが格納されたことを以下のコマンドを実行して確認します。

コマンド

db2 “select * from t1”

実行例

db2inst1@db2V97onSLES10:~> db2 connect to oratest2 データベース接続情報 データベース・サーバー = DB2/LINUX 9.7.0 SQL 許可 ID = DB2INST1 ローカル・データベース別名 = ORATEST2 db2inst1@db2V97onSLES10:~> db2 -tvf plsqltest.sql set sqlcompat plsql

DB20000I SET SQLCOMPAT コマンドが正常に完了しました。 set serveroutput on

DB20000I SET SERVEROUTPUT コマンドが正常に完了しました。 declare

rec t1%rowtype; begin

delete from t1; for i in 1..3 loop

insert into t1 values (i,i,add_months(sysdate,i) ) returning c1,c2,c3 into rec;

dbms_output.put_line('inserted : '||rec.c1 ||','||rec.c2||','||rec.c3); end loop; end; DB20000I SQL コマンドが正常に完了しました。 inserted : 1,1,2009-09-09-13.45.14 inserted : 2,2,2009-10-09-13.45.14 inserted : 3,3,2009-11-09-13.45.14 set sqlcompat db2

DB20000I SET SQLCOMPAT コマンドが正常に完了しました。 set serveroutput off

DB20000I SET SERVEROUTPUT コマンドが正常に完了しました。

(13)

7.

7.

7.

7.

PL/SQL

PL/SQL

PL/SQL

PL/SQL

パッケージの作成

パッケージの作成と実行

パッケージの作成

パッケージの作成

と実行

と実行

と実行

7.1

7.1

7.1

7.1

PL/SQL

PL/SQL

PL/SQL

PL/SQL

パッケージの作成

パッケージの作成

パッケージの作成

パッケージの作成

_PL/SQL パッケージの作成

ここでは、PL/SQL のパッケージを作成して実行します。

最初に vi を起動して、CREATE PACKAGE 文を記述します。

(/workshop/lab2 ディレクトリに pkgtest.sql

があります。お時間のない場合方や

vi の操作に慣

れていない方はこちらのファイルをご使用ください。)

コマンド

cd /workshop/lab2

vi pkgtest.sql

ファイルには以下の内容を記述します。

pkgtest.sql

db2inst1 ユーザーで

ORATEST2 データベースに接続して、以下のコマンドで pkgtest.sql

ファイ

ルに記述された CREATE PACKAGE 文を実行し、パッケージを作成します。

set sqlcompat plsql;

create or replace package pkg1 is

var varchar2(100) := 'default'; procedure print_var;

procedure set_var(ivar varchar2); end;

/

create or replace package body pkg1 is

procedure print_var is begin

dbms_output.put_line(var); end;

procedure set_var(ivar varchar2(100)) is begin var := ivar; end; end; / set sqlcompat db2;

(14)

実行例

_パッケージ作成の確認

以下の

SQL を実行してパッケージが作成されたことを確認します。

コマンド

db2 "select char(modulename,20) modulename,moduletype from

syscat.modules"

db2 "select * from syscat.moduleobjects where

objectmodulename = 'PKG1'"

db2inst1@db2V97onSLES10:~> db2 connect to oratest2 データベース接続情報 データベース・サーバー = DB2/LINUX 9.7.0 SQL 許可 ID = DB2INST1 ローカル・データベース別名 = ORATEST2 db2inst1@db2V97onSLES10:~> db2 -tvf pkgtest.sql set sqlcompat plsql

DB20000I SET SQLCOMPAT コマンドが正常に完了しました。 create or replace package pkg1

is

var varchar2(100) := 'default'; procedure print_var;

procedure set_var(ivar varchar2); end;

DB20000I SQL コマンドが正常に完了しました。 create or replace package body pkg1 is

procedure print_var is begin

dbms_output.put_line(var); end;

procedure set_var(ivar varchar2(100)) is begin var := ivar; end; end; DB20000I SQL コマンドが正常に完了しました。 set sqlcompat db2

(15)

SYSCAT.MODULES カタログビューに PKG1 パッケージがあることが確認できます。

SYSCAT.MODULEOBJECTS カタログビューには、PKG1 パッケージに属しているオブジェクト

が確認できます。

7.2

7.2

7.2

7.2

パッケージの実行

パッケージの実行

パッケージの実行

パッケージの実行

_パッケージの実行

次に PKG1 のプロシージャーを実行します。

以下のコマンドを実行します。

コマンド

db2 set serveroutput on

syscat.modules" MODULENAME MODULETYPE --- --- ・・・省略・・ UTL_MAIL M DBMS_STANDARD M PKG1 P 15 レコードが選択されました。

db2inst1@db2V97onSLES10:~> db2 "select * from syscat.moduleobjects where objectmodulename = 'PKG1'"

OBJECTSCHEMA OBJECTMODULENAME OBJECTNAME OBJECTTYPE PUBLISHED SPECIFICNAME

USERDEFINED --- --- -- --- --- --- --- --- --- --- DB2INST1 PKG1 VAR VARIABLE Y - Y DB2INST1 PKG1 SET_VAR PROCEDURE Y SQL090809134922100 Y DB2INST1 PKG1 PRINT_VAR PROCEDURE Y SQL090809134922000 Y 3 レコードが選択されました。

(16)

実行例

DBMS_OUTPUT.PUT_LINE プロシージャーによるバッファーへの書き出しを

CLP

で受け取るた

めに、set serveroutput on

コマンドを実行します。

PKG1.PRINT_VAR

プロシージャーにより、VAR

変数の内容を表示します。最初の呼び出しでは、

デフォルト値に設定した、’default’が確認できます。

次に、PKG1.SET_VAR

プロシージャーで‘ABC’を VAR 変数にセットします。この後、

PKG1.PRINT_VAR プロシージャーで VAR

変数の内容を出力すると VAR

変数に’ABC’が入っ

ていることがわかります。

最後に、serveroutput

の設定を元に戻すために、set serveroutput off

コマンドを実行します。

db2inst1@db2V97onSLES10:~> db2 set serveroutput on DB20000I SET SERVEROUTPUT コマンドが正常に完了しました。 db2inst1@db2V97onSLES10:~> db2 call pkg1.print_var リターン状況 = 0

default

db2inst1@db2V97onSLES10:~> db2 "call pkg1.set_var('ABC')" リターン状況 = 0

db2inst1@db2V97onSLES10:~> db2 call pkg1.print_var リターン状況 = 0

ABC

db2inst1@db2V97onSLES10:~> db2 set serveroutput off DB20000I SET SERVEROUTPUT コマンドが正常に完了しました。 db2inst1@db2V97onSLES10:~>

(17)

8.

8.

8.

8.

新しいロック方式(

新しいロック方式(

新しいロック方式(

新しいロック方式(Currently Committed

Currently Committed

Currently Committed

Currently Committed)の確認

)の確認

)の確認

)の確認

8.1

8.1

8.1

8.1

パラメーター

パラメーターの無効化

パラメーター

パラメーター

の無効化

の無効化

の無効化

_パラメーターの確認

最初に Currently Committed の機能を有効にするパラメーターがどのような値に設定されてい

るか確認します。

コマンド

db2 get db cfg for oratest1 | grep CUR_COMMIT

db2 get db cfg for oratest2 | grep CUR_COMMIT

実行例

CUR_COMMIT パラメーターは、V9.7 で新規に作成されたデータベースでのデフォルト値は

ON

です。DB2_COMPATIBILITY_VECTOR

の設定値には関連しません。

ここでは

ORATEST1 の

CUR_COMMIT の設定を OFF にして、ORATEST2 を CUR_COMMIT を

ON

のままにしておきます。これらの2つのデータベースに同じ処理を実施し、このパラメーター

の動作の違いを確認します。

_パラメーターの無効化

最初に ORATEST1 の

CUR_COMMIT の設定を

OFF にします。

以下のコマンドを実行じます。

コマンド

db2 update db cfg for oratest1 using cur_commit off

db2 terminate

db2 force applications all

db2 connect to oratest1

db2 get db cfg for oratest1 show detail| grep CUR_COMMIT

db2inst1@db2V97onSLES10:~> db2 get db cfg for oratest1 | grep CUR_COMMIT

CS 分離レベルで現在コミット済みの結果を戻す (CUR_COMMIT) = ON

db2inst1@db2V97onSLES10:~> db2 get db cfg for oratest2 | grep CUR_COMMIT

CS 分離レベルで現在コミット済みの結果を戻す (CUR_COMMIT) = ON

(18)

実行例

設定後、データベースを DEACTIVATE するために、db2 terminate、db2 force applications コマ

ンドを実行します。

また、実際にパラメーターが変更されているか、db2 get db cfg コマンドを

show detail オプショ

ンを付けて実行します。左側に出力される値が現行値です。DISABLED になっていることが確

認できるはずです。

8.2

8.2

8.2

8.2

テスト準備

テスト準備

テスト準備

テスト準備

Currently Committed のハンズオン準備のために、ORATEST1 データベース、ORATEST2

ータベースに同じテーブルを用意します。

_ORATEST1 へのテーブル作成

最初に ORATEST1 データベースに、テーブルを作成します。

次のコマンドを実行します。

コマンド

db2 connect to oratest1

db2 "create table l1(c1 int,c2 int)"

db2inst1@db2V97onSLES10:~> db2 update db cfg for oratest1 using cur_commit off DB20000I UPDATE DATABASE CONFIGURATION

コマンドが正常に完了しました。

db2inst1@db2V97onSLES10:~> db2 terminate DB20000I TERMINATE コマンドが正常に完了しました。

db2inst1@db2V97onSLES10:~> db2 force applications all DB20000I FORCE APPLICATION コマンドが正常に完了しました。 DB21024I このコマンドは非同期であり、即時に有効にならな い場合もあります。

db2inst1@db2V97onSLES10:~> db2 connect to oratest1 データベース接続情報

データベース・サーバー = DB2/LINUX 9.7.0 SQL 許可 ID = DB2INST1 ローカル・データベース別名 = ORATEST1

db2inst1@db2V97onSLES10:~> db2 get db cfg for oratest1 show detail| grep CUR_COMMIT CS 分離レベルで現在コミット済みの結果を戻す (CUR_COMMIT) = DISABLED DISABLED db2inst1@db2V97onSLES10:~>

(19)

_

ORATEST2

へのテーブル作成

同様に、ORATEST2 データベースにもテーブルを作成します。

以下のコマンドを実行します。

コマンド

db2 connect to oratest2

db2 "create table l1(c1 int,c2 int)"

db2 "insert into l1 values (1,1)"

実行例

8.3

8.3

8.3

8.3

Currently Commited

Currently Commited

Currently Commited

Currently Commited

の動作の確認

の動作の確認

の動作の確認

の動作の確認

_

ORATEST1

での

CC

動作確認

ここから Currently Committed の動作の違いを確認します。

データベース接続情報 データベース・サーバー = DB2/LINUX 9.7.0 SQL 許可 ID = DB2INST1 ローカル・データベース別名 = ORATEST1 db2inst1@db2V97onSLES10:~> db2 "create table l1(c1 int,c2 int)" DB20000I SQL コマンドが正常に完了しました。

db2inst1@db2V97onSLES10:~> db2 "insert into l1 values (1,1)" DB20000I SQL コマンドが正常に完了しました。

db2inst1@db2V97onSLES10:~> db2 connect to oratest2 データベース接続情報

データベース・サーバー = DB2/LINUX 9.7.0 SQL 許可 ID = DB2INST1 ローカル・データベース別名 = ORATEST2 db2inst1@db2V97onSLES10:~> db2 "create table l1(c1 int,c2 int)" DB20000I SQL コマンドが正常に完了しました。

db2inst1@db2V97onSLES10:~> db2 "insert into l1 values (1,1)" DB20000I SQL コマンドが正常に完了しました。

(20)

コマンド

db2 connect to oratest1

db2 +c "update l1 set c1 = 100, c2 = 100"

db2 +c "select * from l1"

db2pd -db oratest1 -locks

実行例(

Terminal 1

db2pd –db oratest1 –locks

の結果に

Type

Row

Mode X

の行があることがわかりま

す。これは、前に実行している

Update

文による更新中の行に

X

ロックが取られている

ことを表しています。

次に、2つめの

Terminal

Terminal

2とします)で、このロックがとられた行を参照

してみます。以下のコマンドを実行します。

コマンド

db2 connect to oratest1

db2 “select * from l1”

db2inst1@db2V97onSLES10:~> db2 connect to oratest1 データベース接続情報

データベース・サーバー = DB2/LINUX 9.7.0 SQL 許可 ID = DB2INST1 ローカル・データベース別名 = ORATEST1 db2inst1@db2V97onSLES10:~> db2 +c "update l1 set c1 = 100, c2 = 100" DB20000I SQL コマンドが正常に完了しました。

db2inst1@db2V97onSLES10:~> db2 +c "select * from l1" C1 C2

--- --- 100 100 1 レコードが選択されました。

db2inst1@db2V97onSLES10:~> db2pd -db oratest1 -locks

Database Partition 4294967295 -- Database ORATEST1 -- Active -- Up 0 days 00:01:10 Locks:

Address TranHdl Lockname Type Mode Sts Owner Dur HoldCount Att ・・・ 0x8E60C680 2 02000400040000000000000052 Row ..X G 2 1 0 ・・・・・・・・・・・・ 0x8E60C580 2 53514C43324832307F4760B841 Internal P ..S G 2 1 0 ・・・ 0x8E60C780 2 02000400000000000000000054 Table .IX G 2 1 0 ・・・ db2inst1@db2V97onSLES10:~>

(21)

ここでは、

L1

表のデータが更新中であるため、

SELECT

文(読み取り)がロック待ち

します。

Terminal

1で以下のコマンドを発行してロック待ちの状況を確認します。

確認後、ロールバックしてロックの解除を行います。

コマンド

db2pd -db oratest1 -locks

db2 rollback

実行例(

Terminal

1)

db2pd -db oratest1 –locks の結果に、Type

が Row、Mode が

NS、Sts

W

となっている行が

データベース接続情報

データベース・サーバー = DB2/LINUX 9.7.0 SQL 許可 ID = DB2INST1 ローカル・データベース別名 = ORATEST1 db2inst1@db2V97onSLES10:~> db2 "select * from l1"

・・・ロック待ち・・・

db2inst1@db2V97onSLES10:~> db2pd -db oratest1 -locks

Database Partition 4294967295 -- Database ORATEST1 -- Active -- Up 0 days 00:06:47 Locks:

Address TranHdl Lockname Type Mode Sts Owner Dur HoldCount・・・ 0x8E60C680 2 02000400040000000000000052 Row ..X G 2 1 0 ・・・ 0x8E615B80 8 02000400040000000000000052 Row .NS W 0 1 0 ・・・ ・・・ ・・・ ・・・ 0x8E60C580 2 53514C43324832307F4760B841 Internal P ..S G 2 1 0 ・・・ 0x8E60DB80 8 53514C43324832307F4760B841 Internal P ..S G 8 1 0 ・・・ 0x8E616700 8 01000000010000000100C05E56 Internal V ..S G 8 1 0 ・・・ 0x8E60C780 2 02000400000000000000000054 Table .IX G 2 1 0 ・・・ 0x8E60F800 8 02000400000000000000000054 Table .IS G 8 1 0 ・・・ db2inst1@db2V97onSLES10:~> db2 rollback

DB20000I SQL コマンドが正常に完了しました。

db2inst1@db2V97onSLES10:~> db2pd -db oratest1 -locks

Database Partition 4294967295 -- Database ORATEST1 -- Active -- Up 0 days 00:08:41 Locks:

Address TranHdl Lockname Type Mode Sts Owner Dur HoldCount Att ReleaseFlg rrIID

(22)

_ORATEST2 での動作確認

次に Currently Committed の機能が有効になっている ORATEST2 データベースでの動作の確

認を行います。

Terminal 1で以下のコマンドを実行し、L1 表の行にロックを取った状態にします。

コマンド

db2 connect to oratest2

db2 +c "update l1 set c1 = 100, c2 = 100"

db2 +c "select * from l1"

db2pd -db oratest2 -locks

実行例(

Terminal

1)

ORATEST1

データベースの時と同様に、更新中の行に X ロックが取得されていることがわかり

ます。

db2inst1@db2V97onSLES10:~> db2 connect to oratest2 データベース接続情報

データベース・サーバー = DB2/LINUX 9.7.0 SQL 許可 ID = DB2INST1 ローカル・データベース別名 = ORATEST2 db2inst1@db2V97onSLES10:~> db2 +c "update l1 set c1 = 100, c2 = 100" DB20000I SQL コマンドが正常に完了しました。

db2inst1@db2V97onSLES10:~> db2 +c "select * from l1" C1 C2

--- --- 100 100 1 レコードが選択されました。

db2inst1@db2V97onSLES10:~> db2pd -db oratest2 -locks

Database Partition 4294967295 -- Database ORATEST2 -- Active -- Up 0 days 00:00:37 Locks:

Address TranHdl Lockname Type Mode Sts Owner Dur HoldCount・・ 0x9A6CC580 2 53514C43324832307F4760B841 Internal P ..S G 2 1 0 ・・ 0x9A6CC680 2 02000500040000000000000052 Row ..X G 2 1 0 ・・ 0x9A6CC780 2 02000500000000000000000054 Table .IX G 2 1 0 ・・ db2inst1@db2V97onSLES10:~>

(23)

ORATEST1

の時とは違い、ロック待ちせず、更新前のデータが参照できます。

ORATEST2

では、Currently Committed の機能が有効になっているため、更新中のデータを

ロック待ちせず、更新前データを返すような動作となっています。

Terminal

1で

rollback

を行い、ロックの開放を行います。以下のコマンドを実行します。

コマンド

db2 rollback

実行例(

Terminal

1)

以上です。

データベース接続情報 データベース・サーバー = DB2/LINUX 9.7.0 SQL 許可 ID = DB2INST1 ローカル・データベース別名 = ORATEST2 db2inst1@db2V97onSLES10:~> db2 "select * from l1"

C1 C2 --- --- 1 1 1 レコードが選択されました。 db2inst1@db2V97onSLES10:~> db2inst1@db2V97onSLES10:~> db2 rollback DB20000I SQL コマンドが正常に完了しました。

(24)

© Copyright IBM Corporation 2011 All Rights Reserved.

本書に含 まれている情報は、 正式なIBMのテストを 受けていません。ま た、明記にしろ、暗 黙的にしろ、なんら の保証もな しに配布され るもので す。 この情報 の使用またはこれら の技術の 実施は、いずれ も、使用先の責任に おいて行わ れるべきもの であり 、それら を評価し、実際 に使用 する環境 に統合する使用先の 判断に依 存しています。 それぞれの項目は、 ある特定の 状態において 正確で あること がIBMに よって調べら れていま すが、他のところで 同じまた は同様の結果が 得られる保証はあり ません。こ れらの 技術を 自身の 環境に適 用することを試 みる使 用先は、 自己の責任において 行う必要 があります。

参照

関連したドキュメント

無垢板付き ヘッドレール (標準)までの総奥行  69mm C型リターン(オプション)の  標準長さ  85  総奥行 

地盤の破壊の進行性を無視することによる解析結果の誤差は、すべり面の総回転角度が大きいほ

また、第1号技能実習から第2号技能実習への移行には技能検定基礎級又は技

JMUでブロック(組立品)の運搬を見る JMUで建造中の船はビルのようだ!

と発話行為(バロール)の関係が,社会構造(システム)とその実践(行

この届出者欄には、住所及び氏名を記載の上、押印又は署名のいずれかを選択す

利用者 の旅行 計画では、高齢 ・ 重度化 が進 む 中で、長 距離移動や体調 に考慮した調査を 実施 し20名 の利 用者から日帰

※発電者名義(名義)は現在の発電者 名義と一致しなければ先の画面へ進ま