Azure VMで実行されているOracle Database Gatewayサーバーを使用したデータのロード

OracleDB for Azureを使用すると、AzureアプリケーションでOCIデータベースからデータをロードおよび問合せできます。このアーキテクチャでは、Oracle Exadata Database Service on Dedicated InfrastructureOracleDB for Azureによって提供されるインフラストラクチャを活用して、Azure仮想マシンで実行されているOracle Database Gateway for SQL Serverソフトウェアを介したデータベース・リンクを使用してAzure SQL Serverからデータをロードする方法について説明します。

アーキテクチャ

このアーキテクチャでは、Azure仮想マシンで実行されているOracle Database Gateway for SQL Serverを使用して、Azure SQL ServerからOracle Exadata Database Service on Dedicated Infrastructureにデータをロードします。Oracle Database Gateway for SQL Serverは、Azureプライベート・エンドポイントを使用して低レイテンシのネットワーク・リンクを使用してAzure SQL Serverに接続します。

次の図は、このアーキテクチャを示しています。



exadata-db-azure-odsa-azure-vm.zip

このアーキテクチャについて次のことに注意してください:

  • Oracle Database Gateway for SQL Serverソフトウェアは、Azure仮想マシンで実行できます。Oracle Database Gateway for SQL Serverの要件およびサイズ設定のガイドラインに従って、CPU、メモリーおよびディスク・サイズの数をAzure仮想マシンに割り当てる必要があります。詳細は、後述のOracle Database Gateway for SQL Serverのシステム要件を参照してください。
  • Oracle Exadata Database Service on Dedicated Infrastructureは、Oracle Database Gatewayを実行しているAzure仮想マシンのホスト名およびIPアドレスを解決する必要があります。Oracle Database Gatewayサーバーの/etc/hostsファイルを編集するか、Oracle Exadata Database Service on Dedicated Infrastructureが構成されているOCI Virtual Cloud Network (VCN)でプライベートDNSゾーンを構成します。
  • Oracle Exadata Database Service on Dedicated Infrastructureデータベースでは、パラメータglobal_namesはデフォルトでTRUEに設定されます。したがって、Azure SQL Serverへのデータベース・リンクを作成する場合は、完全修飾データベース名を使用する必要があります

開始する前に

始める前に、この設定で使用されている主要なソフトウェアコンポーネントのバージョンを確認し、必要なソフトウェアパッケージをダウンロードして、製品ドキュメントで後から参照してください。

ソフトウェア要件の確認

これらの手順は、次のソフトウェアおよびハードウェアのバージョンでテストされます。

  • Oracle Exadata Database Service on Dedicated Infrastructure X8M-2
  • Oracle Database 19.16
  • Azure SQLサーバー

次のソフトウェアパッケージをダウンロードします。

必要なサービスおよびロールについて

このソリューションには、次のサービスが必要です。

  • OracleDB for Azure with Oracle Exadata Database Service on Dedicated Infrastructure
  • Oracle Cloud Infrastructure
  • Azure仮想マシン

これらは、各サービスに必要なロールです。

サービス名: ロール 必要...
Oracle Exadata Database Service on Dedicated Infrastructure: sys con データベース・リンクを構成します。
Oracle Cloud Infrastructure: VCN Admin セキュリティ・ルールを追加し、AzureエンドポイントおよびAzure VMに解決するようにDNSを変更します。
Azure仮想マシン: root oracleユーザーを作成して、Oracle Database Gatewayソフトウェアをインストールおよび構成します。ポート1521への接続を許可するようにローカル・ファイアウォールを変更します。

必要なクラウド・サービスを入手するには、Oracleソリューション用のOracle Cloudサービスを取得する方法を確認するを参照してください。

Azure仮想マシンで実行されているOracle Database Gatewayの考慮事項

Azure仮想マシンでOracle Database Gateway for SQL Serverを実行することは、Azureサービスをよく知っているが、あまり使い慣れていないお客様にとって理想的です。

Azure VMで実行するOracle Database Gatewayの利点

  • Oracle Database Gateway for SQL Serverは、Oracleによって開発およびサポートされています。
  • 追加のサードパーティ・ソフトウェアをOracle Exadata Database Service on Dedicated Infrastructureにインストールする必要がないため、環境の更新とメンテナンスが容易になります。
  • Oracle Database Gateway for SQL Server runs on a separate compute instance from Oracle Exadata Database Service on Dedicated Infrastructure, which makes both environments easier to update and maintain.また、Oracle Database Gatewayソフトウェアは、より専門的で高価格のOracle Exadata Database Service on Dedicated Infrastructure OCPUで実行するのではなく、低コストのAzure OCPUで実行されるため、ソリューションの方が手頃な価格である可能性があります。
  • Oracle Database Gateway ServerとAzure SQL Serverの間の通信は暗号化されます(Azure SQL Serverのデフォルト構成によって強制)。
  • Oracle DatabaseとAzure SQL Serverデータベース間のデータ型変換およびマッピングは、Oracle Database Gatewayソフトウェアによって自動的に管理されます。
  • Azure SQL Serverのホスト名解決は、AzureによってAzure仮想マシン・レベルで自動的に管理されます。

Azure仮想マシンで実行するOracle Database Gatewayの短所

  • Oracle Database Gatewayソフトウェアの追加ライセンスが必要になる場合があります。
  • Oracle Database Gatewayサーバーの構成時に、Oracle Exadata Database Service on Dedicated InfrastructureOracle Database Gatewayサーバー間の通信はデフォルトで暗号化されません。Oracle Exadata Database Service on Dedicated InfrastructureからOracle Database Gatewayサーバーへの暗号化を強制するには、Oracle Database Gateway sqlnet.oraの追加構成が必要です。

Azure仮想マシンで実行されているOracle Database Gatewayの構成

  1. Log in to the Azure console to obtain the information for the Azure SQL Server database from which the Oracle Exadata Database Service on Dedicated Infrastructure database will load and query data.この情報は、Azure SQL Serverデータベースへの接続方法をOracle Database Gatewayサーバーに指示するために必要です。
    次の詳細を取得します。
    • データベース名: Azure SQL Serverデータベースの名前。
    • 完全修飾サーバー名: Azure SQL Serverデータベースが実行されているSQL Serverの完全修飾ホスト名(通常はservername.database.windows.netの形式)。
    • Azure SQL Serverプライベート・エンドポイント: Azure SQL Serverに接続するAzure vnet内のAzure SQL Serverプライベート・エンドポイントの名前およびIPアドレス。プライベート・エンドポイントがまだ存在しない場合は、Azure SQL Serverのものを作成し、名前とIPアドレスをメモします。
    • Azure SQL Serverユーザー名: Azure SQL Serverデータベースまたはスキーマに接続できる既存のAzure SQL Serverユーザーの名前(通常はsqladmin)。
    • Azure SQL Serverユーザー・パスワード: Azure SQL ServerユーザーがAzure SQL Serverデータベースおよびスキーマに接続するためのパスワード。
  2. AzureのOracleDB用に構成されたvnetでLinux 7.9を実行しているAzure仮想マシンを作成します。この仮想マシンでは、Oracle Database Gateway for SQL Serverが実行されます。この仮想マシンに割り当てられたホスト名およびIPアドレス(Azure vnet上)を書き留めます。この情報は、Oracle Database Gatewayサーバーへの接続方法をOracle Exadata Database Service on Dedicated Infrastructureデータベースに伝えるために必要です。通常、ホスト名の形式はservername.windows.netです。
  3. OCIのメイン・メニューから「ネットワーキング/DNS管理」を選択して、プライベートDNSゾーンを作成します。新しいプライベートDNSゾーンで、前のステップで作成したAzure VMのレコードのホスト名およびIPアドレスを追加します。
  4. OCIのメイン・メニューから「ネットワーキング/DNS管理」を選択して、DNSプライベート・ビューを作成します。前のステップで作成したプライベートDNSゾーンをこの新しく作成したDNSプライベート・ビューに追加し、変更をアクティブ化します。
  5. OCIメイン・メニューから「ネットワーキング/仮想クライアント・ネットワーク(VCN)」を選択します。Oracle Database Gateway Oracle Exadata Database Service on Dedicated Infrastructureサービスがプロビジョニングされたときに作成されたVCNを選択します(必要に応じてコンパートメントを変更します)。「DNSリゾルバ」リンクをクリックし、前のステップで作成したDNSプライベート・ビューをDNSリゾルバに追加します。これにより、Oracle Exadata Database Service on Dedicated InfrastructureからOracle Database Gatewayを実行しているAzure VMへの名前およびIPアドレス解決が可能になります。
  6. Oracle Exadata Database Service on Dedicated Infrastructure VMクラスタ・ノードのいずれかにログインして、nslookupを使用して、Oracle Database Gatewayを実行するAzure VMでホスト名からIPアドレスへの解決が機能していることを確認します。
    例:
    [opc@exa_dbnodex ~]$ nslookup servername.windows.net
    Server: 169.254.169.254
    Address: 169.254.169.254#53
    Non-authoritative answer:
    Name: servername.windows.net
    Address: IP_address_of_Azure_VM_from_step_2
    [opc@exa_dbnodex ~]$
    例の変数には次の値があります。
    • servernameは、ステップ1のAzure SQL Serverプライベート・エンドポイントの名前です。
    • IP_address_of_Azure_VM_from_step_2は、ステップ2のAzure VMのIPアドレスです。
  7. 以前にダウンロードしたOracle Database Gatewayソフトウェアを新しいAzure仮想マシンにインストールします。
  8. Configure the Oracle Database Gateway for Azure SQL Server to connect to the Azure SQL Server database using the Azure SQL Server private endpoint.
    Oracle Database Gatewayを実行しているAzure仮想マシンとAzure SQL Serverプライベート・エンドポイントが同じAzure vnetにあることに注意してください。
  9. Oracle Exadata Database Service on Dedicated Infrastructure VMクラスタのすべてのノードで、Oracle Database Gateway for SQL Serverに解決されるようにOracle Exadata Database Service on Dedicated Infrastructureデータベースtnsnames.oraを構成します:
    [opc@exa_dbnodex ~]$ sudo su - oracle
    Last login: Tue Sep 13 20:06:30 UTC 2022
    [oracle@ exa_dbnodex ~]$ . ./exadb_name.env
    [oracle@ exa_dbnodex ~]$ cd $ORACLE_HOME
    [oracle@ exa_dbnodex dbhome_1]$ cd network/admin
    [oracle@ exa_dbnodex admin]$ cd exadb_name/
    [oracle@ exa_dbnodex exadb_name]$ tail -10 tnsnames.ora
    Database_Name_From_Step_1 =
    (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=Azure_VM_Hostname_From_Step_2)(PORT=15
    21))
    (CONNECT_DATA=(SID=Database_Name_From_Step_1))
    (HS=OK)
    )
    例の変数には次の値があります。
    • exadb_nameは、Oracle Exadata Database Service on Dedicated Infrastructureデータベースの名前です。
    • Database_Name_From_Step_1は、ステップ1のデータベース名です。
    • Azure_VM_Hostname_From_Step_2は、ステップ2のAzure VMのホスト名です。
  10. tnspingを使用して、Azure仮想マシンで実行されているOracle Exadata Database Service on Dedicated InfrastructureデータベースとOracle Database Gateway for SQL Server間の接続をテストします(この接続では、AzureとOCIの間のOracleDB for Azureによって確立された高速低レイテンシのネットワーク・リンクが使用されます)。
    [oracle@exajc-dbnodex ~]$ tnsping Database_Name_From_Step_1
    TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 16-SEP-2022 21:28:34
    Used parameter files:
    /u02/app/oracle/product/19.0.0.0/dbhome_1/network/admin/exadb_name/s
    qlnet.ora
    Used TNSNAMES adapter to resolve the alias
    Attempting to contact (DESCRIPTION= 
    (ADDRESS=(PROTOCOL=tcp)(HOST=Azure_VM_Hostname_From_Step_2)(PORT=15
    21)) (CONNECT_DATA=(SID=Database_Name_From_Step_1)) (HS=OK))
    OK (0 msec)
    [oracle@exadbnodex ~]$
    例の変数には次の値があります。
    • exadb_nameは、Oracle Exadata Database Service on Dedicated Infrastructureデータベースの名前です。
    • Database_Name_From_Step_1は、ステップ1のデータベース名です。
    • Azure_VM_Hostname_From_Step_2は、ステップ2のAzure VMのホスト名です。
  11. Oracle Exadata Database Service on Dedicated Infrastructure プラガブル・データベース(PDB)(CDBにはない)で、Azure SQL Serverデータベースへのデータベース・リンクを作成します。パラメータglobal_namesは、デフォルトではOracle Exadata Database Service on Dedicated InfrastructureデータベースでTRUEに設定されているため、データベース・リンクの作成には完全修飾データベース名を使用する必要があります。データベース・リンクの作成後、このリンクを使用して、Azure SQL ServerデータベースからOracle Exadata Database Service on Dedicated Infrastructure プラガブル・データベース(PDB)にデータを問い合せてロードできます。
    [opc@exadbnodex ~]$ sudo su - oracle
    Last login: Tue Sep 13 20:06:30 UTC 2022
    [oracle@exadbnodex ~]$ . ./exadb_name.env
    [oracle@exadbnodex ~]$sqlplus / as sysdba
    SQL> show pdbs;
    CON_ID CON_NAME OPEN MODE RESTRICTED
    ---------- ------------------------------ ---------- ----------
     2 PDB$SEED READ ONLY NO
     3 PDBName READ WRITE NO
    SQL> alter session set container=PDBName;
    Session altered.
    SQL>create public database 
    link Fully_Qualified_Server_Name_From_Step_1 connect to 
    "Azure_SQL_Server_Username" identified by 
    "Azure_SQL_User_Password" using 
    'Database_Name_From_Step_1';
    Database link created.
    ユーザー名とパスワードは二重引用符(" ")で囲まれ、Azure SQL Serverデータベース名は一重引用符(')で囲まれています。
    例の変数には次の値があります。
    • exadb_nameは、Oracle Exadata Database Service on Dedicated Infrastructureデータベースの名前です。
    • PDBNameは、プラガブル・データベースの名前です。
    • Fully_Qualified_Server_Name_From_Step_1は、ステップ1からAzure SQL Serverデータベースが実行されているSQLサーバーの完全修飾ホスト名です。
    • Azure_SQL_Server_Usernameは、ステップ1の既存のAzure SQL Serverユーザー名の名前です。
    • Azure_SQL_User_Passwordは、Azure SQL Serverユーザーがステップ1からデータベースに接続するためのパスワードです。
    • Database_Name_From_Step_1は、ステップ1のAzure SQL Serverデータベースの名前です。
  12. 問合せを実行して、新しく作成したデータベース・リンクをテストします。次に例を示します。
    SQL> select count(*) from 
    some_table@DatabaseLink_Name;
    例の変数には次の値があります。
    • some_tableは、問合せ対象のデータベース内の表の名前です。
    • DatabaseLink_Nameは、ステップ11のデータベース・リンク名です。

Oracle Database Gatewayサーバーのインストール

これらのステップでは、Oracle Linux 7.9を実行しているAzure仮想マシンにOracle Database Gateway Serverソフトウェアをインストールする方法について説明します。

  1. yumを使用して、Oracle前提条件パッケージをインストールします。
    [root@dbgw ~]# yum install oracle-database-preinstall-19c
  2. useroracleおよびdbaグループを作成します。
    [root@dbgw ~]# useradd -u 1001 -g dba -d /home/oracle -m -s /bin/bash oracle
    [root@dbgw ~]# groupadd -g 1001 dba
  3. Oracle Database Gateway Server 19.3のインストール・ディレクトリを作成します。
    [root@dbgw ~]# mkdir /u01
    [root@dbgw ~]# chown oracle:dba /u01
  4. ポート1521への接続を許可するようにローカル・ファイアウォールを変更します。
    [root@dbgw ~]# firewall-cmd --get-active-zones
    public
    interfaces: eth0
    [root@dbgw ~]# firewall-cmd --zone=public --add-port=1521/tcp –permanent
    [root@dbgw ~]# firewall-cmd --reload
    [root@dbgw ~]# firewall-cmd --zone=public --list-ports
    1521/tcp
    [root@dbgw ~]# systemctl stop firewalld
    [root@dbgw ~]# systemctl start firewalld
  5. 以前にダウンロードしたOracle Database Gateway 19.3 zipファイルをLinux VMの/home/oracleディレクトリにコピーし、Oracle Database Gateway 19.3 zipファイルを解凍します。
    [oracle@dbgw ~]$ unzip LINUX.X64_193000_gateways.zip
  6. 含まれているテンプレートからインストール・レスポンス・ファイルを作成します。
    [oracle@dbgw response]$ cd /home/oracle/gateways/response/
    [oracle@dbgw response]$ cp tg.rsp/home/oracle/tg-jc.rsp
  7. 次のオプションを使用してレスポンス・ファイルを変更します。
    UNIX_GROUP_NAME=oracle
    INVENTORY_LOCATION=/u01/app/oraInventory
    ORACLE_HOME=/u01/app/oracle/product/gateway
    ORACLE_BASE=/u01/app/oracle
    oracle.install.tg.msqlConStr={Fully_Qualified_Server_Name_From_Step_1,1433,
    Database_Name_From_Step_1,Database_Name_From_Step_1}
    例の変数には次の値があります。
    • Fully_Qualified_Server_Name_From_Step_1は、ステップ1からAzure SQL Serverデータベースが実行されているSQLサーバーの完全修飾ホスト名です。
    • Database_Name_From_Step_1は、ステップ1からのAzure SQL Serverデータベースの名前です。
  8. サイレント・インストールを実行して、Oracle Database Gateway 19.3をインストールします。
    [oracle@dbgw gateways]$./runInstaller -silent -noconfig -
    responseFile /home/oracle/tg-jc.rsp
  9. ユーザーoracleのOracle Homeおよびパスを構成します。
    [oracle@dbgw ~]$ tail -6 .bash_profile
    ORACLE_HOME=/u01/app/oracle/product/gateway
    export ORACLE_HOME
    PATH=$PATH:$ORACLE_HOME/bin
    export PATH
    [oracle@dbgw ~]$

Oracle Database Gateway for SQL Serverの構成

Linux 7.9を実行しているAzure仮想マシンにOracle Database Gatewayをインストールした後、Azure SQL Serverプライベート・エンドポイントを使用してAzure SQL Serverデータベースに接続するように構成する必要があります。

  1. OCIコンピュート・インスタンスで実行されているOracle Database Gateway for SQL Server initファイルに、Azure SQL Serverデータベース情報を追加します。この情報は、Azure SQL Serverデータベースへの接続方法をOracle Database Gatewayに示します。
    例:
    [oracle@dbgw ~]$ cd $ORACLE_HOME/dg4msql/admin
    [oracle@dbgw admin]$ cp initdg4msql.ora 
    initDatabase_Name_From_Step_1.ora
    [oracle@dbgw admin]$ cat initDatabase_Name_From_Step_1.ora
    # This is a customized agent init file that contains the HS parameters
    # that are needed for the Database Gateway for Microsoft SQL Server
    # HS init parameters
    #
    HS_FDS_CONNECT_INFO=Fully_Qualified_Server_Name:1433//Database_Name_From_Step_1
    # alternate connect format is hostname/serverinstance/databasename
    HS_DB_NAME=Database_Name_From_Step_1
    HS_DB_DOMAIN=Database_Domain_Name #usually database.windows.net
    HS_FDS_TRACE_LEVEL=OFF
    HS_FDS_RECOVERY_ACCOUNT=RECOVER
    HS_FDS_RECOVERY_PWD=RECOVER
    HS_FDS_ENCRYPT_SESSION=SSL
    HS_FDS_VALIDATE_SERVER_CERT=0
    例の変数には次の値があります。
    • Database_Name_From_Step_1は、Azure SQL Serverデータベースのステップ1からのホスト名です。
    • Fully_Qualified_Server_Nameは、ステップ1からAzure SQL Serverデータベースが実行されているSQLサーバーの完全修飾ホスト名です。
    • Database_Domain_Nameは、ステップ1 (通常はdatabase.windows.net)からデータベースが存在するドメインの名前です。
    Oracle Database GatewayサーバーとAzure SQL Server間の接続を暗号化するには、パラメータHS_FDS_ENCRYPT_SESSIONおよびHS_FDS_VALIDATE_SERVER_CERTが必要です。
  2. Oracle Database Gatewayサーバーで、次のようにtnsnames.oraを変更して、このゲートウェイによって提供されるゲートウェイ・サービスに解決します:
    [oracle@dbgw ~]$ cat $ORACLE_HOME/network/admin/tnsnames.ora
    # This is a sample tnsnames.ora that contains the NET8 parameters that are
    # needed to connect to an HS Agent
    Azure_SQL_Server_Database_Name =
    (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST= 
    Azure_VM_Hostname_From_Step_2)(PORT=1521))
    (CONNECT_DATA=(SID=Azure_SQL_Server_Database_Name))
    (HS=OK)
    )
    例の変数には次の値があります。
    • Azure_SQL_Server_Database_Nameは、ステップ1からのAzure SQL Serverデータベースの名前です。
    • Azure_VM_Hostname_From_Step_2は、ステップ2からのAzure VMのホスト名です。
  3. Oracle Database Gatewayサーバーで、Oracle Database Gateway情報が含まれるようにlistener.oraを変更します。
    例:
    [oracle@dbgw-jc admin]$ cat ../../network/admin/listener.ora
    # This is a sample listener.ora that contains the NET8 parameters that are
    # needed to connect to an HS Agent
    LISTENER =
    (ADDRESS_LIST=
    (ADDRESS=(PROTOCOL=tcp)(HOST=
    Azure_VM_Hostname_From_Step_2)(PORT=1521))
    )
    SID_LIST_LISTENER=
    (SID_LIST=
    (SID_DESC=
     (SID_NAME=Database_Name_From_Step_1)
     (ORACLE_HOME=/u01/app/oracle/product/gateway)
     (PROGRAM=dg4msql)
    )
    )
    例の変数には次の値があります。
    • Azure_VM_Hostname_From_Step_2は、ステップ2からのAzure VMのホスト名です。
    • Database_Name_From_Step_1は、ステップ1からのAzure SQL Serverデータベースの名前です。
  4. Azure VMで実行されているOracle Database Gatewayサーバーでリスナーを起動し、ゲートウェイへの接続をテストします。
    例:
    [oracle@dbgw admin]$lsnrctl start
    [oracle@dbgw admin]$ tnsping Database_Name_From_Step_1
    TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 16-SEP-2022 21:18:39
    Used TNSNAMES adapter to resolve the alias
    Attempting to contact (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST= 
    Azure_VM_Hostname_From_Step_2)(PORT=1521)) 
    (CONNECT_DATA=(SID=Database_Name_From_Step_1)) (HS=OK))
    OK (0 msec)
    [oracle@dbgw-jc admin]$
    例の変数には次の値があります。
    • Database_Name_From_Step_1は、ステップ1からのAzure SQL Serverデータベースの名前です。
    • Azure_VM_Hostname_From_Step_2は、ステップ2からのAzure VMのホスト名です。