Debianにoracle-xe-client_10.2.0.1-1.0とcx_Oracleのインストール
Windows上のPythonからDebianのOracleへのアクセスを試しました。PythonからOracle xe universal 10g R2 へのデータ登録とインデックスの作成
せっかくなので、別のDebian端末からOracleをインストールしているDebian端末への
接続を試してみます。
前提条件
Oracle本体と同様、swapメモリに制限があります。
どうやら、swapが500MB以上必要な模様。
何も知らずにインストールしようとしたら、こんなエラーが表示されました。
(oracle-xe-client_10.2.0.1-1.0_i386.deb から) oracle-xe-client を展開しています...
This system does not meet the minimum requirements for swap space. Based on
the amount of physical memory available on the system, Oracle Client 10g
Express Edition requires 500 MB of swap space. This system has 357 MB
of swap space. Configure more swap space on the system and retry the installation.
dpkg: oracle-xe-client_10.2.0.1-1.0_i386.deb の処理中にエラーが発生しました (--install):
サブプロセス pre-installation script はエラー終了ステータス 1 を返しました
以下のパッケージの処理中にエラーが発生しました:
oracle-xe-client_10.2.0.1-1.0_i386.deb
DebianにOracle xe universal 10g R2 をインストール
ここと同様の手順で、swapを増やしておきます。
###swap領域を作成
# mkdir -p /mnt/swap
# cd /mnt/swap/
# dd if=/dev/zero of=swapfile bs=1M count=1024
# mkswap swapfile
# swapon swapfile
###fstabへ設定を追加
# vi /etc/fstab
/mnt/swap/swapfile none swap sw 0 0
もう一つ、インストール時に必要なライブラリをインストールしておきます。
# apt-get install libaio1 bc
モジュールのダウンロード
http://www.oracle.com/technology/products/database/xe/index.html
上記URLの右側、FREE DOWNLOADの下、Linuxを選択します。
oracle-xe-client_10.2.0.1-1.0_i386.deb をダウンロード。
ダウンロードしたモジュールをDebianにコピーします。
oracle xe clientのインストール
dpkgコマンドでインストールを実行します。
# dpkg -i oracle-xe-client_10.2.0.1-1.0_i386.deb
私の環境だけかも知れませんが、oracleというユーザーの作成がエラーになり、
インストールに失敗しました。
※bcのインストールを忘れていたら発生する?
手動でoracleユーザーの追加を行い、パッケージを一旦削除。
その後、インストールを実行したら、ちゃんと入ってくれました。
###oracleユーザーの追加
# useradd oracle
###oracle-xe-clientパッケージの削除
# dpkg -r oracle-xe-client
インストール後、ORACLE_HOMEを設定するため、.bash_profileに設定を仕込みます。
# vi ~/.bash_profile
###以下の行を追加(.を忘れずに!)
. /usr/lib/oracle/xe/app/oracle/product/10.2.0/client/bin/oracle_env.sh
###設定内容を反映
# source ~/.bash_profile
これでsqlplusが起動できるようになります。
接続テストして見ます。
接続は
sqlplus [ID]/[パスワード]@[Oracleサーバー]
# sqlplus test/[email protected]
SQL*Plus: Release 10.2.0.1.0 - Production on
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
に接続されました。
SQL> select count(*) from post;
COUNT(*)
----------
122877
SQL> quit;
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Productionとの接続が切断されました。
いい感じです。
cx_Oracleのインストール
Windowsでは、インストーラーからモジュールのインストールを行いましたが、
Debianからはeasy_installでインストールしてみます。
# easy_install cx_Oracle
これであっさりインストールできました。
サンプルコードを書いて、テストしてみます。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import cx_Oracle
con = cx_Oracle.connect("test/[email protected]")
ora = con.cursor()
ora.execute("select * from post where zip_code='9040000'")
row = ora.fetchone()
while row != None:
print row[0],row[1]
row = ora.fetchone()
# カーソルを閉じます。
ora.close()
# 接続を終了します。
con.close()
実行してみると・・・
# python test.py
9040000 沖縄県沖縄市以下に掲載がない場合
上手く動いてくれているようです。