Oracle Direct Seminar · hw性能で高速化...

60
Oracle Direct Seminar <Insert Picture Here> 1から学ぶ! NET + Oracle Database 11g アプリケ ション開発入門 1から学ぶ!.NET + Oracle Database 11g アプリケション開発入門 日本オラクル株式会社 日本オラクル株式会社

Transcript of Oracle Direct Seminar · hw性能で高速化...

Oracle Direct Seminar

<Insert Picture Here>

1から学ぶ! NET + Oracle Database 11g アプリケ ション開発入門1から学ぶ!.NET + Oracle Database 11g アプリケーション開発入門

日本オラクル株式会社日本オラクル株式会社

以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は マテリアルやコ ド 機能を提供することをコミットメント(確約)するものではないため項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。

Oracleは、米国オラクル・コーポレーション及びその子会社、関連会社の米国及びその他の国における登録商標または商標です。他社名又は製品名は、それぞれ各社の商標である場合があります。

Copyright© 2010, Oracle. All rights reserved. 2

Agenda

「Key Value Store」ってなに?

ク ウドと「 関係性クラウドと「Key Value Store」の関係性

Oracleが提供する「Key Value Store」

Copyright© 2010, Oracle. All rights reserved. 3

「Key-Value Store」ってなに?

プログラミング言語の連想配列やMapと同様に「Key(キー)」と「Value(値)」のペアからなる、ごくシンプルなデータモデルに基づくデータスト(値)」 、

ア。キー データ

0001 JOHN,SMITH,M,32… Berkeley DBデータベースはキー/データペアの集合で構成さ

0002 KEVIN JAMES,F,28…

…… ……

タペアの集合で構成されます。

データのバイト配列

性別

20 bytes

20 bytes

4 bytes

データのバイト配列

ID 4 bytes キーとデータはバイト配列です。

性別

年齢

4 bytes

4 bytes

Copyright© 2010, Oracle. All rights reserved. 4

「Key-Value Store」ってなに?

struct student_data{

データ

char id[4];

キー

char firstName[20];char lastName[20];

int gender;int age;

......};

アプリケーションが利用するバイナリデータや構造体をそのままデータベースに格

納されます。納されます。

B k l DBBerkeley DB

Copyright© 2010, Oracle. All rights reserved. 5

Agenda

「Key Value Store」ってなに?

ク ウドと「 関係性クラウドと「Key Value Store」の関係性

Oracleが提供する「Key Value Store」

Copyright© 2010, Oracle. All rights reserved. 6

クラウドと「Key Value Store」の関係性スケールアップとスケールアウトスケ ルアップとスケ ルアウト

高機能/高価なハードウェアで対応

ハードウェア中心の発想

高機能なソフトウェアと

ソフトウェアを活用するという発想

限界限界

高機能/高価なハ ドウェアで対応→「HW能力の限界 = 処理能力の限界」

高機能なソフトウェアと安価なハードウェアで対応

低コスト高可用性高スケーラ高スケーラ

ビリティビリティ

限界限界

最良のコストパフォーマンスの追究最良のコストパフォーマンスの追究

ビリティビリティ

More CPUsMore CPUsFaster CPUsFaster CPUs

スケールアップ

More MemoryMore Memory

スケールアウトスケールアウト

More NodesMore Nodes

Copyright© 2010, Oracle. All rights reserved. 7

メインフレームレベルに性能向上したコモディティ・サーバー(x86)

メインフレームIBM 2094 z9 EC s08

コモディティサーバー(x86)HP ProLiant DL580 G5

性能 CPU 3168MPS 4800MPS性能 CPU 3168MPS 4800MPS※X7350(2.93GHz)×4

メモリ 128GB(最大) 256GB(最大)

I/O 4Gb/s(FICON) 8Gb/s(FC)可用性 部品レベルから冗長化等

高信頼性を実現信頼性は低い

優れたソフトウェアで優れたソフトウェアで高信頼性を実現

運用管理性 一元管理を実現 構成コンポーネント別の管理

優れたソフトウェアで優れたソフトウェアで

メインフレーム並みにメインフレーム並みに

価格 高価格 低価格

Copyright© 2010, Oracle. All rights reserved. 8

実際のお客様のケースデ グ基盤構築 例

• 得たメリット: 低コスト + 将来の拡張可能性 + 可用性

トレーディング基盤構築の例

性能要件 ピーク時4,000 オーダー/秒

構成例グリ ド構成

V.S.メモリ領域の共有

SMPサーバー16Core SMPサーバー x 2

グリッド構成

2クアッドコア・ワークステーション x 6HW性能で高速化 データグリッドによってメモリを共有し

処理を分散する と 高速化処理を分散することで高速化

コスト 50万ドル+ 5万ドル以下

可用性HW故障率を0.1%だとすると、 HW故障率が10%としても、すべて

可用性すべてダウンする確率は0.0001% ダウンするのは0.000001%

拡張性 HW追加コストは膨大 HW追加でリニアにスケール

Copyright© 2010, Oracle. All rights reserved. 9

課題

次世代集約型構想 – Application Grid

Ja a EE/ISV Ja a EE/ISV Ja a EE/ISV Ja a EE/ISV Ja a EE/ISV

課題

1.アクセスするユーザが増加した場合

処理に必要なデータ量の増加

→サイトパフォーマンスの低下

TO-BE

Java EE/ISVアプリ

Java EE/ISVアプリ

Java EE/ISVアプリ

Java EE/ISVアプリ

Java EE/ISVアプリ 2.24H365D運用が必須のECサイトでの

DB計画停止

→販売機会の損失

対応方法Application

Server

JVM

Application Server

JVM

Application Server

JVM

Application ServerJVM

対応方法

1.インメモリデータ層を構成

→ハイパフォーマンスアクセスを実現

→ApplicationはMemory cacheにアクセス

Tuxedo

→ApplicationはMemory cacheにアクセス、

永続性のあるデータベースへは非同期

DB側は復旧後、同期

→さらなるデータ量増加時、パフォーマンス懸念点の払拭

Memory

cache

Memory

cache

Memory

cache例:各2G×4

Memory

cache

Real Application ClustersStandAlone

は維持、データ層をスケールアウト懸念点の払拭

1.ハイレベルなチューニングは不要

安価なMemory cacheを追加するのみ

可用性レベルの向上

DatabaseDatabase DatabaseDatabase DatabaseDatabase DatabaseDatabase

可用性レベルの向上

パフォーマンスの向上

更なるデータ量増加時にも

容易に対応計画停止

Flat FileFlat File

Copyright© 2010, Oracle. All rights reserved.

容易に対応計画停止

10

次世代集約型構想 – データセンター・グリッドより広い範囲でリソースを最適化し、コスト削減

複数のグリッドを束ねた共用インフラストラクチャ

複数サービス基盤共用データベース

単 ビ 基盤

共用インフラストラクチャ

データセンター・グリッドデータセンター・グリッド

単一サービス基盤

可用性と拡張性可用性と拡張性

データベース・グリッドデータベース・グリッド

RACRAC RACClusterware

RACClusterware

ASMOracle Grid

Infrastructure

RACClusterware

Clusterware

ASM

Oracle9i ~

Oracle 10g ~Oracle Database 11g R2

Copyright© 2010, Oracle. All rights reserved.

Oracle9i ~

11

クラウド時代のシステム構成

マルチサ ビス

マルチテナント

CustomFinancialSalesData SCM

セキ リティ

マルチサービス Custom

Application

FinancialApplication

Sales

Application

Data

Warehouse

SCMApplication

セキュリティ

一括運用管理

Application Server Grid

Database Grid

論理層仮想化

EnterpriseManager

Storage Grid

Database Grid

サーバー仮想化

ストレージ仮想化物理層仮想化

他社製監視

ツール

Copyright© 2010, Oracle. All rights reserved.

ネットワーク仮想化

12

Agenda

「Key Value Store」ってなに?

ク ウドと「 関係性クラウドと「Key Value Store」の関係性

Oracleが提供する「Key Value Store」

Copyright© 2010, Oracle. All rights reserved. 13

Oracleが提供する「Key Value Store」

Berkeley DB Coherence分散処理 不可 可能

用途 .NET,C++, Java, Perl, Python, PHP, Tcl, Ruby等

Java, .NET, C++

データ格納方式 DB(ファイル) インメモリ

用途 組み込みデータベース アプリケーションの性能とスケーラビリティ向上(DBサーバの負荷軽減にもつながる)

Copyright© 2010, Oracle. All rights reserved. 14

Berkeley DB 使ってみよう!!

データベースアクセスドDBハンドル

データ挿入

データ検索デ タ検索

データ削除

カーソルカ ソル

インデックス

トランザクシ ントランザクション

OTN-Jから試用版をダウンロード

http://www.oracle.com/technology/global/jp/software/products/berkeley-db/index.html

Copyright© 2010, Oracle. All rights reserved. 15

データベースアクセス - DBハンドル

アプリケーションではDBハンドルを使って データベースにアクセスします。

#define CHECK_ERR (ret) if(ret) {…エラー処理 …}DB *pDb = NULL;/* DBハンドルを作成します */

コード例 (データベースアクセス処理フロー)

/* DBハンドルを作成します */CHECK_ERR(db_create(&pDb, NULL, 0));/* ファイル名を指定してデータベースをオープンします ファイルがない場合 新規作成します */CHECK_ERR(pDb->open(pDb, NULL, “student.db”, DB_CREATE | DB_BTREE));/* ここからDBハンドルを使 て デ タベ スをアクセスします *//* ここからDBハンドルを使って データベースをアクセスします */……/* 使用後DBハンドルをクローズします */pDb->close(pDb, 0);

ヒント

Environment機能を利用する場合 db_createメソッドのdbenvパラメータにDB_ENVハンドルを設定します。

トランザクション機能を利用する場合 openメソッドのflagsパラメータにDB_AUTO_COMMITを設定します。

マルチスレッドでご利用になる場合 openメソッドでのflagsパラメータDB_THREADを設定します。

HASHアクセスメソッドを利用する場合 openメソッドのflagsパラメータでDB_BTREEの代わりにDB_HASHを設定します。

Copyright© 2010, Oracle. All rights reserved. 16

データベースアクセス - データ挿入

DBハンドルのputメソッドを使って キー/データペアを挿入します。

キーとデータはDBT構造体を使ってputメソッドに渡します。

DBT dbtk, dbtd;/* 保存するキ /デ タペア */

コード例 (データ挿入)

/* 保存するキー/データペア */char *key = “0001”;struct student_data data = {“JOHN”, “SMITH”, ‘M’, 32};/* DBT構造体をクリア */

t(&dbtk 0 i f(DBT))memset(&dbtk, 0, sizeof(DBT));memset(& dbtd, 0, sizeof(DBT));/* キーとデータを格納するDBT構造体を設定します。dataメンバーはポインタ、sizeメンバーはバイト数を設定します。 */dbtk.data = key, dbtk.size = strlen(key);db d d t d db d i f(d )dbtd.data = &data, dbtd.size = sizeof(data);/* キー/データペアを保存します*/CHECK_ERR(pDb->put(pDb, NULL, &dbtk, &dbtd, 0));

トランザクション機能を利用する場合 putメソッドのtxnidパラメータを設定します。

データを新規追加する場合 putメソッドのflagsパラメータにDB NOOVERWRITEを設定します

ヒント

Copyright© 2010, Oracle. All rights reserved.

デ タを新規追加する場合 putメソッドのflagsパラメ タにDB_NOOVERWRITEを設定します。

17

データベースアクセス - データ検索

DBハンドルのgetメソッドを使って 指定されたキーのデータを検索します。

キーとデータはDBT構造体を使ってgetメソッドに渡します。

DBT dbtk, dbtd;

コード例 (データ検索)

, ;/* 検索するキー */char *key = “0001”;memset(&dbtk, 0, sizeof(DBT));/* キーを格納するDBT構造体を設定します */dbtk.data = key, dbtk.size = strlen(key);/* 指定されたキーのデータを検索します*/CHECK_ERR(pDb->get(pDb, NULL, &dbtk, &dbtd, 0));/* ここからデータを処理します。*// //* データはdbtdに保存されます。 dataメンバーはポインタ、sizeメンバーはバイト数になります。 */……

トランザクション機能を利用する場合 getメソッドのtxnidパラメータを設定します。

ヒント

Copyright© 2010, Oracle. All rights reserved. 18

データベースアクセス - データ削除

DBハンドルのdelメソッドで指定されたキーのデータを削除します。

キーはDBT構造体を使ってdelメソッドに渡します。

DBT dbtk;

コード例 (データ削除)

DBT dbtk;/* 削除するキー */char *key = “0001”;memset(&dbtk, 0, sizeof(DBT));/* キーを格納するDBT構造体を設定します *// /dbtk.data = key, dbtk.size = strlen(key);/* 指定されたキーのデータを削除します*/CHECK_ERR(pDb->del(pDb, NULL, &dbtk, 0));

トランザクション機能を利用する場合 delメソッドのtxnidパラメータを設定します。

ヒント

Copyright© 2010, Oracle. All rights reserved. 19

アジェンダ

データベースアクセス

カカーソル概要

DBCハンドルDBCハンドル

データ検索

データ更新

データ削除

インデックス

トランザクション

Copyright© 2010, Oracle. All rights reserved. 20

カーソル - 概要

シーケンシャルデータを高速アクセスできます。

範囲検索できます

シーケンシャルデータ 範囲検索

カーソルを使用しない場合 毎回データベースの走査が必要になります。

カーソルを使用する場合 毎回データベース走査がないため 高速アクセスできます。 キー データ

0001 JOHN,SMITH,M,32…

0002 KEVIN JAMES,F,28…

…… ……

0102 REX MICHAEL M 36キーが100番 0102 REX,MICHAEL,M,36…

0104 HENRY,BURD,F,23…

…… ……

1800 SUSAN,REX,F,23…

キ が100番台のデータを検索できます

, , ,

Copyright© 2010, Oracle. All rights reserved. 21

カーソル ー DBCハンドル

アプリケーションではDBCハンドルを使って カーソルを制御します。

DBC *pDbc = NULL;

コード例( DBCハンドル作成)

DBC pDbc NULL;/* DBCハンドルを作成します*/CHECK_ERR(pDb->cursor(pDb, NULL, &pDbc, 0));/* ここからDBCハンドルを使って データベースをアクセスします */……/* 使用後DBCハンドルをクローズします */pDbc->c_close(pDbc);

トランザクション機能を利用する場合 cursorメソッドのtxnidパラメータを設定します。

ヒント

Copyright© 2010, Oracle. All rights reserved. 22

カーソル ー データ検索

DBCハンドルのc_getメソッドを使って データを検索できます。

DBT dbtk, dbtd;/* 取得するキー */

コード例(データ検索)

char *key = “0001”;memset(&dbtk, 0, sizeof(DBT));/* キーを格納するDBT構造体を設定します */dbtk.data = key, dbtk.size = strlen(key);/* 指定されたキーのデータを検索します*/CHECK_ERR(pDbc->c_get(pDbc, &dbtk, &dbtd, DB_SET));/* ここからデータを処理します。データはdbtdに保存されます。 */……

c getメソッドのflagsパラメータで検索方法を指定できます。

ヒント

c_getメソッドのflagsパラメ タで検索方法を指定できます。

DB_SET:指定されたキーを検索します。

DB_SET_RANGE:指定されたキー或いは該当キーより大きいデータを検索します。

DB_PREV/NEXT:、現在位置より前または次のデータへ移動します。

DB_FIRST/DB_LAST:データベースの先頭または末尾のデータへ移動します。

Copyright© 2010, Oracle. All rights reserved. 23

カーソル ー データ更新

c_getメソッドでデータを検索した後で c_putメソッドを使って 該当データを更新できます。

DBT dbtk dbtd;

コード例(データ更新)

DBT dbtk, dbtd;/* c_getメソッドで データを検索します*/……memset(&dbtd, 0, sizeof(DBT));/* データを格納するDBT構造体を設定します。dataメンバーはポインタ、sizeメンバーはバイト数を設定します。 *// デ タを格納するDBT構造体を設定します。dataメンバ はポインタ、sizeメンバ はバイト数を設定します。 /dbtd.data = &data, dbtd.size = sizeof(data);/* データを更新します*/CHECK_ERR(pDbc->c_put(pDbc, &dbtk, &dbtd, DB_CURRENT));……

ヒント

データを新規挿入する場合 キーを格納するDBT構造体を設定して c_getメソッドのflagsパラメータにDB_CURRENTの代わりにDB_KEYFIRSTを設定します。

Copyright© 2010, Oracle. All rights reserved. 24

カーソル ー データ削除

c_getメソッドでデータを検索した後で c_delメソッドを使って 該当データを削除できます。

DBT dbtk dbtd;

コード例(データ削除)

DBT dbtk, dbtd;/* c_getメソッドで更新したいキーへ移動します*/……/* データを削除します*/CHECK ERR(pDbc->c del(pDbc 0));CHECK_ERR(pDbc->c_del(pDbc, 0));……

Copyright© 2010, Oracle. All rights reserved. 25

アジェンダ

データベースアクセス

カーソル

インデックス概要

コールバック関数

作成

データ検索

トランザクシ ントランザクション

Copyright© 2010, Oracle. All rights reserved. 26

インデックス - 概要

キー以外の値を基にデータベースを検索する際 インデックスを利用します。

KEY

プライマリ データベース: students.db DATADATA

Last ID インデックス : lastName db

ID First name Last name Phone number City State Zip++

nameLast

nameID インデックス : lastName.db

Last nameが、インデックスのキーとなる

プ デ 連

プライマリ

デ タベ ス

インデックスの内容は、自動的に維持管理されます

プライマリデータを削除するとセカンダリも削除されます

プライマリへの挿入はインデックスへの追加になります

プライマリーとインデックスの関連制御 データベース自動連携自動連携

プライマリへの挿入はインデックスへの追加になります

インデックスへ直接更新したり挿入したりはしませんインデックス

Copyright© 2010, Oracle. All rights reserved. 27

インデックス - コールバック関数

インデックスを作成するために コールバック関数を定義します。

コールバック関数はインデックスのキーを指定します。

/* コールバック関数を定義します */

コード例(コールバック関数)

/ コ ルバック関数を定義します /int callback_index(DB *db, const DBT *pkey, const DBT *data, DBT *skey){

/* キーとデータはコールバック関数のパラメータとして渡されます */struct student_data *sData = (struct student_data *)data->data;/* skeyにインデックスのキーを指定します ここではlastNameをキーとして指定します*// y /skey->data = sData->lastName;skey->size = (u_int32_t)strlen(skey->data);return (0);

}}……

Copyright© 2010, Oracle. All rights reserved. 28

インデックス - 作成

インデックスを作成する時はDBハンドルを利用します。

DB *pDb = NULL;DB *pSDb NULL;

コード例(インデックス作成)

DB *pSDb = NULL;/* プライマリデータベースをオープンします */……/* インデックスDBハンドルを作成します */CHECK ERR(db create(&pSDb pEnv 0));CHECK_ERR(db_create(&pSDb, pEnv, 0));/* 重複フラグを設定します */CHECK_ERR(pSDb->set_flags(pSDb, DB_DUPSORT));/* ファイル名を指定して インデックスをオープンします*/CHECK ERR(pSDb >open(pSDb NULL “test db” DB CREATE | DB BTREE));CHECK_ERR(pSDb->open(pSDb, NULL, test.db , DB_CREATE | DB_BTREE));/* コールバック関数を指定して プライマリデータベースとインデックスを関連付けます */CHECK_ERR(pDb->associate(pDb, NULL, pSDb, callback_index, DB_CREATE));

Copyright© 2010, Oracle. All rights reserved. 29

インデックス - データ検索(1)インデックスでデータを検索する時はDBCハンドルを利用します。

コード例(データ検索)

DBT dbtpk, dbtk, dbtd;DBC *pSDbc = NULL;int flag;/* インデックスのDBCハンドルを作成します*/CHECK_ERR(pSDb->cursor(pSDb, NULL, &pSDbc, 0));memset(&dbtk, 0, sizeof(DBT)), memset(&dbtpk, 0, sizeof(DBT)),memset(&dbtd, 0, sizeof(DBT));/* 検索値するインデックス値を設定します ここではlastNameがJAMESの人を検索します*//* 検索値するインデックス値を設定します ここではlastNameがJAMESの人を検索します*/dbtk.data = “JAMES”, dbtk.size = strlen(dbtk.data);

Copyright© 2010, Oracle. All rights reserved. 30

インデックス - データ検索(2)DBCハンドルのc_pgetメソッドを使って データを検索できます。

/* 1回目はフラグをDB SETに設定して 該当インデ クス値を持つ1番目のデ タをを検索します */

コード例(データ検索)

/* 1回目はフラグをDB_SETに設定して 該当インデックス値を持つ1番目のデータをを検索します */flag = DB_SET;while(1){/* c_pgetメソッドでデータを検索します */

t SDb c pget( SDb NULL &dbtk &dbt k &dbtd fl )ret = pSDbc ->c_pget(pSDbc, NULL, &dbtk, &dbtpk, &dbtd, flag);if(ret == DB_NOTFOUND) break; /* 検索終了 */if(ret != 0) {…} /* エラー処理 *//* ここからデータを処理します。キーはdbtpk、データはdbtdに保存されます。 */……/* 2回目以降はフラグをDB_NEXT_DUPに設定し 該当インデックス値を持つ他のデータを検索します */flag = DB_NEXT_DUP;

}/* 検索終了後はDBCハンドルをクローズします *// 検索終了後はDBCハンドルをクロ ズします /pSDbc->c_close(pSDbc);

Copyright© 2010, Oracle. All rights reserved. 31

アジェンダ

データベースアクセス

カーソル

インデックス

トランザクション概要概要

Environmentのセットアップ

DB_TXNハンドル

データベースアクセス

Copyright© 2010, Oracle. All rights reserved. 32

トランザクション - 概要

トランザクションはACID特性、障害回復性提供します

トランザクションにより保護されるものデータベースのデータへの操作

ファイルシステムの操作(データベースファイルの作成や削除など)

ACID特性とは

ファイルシステムの操作(デ タベ スファイルの作成や削除など)ロールバックが可能です (なにか異常が発生したらトランザクションを破棄可能)

ACID特性とは

A (atomicity:原子性) 複数の更新作業を一回の操作にまとめることが出来ます。すべてが完全に実行されるか、処理が完結しない場合には元の

状態に戻ります。状態に戻ります。

C (consistency:一貫性) 更新が完了するまでそれを他から隠すことができます。処理の順番に関わらず結果が同じになります。

I (isolation:独立性) 他のトランザクションの影響を受けません 。

D (durability:耐久性) システムやアプリケーションに問題が発生してもデータが保護されます。

Copyright© 2010, Oracle. All rights reserved. 33

トランザクション - Environmentのセットアップ

トランザクションを利用する前に DB_ENVハンドルを使って Environmentをセットアップする必要があります。

DB_ENV *pEnv = NULL;を作成 ます

コード例(Environmentセットアップ)

/* DB_ENVハンドルを作成します*/CHECK_ERR(db_env_create(&pEnv, 0));/* Environmentのキャッシュサイズ、エラー出力先を設定します */CHECK_ERR(pEnv ->set_errfile(pEnv, stderr));CHECK_ERR(pEnv ->set_cachesize(pEnv, 0, 1048576, 1));/* ディレクトリを指定して Environmentをオープンします。*/CHECK_ERR(pEnv->open(pEnv, “db”, DB_CREATE | DB_INIT_MPOOL | DB_INIT_TXN | DB_INIT_LOG, 0));/* ここからEnvironmentを使って データベースをアクセスします */……/* 使用後DB_ENVハンドルをクローズします */pEnv->close(pEnv, 0);

マルチプロセス、マルチスレッドを利用する場合 openメソッドのflagsパラメータにDB_INIT_LOCKフラグを設定します。

マルチスレッドを利用する場合 openメソッドのflagsパラメータにDB THREADフラグを設定します

ヒント

Copyright© 2010, Oracle. All rights reserved.

マルチスレッドを利用する場合 openメソッドのflagsパラメータにDB_THREADフラグを設定します。

34

トランザクション - DB_TXNハンドル

アプリケーションではDB_TXNハンドルを使って トランザクションを制御します。

DB_TXN *pTxn = NULL;/* トランザクションを開始して DB_TXNハンドルを取得します*/CHECK ERR( E t b i ( E NULL & T 0))

コード例(トランザクション処理フロー)

CHECK_ERR(pEnv->txn_begin(pEnv, NULL, &pTxn, 0));/* ここからDB_TXNハンドルを使って データベースをアクセスします */……if(ret == 0){/* 処理成功の場合 コミットします *//* 処理成功の場合 コミットします */pTxn->commit(pTxn, 0);

}else{/* 処理失敗の場合 キャンセルします */pTxn >abort(pTxn);pTxn->abort(pTxn);

}

txn_beginメソッドのflagsパラメータでトランザクションの分離レベルを設定できます。

ヒント

Copyright© 2010, Oracle. All rights reserved. 35

トランザクション - データベースアクセス

トランザクションの中で DB、DBCハンドルを使ってデータベースをアクセスできます。

非トランザクションの場合と下記の違いがあります。

ド を作成時 ド パ タ ド を設定 ま

DBハンドルでデータベースアクセス

DBハンドルを作成時 db_createメソッドのdbenvパラメータにDB_ENVハンドルを設定します。

db_create(&pDb, pEnv, 0);

DBハンドルオープン時 openメソッドのflagsパラメータにDB AUTO COMMITを設定しますDBハンドルオ プン時 openメソッドのflagsパラメ タにDB_AUTO_COMMITを設定します。pDb->open(pDb,NULL, “student.db”, DB_CREATE | DB_BTREE | DB_AUTO_COMMIT);

get, put, delメソッドを使用する際 txnidパラメータにDB_TXNハンドルを設定します。pDb->put(pDb, pTxn, &dbtk, &dbtd, 0);pDb->get(pDb, pTxn, &dbtk, &dbtd, 0);pDb->del(pDb, pTxn, &dbtk, 0);

DBCハンドルでデータベースアクセス

DBCハンドルをオープン時 cursorメソッドのtxnidパラメータにDB_TXNハンドルを設定します。pDb->cursor(pDb, pTxn, &pDbc, 0));

DBCハンドルでデ タベ スアクセス

Copyright© 2010, Oracle. All rights reserved. 36

Coherence を使ってみよう!

Coherence for .NETJ2EE Javaアプリ .NET/C++

– Coherenceクラスタ外部から.NETアプリケーションを使用してアクセス

デ ク プ プ ケ シ や デ タアクセスAPI– デスクトップ・アプリケーションやWebアプリケーションで使用可能

データアクセスAPI

データソース連携API

Coherence クラスタ

デ タソ ス連携API

DB外部システム

メッセージングシステムWebサービス

Copyright© 2010, Oracle. All rights reserved. 37

Coherence for .NET / 準備

Coherence for Java – Coherence クラスタ本体

C h f th NET F kCoherence for the .NET Framework– Coherence クラスタへアクセスするためのライブラリ

OTN-Jから試用版をダウンロード

http://www.oracle.com/technology/global/jp/products/coherence/indexhtml

Copyright© 2010, Oracle. All rights reserved.

.html

38

Coherence for .NET / 準備

Coherence for Java – 展開した「coherence」フォルダを任意の場所にコピー

C h f th NET F kCoherence for the .NET Framework– MSIパッケージからインストール

Copyright© 2010, Oracle. All rights reserved. 39

Coherence for .NET / 準備

Coherence for Java – JDK¥bin(java.exe)へのPATH環境変数設定

JAVA HOME 環境変数設定– JAVA_HOME 環境変数設定

– coherence_home 環境変数設定

Copyright© 2010, Oracle. All rights reserved. 40

Coherence for .NET / .NET APからアクセス

•Coherence クラスタ本体の起動Coherence クラスタ本体の起動– Coherence for .NET Home¥examples¥ContactCache.Java¥start-cache-server.cmd

•Coherence for .NETの利用– Coherence for .NET

Home¥examples¥ContactCache.Windows¥ContactCache.Windows.slnp

Coherence for the .NET Frameworkをインストールした際の、

サンプルアプリケーション(CacheContact)を利用(Coherence for .NET Home¥examples)

Copyright© 2010, Oracle. All rights reserved. 41

Coherence for .NET / .NET APからアクセス

Visual StudioからCoherence for .NETを利用するための準備

参照の追加 → Coherence for .NET Home¥bin¥net¥x.x¥Coherence.dllを選択

Copyright© 2010, Oracle. All rights reserved. 42

Coherence for .NET / .NET APからアクセス

Visual StudioからCoherence for .NETを利用

Copyright© 2010, Oracle. All rights reserved. 43

Coherence for .NET / ポイント解説

Coherence クラスタでのCoherence*Extendの構成

ク タ サ ビ を実行•TCP/IP Coherence*Extendクラスタ・サービスを実行

•tcp-acceptor要素を持つproxy-scheme要素を追加

Coherence*Extendに対応したデフォルト・キャッシュ・サーバーの構成

~途中省略~

<proxy-scheme>

<service-name>ExtendTcpProxyService</service-name>

<thread-count>5</thread-count>

<acceptor-config>

<tcp-acceptor>

<local-address>

<address>localhost</address>

<port>9099</port>

</local-address>

</tcp-acceptor>

</acceptor-config>

<autostart>true</autostart>

</proxy-scheme>

~途中省略~

Copyright© 2010, Oracle. All rights reserved. 44

Coherence for .NET / ポイント解説

.NETアプリからアクセスするためのクラスを定義

Copyright© 2010, Oracle. All rights reserved. 45

Coherence for .NET / ポイント解説

定義したクラスは、BindingSourceを経由してアクセスすることが可能

Copyright© 2010, Oracle. All rights reserved. 46

Coherence for .NET / ポイント解説Coherence for .NETで提供されているAPIを利用してアクセス

Copyright© 2010, Oracle. All rights reserved. 47

まとめ

「クラウドならOracle!」 RDBMSだけじゃないOracle!

柔軟なリソース活用

Grid Infrastructure

可用性と拡張性の確保

クラウド時代に様々な選択肢を提供するOracle

Copyright© 2010, Oracle. All rights reserved. 48

3月に3つダイセミを受講してプレゼントを当てよう

3月開催のダイセミのうち3つ以上受講頂いた皆様の中から素敵なプレゼントが当たるキャンペーンを実施します!

必要情報を明記のうえ、下記宛てにメールでご応募ください。セミナお申し込み時にご登録されている貴社住所宛てに発送させていただきます。当選者の発表は発送をもってかえさせて

頂きます

応募方法応募方法 [email protected]頂きます。

タイトル:「春だ!リピータープレゼント応募」必要情報:1、ご登録のお名前 2、ご登録の貴社名、部署名

3、受講された3月のダイセミタイトル3つ以上ダイセ に対するご意見 ご検討中 案件情報など4、ダイセミに対するご意見、ご検討中の案件情報など

※ご登録情報が正しくない場合はご応募が無効となりますのでご注意ください。当キャンペーン実施内容は予告なく変更になる可能性があります。

Copyright© 2010, Oracle. All rights reserved.

当キャンペ ン実施内容は予告なく変更になる可能性があります。

49

OTNOTN×ダイセミ×ダイセミ でスキルアップでスキルアップ!!!!・技術的な内容について疑問点を解消したい!

・一般的なその解決方法などを知りたい!・セミナ資料など技術コンテンツがほしい!

Oracle Technology Network(OTN)を御活用下さい。

ナ資料な 技術 テ

http://otn.oracle.co.jp/forum/index.jspa?categoryID=2

技術的な疑問点は、OTN掲示版の「データベース一般」へ

※OTN掲示版は、基本的にOracleユーザー有志からの回答となるため100%回答があるとは限りません。ただ、過去の履歴を見ると、質問の大多数に関してなんらかの回答が書き込まれております。

過去のセミナ資料、動画コンテンツはOTNの「OTNセミナ オンデマンド ンテンツ

http://www.oracle.com/technology/global/jp/ondemand/otn-seminar/index.html

「OTNセミナー オンデマンド コンテンツ」へ

※ダイセミ事務局にダイセミ資料を請求頂いても、お受けできない可能性がございますので予めご了承ください。ダイセミ資料はOTN ンテンツ オン デマンドか セミナ実施時間内にダウンロ ド頂くようお願い致します

Copyright© 2010, Oracle. All rights reserved. 50

ダイセミ資料はOTNコンテンツ オン デマンドか、セミナ実施時間内にダウンロード頂くようお願い致します。

OTNOTNセミナーセミナー オンデマンドオンデマンド コンテンツコンテンツ期間限定にて ダイセミの人気セミナ を動画配信中!!期間限定にて、ダイセミの人気セミナーを動画配信中!!

ダイセミのライブ感はそのままに、お好きな時間で受講頂けます。

※掲載のコンテンツ内容は予告なく変更になる可能性があります。期間限定での配信コンテンツも含まれております お早めにダウンロード頂くことをお勧めいたします

OTN オンデマンド

Copyright© 2010, Oracle. All rights reserved. 51

期間限定での配信コンテンツも含まれております。お早めにダウンロード頂くことをお勧めいたします。

オラクルオラクル クルクルキャンペーンクルクルキャンペーン

Oracle Databaseのイ 価格を大幅 抑え

あのOracle Database Enterprise Editionが超おトク!!

ライセンス価格を大幅に抑えて

ご導入いただけます

多くのお客様でサーバー使用期間とされる

5年間にライセンス期間を限定5年間にライセンス期間を限定

• 期間途中で永久ライセンスへ差額移行

• 5年後に新規ライセンスを購入し継続利用

• 5年後に新システムへデータを移行

Enterprise Editionはここが違う!!• 圧倒的なパフォーマンス!

• データベース管理がカンタン!• データベースを止めなくていい!

• もちろん障害対策も万全!

詳しくはコチラ詳しくはコチラ

http://www.oracle.co.jp/campaign/kurukuru/index.htmlお問い合わせフォーム

http://www.oracle.co.jp/inq_pl/INQUIRY/quest?rid=28

Copyright© 2010, Oracle. All rights reserved. 52

あなたにいちばん近いオラクル

Oracle DirectOracle Directまずはお問合せくださいまずはお問合せください

Oracle Direct 検索

まずはお問合せくださいまずはお問合せください

検索

システムの検討・構築から運用まで、ITプロジェクト全般の相談窓口としてご支援いたします。

システム構成やライセンス/購入方法などお気軽にお問い合わせ下さい

Web問い合わせフォーム フリーダイヤルシステム構成やライセンス/購入方法などお気軽にお問い合わせ下さい。

http://www.oracle.co.jp/inq_pl/INQUIRY/quest?rid=28専用お問い合わせフォームにてご相談内容を承ります。

※フォームの入力には、Oracle Direct Seminar申込時と同じグインが必要となります

0120-155-096※月曜~金曜 9:00~12:00、13:00~18:00

ログインが必要となります。※こちらから詳細確認のお電話を差し上げる場合がありますので、ご登録さ

れている連絡先が最新のものになっているか、ご確認下さい。

※月曜 金曜 9:00 12:00、13:00 18:00

(祝日および年末年始除く)

Copyright© 2010, Oracle. All rights reserved. 53

SQL Serverからの移行相談サービス

URL : http://www oracle com/lang/jp/direct/service/s2o html

ヒアリング項目• 現在ご利用中のSQL Serverのバージョンとエディション

• 移行を検討されているOracle Databaseのバージョンとエディション

① ②

URL : http://www.oracle.com/lang/jp/direct/service/s2o.html

• 移行を検討されているOracle Databaseのバージョンとエディション

• 既存/新規: O/S• 既存データベースのデータベースファイルの合計サイズ[およそ1GBの単位]• 移行の動機(ハードウェア・リプレース、パフォーマンス改善、コスト削減等)

• 移行の懸念点(アプリケーションの互換性、パフォーマンス劣化等)移行の懸念点(アプリケ ションの互換性、 フォ マンス劣化等)

• 移行予定(希望)時期

③ ④④

①移行対象システム内容及び現状の課題についてヒアリング

②最適な移行方法についてのガイドラインを提示

③スムーズに移行できない部分について、詳細な移行方法をガイド

④Oracle Databaseに移行後の運用管理/構成についてのご提案

Copyright© 2010, Oracle. All rights reserved. 54

ITプロジェクト全般に渡る無償支援サービスOracle Direct Conciergeサービスメニュー

業務改善計画の作成支援• 業務診断サービス• BIアセスメントサービス

g

経営企画

BIアセスメントサ ビス

システム運用状況の診断•パフォーマンス・クリニック・サービス•システム・セキュリティ診断サービス•データ管理最適化サービス

運用 IT 企画システム企画の作成支援•業務診断サービス•BIアセスメントサービス

デ タ管理最適化サ ビス

構築 設計

RFP/提案書の作成支援BI セ メ トサ ビ

システム構築時の道案内•Access / SQL Serverからの移行•MySQL / PostgreSQLからの移行•Oracle Database バージョンアップ支援 •BIアセスメントサービス

•メインフレーム資産活用相談サービス•仮想化アセスメントサービス•Oracle Database 構成相談サービス•Oracle Database 高可用性クリニック

•Oracle Database バ ジョンアップ支援•Oracle Developer Webアップグレード•システム連携アセスメントサービス

http://www oracle com/lang/jp/direct/services html

Copyright© 2010, Oracle. All rights reserved.

Oracle Database 高可用性クリニックhttp://www.oracle.com/lang/jp/direct/services.html

55

• Oracle on Windows• Oracle on Windows• 参考資料、コラム(オラクル都市伝説)、イベント・セミナー情報 etc

• http://www oracle co jp/campaign/mb tech/http://www.oracle.co.jp/campaign/mb_tech/

• Windows Server System Center / OTN Japan• http://www oracle com/technology/global/jp/tech/windows/• http://www.oracle.com/technology/global/jp/tech/windows/

• .NET + Oracle DatabaseNET D l C t / OTN J• .NET Developer Center / OTN Japanhttp://www.oracle.com/technology/global/jp/tech/dotnet/

• 意外と簡単!? .NETでOracle / OTN Japanphttp://www.oracle.com/technology/global/jp/columns/easy/dotnet/

Copyright© 2010, Oracle. All rights reserved. 56

• オラクル都市伝説 / Oracle on Windows• http://www.oracle.co.jp/campaign/mb_tech/column/

• シーズン2 連載中!

其の一:地獄からの生還 本当にあった怖い話

其の二:喪われた時間を取り戻せ! ある男の過ち

其の三 ベテランエンジニアの魂がデ タベ スに宿る其の三:ベテランエンジニアの魂がデータベースに宿る

其の四:本当にオラクルデータベースを選択すると「ソースコードがスリム」になるのか?を徹底検証

其の五:悪魔が背後でせせら笑う!トラブルからあなたの生活を守れ!

Copyright© 2010, Oracle. All rights reserved. 57

オラ98(キュッパ)オラ98 で検索

Copyright© 2010, Oracle. All rights reserved. 58

あなたにいちばん近いオラクル

Oracle DirectOracle Directまずはお問合せくださいまずはお問合せください

Oracle Direct 検索

まずはお問合せくださいまずはお問合せください

検索

システムの検討・構築から運用まで、ITプロジェクト全般の相談窓口としてご支援いたします。

システム構成やライセンス/購入方法などお気軽にお問い合わせ下さい

Web問い合わせフォーム フリーダイヤル

システム構成やライセンス/購入方法などお気軽にお問い合わせ下さい。

http://www.oracle.co.jp/inq_pl/INQUIRY/quest?rid=28専用お問い合わせフォームにてご相談内容を承ります。

※フォームの入力には、Oracle Direct Seminar申込時と同じグインが必要となります

0120-155-096※月曜~金曜 9:00~12:00、13:00~18:00

ログインが必要となります。※こちらから詳細確認のお電話を差し上げる場合がありますので、ご登録さ

れている連絡先が最新のものになっているか、ご確認下さい。

(祝日および年末年始除く)

Copyright© 2010, Oracle. All rights reserved. 59

Copyright© 2010, Oracle. All rights reserved. 60