Comments
Description
Transcript
基礎編 - OTN
1 Oracleデータベースを利用した Microsoft .NET開発 - 基礎編 Session A-8 2 本セッションの内容 y ODP.NET概要 – – – – OracleのWindows対応への取り組み ODP.NETとは? ODP.NETの機能面におけるポイント ODP.NETオブジェクトモデル y ODP.NETの使い方 – – – ODP.NETの入手とインストール Visual Studioでの設定 サンプルコード y 本セッションのまとめ 3 ODP.NET概要 Oracleの Windows対応への 取り組み 4 Windows版 Oracle の歴史 Oracle7 Server R7.0 1993.12 Windows NT 3.1 1996.12 Windows NT 4.0 2000.2 2003.5 Windows 2000 Windows 2003 ( 32/64bit ) 1993.12 業界初のWindows NT対応データベース NTスレッドに対応 パフォーマンスモニタとの統合 1996.12 Oracle7 Server R7.3 1997.7 Oracle Parallel Server Option 1997.9 Oracle8 Enterprise Edition R8.0 1998.1 Oracle Fail Safe 2002.1 Oracle8i Enterprise Edition R8.1.7 2002.9 Oracle9i Database Release2 (9.2.0) 2003.5 Oracle9i Release2 64-bit Itanium 2004.5 Oracle Database10g (10.1.0) 2004.6 Oracle Database10g 64-bit Itanium 5 OracleのWindows対応 Windowsに対応したアーキテクチャ サービスとしてOSに登録されるバックグラウンド・プロセス スレッドベース・サーバー・アーキテクチャ Oracle10gでは、新たにファイバーモデルへ対応 64bit 版 Windows 2003 と Intel Itaniumに対応 システム拡張機能 Real Application Cluster、接続プーリング、マルチスレッド ファイルI/Oの拡張 64bitファイルI/Oの全面的なサポート 4GB RAM Tuning (4GT)のサポート (R7.3.4~) 3GBのSGAが確保できる VLM(Very Large Memory)対応 最大64GBのデータベース・バッファ AWE (Address Windowing Extensions) を使用 6 Windowsアプリケーションの開発 y Oracle10gでは、COM および .NET データアクセスを完全にサポート – COM データアクセス y Visual Basic、Active Server Pages、Visual C++ など y 4つのプログラミングインターフェースの提供 – .NET データアクセス y Visual Basic .NET 、C#、ASP.NET など y 従来は、OLE DB .NET と ODBC .NET を経由したアクセス y Oracle Data Provider for .NETによるアクセス 7 OracleへのCOMデータアクセス Active Server Pages Visual Basic C/C++ Applications MS Office Any COM Client ActiveX Data Objects (ADO) Oracle Objects for OLE (OO4O) Oracle Provider for OLE DB COM Automation Feature Oracle Database 8 Oracleへの.NETデータアクセス ASP .NET VB .NET C# OLE DB .NET ODBC .NET Oracle OLE DB Oracle ODBC C++ .NET Any .NET Client Oracle Data Provider for .NET (ODP.NET) Oracle Database 9 ODP.NET概要 ODP.NETとは 10 Oracle Data Provider for .NET z オラクルが開発した .NETへの高速な接続ミドルウェア – – 他のミドルウェアよりも優れたパフォーマンスを提供 Oracle DB の持つ先進機能をサポート y XML DB、 RAC… etc – Microsoft ADO.NET に標準準拠 ASP .NET VB .NET C# C++ .NET Any .NET Client Oracle Data Provider for .NET Oracle Database 10g Microsoft .NET Data Provider for Oracle はMicrosoft社が提供するミドルウェアで、ODP.NETとは異なります 11 ODP.NETとその他ドライバの違い ODP.NET – Oracleネイティブなドライバー – データ・アクセスにブリッジが入らない – Oracle固有の機能のサポート OLE DB.NET、 ODBC.NET – オープン規格に基づいたドライバー – データ・アクセスにブリッジが入る – Oracle提供以外のドライバーでは固有の機能が無い OO4O – COMサーバー – RCWによるデータ変換等のオーバヘッドが発生する – Oracle固有の機能のサポート ODP.NETは.NETへの最適な高速アクセスを提供 12 ODP.NET機能のポイント y PL/SQLの完全サポート – ストアド・プロシージャ、ストアド・ファンクションを完全に実行可 y ネイティブなOracleデータタイプ – – LOB型、REF カーソル、BFILE型、Nデータ型、DATE型、 TIMESTAMP型、LONG型、RAW型、など .NET データ型に対するSafe Mapping y トランザクション – Oracle Services for MTS を使用した企業向けサービス (Microsoft Transaction Server との統合) – セーブポイント対応 13 ODP.NET機能のポイント y パラメータ – – 配列バインド 名前指定パラメータ、位置パラメータ y コネクション・プーリング – プール値のコントロール、タイムアウト値の設定 y グローバリゼーション – – Unicode の完全サポート クライアント設定は、文化的にふさわしい方法で Oracle のデータを表 示するために使用される y 透過的アプリケーションフェイルオーバー(TAF) – 接続失敗時に自動的にアプリケーションを再接続 14 ODP.NET 10g 新機能 y XMLDBサポート – XMLType型のサポート y XMLを直接DBに格納する場合に使用 y パフォーマンスの改良 – 特にLOB型の検索パフォーマンスが向上 15 OracleのXML対応 XML 機能 Oracle SQL Server XML と SQL の並存性 Yes No XML スキーマ Yes No 統合された XMLリポジトリ 統合されたXMLリポジトリ Yes No XML 処理のスケーラビリティ Yes No 柔軟なストレージ・モデル Yes No ODP.NETは、XMLのあらゆる可能性に対して機能を用意 16 ODP.NETのパフォーマンス優位 接続方法の違いによる速度差 OO4O OLE DB .NET Data Provider Oracle ODP.NET Microsoft プログラム起動直後のログオン 1.00 0.98 1.00 1.02 2回目のログオン 1.00 543.80 543.80 1087.60 プライマリーキー以外の参照 1.00 1.61 1.72 2.11 挿入 1.00 1.02 0.79 1.11 プライマリーキー以外の更新 1.00 1.14 0.63 1.50 数値が大きいほどOO4Oに比べて速度が速い(OO4Oの速度を1とした場合の値) 出典:月刊ドットネット・マガジン 2003年2月号 17 SQL Server使用時との生産性比較 SQL Server Data Provider OLE DB .NET データプロバイダー OLE DB ODP for .NET .NET App OLE DB .NET Data Provider Oracle Provider for OLE DB プログラミングインターフェースは、ADO.NET準拠 - 接頭語がかわるだけ OleDbDataReader SqlDataReader OracleDataReader OLE DB.NET Data Provider SQL Server Data Provider Oracle Data Provider for .NET 18 .NETでのOracle Databaseの優位性 y .NETでもDB層にはオープン・プラットフォーム – Linux、Unix、Windows等々から選択可能 y Oracleだけが持つ機能が多数 – RAC、パーティショニング、XMLDB… etc. y トランザクション制御の簡便性 – – ReadCommitedベースの開発はやっぱり簡単 他のトランザクションを意識する必要性が少ない 19 ODP.NET事例 某公共系大手企業様 y ODP.NET(Oracle)採用のポイント – Oracle Database(RAC)に対する期待 y y y – ODP.NETは .NET専用のネイティヴ・ドライバーである y – サーバー数に比例したパフォーマンスの伸び ノーダウンのシステムを構築したい HA構成でのH/Wリソースの無駄を減らしたい ODBCに比較して4~5倍のパフォーマンスが出る プラットフォームが異なるシステムとの接続が容易 y センターサーバー(UNIX)と連携させたい Oracleの持つオープン性・堅牢性・高パフォーマンスを.NET環境下で!! 20 ODP.NET概要 ODP.NET オブジェクト・モデル 21 ODP.NETオブジェクト・モデル 非接続レイヤー Dataset 接続レイヤー (ODP.NET) DataAdapter Command Builder DataReader Command Transaction Connection データレイヤー ODP.NETは、ADO.NETの仕様に準拠 Oracle DB用にビルドされ、Oracleの機能を最大限に活用 22 ODP.NETオブジェクト・モデル Connection データベースに接続 Command データベースとの接続中、データを操作する。 SQLコマンドの実行 DataAdapter データベースとDataSet 間でデータを転送する Dataset DataReader Command Builder Transaction データの読み取りと更新 データベースからのデータストリームを格納する DataSet が更新された時に DataAdapter に対する、 自動SQL生成をおこないます ローカルのトランザクションを表すオブジェクト 23 ODP.NET使用方法 ODP.NETの入手と インストール 24 ODP.NETはOTNからダウンロード FREE http://otn.oracle.co.jp/software/tech/windows/odpnet/index.html 25 ODP.NETを使用するために ODP.NET 10.1.0.2.0 システム要件 • 対応OS –Windows NT 4.0 SP6a以上 –Windows 2000 SP1以上 –Windows XP Professional (32-bit) –Windows Server 2003 –Windows Small Business Server 2003 • 接続先データベース –Oracle8i R8.1.7.4以降 (各プラットフォーム) • クライアント環境 –Oracle Client R10.1.0.2.0 (ダウンロードファイルに含まれています) –Microsoft .NET Framework 26 (参考) OO4O 10gについて Oracle Objects for OLE 10.1.0.2 y 対応OS – – – – – Windows NT 4.0 SP6a以上 Windows 2000 SP1以上 Windows XP Professional (32-bit) Windows Server 2003 Windows Small Business Server 2003 y 接続可能データベース – Oracle8i R8.1.7.4以降(各プラットフォーム) y 新しいデータ形式のサポート (R9.2.0.4.8~) OO4Oオブジェクト名 OraIntervalDS OraIntervalYM OraTimeStamp OraTimeStampTZ Oracleデータ型 INTERVAL DAY TO SECOND INTERVAL YEAR TO MONTH TIMESTAMP、 TIMESTAMP WITH LOCAL TIME ZONE TIMESTAMP WITH TIME ZONE 27 ODP.Netのインストール インストールはOracle Universal Installerで実施 “インストール先”にはOracle10.1.0.2製品の Oracle_Home を選択 28 ODP.Netのインストール Oracle Data Access Software for Windowsコンポーネント – – – – – – – Oracle Data Provider for .NET (10.1.0.2.0) Oracle ODBC Driver (10.1.0.2.0) Oracle Objects for OLE (10.1.0.5.0) Oracle Provider for OLE DB (10.1.0.2.0) Oracle Services for Microsoft Transaction Server (10.1.0.2.0) Oracle Client (10.1.0.2.0) Oracle Universal Installer (10.1.0.2.0) 29 ODP.Netのインストール インストール後、OracleNetの設定が必要 手動設定、あるいは設定済の場合は省略可能 30 ODP.NET使用方法 Visual Studioでの 設定 31 Visual StudioとODP.NET y 機能はOracle.DataAccess.dllにより提供される – y y y y Oracle.DataAccess.dllを「参照設定」に追加する GUIのデザイナには次期バージョン以降対応予定 プロジェクト毎に参照設定が必要 コーディング時の候補リストに対応 ダイナミック・ヘルプ – F1キーからODP.NET ドキュメントが閲覧可能 32 Visual Studioでの設定手順 既存プロジェクトを選択し、ソリューション・エクスプローラーより 「参照設定」を右クリックして「参照の追加」を選択 33 Visual Studioでの設定手順 ODP.NETのコンポーネントを追加 ファイル位置: %ORACLE_HOME%¥bin¥Oracle.DataAccess.dll 34 Visual Studioでの設定手順 ソリューション・エクスプローラーからの確認 ODP.NETを使用できるプロジェクトでは、 ソリューション・エクスプローラーの参照設定フォルダ以下に “Oracle.DataAccess”が表示される 35 Visual Studioでの設定手順 ODP.NETコントロールをツールボックスに追加 ツールボックス> (右クリック)>アイテムの追加と削除 .NETコンポーネント・タブよりOracle名前空間のオブジェクトを選択 36 Visual Studioでの設定手順 デザイン画面からの操作 各コントロールの各項目プロパティへ、必要な文字列を直接入力する 37 Visual Studioでの設定手順 ヘルプの導入方法 y 「ダイナミックヘルプ」 を表示 – y y y 最下部 「Visual Studioのヘルプのインストール」を選択 参照項目の「Visual Studio .NET連結ヘルプコレクション マネージャ」をクリック 下部の「VSCC に含めることのできるコレクション」の “ODP.NET Help”にチェック 「VSCCの更新」を行う。 VS再起動後にヘルプを参照可能 38 ODP.NET使用方法 サンプルコード 39 ODP.NETアセンブリ Oracle.DataAccess.dllでは2つの名前空間が提供される y Oracle.DataAccess.Client – ODP .NETのクラスを提供 y Oracle.DataAccess.Types – Oracle RDBMS内のネイティブデータ型のクラスを提供 ‘=================================== ‘ Visual Basic.NET Coding Sample ‘=================================== Imports Oracle.DataAccess.Client Imports Oracle.DataAccess.Types 40 Oracleへの接続 y OracleConnectionオブジェクトの生成 – – データベースへの接続を確立 デフォルトでコネクション・プーリングが有効 ' ユーザーID、パスワード、データ・ソースなどの接続パラメータを設定します。 Dim con As OracleConnection = New OracleConnection con.ConnectionString = “User Id=Scott; Password=tiger; Data Source=serac;” 構文 <接続名>.ConnectionString = “ User Id=<ユーザー名>; _ Password=<パスワード>; Data Source=<サービス名(インスタンス名)>; _ Pooling=True/False/Yes/No;” 41 問い合わせコマンドの定義 y OracleCommandオブジェクト – – OracleConnectionオブジェクトを設定 SQL文の定義を行う 'SQLコマンドを定義します Dim cmd As New OracleCommand cmd.Connection = conn cmd.CommandText = "select empno, ename, job from test_tab " 構文 <コマンド名>.Connection = <接続名> <コマンド名>.CommandText = “<SQL文> " 42 ODP.NETでの接続型アクセス ①OracleConnection オブジェクトの生成 OracleConnection ②OracleConnection オブジェクトを OracleCommand の Connectionプロパティに設定 OracleCommand Connection ③SQL文を設定 CommandText ExecuteReader ④ExecuteReader メソッドの実行 OracleDataReader ⑤ReadメソッドがTrueならレコードあり Read ODP.NETの ODP.NETの クラス .NET固有の .NET固有の クラス 43 接続型の使用 y SQLの発行と、OracleDataReaderオブジェクトへのデータの格納 'クエリーを実行します Dim rd As OracleDataReader rd = cmd.ExecuteReader ‘あるいは1行での記述も可能 ‘Dim rdr As OracleDataReader = cmd.ExecuteReader 構文 <OracleDataReader変数名>= <コマンド変数名>.ExecuteReader y Readメソッドによるレコードの取得 ‘レコードを取得します Do While(rd.Read) Label1(rd(“EMPNO”)) Label2(rd(“ENAME”)) Loop 44 ODP.NETでの非接続型アクセス ①OracleConnectionオブジェクトの生成 OracleConnection VB.NET ②OracleConnection オブジェクトを OracleCommand の Connectionプロパティに設定 ③DataAdapterの プロパティに設定 OracleCommand Connection CommandText OracleDataAdapter ④Fillメソッドにて DataSetにデータ を充填 SelectCommand Fill DataSet 自動連携 ODP.NETの ODP.NETの クラス .NET固有の .NET固有の クラス 45 非接続型の使用 y OracleDataAdapterオブジェクト – SQLコマンドに対応するプロパティ y y y y SelectCommand UpdateCommand InsertCommand DeleteCommand ‘DataAdapterを作成します Dim da As New OracleDataAdapter da.SelectCommand = cmd y OracleDataAdapterからのSQLコマンドを実行 – OracleDataAdapterは、内部的にOracleCommandオブジェクトの機能を持つ Dim da As New OracleDataAdapter( _ “select empno, ename, job from test_tab” , conn) 46 非接続型の使用 y DataSetとDataGridは、ADO.NETの標準オブジェクトを使用 ‘DataSetを作成し、データを充填します Dim ds As New DataSet da.Fill(ds, "EMP") 構文 <OracleDataAdapter変数名>.Fill = ( <DataSet変数名> , “<Table名>”) 'DataGridへデータを表示します Me.DataGrid1.DataSource = ds Me.DataGrid1.DataSource = ds.Tables("EMP") 47 接続型の使用時のコード(サンプル) Private Sub DataGrid1_Navigate(ByVal sender As System.Object, _ ByVal ne As System.Windows.Forms.NavigateEventArgs) Handles DataGrid1.Navigate 'Oracleへの接続を作成します Dim conn As New OracleConnection conn.ConnectionString = ("User Id=Scott; Password=tiger; Data Source=serac;") 'SQLコマンドを定義します Dim cmd As New OracleCommand cmd.Connection = conn cmd.CommandText = "select empno, ename from emp where empno=111" 'クエリーを実行します Dim rd As OracleDataReader rd = cmd.ExecuteReader Dim rdr As OracleDataReader = cmd.ExecuteReader conn.Close() 48 非接続型の使用時のコード(サンプル) Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click 'Oracleへの接続を作成します Dim conn As New OracleConnection conn.ConnectionString = ("User Id=Scott; Password=tiger; Data Source=serac;") 'SQLコマンドを定義します Dim cmd As New OracleCommand cmd.Connection = conn cmd.CommandText = "select empno, ename, job from emp" 'DataAdapterの作成をします Dim da As New OracleDataAdapter da.SelectCommand = cmd 'DataSetを作成し、そこへデータを格納します Dim ds As New DataSet da.Fill(ds, "EMP") 'DataGridへデータを表示します Me.DataGrid1.DataSource = ds Me.DataGrid1.DataSource = ds.Tables("EMP") da.Dispose() conn.Close() End Sub 49 本セッションのまとめ 50 SQL Serverを使って 堅牢なシステムを作れるだろうか・・・? SQL Serverを使って パフォーマンスが出るのだろうか・・・? .NETでもOracle! シェアと実績に裏付けられた信頼の性能 Windows環境への迅速な対応 幅広い価格バリエーション 51 詳細情報はこちらから y Oracle on Windows (OTN Japan) http://www.oracle.co.jp/nt/ y Windows Technology Center (OTN Japan) http://otn.oracle.co.jp/tech/windows/index.html y はじめてのODP.NET開発 (OTNコンテンツ) http://otn.oracle.co.jp/beginner/odpnet/index.html y Oracle Data Provider for .NET(OTNコンテンツ) http://otn.oracle.co.jp/tech/windows/odpnet/index.html y OTNフォーラム(掲示板) - プログラミングの部屋 http://otn.oracle.co.jp/forum/programming.html 52 試してみたい!という方は・・・ y Oracle Data Provider for .NET (US OTN ) http://otn.oracle.com/tech/windows/odpnet/ y Windows Technology Center (US OTN ) http://otn.oracle.com/tech/windows/ y US 製品版がダウンロード可能 http://otn.oracle.com/software/tech/windows/odpnet/content.html y ドキュメント(英語) http://otn.oracle.com/docs/tech/windows/odpnet/content.html y ディスカッション・フォーラム(英語) http://www.oracle.com/forums/forum.jsp?forum=146 53 Learn Oracle From Oracle y Instructor led training y Self-Study y Online learning y Oracle Certification y Oracle iLearning y Oracle Tutor oracle.com/education 54 日本オラクル株式会社 無断転載を禁ず この文書はあくまでも参考資料であり、掲載されている情報は予告なしに変更されることが あります。日本オラクル社は本書の内容に関していかなる保証もいたしません。また、本書 の内容に関連したいかなる損害についても責任を負いかねます。 Oracleは米国Oracle Corporationの登録商標です。文中に参照されている各製品名及びサービス 名は米国Oracle Corporationの商標または登録商標です。その他の製品名及びサービス名はそれ ぞれの所有者の商標または登録商標の可能性があります。 55