タグ「Oracle」が付けられているもの

JDBC2.0から、スクロール可能なResultSetがサポートされています。それによって、ResultSetから、データをフェッチするときに、開始位置を指定したり、カーソルの移動を逆方向にすることができます。

このように便利な機能なのですが、Oracleで使用するときには、注意する必要があります。たまたまそのことを思い出したので、特に目新しいネタではないかもしれませんが、自分のメモを兼ねて、書いておこうと思います。

ResultSet からデータをフェッチする場合、setFetchSize(int)メソッドの規則に定められた行数のデータが、DBサーバから取得されるという前提で、プログラミングします。ところが、Oracleで「スクロール可能なResultSet」を使った場合、そのResultSetで対象となるデータが、一度に全件クライアント側にキャッシュされてしまいます。したがって、バッチ処理のように、大量のデータが対象になっていると、OutOfMemoryErrorが発生する可能性があるので注意が必要です。

以下に、そのことについて書かれた、Oracle社のドキュメントへのリンクを示しますので、詳細はそちらをご参照ください。
Oracle Database JDBC開発者ガイドおよびリファレンス 10g リリース2(10.2)
Oracle Database JDBC開発者ガイドおよびリファレンス 11g リリース1(11.1)

VMware Player, Ubuntu Linux + Oracle XE(追記)

前回、 いくつか、書き漏れていた点があるので、追記します。

  • runlevelについて
    Ubuntuのデフォルトのrunlevelは、2になっているようです。

    $ /sbin/runlevel
    N 2
    

    なので、ブート時には、/etc/rc2.dのスクリプトが実行されます。

  • Oracle XEの手動起動/停止
    [起動]
    $ sudo /etc/init.d/oracle-xe start
    
    [停止]
    $ sudo /etc/init.d/oracle-xe stop
    
    [状態確認]
    $ sudo /etc/init.d/oracle-xe status
    

  • 必要なswap容量
    こちらに書かれていますので、ご参照ください。
    今回使用した仮想マシンでは、以下の設定になっていますので、memesizeが384MBの場合はOKです。

    $ swapon -s
    Filename                                Type            Size    Used    Priority
    /dev/sda5                               partition       915664  54012   -1
    

    memsizeをあまり大きく設定してしまうと、制限に引っかかることになりますので、注意してください。

VMware Player, Ubuntu Linux + Oracle XE

前回VMware Playerで、Ubuntu Japanese Teamが用意しているVMware用仮想マシンを簡単に動かす方法について書きましたが、それだけだとあまり意味がないので、Oracle XEをインストールしてみました。私はふだん、1台のNote PC(Windows/XP)で、開発系の作業とメールやドキュメントの読み書きなどを行っています。そこに、Oracle XEをインストールして使っていたのですが、MS OfficeやEclipseなどと同時に動かすと、仮想メモリがかなりパンパンな状態になります。それを回避しようというのも、目的の1つです。
それが可能だと思ったのは、VMware Playerが使用する物理メモリの容量は、vmxファイルに設定する、memsizeというプロパティで制限をかけられるし、仮想メモリのswap領域も、VMware Playerの中で閉じるので、ホストOSであるWindows XP側のリソース消費量は減るであろうという、単純な発想です。

以下、試してみた結果について、説明します。

仮想マシンの準備

Linuxが使えるようになるまでの手順については、Ubuntu VMware Playerで、お手軽にLinux環境を手に入れようで説明していますので、よろしければ参考にしてください。
今回試した環境では、2GBのRAMが搭載されているPCで、仮想マシンのメモリーサイズは384MBに設定しました。

memsize = "384"

インストール

基本的なUbuntuへのインストールの手順は、Installing Oracle Database XE on Debian, Ubuntu, and Kubuntuの、[Update (March 2006)]という見出しがついたコメントの部分で説明されています。ここでは、それをベースに試してみた手順を簡単にまとめてみました。

  • /etc/apt/sources.listに、以下の行を追加する。

    deb http://oss.oracle.com/debian unstable main non-free

  • aptのキーをダウンロードしてインポートする。

    $ wget http://oss.oracle.com/el4/RPM-GPG-KEY-oracle  -O- | sudo apt-key add -

  • 現在ローカルにあるパッケージのリストを更新する。

    $ sudo apt-get update
    ....
    取得:6 http://oss.oracle.com unstable Release [2126B]
    ....
    

  • パッケージのダウンロードとインストールを実行する。
    $ sudo apt-get install oracle-xe-universal
    ....
    以下のパッケージが新たにインストールされます:
      libaio oracle-xe-universal
    ....
    oracle-xe-universal (10.2.0.1-1.1) を設定しています ...
    Executing Post-install steps...
    -e You must run '/etc/init.d/oracle-xe configure' as the root user to configure the database.
    ....
    

注意
今回は、問題なくインストールが行えたのですが、過去に、スワップ領域不足で失敗することがありました。でも、仮想マシンのハードディスクイメージのパーティション構成を変更することはできません。その場合は、Linuxのスワップ処理を最適化するためのヒントで説明されている、スワップファイルの作成を試してみてください。

インストール後の設定

  • サービス起動時の設定オプションを指定する。
    インストールの最後に表示された指示メッセージに従って実行します。

    $ sudo /etc/init.d/oracle-xe configure

    設定する項目は、以下の通りです。

    • Oracle Application Expressのポート番号
      デフォルトは8080なので、Tomcatをいっしょに動かす場合には、変更しておきたいところです。
    • TNS Listnerのポート番号
      デフォルトの1521にしておくのが妥当ですね。
    • SYSとSYSTEMのパスワード
    • システムブート時に自動起動するかどうか
      /etc/rc2.dに、S20oracle-xeというシンポリックリンクが作られます。自動起動をやめたい時は、K20oracle-xeにリネームします。

  • その他知っておくと便利なこと

    いずれも、Oracle Database Express Edition Installation Guideにて説明されていることですが、簡単にまとめておきます。

    • クライアント環境変数の設定
      $ . /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh
      

      詳細は5.2 Setting the Oracle Database XE Client Environment Variablesを参照してください。

      注意
      実際には、このスクリプトにはバグがあるようで、以下のようなエラーメッセージが出ます。

      /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/nls_lang.sh: 114: [[: not found
      /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/nls_lang.sh: 114: [[: not found
      

      その回避策が、Bearded Magnum - Oracle-xe on Ubuntuで説明されていますので、よろしければ、お試しください。
      /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/nls_lang.shを、以下の通り修正します。

      108c108
      < if [[ -n "$LC_ALL" ]]; then
      ---
      > if [ -n "$LC_ALL" ]; then
      110c110
      < elif [[ -n "$LANG" ]]; then
      ---
      > elif [ -n "$LANG" ]; then
      

    • Oracle Application Expressを、ホストOS側のWebブラウザからも使用できるようにする。
      デフォルトでは、ローカルのWebブラウザからしか使用できないようになっていますが、ホストOS側から使えた方が、何かと便利なので、この設定は行っておいた方がいいと思います。

      $ sqlplus system
      ....
      パスワードを入力してください:
      
      
      Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
      に接続されました。
      SQL> EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);
      
      PL/SQLプロシージャが正常に完了しました。
      

      詳細は、Oracle Database Express Edition Installation Guide4.4 Making Oracle Database XE Server Available to Remote Clientsを参照

以上で、セットアップは完了です。

今回の環境では、仮想マシンに384MBのRAMを割り当てていますが、その設定では、VMware Playerが、常時450MB程度のRAMを使用するようです。単独で動かす場合には、パフォーマンスの問題はないと思いますが、ホストOS側で、一緒に動かすアプリケーションによっては、たまに、レスポンスが遅くなることはあるようです。

今後、もう少し様子を見つつ使って行って、本当に問題がなさそうであれば、Windows側のOracleXEはアンインストールしようと考えています。

J2EE系の開発をしている場合、プロダクション環境はLinuxであることも多いと思います。そんなときに、自分で自由に使えるLinux環境があると、事前の確認作業などで、何かと役に立ちますので、VMware + Linuxという環境を作っておくこと自体は、おすすめします。

参考資料

普段仕事に使っているPCはWindowsXPだけど、手軽に動かせるLinux環境が欲しいと感じている人は多いと思います。今まで、MicrosoftのVirtualPC2007 + Fedora Core 5を使っていたのですが、動きが重たいのと、マウスが正しく認識されないという問題があり、乗換え先の1つの選択肢として、VMware Playerを試してみました。 たぶん、この手の情報は、ネット上にたくさんあると思いますが、とりあえず私がやったときの手順を、メモも兼ねて、書いておきます。

用意するもの

  • VMware Player
    ここからダウンロードして、インストールします。
  • 動かす仮想マシン環境
    VMware Playerは、実行のみが可能であるため、自分が実行したい仮想マシン環境を準備する必要があります。

    • Vmwareの製品版で作成する。
      VMware Workstationなどの製品版があれば、それを使って作成するのが基本です。
      でも、製品版を持っているのであれば、Vmware Playerを使う必要はないですよね。。。
    • すでに構成済みの仮想マシン環境を入手する。
      ここで紹介するのは、こちらの方法です。
      何のディストリビューションを使用するのかということにこだわりがなければ、Ubuntu Japanese Teamが用意しているVMware用仮想マシンを使うのが、最も簡単な方法だと思います。
      そこからダウンロードしたZIPファイル(ubuntu-ja-7.10-vmware-i386.zip)を、任意の場所に解凍します。 ZIPファイルが、約700MB、解凍後のファイルが約2.5GBなので、それに見合った空き容量が必要です。 さらに、その後、追加のパッケージをインストールしたりしていると10GB以上になる可能性があるので、できれば20GB以上の空き容量は確保しておいた方がいいと思います。

vmxファイルのカスタマイズ

解凍後のフォルダにあるUbuntu-7.10-Desktop.vmxは、そのままでも、ほとんどのPCで問題なく使用できると思いますが、環境によっては、事前に変更しておいた方がいいものがあります。

  • PCにCD-ROMドライブが接続されていない場合
    この初期設定では、PCにCD-ROMドライブが接続されていることが前提のようです。私のPCには、普段は接続していないので、「仮想デバイスide1:0に接続できません。一致するデバイスがホストに存在しません。仮想マシンをパワーオンする度に、この仮想デバイスに接続を試みますか」というメッセージが表示されました。これが出ないようにするには、vmxファイルの以下の行を編集しておきます。

    変更前 ide1:0.deviceType = "cdrom-raw"
    変更後 ide1:0.deviceType = "cdrom-image"
    

  • VMware Playerに割り当てるメモリ容量を増やしたい場合

    変更前 memsize = "256"
    変更後 memsize = "512"
    

  • DHCPから、複数のIPアドレスを取得できない場合
    以下の1行を追加し、ネットワークをNATモードにしておきます。

    ethernet0.connectionType = "nat"
    

VMware Player起動する。

解凍したファイルの中にある、Ubuntu-7.10-Desktop.vmxをダブルクリックすれば、起動されます。

起動すると、Ubuntu Linuxの初期設定を行うための画面が表示されます。 最初に出てくるのは、「言語の設定」画面です。

ubuntu-03.JPG

あとは、「言語の設定」→「タイムゾーン設定」→「キーボードレイアウト」→「あなたは、誰ですか?」という順に、画面の指示に従って、設定して行くと、ログイン画面が表示され、設定完了です。
但し、このままでは最小限のパッケージしかインストールされていないので、あとは、自分で必要なソフトウェアを追加していきましょう。

私は、とりあえず、Oracle Database 10g Express Edition (Oracle XE)をインストールしましたが、そこそこ快適に動いています。Oracleが使用する物理メモリが、VMwareによって制限されるため、Windows側のリソース消費という意味では、効率的かもしれません。
Oracle XEのインストール手順については、ちょっとだけ面倒な部分がありますが、それについてはまた後日、書きたいと思っています。

オラクル、BEA買収を約67億ドルで提案

個人的に、衝撃的なニュースが入ってきました。

オラクル、BEA買収を約67億ドルで提案:ニュース - CNET Japan

Reutersの報道によると、Oracleが米国時間10月12日、BEA Systemsの買収を約66億6000万ドルで提案したことを明らかにしたという。

今後の動向に注目したいと思います。

1

最近のブログ記事

Oracle JDBCのスクロール可能なResultSetに注意
JDBC2.0から、スクロール可能なRe…
kimada's tributary weblogを始めました。
ちょっと思いついた比較的軽めの話題につい…
Adobe AIRのアーキテクチャ選択について
現在、多くのWebアプリケーションは、A…