y
Oracle on Windows
–
参考資料、コラム(オラクル都市伝説)、イベント・セミナー
情報 etc
•
http://www.oracle.co.jp/campaign/mb_tech/
y
Windows Server System Center / OTN Japan
•
http://www.oracle.com/technology/global/jp/tech/windows/
y
.NET + Oracle Database
•
.
NET Developer Center / OTN Japan
http://www.oracle.com/technology/global/jp/tech/dotnet/
–
意外と簡単!? .NETでOracle / OTN Japan
y
オラクル都市伝説 / Oracle on Windows
–
http://www.oracle.co.jp/campaign/mb_tech/column/
–
シーズン2 連載中!
9 其の一:地獄からの生還 本当にあった怖い話
9 其の二:喪われた時間を取り戻せ! ある男の過ち
9 其の三:ベテランエンジニアの魂がデータベースに宿る
9 其の四:本当にオラクルデータベースを選択すると「ソースコード
がスリム」になるのか?を徹底検証
<写真欄>
Visual Studio 2008 + Oracle Database 11g
アプリケーション開発入門
Agenda
y
Visual Studio 2008とOracleを組み合わせた
アプリケーションの開発について
Visual Studioと融合
Oracle Data Access Components
IIS
開発作業
配布
データベース接続
C++ / C# VB.NET アプリケーション IIS(ASP/ASP.NET) MTS/COMOracle Data Provider for .NET (ODP.NET)
Oracle Services for MTS Oracle Database
Extensions for .NET (ODE.NET)
ストアド開発作業
データベース接続
Microsoft Visual Studio
Oracle Developer Tools for Visual Studio .NET (ODT)
ODP.NET
ODP.NET概要
y
2002年より提供開始
y
データベースサーバーのプラットフォームを選びません
y
VS.NET 2003および2005, 2008に対応
y
.NET Framework 1.0以上に対応
y
ADO.NETに準拠したデータプロパイダ
y
Oracleに特化したデータプロバイダのため、パフォーマ
ンス、機能面で優れている
ODP.NETの入手とインストール
y
ODP.NETはOracleデータベースのインストールCDに含まれて
います
y
最新版はOTN-Jから入手可能です
–
http://www.oracle.com/technology/global/jp/tec
h/dotnet/index.html
–
Oracleデータベースのライセンスに準じて利用可能です
y
ODTをインストールすると自動的にODP.NETのインストールと
OTN-J .NET Developer Centerからダウンロード可能
Oracle Universal Installerを利用したGUIインストール
ODT
¾
Oracle Explorer
¾
DB内部をツリー構造で表示
¾
すべての機能の出発点
¾
ウィザードとデザイナ
¾
オブジェクトの追加/編集が簡単
¾
PL/SQLエディタ
¾
PL/SQLのデバッグも可能
¾
Data Window
¾
テストデータの確認/編集に便利
¾
Oracle Query Window
¾
SQL*Plus代わりに使えるツール
ODT概要
y
Oracleエクスプローラ
y
デザイナーおよびウィザード
y
自動コード生成
y
PL/SQLエディタ
y
Oracleデータウィンドウ
y
Oracle問合せウィンドウ
y
Oracleプロジェクト
y
統合ヘルプ
ODT機能概要
ODAC 11.1.0 新機能 – ODT
y
Server Explorerへの統合
y
Oracle Databaseプロジェクト
y
ユーザ定義型
y
SQL*Plusスクリプト
y
問合わせウィンドウの拡張
ODAC 11.1.0 新機能 – ODT
y
Server Explorerへの統合
–
Visual Studio 2005のServer ExplorerにODTの機能を統合
–
Visual Studio 2005が提供する各種デザイナーやウィザード、ドラッ
グ・アンド・ドロップの操作に対応
y
Oracle Databaseプロジェクト
–
複数のSQLスクリプトを管理するためのプロジェクトが新たに提供
–
Visual Studioで使用可能なソース管理機能と連携
ODAC 11.1.0 新機能 – ODT
y
ユーザ定義型
–
「ユーザ定義型」ノードが追加され、ユーザ定義型の作成や確認が
GUIから可能に
–
ユーザ定義型から.NET Custom Class(C#,VB.NET,マネージドC++
に対応)を生成するためのウィザードを提供
y
SQL*Plusスクリプト
–
EDITおよびHOSTコマンドを除く、SQL*Plusコマンドを含むSQLスクリ
プトの実行をサポート
y
問合わせウィンドウの拡張
–
実行計画のタブが追加され、確認が容易に
–
トランザクションの手動解決をサポート
ODTの入手とインストール
y
ODTはOracleデータベースの
インストールCDには含まれて
いません
y
最新版はOTN-Jから入手可能です
y
Oracleデータベースのライセンスに準じて利用可能です
y
入手したEXEファイルを実行するとsetup.exeが作成されます
y
setup.exeを実行するとOUIが起動しますので、そちらでイン
ストールします
y
ODTをインストールすると自動的にODP.NETのインストール
とVS.NETの環境構成が行われます
ODE.NET
Oracle Developer Tools for Visual Studio .NET
(ODT) Microsoft
Visual Studio .NET 2005
C++ / C# VB.NET による開発 DLLの作成 (foo.dll)
開発作業
配布
ビルド
Oracle Database Extensions for .NET(ODE.NET)
PL/SQL ストアド・プログラム
クライアント アプリケーション
Oracle Database 10g Release 2以上の
Windows版でのみサポートされる機能です。
ODT 10.2.0以上が必要になります。
クライアント
プロセス
Oracleプロセス
外部プロセス
クライアント アプリケーション Oracle Instance PL/SQL リスナー Oracle CLR Host Microsoft .NET CLRODE.NETの構成と動作原理
.NETストアドの作成と配置方法
1.
Oracleプロジェクトを作成
2.
.NETアセンブリを作成
3.
配布ウィザードで以下の処理を自動実行
.NETアセンブリ(DLL)をサーバーへコピー
PL/SQLラッパーの作成
y
配布時にはSYSまたはSYSTEM接続を使い、配布先を本来の
スキーマにしてください
ODAC 11.1.0 新機能 – ODE.NET
y
アセンブリ再配布機能
–
既にロードされた状態の.NET Stored Procedureを再配布で置き換え
可能にする設定を提供
–
開発およびテスト時の作業効率を向上
y
Nullable type
Agenda
y
Visual Studio 2008とOracleを組み合わせた
アプリケーションの開発について
ODP.NET
ODP.NET チューニングポイント 1
∼ ラウンドトリップの回数を減らす ∼
取得レコードが多い場合、フェッチサイズによっては多くのラウンドトリップが発生
ODP.NET チューニングポイント 2
∼ キャッシュの利用 ∼
DBサーバー
1人目 1人目の初回アクセス時 DBサーバーへの問合せWEBサーバー
問合せ結果の返信 コネクションプールSelect * from emp
結果セットをデータ セットに格納
2人目
2人目のアクセス時
コネクションプール
Select * from emp
結果セットをデータ セットに格納
ODP.NET チューニングポイント 3
∼ コネクション・プーリング ∼
DBサーバー
WEBサーバー
コネクションプール有 Client数 > Connection数 コネクションプール無 Client数 = Connection数ODP.NET
ODP.NET ラウンドトリップの回数を減らす
∼フェッチ・サイズの制御 ∼
エンドユーザーが大量のデータを使用する場合、アプリケーションによるデータ・フェッチの
ラウンドトリップ回数を最小限にするための仕組み。
FetchSizeの値はデフォルトで、「64KB」に設定
OracleCommand cmd = con.CreateCommand();cmd.CommandText = "select * from fetch_test ; OracleDataReader dr = cmd.ExecuteReader(); dr.FetchSize = cmd.RowSize * numRows;
while (dr.Read()) {
rowsFetched++; }
ODP.NET ラウンドトリップの回数を減らす
∼フェッチ・サイズ / BLOB ∼
BLOBでのラウンドトリップ回数を最小限にするための仕組み。
Dim cnn As New OracleConnection( _
"user id=scott;password=tiger;data source=orcl") Dim strSql As String = _
"select blob_fld from blob_test where blob_id=1" Dim cmd As New OracleCommand(strSql, cnn)
cmd.InitialLOBFetchSize = 32767
cnn.Open()
Dim dr As OracleDataReader = cmd.ExecuteReader If dr.Read Then
Dim blob As OracleBlob = dr.GetOracleBlob(0) Dim ms As New System.IO.MemoryStream(blob.Value) PictureBox1.Image = New Bitmap(ms)
ODP.NET ラウンドトリップの回数を減らす
∼OracleBulkCopy∼
Oracleデータベース以外のデータソースからOracleデータベース内の表に対してデータ
を高速に一括ロード
'// ExcelからOracle Datbaseへデータを一括コピー
Dim eConn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:¥¥Temp¥¥SmplData.xls;Extended Properties=""Excel 8.0;HDR=YES;"";") eConn.Open()
Dim cmdFrom As New OleDbCommand("Select EMPID,EMPNAME From [Sheet1$]") cmdFrom.Connection = eConn
Dim rdrFrom As OleDbDataReader = cmdFrom.ExecuteReader
Dim oConn As New OracleConnection("User Id=scott;Password=tiger;Data Source=orcl11g") oConn.Open()
Dim obCopy As New OracleBulkCopy(oConn) obCopy.DestinationTableName = "emp"
obCopy.ColumnMappings.Add("empid", "empno") obCopy.ColumnMappings.Add("empname", "job") obCopy.WriteToServer(rdrFrom)
ODP.NET
Oracle Datatbase 11g リリース 1.0の新機能
Oracle Database キャッシュの利用
∼ Result Cache ∼
Orders
Inventory
Back
Orders
Line
Items
Pick
Lists
SQL検索結果のみキャッシュ
結果キャッシュ
従来のキャッシュ
Orders
Inventory
Back
Orders
Line
Items
Pick
Lists
読み込みブロック 全体をキャッシュメモリの使用効率をあげ、レスポンスの高速化をはかる
メモリの使用効率をあげ、レスポンスの高速化をはかる
Oracle Database キャッシュの利用
∼ Result Cache ∼
SQLの結果キャッシュによってキャッシュされた情報は SGA 上(共有プール
内の領域)に格納され、ユーザ間でその情報が共有される。
アクセス対象のテーブルのデータの更新が行われた場合、そのキャッシュ
は無効になる。
共有プール
SGA
SQL結果キ
ャッシュ
ユーザーA
①
②
ユーザーB
③
Select …
Select …
キャッシュ済みの
結果が返され、高
速レスポンス
Oracle Database キャッシュの利用
∼ Result Cache ∼
リザルト・キャッシュを有効化する
alter system set RESULT_CACHE_MODE = 'FORCE';
MANUAL
(デフォルト) ユーザが手動でリザルト・キャッシュを行う指定をした場合のみ、リザルト・ キャッシュの機能が使用される FORCE 常にリザルト・キャッシュの機能が働く
リザルト・キャッシュを有効化する
select /*+ result_cache */ first_name, last_name from employees
RESULT_CACHE_MODEの値が「MANUAL」となっていた場合は、SQLの中にヒント句を入れることにより、クライアント・リザルト キャッシュ機能を有効にすることが可能
ODP.NET キャッシュの利用
∼ ステートメント・キャッシュ ∼
同じSQL文を(場合によっては異なるパラメータ値を使用して)後で実行する場合、カーソル
から解析された情報を再利用して、文を解析せずに実行
"User Id=SCOTT;Password=TIGER;Data Source=ORCL;Statement Cache Size=100"
Where句に指定されている条件を次のようにパラメータ変数を使用する必要があり
OracleCommand cmd = new OracleCommand(
"SELECT * FROM emp WHERE empno=:pEmpNo", conn);
OracleParameter pEmpNo =
cmd.Parameters.Add("pEmpNo", OracleDbType.Int32, ParameterDirection.Input); pEmpNo.Value = 7369;
ODAC 11.1.0.7 新機能 – ODP.NET
ステートメント・キャッシュの自動チューニング
y
機能
–
ODP.NETが自動的に稼動状態のモニタを行い、ステートメント・キャ
ッシュ・サイズを最適な値に設定
–
ステートメント・キャッシュによりSQL or PL/SQL のリパースを排除
–
実行頻度に応じてステートメント・キャッシュの大きさを動的に変更
ODP.NET
Application (A)
Cache
ODP.NET
Cache(拡張)
データアクセスが多い
ODP.NET
Cache
データアクセスが少ない
Oracle Database キャッシュの利用
∼ SecureFiles ∼
データベースへのラウンドトリップの回数を減らすことで、SecureFilesを使用する際の少量
のLOB検索のパフォーマンスが向上。この拡張機能はOracle 11gリリース1.0以降のデータ
ベース・バージョンでのみ使用可能
y
STORE AS SECUREFILE 句を使用して表を作成します
y
BASICFILE は以下のように利用します
–
デフォルト (STORE AS 句を指定しない場合) は、
BASICFILE として作成されます
SQL> CREATE TABLE t1 (c1 CLOB)
2 LOB (c1) STORE AS SECUREFILE ;
SQL> CREATE TABLE t1 (c1 CLOB)
2 LOB (c1)
STORE AS SECUREFILE
;
SQL> CREATE TABLE t1 (c1 CLOB)
2 LOB (c1) STORE AS BASICFILE ;
SQL> CREATE TABLE t1 (c1 CLOB)
2 LOB (c1)
STORE AS BASICFILE
;
Oracle Database キャッシュの利用
y
従来の LOB より、高速に処理可能
y
見込まれる性能改善の効果
–
競合削減
–
高いスループット
–
同時実行性の向上
–
領域管理の最適化
y
LOB 特有のチューニング・パラメータは不要
Oracle Database キャッシュの利用
∼ SecureFiles ∼
ODP.NET
Oracle Database コネクションプーリング
y
接続プーリングを使用しない接続文字列(Pooling=FALSE)
string no_pool = "User Id=hr; Password=hr; Data Source=oramag; Enlist=false; Pooling=false"
y
接続プーリングを使用する接続文字列(Pooling=TRUE)
string with_pool = "User Id=hr; Password=hr; Data Source=oramag; Enlist=false; Pooling=true"
ODP.NETの接続プーリング機能を使用すると、アプリケーションは事前に作成された接続
を用意するプールを作成および維持可能
Oracle Database コネクションプーリング
∼ OS認証でも利用可能 ∼
ODP.NET ONLY
ODP.NET ONLY
Dim cnn As New OracleConnection
cnn.ConnectionString = "User Id=/;Data Source=orcl;DBA Privilege=SYSDBA" cnn.Open() MsgBox("Connect OK!!") cnn.Close()
①
ConnectionString属性のUser Idを / に設定することにより、データベース・ユーザーの認
証にWindowsユーザー・ログイン資格証明を使用できます。また、DBA Privilege属性を介し
て
SYSDBA権限またはSYSOPER権限のいずれかを使用してOracleデータベースに接続
①
ODP.NET 11.1.0以上では、OS認証でも接続プーリングが有効
Windowsパフォーマンス・モニター(Perfmon)を使用してODP.NETのコネクション・プーリン
グ状況等を監視
Oracle Database コネクションプーリング
ODT
ー Visual Studioからの
ODAC 11.1.0.7 新機能 – ODT
Oracleパフォーマンス・アナライザ
y
Visual StudioからAutomatic Database Diagnostic
Monitor(ADDM) 、SQL Tuning Adviserが使用可能
スナップショットの
差分を診断
AWR
(自動・ワークリポジトリ
)ADDM
診断結果 / アドバイス
結果作成
起動
結果表示
起動
ODAC 11.1.0.7 新機能 – ODT
ODAC 11.1.0.7 新機能 – ODT
ODP.NET
ODP.NET トランザクション
∼ System.Transactions の利用(1)∼
TransactionScopeを使用した暗黙的な分散トランザクション登録
using System.Transactions; static void Main()
{
DbProviderFactory factory = DbProviderFactories.GetFactory(providerName); try
{
// Create a TransactionScope object
using (TransactionScope scope = new TransactionScope())
{
// Create first connection object.
using (DbConnection conn1 = factory.CreateConnection()) {
// SQLの発行 }
ODP.NET トランザクション
∼ System.Transactions の利用(2)∼
CommittableTransactionを使用した明示的な分散トランザクション登録
// Create a committable transaction object.
CommittableTransaction cmtTx = new CommittableTransaction();
// Open a connection to the DB.
DbConnection conn1 = factory.CreateConnection(); conn1.ConnectionString = constr;
conn1.Open();
// enlist the connection with the commitable transaction.
conn1.EnlistTransaction(cmtTx);
// Create a command to execute the sql statement. DbCommand cmd1 = factory.CreateCommand();
cmd1.Connection = conn1;
cmd1.CommandText = @"insert into emp (empno, ename, job) values
(1234, 'emp1', 'dev1')"; // Execute the SQL statement to insert one row in DB.
retVal = cmd1.ExecuteNonQuery();
Console.WriteLine("Rows to be affected by cmd1: {0}", retVal); // commit/rollback the transaction.
ODP.NET トランザクション
∼ System.Transactions の利用(3)∼
System.Transactionsサポートのローカル・トランザクション
Oracle Data Provider for .NETリリース10.2.0.3以降のアプリケーションは、
System.Transactionsとともにローカル・トランザクションを使用できます。
ローカル・トランザクションを使用するには、
PromotableTransactionレジストリ・エントリを作成して"local"に設定するか、
"Promotable Transaction"接続文字列属性を"local"に設定する必要があります。
ODP.NET
ODP.NETを利用したアプリケーションの配布
∼ Oracle Clientのインストール ∼
y
OUI
–
Oracle GUIベースの インストール
–
DB Server, Client共、GUIベースで容易にインストール
y
Silent install
–
インストール作業の自動化
–
Microsoft SMS もしくは、他のインストール製品を利用し
て配布可能
–
大量クライアントの配布に最適
Instant Client XCopy での配布
y
Install の手順
–
Step 1: Unzip and copy IC files to disk
–
Step 2: install.batの実行
y
配布したいコンポーネント、 Oracle Home の名前、配
布先の3つを指定。
–
Step 3: Windows PATHにインストールパスを追加
–
Step 4: NLS_LANG の設定
Instant Client XCopy コンポーネント
y
Instant Client xcopy でインストール可能なコンポーネント
–
SQL*Plus
–
OCI
–
OCCI
–
ODBC
–
JDBC-OCI
y
Instant Client xcopy で追加されたコンポーネント
–
ODP.NET
–
Oracle Providers for ASP.NET
–
Oracle Provider for OLE DB
tnsname.oraを使用しない接続
ODP.NET ONLY
ODP.NET ONLY
Dim cnn As New OracleConnection
Dim sb As New System.Text.StringBuilder
sb.Append("User Id=scott; Password=tiger;")
sb.Append("Data Source=(DESCRIPTION = (ADDRESS_LIST = ") sb.Append("(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)")
sb.Append("(PORT = 1521)))(CONNECT_DATA = (SERVER = DEDICATED)") sb.Append("(SERVICE_NAME = orcl)));")
cnn.ConnectionString = sb.ToString cnn.Open()
tnsnams.oraの内容
をそのまま記述
Multiple Oracle Homes(MOH)
y
Multiple Oracle Homes (MOH) 複数バージョンの
Oracle製品をインストールする為に:
y
Oracle Database version 8.0.4以前ではサポート
されません。
example:
–
Oracle 10.2.0: d:¥oracle10¥ora102
–
Oracle 11.0.0: d:¥oracle11¥ora110
Multiple Oracle Homes
y
Multiple Oracle Homes のレジストリ設定:
–
HKLM¥Software¥Oracle¥ALL_HOMES and
HKLM¥Software¥Oracle¥HOME(n)
Multiple Oracle Homes の管理
Oracle Client Software
y
Oracle client DLLs は Windows Path の設定
から読み込まれます。
y
Web (IIS)
–
IIS supports separate worker processes in
same instance
y IIS 6 for Windows Server 2003 以上
–
それぞれのprocessでDllのディレクトリ設定
y
Client/Server
–
それぞれのアプリケーションのスタートアップ時に、
Oracle Homes in .NETの管理
y
ODP.NET 10.2.0.4 以上の場合
–
ODP.NET は .NET config files を利用してアンマネージド
な Oracle DLLsを読み込みます。
–
それぞれのアプリケーション毎に、異なるバージョンの
Oracle ClientとODP.NETを設定できます。
y
DLL の検索順序
–
1. Current application directory
–
2. Application config or web.config
–
3. Machine.config
9
Oracle機能の活用
Oracle Data Provider for .NET(ODP.NET)
Oracle Data Provider for .NET(ODP.NET)
9
開発生産性の向上
Oracle Developer Tools for Visual Studio .NET(ODT)
Oracle Developer Tools for Visual Studio .NET(ODT)
9
開発言語の統一
Oracle Database Extensions for .NET(ODE.NET)
Oracle Database Extensions for .NET(ODE.NET)
Visual Studio 2005, 2008をサポート
Visual Studio 2005, 2008をサポート
【タイトル】年末カレンダー応募
【必要情報】
1、氏名
2、貴社名、所属部署名
3、貴社住所(プレゼント送付先)
4、受講された2009年11月・12月開催のセミナタイトル
5、現在ご検討中のシステムについてなど、Oracle Directに相談されたい
年末ダイセミ受講感謝キャンペーン
日頃はOracle Direct Seminarを御愛護頂き、誠にありがとうございます。
感謝の気持ちを込めまして、
合計100名様
にWendyの2010年版カレンダ
ーをプレゼントいたします。11月・12月に開催のダイセミを2つ以上受講頂
いた方が対象です。是非皆様奮ってご応募下さい!!
応募方法
応募方法
[email protected]
必要情報を明記のうえ、メールで ご応募ください。当選者の発表は 発送をもってかえさせて頂きます。OTN
OTN
掲示版×ダイセミ でスキルアップ
掲示版×ダイセミ でスキルアップ
!!
!!
このようなお客様に、
Oracle Technology Network(OTN)
の
掲示版
の活用をお薦めします。
・セミナー中に解消できなかった疑問点を解消したい!
・セミナー終了後に疑問点が出てきた!
・一般的なその解決方法などを知りたい!
セミナーに関連する質問については、OTN掲示版の
「データベース一般」
へ
http://otn.oracle.co.jp/forum/index.jspa?categoryID=2
Oracle University L
Oracle University L
ive
ive
V
V
irtual
irtual
C
C
lass
lass
インターネットを通じてライブで研修に参加できる「Oracle University Live Virtual Class」。
会社や自宅からでも研修を受講することができ、品質や達成度も教室で開催される研修と同等。
スキルアップのチャンスが大きく広がります。
∼インターネットでどこでも受講!世界中から最新技術をいち早く習得∼
∼インターネットでどこでも受講!世界中から最新技術をいち早く習得∼
多彩なコースから最新の技術をいち早く取得
多彩なコースから最新の技術をいち早く取得
時間や場所の制約が最小限に!コスト削減に効果あり
時間や場所の制約が最小限に!コスト削減に効果あり
教室で開催する研修と同じ教材・演習環境、変わらないクオリティ
教室で開催する研修と同じ教材・演習環境、変わらないクオリティ
ご要望の多かった「
土曜
開催コース」が登場!
ご自宅
から受講できます
●
Oracle Database 11g: 管理 ネクスト・ステップ - LVC (3日間)
日程:11月12日(木)∼
11月14日(土)
運用
構築
設計
IT 企画
経営企画
業務改善計画の作成支援 • 業務診断サービス • BIアセスメントサービス システム企画の作成支援 •業務診断サービス •BIアセスメントサービス RFP/提案書の作成支援 •BIアセスメントサービス •メインフレーム資産活用相談サービス •仮想化アセスメントサービス システム構築時の道案内 •Access / SQL Serverからの移行 •MySQL / PostgreSQLからの移行 •Oracle Database バージョンアップ支援 •Oracle Developer Webアップグレードシステム運用状況の診断
•パフォーマンス・クリニック・サービス •システム・セキュリティ診断サービス •データ管理最適化サービス