0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OCI上のWindows ServerからPerlを使ってOCI BaseDBへ接続する方法

Posted at

皆さん、Perlは好きですか?
私は大好きで今でもデータの抽出や加工に使っていたりします。
Linuxだとデフォルトで入っていますし、Windowsでもビルドしてあるものが配布されていたりして導入も簡単です。

今回は、Windows上のPerlからOracleDBへアクセスする方法を紹介します。
DBのデータをPerlでいじれるとかなり便利だと思います。

環境(前提)

●データベース → OCI BaseDB(OraceDB 19c Standard Edition)
PDBにテーブルを既に入れてある前提
●Windows → Windows Server 2022 Standard (OCI上に構築)
●OCI上のネットワーク
 VCNを構築済みでセキュリティリストでRDPで使うTCP/3389とOracleDBで使うTCP/1521が通る設定になっている事。

WindowsへPerlを入れる

WindowsにPerlを入れるとなるとActive PerlかStrawberry Perlになるかと思いますが、今回は比較的新しめのリリースのあるStrawberry Perlをインストールします。

対象のインストーラをダウンロード
こちらへアクセスして最新版をダウンロードしてインストールします。

ダウンロードしたらインストーラを実行。
30.jpg

31.jpg

32.jpg
33.jpg
34.jpg

UACからこのようなメッセージが出たら「YES」を押下してください。
35.jpg

36.jpg

37.jpg

無事にインストールが完了したらちゃんと実行できるか調べてみましょう。
コマンドプロンプトを開いて
perl -version
と入れてバージョンが表示されば無事にインストールされ、パスも設定されています。
38.jpg

Oracle Clientのインストール

次にOracleDatabaseへアクセスるために必要なOracle Clientをダウンロードします。
こちらにアクセスしてダウンロードします。
39.jpg

パッケージがいくつかありますが、Basic, sqlplus, sdkの3つをダウンロードします。
40.jpg

41.jpg

C:¥直下に「oracle」という名前のフォルダを作成します。
42.jpg

ダウンロードしたパッケージは3つとも中にinstantclient_21_9というフォルダが入っているので3つとも先ほど作成した「C:\oracle」へ入れます。
43.jpg

44.jpg

環境変数の設定

次に今コピーしたC:\oracle\instantclient_21_9へのパスを設定して、ORACLE_HOMEという環境変数も作成します。

まず、コントロールパネルを開きます。
44.jpg

カテゴリ順だとわかりずらいのでsmall iconsに切り替えます。
45.jpg

Systemを開きます。
46.jpg

右の方に「Advanced system settings」があるので開きます
47.jpg

下の方に「Enviroment Variables」があるので開きます。
48.jpg

下の「System variables」のペインの中にある「Path」を選択し、「Edit」ボタンを押下します。
49.jpg

右上の「New」ボタンを押し新しい値として「C:¥oracle¥instantclient_21_9」を入力し、下部の「OK」ボタンを押下します。
50.jpg

これでパスの設定はできました。
次に新たな環境変数の追加です。
Enviroment Variablsウィンドウの下の方にある「New」というボタンを押下します。
51.jpg

新しい環境変数を作成するウィンドウが開くので「ORACLE_HOME」という変数に「C:¥oracle¥instantclient_21_9」を値として入力し、OKを押下します。
52.jpg

パスが正しく通ったか動作確認をしてみます。
コマンドプロンプトを開いて
sqlplus
と入力し、下図のようにバージョンが出ればパスは通っています。
![53.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367![57.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/b1bdb211-f95e-71a8-0720-d398eb7144f4.jpeg)
692/5cfa49e8-39b0-a98c-725d-ea21d2d9a19c.jpeg)

Perlのライブラリを入れる

PerlでOracleDatabaseへ接続するライブラリを追加します。
コマンドプロンプトで
cpan DBD::Oracle
と入力します。
54.jpg

正常に終わると一番最後が「OK」になります。
55.jpg
ここでエラーになる場合はORACLE_HOMEという環境変数が正しく設定されていない可能性があります。

OracleDBの設定

次にOracleDatabaseへアクセスする情報が入っているtnsname.oraファイルを作成します。
C:¥oracle¥instantclient_21_9¥network¥admin配下にtnsnames.oraを作成します。

次に、接続先のBaseDBへログインし、そちら側のtnsnames.oraを確認します。
57.jpg

今回はPDBの方に接続するので赤枠のPDBの情報を先ほど作成したWindows側のtnsnames.oraにコピーします。
56.jpg

これでWindowsのコマンドプロンプトからsql plusを使ってBaseDBへアクセスできるはずです。
コマンドプロンプトで
sqlplus /@
を入力して接続先情報が出ればOKです。
59.jpg
試しにselect文を実行してみるとテーブルの中身が表示されます。

PerlからSQL文を実行してみる

ここまで出来たらあとはPerlからアクセスするだけです。
こんな感じのスクリプトを準備しました。

#!perl.exe

use DBI;

print "----------------------------------------\n";
print "|CATNO\t|NAME\t|COLOR|\n";
print "----------------------------------------\n";
$dbh = DBI -> connect("dbi:Oracle:PDB1","test","<パスワード>");
$sth = $dbh -> prepare('SELECT * from cat');
$sth -> execute();
while(@ary = $sth -> fetchrow){
	$i = 0;
	while($i < @ary){
		print "|" . $ary[$i] . "\t";
		$i++;
	}
	print "|\n";
}
$sth -> finish();
$dbh -> disconnect();

これを実行すると以下のような結果になしました。
61.jpg

PerlからSQL文を叩けるようになれば色々とデータをいじれて便利になりますね。

以上、OCIのWindowsServerからPerlでBaseDBへ接続する方法でした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?