2021/12/15 更新
-
本記事を作成した時にDBCSのデータベースバージョンは19.3でしたから、Oracle Database Gateway for SQL Serverは無事でインストールできましたが、現時点(2021年12月)ではDBCSのデータベースのデフォルトバージョンは19.11になっておりますので、Oracle Database Gateway for SQL Serverをインストールする時にRU 19.11とのパッチコンフリクトの問題でインストールできなくなります。
-
Oracle Database Gateway for SQL Server はライセンスとして有償製品かつ(1コンピュータ ¥2,100,000 )、Processorライセンスではなく、Computerライセンスであることを注意してください。詳細は下記2つリンクの内容を参照してください。
はじめに
Oracle Cloud Infrastructure(以下OCI) では、Oracle DB のマネージドサービス(以下OCI Database System)を提供しています。
この記事は、OCI Database System に Oracle Database Gateway を追加でインストールして、Microsoft の SQL Server 2016 と DBlink を設定して、Oracle DB から透過的に SQL Server を使用する方法を紹介します。
前提条件
次サーバーが既に存在しているものとします。
OCI Database SystemのVNCサーバーのセットアップ
事前確認
Oracle Universal Installerを使用してOracle Database GatewayをOCI Database Systemにインストールするため、最初にOCI Database SystemにVNCサーバーを設定する必要があります。
デフォルトのopc
ユーザーでOCI Database Systemにログインし、Linuxバージョンを確認します。
OCI Database System 19cのベースイメージはOracle Linux 7.5であり、GUI環境はベースイメージに含まれているので、インストールする必要はありません。
VNCサーバーの構成
oracle
ユーザーに切り替えて、VNCサーバーのパスワードを設定します。
su - oracle
vncpasswd
VNCサーバーを起動し、VNCサーバーが使用しているポートの状態を確認します。
vncserver
vncserver -list
netstat -ltp4 | grep 590
iptablesとVCN Security Listの構成
iptables
デフォルトでは、VNCサーバーのポート590XはOCI Database Systemのiptablesで許可されていないため、次のコマンドを実行してポート5901
を開く必要があります。
# check the iptables
iptables -L
# allow the inbound of port 5901
iptables -I INPUT 6 -p tcp -m state --state NEW -m tcp --dport 5901 -j ACCEPT
VCN Security List
また、ポート5901
が、OCI Database Systemが存在するVCN(Virtual Cloud Network)のセキュリティリストによってブロックされないようにする必要があります。
簡単にするために、このVCNへのすべての入力トラフィックを許可します。
VNC Viewerから接続
デスクトップで、TigerVNC ViewerからOCI Database Systemに接続して見ましょう。
パスワードを入力して[OK]をクリックします
以下のように、VNC ViewerでOCI Database Systemのターミナルを表示できるはずです。
Oracle Database Gatewayのインストール
ダウンロード
Oracle Database Gateway 19cはこちらからダウンロードできます。
次に、Oracle Database Gateway 19cのインストールパッケージをOCI Database Systemに転送します。
インストール
VNC Viewerを開き、Oracle Database Gatewayインストールパッケージを配置した場所に移動して解凍します。
解凍したディレクトリgateway
に移動して、./runInstaller
ファイルを実行します。
Oracle Universal Installerインターフェイスがポップアップされ、[Next]をクリックしてゲートウェイをOracleホームディレクトリにインストールできます
Oralce Database Gateway for Microsoft SQL Server
を選択し、[Next]をクリックします。
次に、ターゲットSQL Serverの重要な情報を入力する必要があります。
- Host Name: SQL ServerのパブリックIPアドレスまたはホスト名
- Port Number: 1433はSQL Serverのデフォルトのポート番号です。他のポートを使用している場合は、変更してください
- Server Name: SQL Serverのインスタンス名。以下に示すように、SQL Server Configuration Managerから取得できます
- Database Name: 接続したいデータベース名
Figure: SQL Server instance name
スクリプトを実行し、VNC Viewerに戻って[OK]をクリックすると、成功のメッセージが表示されます。
これまで、Oracle Database Gateway 19cがインストールされています。
Oracle Database Gatewayの構成
事前確認
OCI Database System にログインし、oracle
ユーザーに切り替えます。
次のディレクトリに移動し、Oracle Database Gatewayの構成を開始します。
# go to the directory
cd $ORACLE_HOME/dg4msql/admin
# have a look at the gateway initialization file
cat initdg4msql.ora
すべてが適切に見え、必要なすべてのSQL Server情報がここに反映されます。
ファイル tnsnames.ora.sample
と listener.ora.sample
を開き、その内容を使用して設定を行います。
tnsnames.ora
の更新
ユーザーoracle
として作業していることを確認してください。 ディレクトリ$ORACLE_HOME/network/admin
に移動し、tnsnames.ora
ファイルを更新します。 tnsnames.ora.sample
からコンテンツをコピーし、tnsnames.ora
に貼り付けます。HOSTをhostanmeに変更することを忘れないでください。
listener.ora
の更新
OCI Database SystemはシングルインスタンスRACとして構築されており、ユーザーgrid
はリスナーの所有者なので、ユーザーgrid
に切り替える必要があります。 次に、listener.ora.sample
からコンテンツ(SID_LIST_LISTENERの部分)をコピーして、listener.ora
に貼り付けます。
以下のスクリーンショットを確認してください。
# switch to user grid
sudo su - grid
# move to the listener directory
cd $ORACLE_HOME/network/admin
vim listener.ora
リスナーをリロードして、ステータスを確認します。 リスナー dg4msql
が登録され、正常に機能していることがわかります。
lsnrctl reload
lsnrctl status
ここまで実行することで、SQL Serverに接続するためのOracle Database Gatewayの構成は完了です。
次に、動作確認を行います。
Oracle Database Gatewayの検証
ユーザーoracle
としてOCI Database Systemにログインし、sys
としてデータベースに接続します。
sudo su - oracle
sqlplus / as sysdba
-- change to pdb
alter session set container=pdb1;
-- create database link to the SQL Server
create public database link xucheng connect to "SQL_SERVER_USER" identified by "SQL_SERVER_PASSWORD" using 'dg4msql';
-- query table [trex] through the database link [xucheng]
select * from trex@xucheng;
データベースリンクはデータベース内のオブジェクトとして作成されるため、明示的に削除しない限り使用することが出来ます。再起動しても同様です。
上記のサンプルクエリでは、trex
はSQL Serverデータベースxucheng
のテーブル名を表しています。また、サンプルクエリのxucheng
は、作成したデータベースリンクです。 このデータベースリンクを使用して、SQL Serverのデータベースに接続します。 したがって、基本的な使用法はselect * from <TARGET_TABLE_NAME>@<DB_LINK>
なります
OCI Database Systemでは、デフォルトでglobal_names
パラメータがTURE
に設定されているため、ORA-02085
エラーが発生します。
global_namesをFALSEに設定して、セッションレベルでORA-02085
の問題を解決するか、システムレベルでこのパラメーターを変更することもできます。
ALTER SESSION SET global_names = FALSE;
select * from trex@xucheng;
以下のスクリーンショットでわかるように、SQL Serverと同じクエリ結果を取得できます。
これで、OCI Database System 19cインスタンスからSQL Serverデータベース連携することが出来ました。