Oracle Database 11g Express Editionクイック・ツアー

Przemyslaw Piotrowski著

新しいExpress Editionでは、Oracle Database 10.2.0.1以降のコード・ベースに対する重要な更新が反映されており、開発者およびDBAに数多くの価値をもたらすものとなっています。

2011年9月公開

この記事では、Oracle Database 11g Express Edition(XE)で導入されたおもな新機能について説明します。 このOracleの無料データベースの最新バージョンでは、Enterprise Edition 10.2.0.1から11.2.0.2にかけての重要な更新がパッケージ化されています (最新バージョンで、10gの4回のリリース・サイクルと、11gの4回のリリース・サイクルにおける変化の大きさが分かります)。 PIVOT演算子、セグメント作成の遅延、仮想列などの比較的シンプルな改善点から、画期的な適応カーソル共有、データベース常駐接続プーリング、エディションベースの再定義機能まで、この新リリースでは"エクスプレス版"RDBMSの新しい基準を設定しています。

増大する記憶域のニーズに対応して、Oracle Database 11g XEでは、ユーザー・データだけで最大11GB使用できるようになりました。以前のOracle Database 10g XEの制限である4GBと比較すると、3倍近く増加しています。 その他のハードウェアに関する制約は10gと同様であり、CPU利用数の上限は物理コア1つで、メモリ・サイズの上限は1GBです。 Oracle Database 11g XEは、まずWindowsプラットフォームとLinuxプラットフォーム向けにリリースされます。

これ以降、Oracle Database 11g Release 2で、Express Editionを使用して無料で利用できる機能について簡単に説明します。

インストールとアップグレード

この新バージョンのXEへのアップグレードは、Database Upgrade Assistant(DBUA)や手動のアップグレードなどの従来の方法と比較して非常に簡単です。 既存のデータベースからダンプを取得し、以前のリリースをアンインストールし、新しいリリースをインストールし、取得したダンプをインポートすれば、すべてのプロセスが完了します (注: Oracle Application Expressアプリケーションについてはこれとは別のプロセスとなり、完全ダンプからは除外されます。付属のgen_inst.sqlスクリプトがOracle Application Expressアプリケーションに関する処理を行います)。

 11g-xe-quicktour-f1

図1 インストール画面

このインストール手順では、通常の配置かサイレント・インストールのいずれかを実行でき、大規模な配置の場合でも、インストール・プロセスをスクリプトに簡単に記述できます。 詳細は、Oracle Database Express Edition Installation Guideを参照してください。このガイドでは、アップグレードの実行に必要なすべての手順を説明しています。

11g-xe-quicktour-f2

図2 新しいWebインタフェース

アプリケーション開発

Oracle Application Express(Oracle APEX)は、依然として活発に開発が進められているOracle Databaseの機能の1つです。Oracle Database 10g XE付属のOracle APEX 2.1リリース以降、2つの重要なマイルストーンが達成されました。 1つは、Oracle APEX 3.0で、PDFの印刷、Accessの移行、ページ・キャッシング、数々のビルダーの拡張機能が導入されたことです。 さらにもう1つは、リリース4.0です。リリース4.0は11g XEにOracle APEX 4.0.2という形でバンドルされており、Webシートが導入されました。Webシートは、公開されたデータのコンテンツと構造の両方をユーザーが管理できる、作業負荷の低いコンテンツ管理を実現する独自テクノロジーです。 その他の改善点として、ネイティブの動的アクション、プラグイン・フレームワーク、アプリケーション開発プロセスを効率的に進めるためのチーム機能、RESTful Webサービス、J2EE APEXリスナー、アプリケーション・ビルダーの改善などが含まれます (この記事の執筆時点の最新リリースはバージョン4.1です。バージョン4.1では、エラー処理の改善、フォームで主キーの代わりにROWIDを使用する機能の追加、スプレッドシートのアップロード機能の追加、ビルダーに対するさらなる改善が行われています)。

これらのリリースの詳細は、Oracle APEXの変更ログ(2.23.03.24.04.1)を参照してください。

11g-xe-quicktour-f3

図3 Oracle APEXホームページ

オラクルはこれまでオープンソースのPHPドライバ(OCI8)に対して数多くのコード提供を行ってきており、このモジュールではアプリケーションへの高速通知のサポートなどを含む、OCIドライバとの接続性と準拠状況が改善されました。 サーバー側接続プーリングのネイティブ・サポートによってWebトラフィックのパフォーマンスが向上するため、PHP開発者はこのメリットも享受できます。 この新リリースでのPHPの使用方法を詳細に学ぶ出発点としては、Oracle Learning Libraryおよび2日でPHP開発者ガイドが適しています。

オラクルのJavaデータベース・ドライバがJDBC 4.0標準にアップグレードされました。このJavaデータベース・ドライバでは、自動ローディング機能の追加、接続処理の改善、ROWID、XML、ANYTYPEの各データ型のサポートが提供されています。 その他の機能拡張として、SQL注釈の追加や例外処理の改善もあります。

.NET開発者にとって間違いなく価値があるのは、構成ファイルによるODP.NETのセットアップ機能、およびLOBの取得とコンテキスト・キャッシュにおけるパフォーマンス向上です。

SQL

SQLは、Oracle Database 11g、そしてその拡張版のXEで特に注目される分野の1つです。 際立った新機能の多くは、ここ数年のユーザーからのフィードバックに応えて実装されました。 その他にも、一歩先を進んだ、優れた新機能が開発ツールボックスに追加されています。

以前のリリースにおける新機能のNot Null列の追加は、特に行数が多い大規模な表にとっては大きな課題を提示しました。 Not Null列の追加のような操作を行うと、ALTER文の実行中に表全体がロックされるため、通常は何らかの複雑な回避策が必要でした。 Oracle Database 11g Release 2ではこのような状況にはなりません。必須列の追加方法を処理するための根本的に新しいアプローチを取り入れ、この問題を適切に回避しています。 Not Null列はすべての行で定数のデフォルト値を持ち、nullにはなりません。そのため、データ・ディクショナリのみに格納され、変更が一瞬で実行されます。

仮想列は、ユーザーにとっては通常の表の列のように認識される、名前付きの式です。 仮想列はディスク領域を消費しないため、ベース列から抽出した追加情報でベース列を補足する、優れた手段となります。 仮想列は、さまざまな方法での付加情報の提示機能を公開することによって、表とビューとのギャップを埋める役割を果たします。

多くの場合、索引の配置には誤った実行計画を選択するリスクが伴い、通常は事前に予測することはできません。 Oracle Database 11g Release 2では、そのようなリスクを軽減する不可視索引というまったく新しい方法が導入されました。 可視性により、OPTIMIZER_USE_INVISIBLE_INDEXESパラメータがTRUEに設定されたセッションのプライバシ内において、索引をサイレントに配置できます。このパラメータはシステム・レベルで設定することも可能であり、その場合、すべての非表示索引をオプティマイザに取得させるか、あるいはすべての非表示索引を無視することになります。 可視性に関するキーワードは、索引の作成中(CREATE INDEX … INVISIBLE)または作成後(ALTER INDEX … INVISIBLE)に指定する必要があります。 デフォルトでは、セッションに対して可視性が指定されていなければ、無視するようにサーバーが構成されます。

大きな期待を寄せられたSQL文字列の集計関数LISTAGGが、この正式リリースにも追加されました。 洗練されたシンプルな構文LISTAGG(...) WITHIN GROUP (ORDER BY …)は、使いやすいだけではなく、実行速度の観点からも、今日知られているあらゆる代替手段よりも高いパフォーマンスを発揮します。 また、新しい集計関数はLISTAGGだけではありません。ほかにも、ある範囲のn個目の値を取得でき、FIRST_VALUE関数とLAST_VALUE関数の間にあるギャップを埋める、NTH_VALUEがあります。 また、null値を無視する、LAG関数とLEAD関数が新たに使用可能となります。

11g-xe-quicktour-f4

図4 LISTAGGの使用例

列のトランスポートは、以前のバージョンのOracleでも可能でしたが、専用のSQL演算子PIVOTUNPIVOTの導入によってさらに簡単になりました。 行と列を交換してクロス集計形式の表を取得する操作を、1つの明示的な句を使用し、SELECT文に含めることで実現できるようになりました。さらに、標準提供のUNPIVOT機能を使用すれば、トランスポートされた結果を逆回転できます。 特に優れた機能として、PIVOTでは、XMLを出力として使用し、次のようにして任意の数の列に対する操作を実行できます。 (PIVOT XML (SUM(...) FOR … IN. (ANY))

再帰的副問合せのファクタリングは、ANSI SQL標準への準拠を向上させるためのオラクルの新機能の1つです。 11gより導入されたWITH句を使用して、再帰的な形をとることができます。つまり、WITHブロック内部から自身を参照できます。 もちろん、CONNECT BYをすぐに廃止するわけではありませんが、今後は階層データの操作で新しいWITH句の使用が推奨されます。

DBAがもっともよく使用するツール(SQL*Plus)にも、多くの改善が実施されました。 SHOWコマンドで、セッションのEDITIONが表示され、また、SPPARAMETERS句によってSPFILEの内容も表示されるようになりました。 さらに、新しいデバッグ・メカニズムが導入され、SET ONコマンドを使用して、SQL、PL/SQL、SQL*Plusのすべてのエラーを取得してエラー・ログ表に書き込めるようになりました。 さらに、BLOBの内容をコマンドラインに直接表示できるようになりました。

PL/SQL

ファイン・グレイン依存性追跡は、データベース内部のオブジェクト無効化を処理するための注目すべき新しいアプローチであり、開発者にとって非常に魅力的な機能の1つです。 以前は、子オブジェクトが変更の影響をまったく受けない場合でも、親オブジェクトに対するすべての操作で子オブジェクトが無効化されることもありました。 このリリースでは、無効化されるオブジェクトは、変更によって直接影響を受けるオブジェクトに限定されます。 PL/SQLのコーディング担当者は、この機能だけでもアップグレードに値すると思うに違いありません。

ネイティブのPL/SQLコンパイルが、サード・パーティ製のCコンパイラに依存しなくなりました。このリリースでは、セッション・レベル、オブジェクト・レベル、インスタンス・レベルのいずれかでPLSQL_CODE_TYPEをNATIVEに設定するだけで、PL/SQLコードをネイティブ・コンパイルできます。 外部コンパイラは必要なくなり、インタープリット済みのPL/SQLコードがコンパイル済みのM-Codeに透過的に変換されます。 コンパイル済みコードは、インタープリット済みコードよりも桁違いに速く実行でき、これにより驚くようなパフォーマンスの向上を無料で実現できます。

このリリースでは、トリガーに注目が集まっています。トリガーは、複合トリガーという形でもっとも重要な変更が加えられました。複合トリガーは、トリガーを起動する文のライフタイムの間にグローバルな状態を共有できる機能です。 複合トリガーを使用すると、表の変化による例外の発生を防止でき、また、エディション間を補完できます。 その他の改善点として、FOLLOWS句を使用して同じタイプのトリガーの順序を指定する機能、およびトリガーをDISABLEDとして作成する方法などがあります。

小さな拡張機能としては、新しい高パフォーマンスのPL/SQLデータ型(SIMPLE_INTEGER)、非常に要望の多かったループ用のCONTINUE文、順序の値を変数に直接代入する機能、32KB以上の動的SQL文のサポートなどがあります。

管理性

ここ数年間で、オラクルでは、停止時間を最小化するために多くのデータベース新機能を追加し、アプリケーションの可用性に影響を及ぼすほぼすべての分野に対処してきました。 ただし、ある特定のメンテナンス・タスクだけは、かならずアプリケーションを停止状態にして実行する必要がありました。 エディションベースの再定義(EBR)の導入によってこのギャップが解決されました。EBRは、アプリケーションのアップグレードにかかる停止時間を完全に排除するための革新的な新テクノロジーです。 この機能がXEにも含まれていることは喜ばしいことです。

採用されたアプローチは、データ・ディクショナリ自体にまったく新しい次元である エディションを追加することでした。 エディションとは、データベース・オブジェクト定義のリビジョンのことです。データベース・オブジェクト定義は階層的であり、データベース・レベル、セッション・レベル、OSレベルのいずれかで構成可能です。 必要な作業は、アップグレード中に、次にユーザーが再接続したときに参照するエディションに切り替えることだけです。

11g-xe-quicktour-f5

図5 エディションベースの再定義の操作

表自体はエディション化できないため(データのコピーが必要になるため)、表を進化させるための新しいオブジェクト型が導入されています。 それは、エディショニング・ビュークロスエディション・トリガーです。 これらは、オブジェクトの可視性を制御し、共存させるエディション間でデータを相互にポンプするために使用します。 EBRの詳細は、Oracle Database アドバンスト・アプリケーション開発者ガイドを参照してください。

メモリ管理に対する改善が10gより開始され、11gではさらに前進しました。 管理作業を可能な限り少なくするため、Automatic Memory Management(AMM)を使用してSGAとPGAをまとめて管理するようになりました。つまり、必要となるOLTPまたはバッチのニーズに合わせてSGA_TARGETPGA_AGGREGATE_TARGETを微調整する必要がなくなりました。Oracleでは、MEMORY_TARGETの単純な設定に基づいてメモリ割当てが調整され、必要に応じて拡大されます。 また、パラメータ・ファイル管理にも新機能が追加され、 PFILEをメモリから作成できるようになりました。 DBAは、間違いなくこの小さな機能を高く評価するでしょう。

中核となるセキュリティ・エンジンも、改善された機能の1つです。 もっとも注目に値する変更点は、パスワードで大文字と小文字が区別されるようになったことです。データベースへのログオン時に、Caps Lockが無視されなくなりました。 この改善点や、その他の認証に関する改善機能(ログイン失敗の最大回数の設定、バージョン・バナーを隠す機能、DoS攻撃の防止機能など)は、SEC_という接頭辞を含む新しいシステム・パラメータ・ファミリーを使用して管理されます。

インストール時に作成される数百の空の表を持つデータベース・アプリケーションでは、記憶域の消費量を減らすための優れた機能(セグメント作成の遅延)を利用できます。この機能は、すべての新規表においてデフォルトで有効化されています。 セグメント遅延を有効にして表を作成すると(CREATE TABLE … SEGMENT CREATION DEFERRED,)、データの初回挿入時までは記憶域が割り当てられません。 表のデータ入力がオプションであり、表が個々のアプリケーション・モジュールに付属するが、パッケージ全体を一度に出荷するような場合に、この動作によって大幅な領域を節約できます。 この機能は、インスタンス・レベルでDEFERRED_SEGMENT_CREATIONをFALSEに設定するか、表の作成時に明示的に指定することによって無効にできます(CREATE TABLE … SEGMENT CREATION IMMEDIATE)。

統計の収集が、自動メンテナンス・タスク・インフラストラクチャによって管理されるようになりました。 一般的にAutotaskと呼ばれるこの機能は、反復性のシステムの維持管理タスクの基礎となっており、DBA_AUTOTASK%ビューによって監視できます。

このリリースには、DBAの日々のタスクを容易にする小さな機能が多数付属しています。表を読取り専用にする機能(ALTER TABLE … READ ONLY)、従来のエクスポート・パラメータ・ファイルとData Pumpとの互換性、スクリプト内の変数に対するRMANのサポートなどです。

新しい初期化パラメータとして、DDL_LOCK_TIMEOUT(DMLロックに対するDDL文の待機時間の制御)、ENABLE_DDL_LOGGING(DDLによるすべての変更のアラート・ログへのレポート)、COMMIT_WAIT(REDOフラッシュ動作の構成)、DB_ULTRA_SAFE(I/O保護レベルの設定)など、多くのパラメータが導入されています。

最後に、驚くべき変更点として、アラート・ログがXML形式になり、トレース・ファイルがDIAGNOSTIC_DESTパラメータで指定された$ORACLE_BASE/diagの保存先に書き込まれるようになりました。 トレース・ファイルとログ・ファイルの場所は、ADR構造によって統制されるようになっています。

パフォーマンス

Oracle Database 11g Release 2では、すでに使用できる共有モードや専用モードに加え、まったく新しい接続タイプが導入されました。 特にWebトラフィックを考慮して作成されたデータベース常駐接続プーリング(DRCP)では、専用サーバーと接続ブローカを組み合わせて使用し、Webアプリケーションからの短い一時的なセッションを処理します。 さまざまな統計情報によると、DRCPは、共有サーバーと比較して10倍の速度、また専用サーバーと比較して20倍の速度を達成できます。 DRCPでは一連のタイムアウト、プール上限、セッション設定によってサーバー・リソースを浪費する問題が回避され、わずかな専用プロセスだけを起動してプールに対する接続を処理します。

デフォルト構成によるDRCPの設定は、次の2つの手順だけで行うことができます。 まずプールを起動し、次に(SERVER=DEDICATED)(SERVER=SHARED)の代わりに(SERVER=POOLED)を設定してTNSエントリを変更します。 この設定によって、データベースに対する新しい接続のすべてが、短時間だけ持続し、Oracleサーバーによって自動的にリサイクルされます。

11g-xe-quicktour-f6

図6 プール・サーバーの有効化とプールの接続性の確認

以前のリリースでは、指定されたバインド変数を使用してSQL文を最初に解析する際に、データベースではその実行計画がずっと維持されました。 また、バインド・ピーキング機能は均等に分散された値に対しては非常によく機能したものの、偏ったデータの処理にはそれほど効果的ではありませんでした。 Oracle Database 11g Release 2で導入された適応カーソル共有(ACS)は、この問題に対処するための機能であり、同じ文であってもバインドが異なる場合は複数の計画が維持されます。 そのため、実際のバインド値に基づいて実行計画を選択できます。 ACSはデフォルトで有効であり、無効にすることはできません。エンドユーザーと開発者にとっては完全に透過的な機能です。

また、Oracle Databaseエンジンの一部がゼロから再開発されました。 SecureFilesは、Oracleのラージ・オブジェクト(LOB)の新しい実装です。バッファI/Oアクセス、ASSM依存性、動的チャンク・サイズ、競合の削減、パフォーマンスの向上という観点から新たに考案された特性が備わっています。 SecureFilesは、LOB句によって個別に定義するか(LOB(...) STORE AS SECUREFILE)、DB_SECUREFILEパラメータをALWAYSにしてインスタンス・レベルで設定し、新しいLOBのすべてに適用されるようにします。 データベース内部のメディア・コンテンツを処理する際には、このリリース以降はSecureFilesが必然の選択肢となるでしょう。

以前からの優れた機能であるStatspackは、パフォーマンス統計情報の監視において重要な役割を担っており、リリースごとに数々の拡張機能が追加されています。 11g Release 2では、スナップショットの自動取得が可能になり、拡張レポート機能が搭載され、インスタンスのパフォーマンスに関する洞察がワンストップで得られます。 完全版のマニュアルについては、XEインストール先のORACLE_HOME/rdbms/adminディレクトリにあるSPDOC.TXTファイルを参照してください。

最後に、データ・ディクショナリでは、V$SESSION、V$SESSION_WAIT、V$SESSION_EVENTなどの待機イベントに関連するビューで高分解能のマイクロ秒単位の統計が得られます。パフォーマンス・チューニングのエキスパートであればこの機能を気に入ることでしょう。

追加情報

この記事によって、読者が新しいリリースに関してさらに情報を得たいという意欲を高められれば幸いです。 記憶域の上限増、開発上の拡張機能、そして管理性に対する改善点は、深く知っているほど確実に対価を得られます。 私は2005年の初期ベータ版よりExpress Editionに関わっており、開発者のラップトップや仮想マシン・ファームから、ISVのデモやアプリケーション・バンドルにいたるまで、Express Editionがあらゆる場所に配置される姿を見てきました。 この新しいリリースで、さらに使用範囲が広がることは間違いありません。


Przemyslaw PiotrowskiはSenior Database Administratorであり、最大可用性アーキテクチャとアジャイル開発環境に携わっています。 管理、開発、設計に関する実績が豊富にあり、Oracle Databaseとそのサポート・テクノロジーについて深い知識を持っています。