昨日の記事の内容はSQL Developerの設定方法は違いましたが前のバージョンの4.0.3でも可能でした。がっかりされた方申し訳ありません。
SQL Developer 4.1 での SSH 機能強化 (INOUE Katsumi @ Tokyo)
Oracle Netプロトコルで接続するためにローカル・ポート・フォワードを設定
今日はリモート・ポート・フォワードをご紹介します。"ssh -R"に相当します。
用途としては以下のようにOracle DBが起動している
ホストが別の独立したサブネットに存在している場合にその2つのDB間でデータベース・リンクを作成することがあります。
どちらのサブネットもsshのみしか通らず2個のサブネット間ではネットワーク的に直接には到達できない場合です。
一方がクラウド(IaaS/Paas)で片方が社内というケースでも使える場合があります。
M6 -> Exadata の向きのdatabase linkを作成します。まずはSQL DeveloperからM6につなぐためのポートフォワードを設定します。
これは前回のエントリのとおりです。下記での"Net8"で具体的な作成方法は省略します。
次に上の画面キャプチャで"Reverse"とあるトンネルを作成します。アイコンが別であることからも分かるようにこれは別の種類のトンネルです。
リモートポートはポート番号指定で作成します。以下では'1522'です。
この設定によりM6上のOracle DBからのDBLinkのネットワークデータを自分のPC(私はWindows7です。)の
Port 1523 で受け取ることが可能になります。この Port 1523 が別のDBサーバーに自動でフォワードされるように
設定します。これは昨日のエントリとほぼ同じですが明示的にポート番号を合わせる点のみ異なります。
これでトンネル全線設定完了したので導通させます。2つのSSHホストと2つのポートをGUIで以下のように”接続”を実行します。
SQL DeveloperでM6の方のDBに接続しdatabase linkを作成します。TNSNAMES.ORAの編集は不要です。
Port は上記で設定した1522に合わせます。
このDatabase Linkにより例えばデータ・ポンプによりリモートからのスキーマのインポートが可能になります。
今日のポイントはDBサーバーのOSにログインせず、シェル(コマンドライン)impdp,expdpなども使わないということなので以下のように
DBMSパッケージを使います。詳細は省略します。
h1 := DBMS_DATAPUMP.OPEN('IMPORT','SCHEMA','SQLDev_Temp','RemoteImp0','LATEST',2);
注意点はこの方法で作成するデータベースリンクはおそらくサポートされないのでテスト環境で、かつ、あまり大量でないデータでのみ
現実的には使用できるという点です。