はじめに
既存のオンプレミス環境で、Oracle Database と SQL Server で DBLink 構成をしている時があります。この Oracle Database を RDS for Oracle に移行したあとも、引き続き DBLink を利用できます。だた、RDS for Oracle 上に Database Gateway for ODBC を構成することは出来ないので、EC2 の上で Database Gateway for ODBC を構成する必要があります。
今回は個人用途として技術的な検証を行っていきます。本番環境のときには、ぜひライセンス周りも確認してみてください。
構成図
この記事の構成図を紹介します。
登場するコンポーネントは以下の 4 つがあります。
- 作業用の EC2
- SQL Developer や、SQL Server Management Studio など、クエリーを発行するためのツールを利用するための作業用マシン
- RDS for Oracle
- DBLink を作成する元となる Oracle Database
- Database Gateway for ODBC を稼働する EC2
- Database Gateway for ODBC を動かして、ODBC 経由の DBLink を動かす
- SQL Server (この記事では RDS for SQL Server を利用)
- DBLink で参照先となる SQL Server
それぞれの設定方法を紹介していきます。
Database Gateway for ODBC
Database Gateway for ODBC を動かす EC2 インスタンスに関する設定です。
EC2 Instance
今回の手順では、Windows Server 2022 を EC2 インスタンスで用意します。
スペックについて、以下の Oracle 側の Document に記載があります。仮想メモリが RAM の 2 倍とありますが、メモリースワップは基本的にしたくないと思うのでメモリ 2 GB 以上を用意すると良さそうな気もします。
Download
構成した Windows Server の EC2 インスタンスに、Database Gateway for ODBC のインストーラーをダウンロードします。
以下の URL からダウンロードをします。
OTN ライセンスを確認し、ログインをしつつダウンロードを行います。
Install
ダウンロードしてきた Zip ファイルを使って、Database Gateway for ODBC のインストールを行います。
Zip ファイルを展開します。C ドライブ直下で展開しました。
展開したフォルダの中にある setup.exe を実行します。
インストーラーが立ち上がり、次へを選択します。
インストール先を選択しますが、今回はデフォルトのまま次へを押します。
Database Gateway for ODBC を選択して次へを押します。
待機します
インストールを押します
インストールが進み、、、
自動的に Oracle Net Configuration Assistant に関する設定ウィザードも表示されたので、次へを押します
リスナー名は後から変更するので、適当に入力します。
デフォルトのまま次へを押します。
標準のまま次へを押します。
次へを押します。
次へを押します。
はいで、次へを押します。
次へを押します。
サービス名は後から設定変更するので、適当に入力します。
TCP
これも後から変更するので、適当に入力します。
いいえで、次へを押します。
次へを押します。
いいえで、次へを押します。
次へを押します。
終了を押します。
閉じるを押します。
すると、次の指定したディレクトリにインストールがされました。
RDS for Oracle
Create
RDS for Oracle を作成します。特殊な設定は無いので、普通に作成します。
Create database を押します。
今回は、Oracle 19c を選びます。
名前やパスワードを指定します。
instance type を選択し
Storage に関する設定を入れます。
Multi-AZ を選択しておきます。
Network に関する指定をします。
Security Group を指定します。
このあたりはデフォルトのままで行きます。
他はデフォルトのまま Create database を押します。
Creating となり、一定時間後に Available に変わります。
Endpoint が確認できます。これは VPC の中に構成されています。
DB name が、ORCL となっている事を確認しました。これは、SQL Developer などで接続するときに使用する SID なので、メモっておきましょう。
SQL Developer で接続
SQL Developer から RDS for Oracle に接続できることを確認します。SQL Developer を次の URL からダウンロードします。
接続を作成します。
ユーザー名とパスワードなどを指定して、接続をします。
接続できました。
RDS for SQL Server
Create
SQL Server も準備します。EC2 上でもいいのですが、RDS for SQL Server を利用する事にします。
名前やパスワードなどを指定します。
Instance Type を選択します。
Storage を選択します。
Network に関する指定をします。
Security Group などを指定します。
あとはデフォルトのまま Create を押します。
Creating となり、一定時間後に Available に変わります。
Microsoft SQL Server Management Studio
作成した RDS for SQL Server に接続するため、Microsoft SQL Server Management Studio を利用します。次の URL からダウンロードします。
SQL Server のホスト名やパスワードを指定して接続します。
接続できました。
テスト用のテーブル作成
SQL Server に動作確認用のテスト用テーブルとデータを入れます。
New Database を押します。
Database name に、testdb を入力します。
あたらしいテーブルを作成します。
テーブルを作成して
CREATE TABLE testtable (
UserID INT,
Name VARCHAR(50)
);
テスト用のデータを INSERT します。
INSERT INTO testtable VALUES(1, 'suzuki');
INSERT INTO testtable VALUES(2, 'sato');
Database Gateway for ODBC の設定
Database Gateway for ODBC の EC2 上で、設定をしていきます。
初期化パラメータファイルの作成
Database Gateway for ODBS に関する次のディレクトリを開きます。
C:\app\tg\Administrator\product\19.0.0\tghome_1\hs\admin
サンプルファイルの initdg4odbc.ora があります。これを編集します。
HS_FDS_CONNECT_INFO の値を、sqlserverdsn に書き換えます。この名前 sqlserverdsn は、次の手順にある ODBC 設定で行うものと一致する必要があります。
HS_FDS_CONNECT_INFO = sqlserverdsn
ODBC 設定
Windows Server のコントロールパネルから、ODBC の設定を行っていきます。
コントロールパネルの検索バーに、odbc と入れて検索します。
ODBC データ ソースのセットアップ (64 ビット) を押します。
システム DSN の追加を押します。
SQL Server が選択されており、完了を押します。
「初期化パラメータファイルの作成」手順で指定した名前と一致させます。
sqlserverdsn
Database Gateway の SQL Server 用
sqlserver2019-dblink.cwvq7vck29x3.ap-northeast-1.rds.amazonaws.com
OK を押します。
作成されました。構成を押します。
SQL Server に接続するための、ID とパスワードを入れます。
既定のデータベースで testdb を選択し、次へを押します。
このあたりは変更せず、完了を押します。
データ ソースのテストを押します。s
無事に接続が出来たことを確認し、OK を押します。
Gateway の Oracle Net Listener 設定
以下のディレクトリを開きます。
C:\app\tg\Administrator\product\19.0.0\tghome_1\network\admin
listener.ora の編集をします。
編集前のデフォルトはこんな感じです。
# listener.ora Network Configuration File: C:\app\tg\Administrator\product\19.0.0\tghome_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
ORAGW1 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.112)(PORT = 1521))
)
)
これを次のように編集します。
# listener.ora Network Configuration File: C:\app\tg\Administrator\product\19.0.0\tghome_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
ORAGW1 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.112)(PORT = 1521))
)
)
dg4odbc =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.112)(PORT = 1521))
)
)
SID_LIST_dg4odbc =
(SID_LIST=
(SID_DESC=
(SID_NAME=dg4odbc)
(ORACLE_HOME=C:\app\tg\Administrator\product\19.0.0\tghome_1)
(PROGRAM=dg4odbc)
)
)
Firewall の無効化
Database Gateway for ODBC が稼働している EC2 インスタンス上で、Firewall を無効化します。本番環境では、無効化ではなく例外ルールを行う方がより望ましいと思いますが、今回は簡単な手順でやっています。
Oracle Net Listener の起動
コマンドプロンプトを開き、リスナ―を起動します。
lsnrctl start dg4odbc
そして、status コマンドで状況を確認します。
lsnrctl status dg4odbc
次のように、末尾に サービス "dg4odbc" が稼働している様子が見えれば大丈夫です。
C:\Users\Administrator>lsnrctl status dg4odbc
LSNRCTL for 64-bit Windows: Version 19.0.0.0.0 - Production on 22-4月 -2023 00:46:36
Copyright (c) 1991, 2019, Oracle. All rights reserved.
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.112)(PORT=1521)))に接続中
リスナーのステータス
------------------------
別名 dg4odbc
バージョン TNSLSNR for 64-bit Windows: Version 19.0.0.0.0 - Production
開始日 22-4月 -2023 00:46:23
稼働時間 0 日 0 時間 0 分 15 秒
トレース・レベル off
セキュリティ ON: Local OS Authentication
SNMP OFF
パラメータ・ファイル C:\app\tg\Administrator\product\19.0.0\tghome_1\network\admin\listener.ora
ログ・ファイル C:\app\tg\Administrator\diag\tnslsnr\EC2AMAZ-RMTNCLE\dg4odbc\alert\log.xml
リスニング・エンドポイントのサマリー...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.112)(PORT=1521)))
サービスのサマリー...
サービス"dg4odbc"には、1件のインスタンスがあります。
インスタンス"dg4odbc"、状態UNKNOWNには、このサービスに対する1件のハンドラがあります...
コマンドは正常に終了しました。
Windows のサービスに登録されているので、自動起動を有効化にしてもいいと思います。
Database Link の作成
ここまでで準備が完了しました。やっと Database Link の作成が出来ます。SQL Developer などで、次のクエリーを実行します。
- using で Database Gateway for ODBC が稼働している EC2 インスタンスの IP アドレスを指定します。この記事の環境では、192.168.0.112 です。
- sid は、dg4odbc を指定します。初期化パラメータファイルなどで、異なる値を使っている場合は、この値も変更します。
- HS : OK を指定することで、Database Gateway for ODBC を利用する旨を指定できます。HS は多分、Heterogeneous Services の略だと思います。
create public database link dg4odbc connect to "admin" identified by "yourpassword-wo-iretene"
using '(DESCRIPTION=(ADDRESS
=(PROTOCOL=TCP)(HOST=192.168.0.112)(PORT=1521))
(CONNECT_DATA=(SID=dg4odbc))
(HS=OK))';
DBLink の動作確認
ここまでの作業で、次の構成図が出来ました。DBLink が動作するか確かめてみましょう。
次の SQL クエリーを実行します。@ に DBLink の名前を指定することで、SQL Server 上のテーブルを呼びだせます。
SELECT * FROM testtable@dg4odbc;
実行結果です。SQL Server 上のデータを、RDS for Oracle の DBLink 経由で確認できます。
データの INSERT もしてみましょう。
INSERT INTO testtable@dg4odbc VALUES(3, 'tanaka');
COMMIT;
無事に更新されました。
参考 URL
create database link 句についての Document
https://docs.oracle.com/cd/F19136_01/sqlrf/CREATE-DATABASE-LINK.html#GUID-D966642A-B19E-449D-9968-1121AF06D793
https://docs.oracle.com/cd/F19136_01/otgiw/config-odbc-gateway.html#GUID-2F4BF76B-439B-4E7E-9707-DE91B83E3579
Database Gateway for ODBC のインストール方法
https://docs.oracle.com/cd/F19136_01/otgiw/install-odbc-gateway.html
Database Gateway for ODBC の設定方法
https://docs.oracle.com/cd/F19136_01/otgiw/config-odbc-gateway.html#GUID-8BC0D3B4-A9D8-4A11-9780-B82351314A7B