Oracle 関連

2005/06/29 更新

 Windows 2000  + Oracle 9i Release2 (9.0.2) に、Oracleの モジュール& Product をインストールした時のメモです。
特に、Linux/Solaris 用の配慮をした記述をしていないので、Windows以外の人にはあまり参考にならないかも知れません。

1.DCOracle2

ダウンロード

 http://www.zope.org/Members/matt/dco2 からアーカイブをダウンロードしてきます。

 特定プラットフォーム用のアーカイブというのはなくて、ひとつのアーカイブの中に、いろいろなプラットフォーム用のバイナリが入っているようです。私は、DCOracle2-1_3b.zip を落としました。

 落としてきたアーカイブを解いて、DCO2 というフォルダを ZOracleDA という名前に変えて、 site-packages にコピーします。

インストールスクリプトの実行

環境変数 ORACLE_HOME が設定されていない場合、設定します。

C:\Zope\lib\python\Prodcuts\ZOracleDA>SET ORACLE_HOME=C:\oracle\ora92

(Windows の場合、ここで設定する値が何で合っても、結局レジストリから取得する模様)

次に、install.py を実行します。

C:\Zope\lib\python\Prodcuts\ZOracleDA>..\..\..\..\bin\python install.py

Zopeで Oracle の DA が使えればよいのであれば、これでおしまい。

Pythonから DCOracle2 を使えるようにする

  ExternalMethod等から、DCOracle2 (Pythonの DB module)を使えるようにするには、 $(INSTANCE_HOME)/lib/python/Products/ZOracleDA にある DCOracle2 を $(INSTANCE_HOME)/lib/python に移動します。(別途インストールした Pythonから Zopeを起動するのであれば、そちらに)

connect のパラメータは 'user/password@TNS' で指定します。
使い方は、こんな感じ

C:\>python
Python 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] on win32
Type "copyright", "credits" or "license" for more information.
>>> import DCOracle2
>>> conn = DCOracle2.connect("scott/tiger@ora92")
>>> cur = conn.cursor()
>>> cur.execute("select * from emp")
1
>>> cur.fetchone()
[7369, 'SMITH', 'CLERK', 7902, OracleDate("1980-12-17 00:00:00"), 800.0, None, 20]
>>>

 

2.cx_Oracle

  こちらは、Python module で、Zopeの DAはありません。

 また、Pythonのインストールパスを、レジストリから取得するので、Zopeに同梱されている Pythonにインストールできません。
逆に、インストーラーからインストールした Pythonには、cx_Oracle のインストーラーを実行するだけで、自動的にインストールできます。
ですので、気をつけるのは、Pythonのバージョンにあったものをダウンロードすることくらいでしょうか。

connect のパラメータは 'user/password@TNS' で指定します。
使い方は、こんな感じ

C:\oracle\ora92>python
Python 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] on win32
Type "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
>>> conn = cx_Oracle.connect("scott/tiger@ora92")
>>> cur = conn.cursor()
>>> cur.execute("select * from emp")
[<NumberVar object at 0131EDD0>, <StringVar object at 0094EC00>, <StringVar object at 0094EB70>, <NumberVar object at 0131EE28>, <DateTimeVar object at 0094EB28
>, <NumberVar object at 0131EE80>, <NumberVar object at 0131EED8>, <NumberVar object at 0131EF30>]
>>> cur.fetchone()
(7369, 'SMITH', 'CLERK', 7902, 1980-12-17 00:00:00, 800.0, None, 20)
>>>
なんか DCOracle2 と返す型が微妙に違う・・・

3.おまけ

リンク

サービスについて(ごく個人的なおぼえがき)

 とにかく、何でもいれちゃえ!っと「 Enterprise Edition」 で「汎用目的」でインストールすると以下のサービスが自動に設定される。(Oracle Home名が OraHOme92、SIDが XXXXの場合)

このうち、以下のサービスはいらないので停止してよい

ただし、存在したり、デフォルトで自動になっているサービスは、Oracle のバージョンによってもころころ変わるらしい。


Zope メモ