I.2 オンライン物理移行のためのSSHトンネルの設定

ソース・データベース・サーバーとターゲット・データベース・サーバー間でSCANおよびSCANポートを使用した接続ができない場合は、ソース・データベース・サーバーからターゲット・データベース・サーバーへのSSHトンネルを設定します。

次の手順では、rootユーザーに対してソース・データベース・サーバーでSSHトンネルを設定します。この手順は、一時チャネルと見なされるものを設定することになります。この接続オプションを使用すると、スイッチオーバー後にターゲット・データベースとソース・データベース間で同期できなくなり、この構成では元のソース・データベースに戻すことができません。

ノート:

次のステップではOracle Cloud Infrastructureに言及していますが、Oracle Exadata Database Service on Cloud@CustomerおよびOracle Exadata Database Service on Dedicated Infrastructureにも適用できます。
  1. パスフレーズなしのSSHキーの生成の情報を使用して、ターゲットのOracle Cloud Infrastructureサーバーでopcユーザー用にパスフレーズなしのSSHキー・ファイルを生成します。ターゲットがOracle RACデータベースである場合は、-targetnode引数に指定されたターゲットOracle RACサーバーからパスフレーズなしでSSHキー・ファイルを生成します。
  2. Oracle Cloud Infrastructureサーバーのopc_user_home/.ssh/id_rsa.pubファイルの内容をOracle Cloud Infrastructure server opc_user_home/.ssh/authorized_keysファイルに追加します。
  3. ターゲットのOracle Cloud Infrastructureサーバーの秘密SSHキー・ファイルをソース・サーバーの/root/.ssh/ディレクトリにコピーします。ソースがOracle RACデータベースである場合は、ファイルをすべてのソース・サーバーにコピーします。
    管理しやすくするために、秘密SSHキー・ファイルの名前はターゲット・サーバー名と同じままにし、.ppk拡張子を付けたままにしておきます。たとえば、ocidb1.ppk (ocidb1はターゲット・サーバー名)とします。

    ファイルの権限は次のようになります。

    /root/.ssh>ls -l ocidb1.ppk
    -rw------- 1 root root 1679 Oct 16 10:05 ocidb1.ppk
  4. ソース・サーバーの/root/.ssh/configファイルに次のエントリを挿入します。
    Host *
      ServerAliveInterval 10  
      ServerAliveCountMax 2
    
    Host OCI_server_name   
      HostName OCI_server_IP_address
      IdentityFile Private_key_file_location 
      User OCI_user_login  
      ProxyCommand /usr/bin/nc -X connect -x proxy_name:proxy_port %h %p

    説明

    • OCI_server_nameは、ドメイン名なしのOracle Cloud Infrastructureターゲット・データベース・サーバー名です。Oracle RACデータベースの場合は、ドメイン名なしで-targetnodeに指定されたノードを使用します。
    • OCI_server_IP_addressは、Oracle Cloud Infrastructureターゲット・データベース・サーバーのIPアドレスです。Oracle RACデータベースの場合は、-targetnodeに指定されたノードを使用します。
    • Private_key_file_locationは、ソース・データベース・サーバー上の秘密キー・ファイルの場所で、これは前述のステップ3でターゲット・データベース・サーバーからコピーしたファイルです。
    • OCI_user_loginは、ターゲット・データベース・サーバーへのアクセスに使用されるOSユーザーです。
    • proxy_nameは、プロキシ・サーバーのホスト名です。
    • proxy_portは、プロキシ・サーバーのポートです。

    ノート:

    ProxyCommandオプションは、接続にプロキシ・サーバーを使用するときに指定します。

    たとえば、関係のある値を指定した後の/root/.ssh/configファイルは次のようになります。

    Host *
      ServerAliveInterval 10  
      ServerAliveCountMax 2
    
    Host ocidb1
      HostName 192.0.2.1
      IdentityFile /root/.ssh/ocidb1.ppk
      User opc
      ProxyCommand /usr/bin/nc -X connect -x www-proxy.example.com:80 %h %p
    

    ファイルの権限は次のようになります。

    /root/.ssh>ls -l config
    -rw------- 1 root root 1679 Oct 16 10:05 config

    前述の例では、Oracle Cloud Infrastructureサーバー名はocidb1であり、Oracle Cloud InfrastructureサーバーのパブリックIPアドレスは192.0.2.1です。

    ソースがOracle Cloud Infrastructure Classicサーバーである場合、proxy_nameは必要ないため、ProxyCommandで始まる行を削除したり、コメントにすることができます。

    ソースがOracle RACデータベースである場合は、同じ/root/.ssh/configファイルをすべてのソースOracle RACデータベース・サーバーにコピーします。このファイルには、Oracle Cloud Infrastructureサーバー名、Oracle Cloud InfrastructureサーバーのパブリックIPアドレスおよび最初のOracle Cloud Infrastructure Oracle RACサーバーの秘密キー・ファイルの場所といった情報が構成されます。

  5. 最初のターゲットOracle Cloud Infrastructureサーバーにソース・サーバーからSSHできることを確認してから、SSHトンネルを有効にします。
    Oracle RACデータベースの場合は、すべてのソース・サーバーから最初のターゲットOracle Cloud Interfaceサーバーへの接続をテストします。

    秘密キーを使用して、次のようにします。

    [root@ocicdb1 ~] ssh -i /root/.ssh/ocidb1.ppk opc@ocidb1
    Last login: Fri Dec  7 14:53:09 2018 from 192.0.2.3
    
    [opc@ocidb1 ~]$

    ノート:

    SSH接続には、ソース・データベース・サーバーとターゲット・データベース・サーバー間に、パスフレーズの入力を必要としない非対話型の直接アクセスが必要です。
  6. ソース・サーバーで次のコマンドを実行してSSHトンネルを有効にします。
    ssh -f OCI_hostname_without_domain_name -L ssh_tunnel_port_number:OCI_server_IP_address:OCI_server_listener_port -N

    説明

    • OCI_hostname_without_domain_nameは、ドメイン名なしのOracle Cloud Infrastructureターゲット・データベース・サーバー名です。Oracle RACデータベースの場合は、ドメイン名なしで-targetnodeに指定されたノードを使用します。
    • ssh_tunnel_port_numberは、1024-65545の範囲の使用できる一時的なポートです。SSHトンネル・ポートは、サーバーの他のプロセスで使用されていないことを確認してから使用します。
    • OCI_server_listener_portはターゲット・データベースのリスナー・ポート番号です。リスナー・ポートは、ソース・データベース・サーバーとOracle Cloud Infrastructureターゲット・サーバー間でオープンされている必要があります。
    • OCI_server_IP_addressは、ターゲット・データベース・サーバーのIPアドレスです。シングル・インスタンス・データベースの場合は、Oracle Cloud InfrastructureサーバーのIPアドレスを指定します。Oracle RACデータベースの場合は、Oracle Cloud InfrastructureのSCAN名をドメイン名付きで指定します。ドメイン名付きのSCAN名が解決できない場合や機能しない場合は、lsnrctl statusコマンド出力を使用して取得したIPアドレスを指定します。たとえば、
      Listening Endpoints Summary...
        (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
        (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.0.2.9)(PORT=1521)))
        (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.0.2.10)(PORT=1521)))

    次に、SSHトンネルを有効にするために実行するコマンドの例を示します。

    [root@ocicdb1~]ssh -f ocidb1 -L 9000:192.0.2.9:1521 -N

    Oracle RACデータベースの場合は、すべてのソース・サーバーについてこのステップを繰り返す必要があります。

  7. SSHトンネルをテストします。
    ソース・サーバーにログインし、oracleユーザーに切り替えてデータベース環境をソースとして参照し、次のコマンドを実行します。
    tnsping localhost:ssh_tunnel_port

    たとえば、

    [oracle@ocicdb1 ~] tnsping localhost:9000

    コマンド出力は、次のようになります。

    TNS Ping Utility for Linux: Version 12.1.0.2.0 - Production on 22-JAN-2019 05:41:57
    Copyright (c) 1997, 2014, Oracle.  All rights reserved.
    Used parameter files:
    Used HOSTNAME adapter to resolve the alias
    Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=))(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=9000)))
    OK (50 msec)

    tnspingが機能しない場合、SSHが有効になっていません。

    Oracle RACの場合は、すべてのソース・サーバーについてこのステップを繰り返す必要があります。