ubuntu 22.04にOracle クライアントをインストールしてSQL*Plusで接続するまで

ubuntu 22.04にOracle クライアントをインストールしてSQL*Plusで接続するまで

こんにちは、シーイーオーです。

最近はAmazon Linux2すら触っていない自称フルスタックです。

珍しくOracle を使ったシステム開発を受注したので、WEBサーバからOracleへ接続するための環境を構築手順についてのメモを残します

Oracle クライアントダウンロード

OracleのInstant clientsダウンロードサイト https://www.oracle.com/jp/database/technologies/instant-client/downloads.html から以下4つをダウンロードします。

今回のクライアントは ubuntu なので Instant Client for Linux x86-64 この辺からダウンロードます。

$ wget https://download.oracle.com/otn_software/linux/instantclient/217000/instantclient-sqlplus-linux.x64-21.7.0.0.0dbru.zip
$ wget https://download.oracle.com/otn_software/linux/instantclient/217000/instantclient-tools-linux.x64-21.7.0.0.0dbru.zip
$ wget https://download.oracle.com/otn_software/linux/instantclient/217000/oracle-instantclient-tools-21.7.0.0.0-1.el8.x86_64.rpm
$ wget https://download.oracle.com/otn_software/linux/instantclient/217000/oracle-instantclient-devel-21.7.0.0.0-1.el8.x86_64.rpm

Oracleクライアントインストール

最初は rpm コマンドでインスロールしようとしたけど、glibcのバージョンが高すぎるのか低すぎるのか怒られたので、ubunutuに関係ありかも分からず、rpmでのインストールは諦め、alien を使ってできるっていう記事を参照にインストールします。

まずは、update,upgrade そして alienのインストールを行います。libaioは libaio1って”1″をつけるらしいです。既にインストールされているかもしれません。

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install libaio1
$ sudo apt-get install alien

次にダウロードしてきた各種rpmをalienコマンドでdebに変換します。

変換しときにwarningが結構出ますが無視して大丈夫です。インストールできたので。

$ sudo alien oracle-instantclient-basic-21.7.0.0.0-1.el8.x86_64.rpm 
$ sudo alien oracle-instantclient-sqlplus-21.7.0.0.0-1.el8.x86_64.rpm 
$ sudo alien oracle-instantclient-tools-21.7.0.0.0-1.el8.x86_64.rpm 
$ sudo alien oracle-instantclient-devel-21.7.0.0.0-1.el8.x86_64.rpm 
warning: oracle-instantclient-basic-21.7.0.0.0-1.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ad986da3: NOKEY

変換できたら dpkg コマンドでインストール 特にエラーがなければ問題なし、インストールはこれで終わり

$ sudo dpkg -i oracle-instantclient-basic_21.7.0.0.0-2_amd64.deb oracle-instantclient-sqlplus_21.7.0.0.0-2_amd64.deb oracle-instantclient-tools_21.7.0.0.0-2_amd64.deb oracle-instantclient-devel_21.7.0.0.0-2_amd64.deb 

環境変数の設定

次にprofileにOracleの環境変数を設定します。環境変数は環境に合わせて設定してください。

最後の$TNS_ADMINは tnsnames.oraを保存した場所です。 他の場所でも問題なし

$ sudo vim ~/.profile
以下を最後に追加

# set Oracle Prameter
export LD_LIBRARY_PATH=/usr/lib/oracle/21/client64/lib
export NLS_LANG=Japanese_Japan.UTF8
export PATH=$PATH:/usr/lib/oracle/21/client64/bin
export TNS_ADMIN=/usr/lib/oracle/21/client64/bin

必要なら tnsnames.ora ファイルも設定します。設定するHOST、PORT、SERVICE_NAMEはDBAというか管理者に聞いてください。

$ sudo vim /usr/lib/oracle/21/client64/bin
新規なので、何もないファイルに以下追加

hogehoge =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.8.x.x)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = xxxxxxx.xxxxxx.xxxxxxx.com)
    )
  )

ログインし直すか、環境変数をコマンドを実行して、SQL*plusを確認してください。

SQL*Plusで接続する

Oracleへの接続テストを行います。 接続するためのユーザID、パスワードはDBAというか管理者に確認してください。 SQL*plusで接続する方法はtnsnames.oraの接続詞を使うか全て書く方法の両方ありますので、以下参照ください。

tnsnames.oraを使わない場合

$ sqlplus user/password@host:port/service_name

SQL*Plus: Release 21.0.0.0.0 - Production on 水 9月 14 09:18:42 2022
Version 21.7.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

最終正常ログイン時間: 火 9月  13 2022 20:25:01 +09:00


Oracle Database 19c EE High Perf Release 19.0.0.0.0 - Production
Version 19.16.0.0.0
に接続されました。
SQL> 
tnsnames.oraを使う場合

$ sqlplus user/password@hogehoge

SQL*Plus: Release 21.0.0.0.0 - Production on 水 9月 14 09:18:42 2022
Version 21.7.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

最終正常ログイン時間: 火 9月  13 2022 20:25:01 +09:00


Oracle Database 19c EE High Perf Release 19.0.0.0.0 - Production
Version 19.16.0.0.0
に接続されました。
SQL> 

ついでにPHPのOCI8も設定してしまう

色々試した結果、pearからpecl installを使って対応するのが簡単で早い事が判明

pearをインストールします。

$ sudo apt-get insatll php-dev php-pear 

peclコマンドでOCI8インストール

$ sudo pecl channel-update pecl.php.net
$ sudo pecl install oci8

php.ini ファイルでOCI8読み込み設定をします。

php.iniが複数存在しています。どこのphp.iniを利用しているかは以下で確認ください。 cliの部分がapache2になっている場合もあります。私は結構ハマりました。違うphp.iniをいくら修正しても反映されません。。。。。。

$ php -i | grep php.ini
Configuration File (php.ini) Path => /etc/php/8.1/cli
Loaded Configuration File => /etc/php/8.1/cli/php.ini

以下でphp.iniの最後に追加して、WEBサーバを再起動します。 読み込まれた事を確認して終了。

$ sudo echo "extension=oci8.so" >> /etc/php/8.1/cli/php.ini
$ sudo systemctl restart apache2
$ php -m
[PHP Modules]
calendar
Core
ctype
curl
date
dom
exif
FFI
fileinfo
filter
ftp
gd
gettext
hash
iconv
imagick
json
libxml
mbstring
mysqli
mysqlnd
oci8
openssl
pcntl
pcre
PDO
pdo_mysql
Phar
posix
readline
Reflection
session
shmop
SimpleXML
sockets
sodium
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
xml
xmlreader
xmlrpc
xmlwriter
xsl
Zend OPcache
zip
zlib

[Zend Modules]
Zend OPcache

$ $ php -i | grep oci8
oci8
oci8.connection_class => no value => no value
oci8.default_prefetch => 100 => 100
oci8.events => Off => Off
oci8.max_persistent => -1 => -1
oci8.old_oci_close_semantics => Off => Off
oci8.persistent_timeout => -1 => -1
oci8.ping_interval => 60 => 60
oci8.prefetch_lob_size => 0 => 0
oci8.privileged_connect => Off => Off
oci8.statement_cache_size => 20 => 20

phpinfo(); で確認しても良いです。

ハマりポイントはphp.iniのpath間違い、Oracleの環境変数かと、ORACLE_HOMEは設定しなくても動作に影響はありません。必要なら環境変数に追加してみてください。

Uncategorizedカテゴリの最新記事