Comments
Description
Transcript
ODP.NET - Oracle
Oracle Direct Seminar <Insert Picture Here> .NET開発者に必ず知ってほしいOracle Databaseの機能 日本オラクル株式会社 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報 提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事 項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、 購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機 能の開発、リリースおよび時期については、弊社の裁量により決定されます。 Oracleは、米国オラクル・コーポレーション及びその子会社、関連会社の米国及びその他の国における登録商標また は商標です。他社名又は製品名は、それぞれ各社の商標である場合があります。 Copyright© 2010, Oracle. All rights reserved. 2 Agenda • .NETとOracle Databaseについて • .NET開発者に必ず知ってほしいOracle Databaseの機能 – – – – Visual Studio + Oracleでサクサクアプリケーション開発 パフォーマンス・チューニング セキュリティ 可用性 Copyright© 2010, Oracle. All rights reserved. 3 最新の.NET環境にいち早く対応 .NET Stored Procs ODP.NET Visual Studio Plug-ins 2002-03 Q2 2005 Q3 2005 Q3 2006 Q1 2007 2007-08 2009 .NET 1.x VS 2003 ODAC 64-bit ODAC 2006 ODP.NET 11g .NET 2.0 & VS 2005 2nd ODAC 11g Windows .NET 3.0 Vista & 2008 Copyright© 2010, Oracle. All rights reserved. 4 .NET + Oracleでしか出来ない様々な機能 • 開発生産性を高める様々な機能 機能 Oracle 他社DB パフォーマンスチューニングオプション Yes No データキャッシュの自動更新 Yes No 中間層のデータキャッシュ機能 Yes No クラスタ構成の負荷分散・フェイルオーバー Yes No さまざまなデータタイプへの対応 Yes No 高度なセキュリティオプション Yes No Visual StudioからDatabaseのチューニング Yes No Copyright© 2010, Oracle. All rights reserved. 5 充実した開発ツール • Visual Studio とも完全統合 Oracle Developer Tools for Visual Studio .NET IIS(ASP/ASP.NET) 開発作業 (ODT) C++ / C# MTS/COM 配布 VB.NET アプリケーション Microsoft アプリケーション データベース接続 IIS Visual Studio ストアド開発作業 データベース接続 Oracle Database Oracle Data Provider for .NET Extensions for .NET (ODP.NET) (ODE.NET) Oracle Services for MTS Visual Studio 2005, 2008 および.NET Framework 2.0/3.xに対応 Copyright© 2010, Oracle. All rights reserved. 6 Agenda • .NETとOracle Databaseについて • .NET開発者に必ず知ってほしいOracle Databaseの機能 • • • • Visual Studio + Oracleでサクサクアプリケーション開発 パフォーマンス・チューニング セキュリティ 可用性 Copyright© 2010, Oracle. All rights reserved. 7 Oracle データベース開発 皆さんどうしてますか? Oracle データベースのメンテナンス Oracle Enterprise Manager データメンテナンス SQL*PLUS, GUI TOOL, その他 アプリケーション開発 Microsoft Visual Studio PL/SQL開発 Oracle SQL Developer Oracle Developer Tools for Visual Studio .NETを利用すると、Visual Studioから上記全ての作業を実現 Copyright© 2010, Oracle. All rights reserved. 8 Oracle Developer Tools for Visual Studio .NET • Visual Studio .NET に密に統合されたアドイン • 使いやすくかつ強力な機能を開発者を提供 – Oracle Explorer • DB内部をツリー構造で表示 • すべての機能の出発点 – ウィザードとデザイナ • オブジェクトの追加/編集が簡単 – PL/SQLエディタ • PL/SQLのデバッグも可能 – Data Window • テストデータの確認/編集に便利 – Oracle Query Window • SQL*Plus代わりに使えるツール Copyright© 2010, Oracle. All rights reserved. 9 Oracle エクスプローラを利用した開発 OracleエクスプローラからOracleデータベースに格納されているオブジェクトを全て管理 Copyright© 2010, Oracle. All rights reserved. 10 PL/SQLストアドプロシージャの開発 PL/SQLエディタでコード補完、エラー内容の確認 Copyright© 2010, Oracle. All rights reserved. 11 PL/SQLストアドプロシージャのデバッグ Visual Studioのデバッグ機能を利用したPL/SQLストアドプロシージャのデバッグ Copyright© 2010, Oracle. All rights reserved. 12 Visual Studioからアプリケーションの作成 通常のデータベース・アプリケーション開発と同様 Copyright© 2010, Oracle. All rights reserved. 13 Visual Studioからアプリケーションの作成 .NETストアドプロシージャの開発も可能 Copyright© 2010, Oracle. All rights reserved. 14 Visual StudioからOracle DBのチューニング • Visual StudioからAutomatic Database Diagnostic Monitor(ADDM) 、SQL Tuning Adviserが使用可能 スナップショットの 差分を診断 起動 ADDM Microsoft Visual Studio 結果作成 AWR (自動・ワークリポジトリ) 結果表示 起動 診断結果 / アドバイス 結果表示 開発者 SQLチューニング ・アドバイザ 高負荷なSQL文 Copyright© 2010, Oracle. All rights reserved. 15 Agenda • .NETとOracle Databaseについて • .NET開発者に必ず知ってほしいOracle Databaseの機能 – – – – Visual Studio + Oracleでサクサクアプリケーション開発 パフォーマンス・チューニング セキュリティ 可用性 Copyright© 2010, Oracle. All rights reserved. 16 .NET + Oracleでしか出来ない一押し機能 ー パフォーマンス・チューニング ー Copyright© 2010, Oracle. All rights reserved. 17 ODP.NET チューニングポイント 1 ~ ラウンドトリップの回数を減らす ~ 取得レコードが多い場合、フェッチサイズによっては多くのラウンドトリップが発生 データ取得の際のパケットサイズを変更することにより、ラウンドトリップ回数を減少 FetchSize・・・デフォルト値は、65,536バイト Copyright© 2010, Oracle. All rights reserved. 18 ODP.NET チューニングポイント 2 ~ キャッシュの利用 ~ コネクションプール 1人目の初回アクセス時 1人目 Select * from emp DBサーバーへの問合せ 結果セットをデータ セットに格納 問合せ結果の返信 WEBサーバー DBサーバー コネクションプール 2人目のアクセス時 2人目 Select * from emp 結果セットをデータ セットに格納 データキャッシュから 結果を取得 WEBサーバー Copyright© 2010, Oracle. All rights reserved. DBサーバー 19 ODP.NET チューニングポイント 3 ~ コネクション・プーリング ~ コネクションプール無 Client数 = Connection 数 WEBサーバー DBサーバー コネクションプール有 Client数 > Connection 数 WEBサーバー Copyright© 2010, Oracle. All rights reserved. DBサーバー 20 ODP.NET ー ラウンドトリップの回数を減らす ー Copyright© 2010, Oracle. All rights reserved. 21 ODP.NET ラウンドトリップの回数を減らす ~フェッチ・サイズの制御 ~ エンドユーザーが大量のデータを使用する場合、アプリケーションによるデータ・フェッチの ラウンドトリップ回数を最小限にするための仕組み。 OracleCommand cmd = con.CreateCommand(); cmd.CommandText = "select * from fetch_test“; OracleDataReader dr = cmd.ExecuteReader(); dr.FetchSize = cmd.RowSize * numRows; while (dr.Read()) { rowsFetched++; } FetchSizeの値はデフォルトで、「64KB」に設定 Copyright© 2010, Oracle. All rights reserved. 22 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) End If Oracle Data Provider for .NET 11.1から小さなサイズのLOB検索のパフォーマンスが向上。この機能 拡張を使用できるのは、Oracle 11gリリース1.0以降のデータベース・バージョンで対応 Copyright© 2010, Oracle. All rights reserved. 23 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) Oracle Data Provider for .NET 11.1からの機能 Copyright© 2010, Oracle. All rights reserved. 24 ODP.NET ー キャッシュの利用 ー Copyright© 2010, Oracle. All rights reserved. 25 Oracle Database キャッシュの利用 ~ Result Cache ~ Oracle Datatbase 11g リリース 1.0の新機能 Inventory Inventory Orders Line Items Orders Line Items 従来のキャッシュ Back 読み込みブロック Pick 全体をキャッシュ Lists Orders 結果キャッシュ Back Orders Pick Lists SQL検索結果のみキャッシュ メモリの使用効率をあげ、レスポンスの高速化をはかる Copyright© 2010, Oracle. All rights reserved. 26 Oracle Database キャッシュの利用 ~ Result Cache ~ SQLの結果キャッシュによってキャッシュされた情報は SGA 上(共有プール 内の領域)に格納され、ユーザ間でその情報が共有される。 アクセス対象のテーブルのデータの更新が行われた場合、そのキャッシュ は無効になる。 キャッシュ済みの 結果が返され、高 SGA 共有プール 速レスポンス SQL結果キ ャッシュ Select … ユーザーA ① ② ③ Select … ユーザーB 大量データにアクセスするが、結果として返す行が少量な場合に非常に有効 例) 定型的なレポートなどのクエリー Copyright© 2010, Oracle. All rights reserved. 27 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の中にヒント句を入れることにより、クライアント・リザルト キャッシュ機能を有効にすることが可能 Copyright© 2010, Oracle. All rights reserved. 28 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; Copyright© 2010, Oracle. All rights reserved. 29 ODAC 11.1.0.7 新機能 – ODP.NET ステートメント・キャッシュの自動チューニング • 機能 – ODP.NETが自動的に稼動状態のモニタを行い、ステートメント・キャ ッシュ・サイズを最適な値に設定 – ステートメント・キャッシュによりSQL or PL/SQL のリパースを排除 – 実行頻度に応じてステートメント・キャッシュの大きさを動的に変更 Application (A) データアクセスが多い ODP.NET Cache(拡張) ODP.NET Cache データアクセスが少ない ODP.NET Cache Copyright© 2010, Oracle. All rights reserved. 30 Oracle Database キャッシュの利用 ~ SecureFiles ~ データベースへのラウンドトリップの回数を減らすことで、SecureFilesを使用する際の少量 のLOB検索のパフォーマンスが向上。この拡張機能はOracle 11gリリース1.0以降のデー タベース・バージョンでのみ使用可能 この拡張機能は開発者に対して透過的なので、コード変更は必要なし。 Copyright© 2010, Oracle. All rights reserved. 31 Oracle Database キャッシュの利用 ~ SecureFiles ~ • STORE AS SECUREFILE 句を使用して表を作成します SQL> CREATE TABLE t1 (c1 CLOB) 2 LOB (c1) STORE AS SECUREFILE ; • BASICFILE は以下のように利用します – デフォルト (STORE AS 句を指定しない場合) は、BASICFILE と して作成されます SQL> CREATE TABLE t1 (c1 CLOB) 2 LOB (c1) STORE AS BASICFILE ; Copyright© 2010, Oracle. All rights reserved. 32 Oracle Database キャッシュの利用 ~ SecureFiles ~ • 従来の LOB より、高速に処理可能 • 見込まれる性能改善の効果 –競合削減 –高いスループット –同時実行性の向上 –領域管理の最適化 • LOB 特有のチューニング・パラメータは不要 Copyright© 2010, Oracle. All rights reserved. 33 ODP.NET ー コネクション・プーリング ー Copyright© 2010, Oracle. All rights reserved. 34 Oracle Database コネクションプーリング ODP.NETの接続プーリング機能を使用すると、アプリケーションは事前に作成された接続 を用意するプールを作成および維持可能 • 接続プーリングを使用しない接続文字列(Pooling=FALSE) string no_pool = "User Id=hr; Password=hr; Data Source=oramag; Enlist=false; Pooling=false" • 接続プーリングを使用する接続文字列(Pooling=TRUE) string with_pool = "User Id=hr; Password=hr; Data Source=oramag; Enlist=false; Pooling=true" Poolingの値はデフォルトで、「TRUE」に設定 Copyright© 2010, Oracle. All rights reserved. 35 Oracle Database コネクションプーリング ~ OS認証でも利用可能 ~ 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認証でも接続プーリングが有効 Copyright© 2010, Oracle. All rights reserved. 36 Oracle Database コネクションプーリング ~ Perfmonでの確認 ~ Windowsパフォーマンス・モニター(Perfmon)を使用してODP.NETのコネクション・プーリ ング状況等を監視 ODP.NETのパフォーマンス・カウンタはOracle Data Provider for .NETというカテゴリ名で公開 Copyright© 2010, Oracle. All rights reserved. 37 ODP.NET ラウンドトリップの回数を減らす フェッチ・サイズの制御 エンドユーザーが大量のデータを使用する場合、アプリケーションによるデータ・フェッチの ラウンドトリップ回数を最小限にするための仕組み。 OracleCommand cmd = con.CreateCommand(); cmd.CommandText = "select * from fetch_test“; OracleDataReader dr = cmd.ExecuteReader(); dr.FetchSize = cmd.RowSize * numRows; while (dr.Read()) { rowsFetched++; } FetchSizeの値はデフォルトで、「64KB」に設定 Copyright© 2010, Oracle. All rights reserved. 38 ODAC 11.1.0.7 新機能 – ODP.NET ステートメント・キャッシュの自動チューニング • 機能 – ODP.NETが自動的に稼動状態のモニタを行い、ステートメント・キャッ シュ・サイズを最適な値に設定 – ステートメント・キャッシュによりSQL or PL/SQL のリパースを排除 – 実行頻度に応じてステートメント・キャッシュの大きさを動的に変更 Application (A) データアクセスが多い ODP.NET Cache(拡張) ODP.NET データアクセスが少ない Cache ODP.NET Cache Copyright© 2010, Oracle. All rights reserved. 39 .NET + Oracleでしか出来ない一押し機能 ー セキュリティ ー Copyright© 2010, Oracle. All rights reserved. 40 .NET 関連のセキュリティ機能 Windows Native認証を利用したユーザー認証 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認証でも接続プーリングが有効 Copyright© 2010, Oracle. All rights reserved. 41 .NET 関連のセキュリティ機能 Proxy認証を利用したユーザー認証 Dim conn As New OracleConnection( _ "User Id=user1;Password=xxxx;Proxy User Id=proxyuser;" + _ "Proxy password=xxxxxxxxxx;Data Source=orcl") プロキシ認証を行うた めの接続文字列 conn.Open() conn.close() 上記のサンプルコードを実行する前に、プロキシ認証を行うためのユーザーを作成します CREATE USER user1 IDENTIFIED BY oracle; GRANT CONNECT,RESOURCE TO user1; GRANT SELECT ON proxyuser.table1 TO user1; ALTER USER user1 GRANT CONNECT THROUGH proxyuser; Copyright© 2010, Oracle. All rights reserved. 42 .NET 関連のセキュリティ機能 ODAC 11.1.0 新機能 Oracle Providers for ASP.NET • ASP.NET 2.0に対応する以下の Provider を新たに提供 • メンバーシップ・プロバイダ • ロール・プロバイダ • サイト・マップ・プロバイダ • セッション・ステート・プロバイダ • プロファイル・プロバイダ • Webイベント・プロバイダ • Webパーツ・パーソナライズ・プロバイダ • キャッシュ依存性プロバイダ Copyright© 2010, Oracle. All rights reserved. 43 .NET + Oracleでしか出来ない一押し機能 ー 可用性 ー Copyright© 2010, Oracle. All rights reserved. 44 障害発生時にもアプリの停止時間は最小限 .NETアプリケーション ③アプリケーション ODP.NET へのイベント通知 論理コネクション ⑤接続を切替 物理コネクション 処理を継続 ④物理コネクション のシャットダウン ①障害発生 CRS CRS ②障害検知 Copyright© 2010, Oracle. All rights reserved. 45 ランタイム接続ロード・バランシング Oracle クライアント クライアント側のコネクション・キャッシュは、FANイ ベントで指示された割合でアプリケーション・スレッ ドにコネクションを渡します。 RLBに対応するコネクション・キャッシュを使用す る必要があります。 JDBC Driver 10g Release 2 以上 ODP.NET 10g Release 2 以上 .NET AP .NET AP コネクション キャッシュ SERVICE=service_A oracle oracle oracle instance1: 30% instance2: 30% instance3: 40% ロード・バランシング・アドバイザがサービスごとの 負荷配分の割合をFANイベントで指示します。 Copyright© 2010, Oracle. All rights reserved. 46 まとめ • .NETでもやっぱりOracle – Visual Studioとの高い親和性を実現 – 高品質な.NET + Oracleアプリケーションの開発が可能 .NETでもやっぱりオラクル! Copyright© 2010, Oracle. All rights reserved. 47 ITプロジェクト全般に渡る無償支援サービス Oracle Direct Conciergeサービスメニュー 業務改善計画の作成支援 • 業務診断サービス • BIアセスメントサービス システム運用状況の診断 •パフォーマンス・クリニック・サービス •システム・セキュリティ診断サービス •データ管理最適化サービス 経営企画 運用 システム構築時の道案内 •Access / SQL Serverからの移行 •MySQL / PostgreSQLからの移行 •Oracle Database バージョンアップ支援 •Oracle Developer Webアップグレード •システム連携アセスメントサービス 構築 IT 企画 システム企画の作成支援 •業務診断サービス •BIアセスメントサービス 設計 http://www.oracle.com/lang/jp/direct/services.html Copyright© 2010, Oracle. All rights reserved. RFP/提案書の作成支援 •BIアセスメントサービス •メインフレーム資産活用相談サービス •仮想化アセスメントサービス •Oracle Database 構成相談サービス •Oracle Database 高可用性クリニック 48 SQL Serverからの移行相談サービス URL : http://www.oracle.com/lang/jp/direct/service/s2o.html ① ② ヒアリング項目 • 現在ご利用中のSQL Serverのバージョンとエディション • 移行を検討されているOracle Databaseのバージョンとエディション • 既存/新規: O/S • 既存データベースのデータベースファイルの合計サイズ[およそ1GBの単位] • 移行の動機(ハードウェア・リプレース、パフォーマンス改善、コスト削減等) • 移行の懸念点(アプリケーションの互換性、パフォーマンス劣化等) • 移行予定(希望)時期 ③ ① 移行対象システム内容 及び現状の課題につ いてヒアリング ④ ② 最適な移行方法につ いてのガイドラインを提 示 ③ スムーズに移行できな い部分について、詳細 な移行方法をガイド Copyright© 2010, Oracle. All rights reserved. ④ Oracle Databaseに 移行後の運用管理/ 構成についてのご提案 49 • Oracle on Windows • 参考資料、コラム(オラクル都市伝説)、イベント・セミナー情報 etc • http://www.oracle.co.jp/campaign/mb_tech/ • Windows Server System Center / OTN Japan • http://www.oracle.com/technology/global/jp/tech/windows/ • .NET + Oracle Database • .NET Developer Center / OTN Japan http://www.oracle.com/technology/global/jp/tech/dotnet/ • 意外と簡単!? .NETでOracle / OTN Japan http://www.oracle.com/technology/global/jp/columns/easy/dotnet/ Copyright© 2010, Oracle. All rights reserved. 50 • オラクル都市伝説 / Oracle on Windows • http://www.oracle.co.jp/campaign/mb_tech/column/ • シーズン2 連載中! 其の一:地獄からの生還 本当にあった怖い話 其の二:喪われた時間を取り戻せ! ある男の過ち 其の三:ベテランエンジニアの魂がデータベースに宿る 其の四:本当にオラクルデータベースを選択すると「ソースコードがスリム 」になるのか?を徹底検証 其の五:悪魔が背後でせせら笑う!トラブルからあなたの生活を守れ! Copyright© 2010, Oracle. All rights reserved. 51 オラ98(キュッパ) Copyright© 2010, Oracle. All rights reserved. オラ98 で検索 52 あなたにいちばん近いオラクル Oracle Direct まずはお問合せください Oracle Direct 検索 システムの検討・構築から運用まで、ITプロジェクト全般の相談窓口としてご支援いたします。 システム構成やライセンス/購入方法などお気軽にお問い合わせ下さい。 フリーダイヤル Web問い合わせフォーム 専用お問い合わせフォームにてご相談内容を承ります。 0120-155-096 http://www.oracle.co.jp/inq_pl/INQUIRY/quest?rid=28 ※フォームの入力には、Oracle Direct Seminar申込時と同じ ログインが必要となります。 ※こちらから詳細確認のお電話を差し上げる場合がありますので、ご登録さ れている連絡先が最新のものになっているか、ご確認下さい。 ※月曜~金曜 9:00~12:00、13:00~18:00 Copyright© 2010, Oracle. All rights reserved. (祝日および年末年始除く) 53 Copyright© 2010, Oracle. All rights reserved. 54