2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Oracle DatabaseからNon-OracleDB(MySQL)へのDatabase Gateway for ODBCを用いたDBLINK接続

Last updated at Posted at 2021-04-21

#■この記事で記載すること

Oracle DatabaseからNon-OracleDBへのDatabase Gateway for ODBCを用いたDBLINK接続に関連する以下内容の自分用メモを記載します。

  • Database Gateway for ODBC(DG4O)のセットアップ
  • Database Cloud Service(DBCS)からNon-OracleDB(MySQL)へのDBLINK接続
  • Autonomous Database(ADB)からNon-OracleDB(MySQL)へのDBLINK接続(DG4ODBCとNon-OracleDBを同一ノードに配置)
  • ADBからNon-OracleDB(MySQL Database Service : MDS)へのDBLINK接続(DG4ODBCとNon-OracleDBを別ノードに配置)

DG4Oに関する設定を除くと、ADBのDBLINK設定や、TCPSを用いたDBLINK設定の基本的なフロー、以下の記事に記載した内容とほぼほぼ同じす。

#■ Database Gateway for ODBC(DG4O)のセットアップ

各構成に共通で必要となるDG4Oをセットアップする

##● システム構成イメージ

Oracle(ローカル) -- [Oracle Net] --> DG4O --[ODBC]--> Non-Oracle(リモート)

##● システム構成説明

  • DG4Oはローカル側、リモート側、独立したサーバのいずれにセットアップすることも可能
  • DG4Oには、以下のツールをセットアップ、設定
  • Oracle Net
  • Database Gateway For ODBC
  • ODBC Driver Managers
  • Non-Oracle[ここではMySQL]のDBにSpecificなODBC設定

##● 設定例

  • 前提
  • ADBからDG4OにSSL/TCPS接続するためのWalletを作成/デプロイする
  • MySQL ODBCドライバーのインストール
  • Oracle Netの設定
  • MySQL接続用ODBCの設定
  • DG4Oのインストール

###- 前提

  • Oracle Cloud Infrastructure(OCI)環境での動作を前提とし、ネットワーク環境(VCN/Subnet/Internet GW)がセットアップされている
  • DG4Oサーバ(Oracle Cloud Developer Image)用のComputeがデプロイされている
  • DG4OサーバのVNC設定が完了している

###- ADBからDG4OにSSL/TCPS接続するためのWalletを作成/デプロイする

この記事を参考にウォレットファイルを作成のうえ、以下に配置する。

・クライアントウォレットファイル
DBLINKローカル側がDBCSの場合:DBCSの/u01/client/wallet/に配置
DBLINKローカル側がADBの場合:Object Storageに配置

・サーバウォレットファイル
DG4Oの/u01/server/wallet/に配置

###- MySQL ODBCドライバーのインストール

MySQLをインストール

MySQL Serverインストール

$ sudo rpm -Uvh http://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
$ sudo yum install mysql-community-server
$ sudo systemctl start mysqld
$ sudo systemctl enable mysqld
$ sudo cat /var/log/mysqld.log | grep password
$ mysql_secure_installation

MySQL Clientインストール
※ MySQL Serverインストールで合わせてClinetもインストールされる
※ MySQL Serverとは異なるサーバにDG4Oを入れる場合のみ必要

$ sudo yum install mysql-community-client

初期設定&確認
※ 参考情報/MySQLを参照

###- MySQL接続用ODBCの設定

MySQL ODBC(mysql-connectors & unixODBC)のインストール

$ sudo yum install -y mysql-connector-odbc

(以下抜粋)
=======================================================================================================================================
 Package                            Arch                 Version                        Repository                                Size
=======================================================================================================================================
Installing:
 mysql-connector-odbc               x86_64               8.0.23-1.el7                   mysql-connectors-community               4.1 M
Installing for dependencies:
 unixODBC                           x86_64               2.3.1-14.0.1.el7               ol7_latest                               413 k

確認

$ odbcinst -j
unixODBC 2.3.1
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/oracle/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

/etc/odbc.iniを以下のように編集

[ODBC Data Sources]
mds          = MyODBC 8.0 UNICODE Driver DSN
dg4odbc      = MySQL ODBC 8.0 UNICODE Driver DSN

[DG4ODBC]
Driver       = /usr/lib64/libmyodbc8w.so
Description  = Connector/ODBC 8.0 UNICODE Driver DSN
SERVER       = localhost
PORT         = 3306
USER         = root
Password     = WelCome123#123#
Database     = employees
OPTION       = 3
CHARSET      = utf8

ODBC経由でのMySQL接続確認

$ isql dg4odbc
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> show tables;
+-----------------------------------------------------------------+
| Tables_in_employees                                             |
+-----------------------------------------------------------------+
| current_dept_emp                                                |
| departments                                                     |
| dept_emp                                                        |
| dept_emp_latest_date                                            |
| dept_manager                                                    |
| employees                                                       |
| salaries                                                        |
| titles                                                          |
+-----------------------------------------------------------------+
SQLRowCount returns 8
8 rows fetched
SQL> select count(*) from employees;
+---------------------+
| count(*)            |
+---------------------+
| 300024              |
+---------------------+
SQLRowCount returns 1
1 rows fetched

###- DG4Oのインストール

DG4OサーバにoracleでVNC接続のうえ、Oracle DatabaseダウンロードサイトからDatabase Gateway for ODBCをダウンロード

image.png

  • Oracle Universal Installerを用いてDG4Oを設定

インストール前のおまじない

$ sudo yum install oracle-database-preinstall-19c.x86_64
  • ダウンロードしたDatabase Gateway for ODBCインストーラーを実行
$ cd Downloads/
$ unzip LINUX.X64_193000_gateways.zip
$ cd gateways/
$ ./runInstaller

インストーラのステップに沿って以下のとおり実行

image.png

image.png
Oracle Database Gateway for ODBCを選択

image.png

あとはデフォルト構成でOKなので省略

  • NETCAを用いてネットワークを設定

image.png

image.png

ADBとのTCPS接続用にTCPSを追加

image.png

TCPはデフォルトを利用

image.png

TCPSは1522を利用
image.png

完了
image.png

image.png
rootで以下を実行

image.png

# /home/oracle/app/oraInventory/orainstRoot.sh
Changing permissions of /home/oracle/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /home/oracle/app/oraInventory to oinstall.
The execution of the script is complete.

# /home/oracle/app/oracle/product/19.0.0/tghome_1/root.sh
Performing root user operation.

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /home/oracle/app/oracle/product/19.0.0/tghome_1

Enter the full pathname of the local bin directory: [/usr/local/bin]:
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...


Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.

###- Oracle Netの設定

  • listener.oraの設定
# listener.ora Network Configuration File: /home/oracle/app/oracle/product/19.0.0/tghome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = instance-20210418-1233.sub04121421100.vcn05.oraclevcn.com)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCPS)(HOST = instance-20210418-1233.sub04121421100.vcn05.oraclevcn.com)(PORT = 1522))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

SID_LIST_LISTENER =
   (SID_LIST =
      (SID_DESC =
       (SID_NAME=dg4odbc)
      (ORACLE_HOME=/home/oracle/app/oracle/product/19.0.0/tghome_1)
      (ENV="LD_LIBRARY_PATH=/usr/lib64:/home/oracle/app/oracle/product/19.0.0/tghome_1/lib")
      (PROGRAM=DG4ODBC)
      )
   )
  • tnsnames.oraの設定
tnsnames.ora
DG4ODBC =
   (DESCRIPTION=
      (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
      (CONNECT_DATA=(SID=DG4ODBC))
      (HS=OK)
   )
  • Oracle-ODBCファイルの設定
$ORACLE_HOME/hs/admin/initdg4odbc.ora
# This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC

#
# HS init parameters
#
HS_FDS_CONNECT_INFO = DG4ODBC
HS_FDS_TRACE_LEVEL = DEBUG
HS_FDS_TRACE_FILE_NAME = /home/oracle/odbc/hsodbcsql.trc
HS_FDS_SHAREABLE_NAME = /lib64/libodbc.so.2

#
# ODBC specific environment variables
#
set ODBCINI=/etc/odbc.ini

HS_FDS_TRACE_FILE_NAMEのパスは、以下で確認する

$ ldd `which isql` | grep odbc
        libodbc.so.2 => /lib64/libodbc.so.2 (0x00007fa6bd06b000)

#■ Database Cloud Service(DBCS)からNon-OracleDB(MySQL)へのDBLINK接続

##● システム構成イメージ

DBCS(ローカル) -- [Oracle Net:TCPS] --> DG4O --[ODBC]--> MySQL on Compute(リモート)

※ DG4OとNon-Oracleは同一サーバ上に配置

##● 設定例

  • Oracle Net設定 on DG4O
  • Oracle Net設定 on DBCS
  • DBLINK作成

- Oracle Net設定 on DG4O

  • ウォレットファイルの確認
$ ls /u01/server/wallet
cwallet.sso  ewallet.p12
  • sqlnet.oraの編集
# sqlnet.ora Network Configuration File: /u01/app/19.0.0.0/grid/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

wallet_location =
 (SOURCE=
  (METHOD=File)
  (METHOD_DATA=
   (DIRECTORY=/u01/server/wallet)))
 
SSL_SERVER_DN_MATCH=(ON)
  • lisener.oraの編集

wallet_locationを追記

wallet_location =
 (SOURCE=
  (METHOD=File)
  (METHOD_DATA=
   (DIRECTORY=/u01/server/wallet)))
  • TCPSエンドポイントの再構成
$ lsnrctl reload
$ lsnrctl status

- Oracle Net設定 on DBCS

  • ウォレットファイルの確認
$ ls /u01/client/wallet
cwallet.sso  ewallet.p12
  • sqlnet.oraの編集
WALLET_LOCATION =
   (SOURCE =
     (METHOD = FILE)
     (METHOD_DATA =
       (DIRECTORY = /u01/client/wallet)
     )
   )
 
SSL_SERVER_DN_MATCH=(ON)
  • tnsnames.oraの編集
DG4ODBCS =
   (DESCRIPTION=
      (ADDRESS=(PROTOCOL=tcps)(HOST=dg4o)(PORT=1522))
      (CONNECT_DATA=(SID=DG4ODBC))
      (HS=OK)
      (SECURITY= (SSL_SERVER_CERT_DN="CN=dbcs"))
   )

- DBLINK作成

DBLINK作成

CREATE PUBLIC DATABASE LINK DBLINK_DG4ODBCS CONNECT TO "root" IDENTIFIED BY "WelCome123#123#" USING 'DG4ODBCS';

DBLINK経由でMySQLにSQLを実行

SQL> select count(*) from "employees"@DBLINK_DG4ODBCS;

  COUNT(*)
----------
    300024

#■ Autonomous Database(ADB)からNon-OracleDB(MySQL)へのDBLINK接続(DG4ODBCとNon-OracleDBを同一ノードに配置)

##● システム構成イメージ

ADB(ローカル) -- [Oracle Net:Public/TCPS] --> DG4O --[ODBC]--> MySQL on Compute(リモート)

※ DG4OとNon-Oracleは同一サーバ上に配置
※ ADBとDG4OはPublic IPアドレスで接続(Oracle Cloud内に閉じた通信で、Internetにはトラフィックが流れない)

##● 設定例

  • ADBからの接続設定:TCPS接続先(DG4O)
  • ADBへのSQL接続設定
  • ADBにDG4O接続用のウォレットファイルの登録
  • ADBのDBLINK作成

###- Autonomous DBからの接続設定:TCPS接続先(DG4O)

  • OCI-Security List設定

Autonomous DBのOutbound IPの確認

SELECT cloud_identity FROM v$pdbs;

OCI Consoleを用いて以下通信経路を確保

Autonomous DB -(TCPS)-> DG4O

  • DG4OのFirewall設定

Firewall設定の確認

$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens3
  sources:
  services: dhcpv6-client ssh
  ports: 5900-5902/tcp 1521-1523/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
  • Security Listの登録

image.png

###- ADBへのSQL接続設定

  • Autonomous databaseのIDを確認
$ oci db autonomous-database list
  • ウォレットファイルのダウンロード
$ oci db autonomous-database generate-wallet --autonomous-database-id ocid1.autonomousdatabase.oc1.iad.xxxxxx --file /home/oracle/Wallet/Wallet_ADBS-Private.zip --password <your password> 
  • ウォレットファイルを用いてSQL接続
$ sql /nolog
SQL> set cloudconfig /home/oracle/Wallet/Wallet_ADBS-Private.zip
Operation is successfully completed.
Operation is successfully completed.
Using temp directory:/tmp/oracle_cloud_config6589439447521943899

SQL> connect admin/WelCome123#123#@adbs_high

###- ADBにDG4O接続用のウォレットファイルの登録

  • クレデンシャルの登録

credential登録 : ADB -> Object Storage
・username: OCI User(IAM User)
・Password: 認証トークン

BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'OS_CRED',
    username => 'foo',
    password => 'baa'
  );
END;
/

credential登録 : DBLINK(ADB -> DG4O/MySQL)
・username: MySQL User
・Password: MySQL Password

BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'MySQL_CRED',
    username => 'root',
    password => 'WelCome123#123#'
  );
END;
/
  • 登録されたクレデンシャルの確認
SELECT credential_name, username, comments FROM all_credentials;
  • ウォレットをbucketにアップロード
$ oci os object put -bn ADB_DBLIN_DG4O --file '/home/oracle/Wallet/client_wallet/cwallet.sso' --name cwallet.sso
  • 確認
SELECT * FROM DBMS_CLOUD.LIST_OBJECTS('OS_CRED', 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/idqyzd41fwn7/b/ADB_DBLIN_DG4O/o/');
   OBJECT_NAME    BYTES                            CHECKSUM    CREATED                          LAST_MODIFIED
______________ ________ ___________________________________ __________ ______________________________________
cwallet.sso        6269 0b7425beae28120fab237db73e9cfbfd               20-APR-21 04.56.13.733000000 AM GMT

###- DBLINK作成

  • ディレクトリの作成
CREATE DIRECTORY ADB_DBLINK_DG4O_DIR AS 'ADB_DBLINK_DG4O_DIR';
  • Walletファイルをディレクトリに取り込み
BEGIN 
     DBMS_CLOUD.GET_OBJECT(
	credential_name => 'OS_CRED',	
        object_uri => 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/idqyzd41fwn7/b/ADB_DBLIN_DG4O/o/cwallet.sso',
        directory_name => 'ADB_DBLINK_DG4O_DIR'); 
END;
/
  • 確認
SELECT * FROM DBMS_CLOUD.LIST_FILES('ADB_DBLINK_DG4O_DIR');

   OBJECT_NAME    BYTES    CHECKSUM                                CREATED                          LAST_MODIFIED
______________ ________ ___________ ______________________________________ ______________________________________
cwallet.sso        6269             20-APR-21 05.18.15.000000000 AM GMT    20-APR-21 05.18.15.000000000 AM GMT
  • GLOBAL_NAMESをFALSEに設定
SQL> ALTER SYSTEM SET GLOBAL_NAMES = FALSE;
 
System altered.

SQL> SHOW PARAMETER GLOBAL_NAMES
NAME                     TYPE        VALUE
----------------------   ----------- -----------
global_names             boolean     FALSE
  • DBLINKの作成(Database Gateway for ODBC経由)
    gateway_link => TRUEパラメータを追加する必要あり
BEGIN
     DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
          db_link_name => 'ADB_DBLINK_DG4O', 
          hostname => 'W.X.Y.Z', 
          port => '1522',
          service_name => 'DG4ODBC',
          ssl_server_cert_dn => 'CN=dbcs',
          credential_name => 'MySQL_CRED',
          directory_name => 'ADB_DBLINK_DG4O_DIR',
          gateway_link => TRUE);
END;
/
  • 確認
SQL> select * from all_db_links;

#■ ADBからNon-OracleDB(MySQL Database Service : MDS)へのDBLINK接続(DG4ODBCとNon-OracleDBを別ノードに配置)

##● システム構成イメージ

ADB(ローカル) -- [Oracle Net] --> DG4O --[ODBC]--> MDS(リモート)

##● 設定例

「Autonomous Database(ADB)からNon-OracleDB(MySQL)へのDBLINK接続」の構成を前提に以下を設定

  • MDSのセットアップ
  • Oracle Net設定の変更
  • ODBC設定の変更
  • Firewall設定の変更
  • DBLINKの作成

###- MDSのセットアップ

この記事などを参考にMDSをセットアップ

OCIコンソールからMySQL → DBシステムを選択
image.png

MySQL DBシステムの作成を選択
image.png

以下、ノード基本情報、ネットワーク、シェイプ選択、バックアップ構成、ホスト名などを登録
image.png
image.png
image.png
image.png

作成後、しばらく(10数分)すると以下のとおりサービスがActiveになります。
image.png

エンドポイントを確認
image.png

###- ODBC設定の変更

  • /etc/odbc.iniファイルにMDS接続用設定を追記
[mds]
Driver       = /usr/lib64/libmyodbc8w.so
Description  = Connector/ODBC 8.0 UNICODE Driver DSN
SERVER       = mds01.sub04121421101.vcn05.oraclevcn.com
PORT         = 3306
USER         = remotemds
Password     = WelCome123#123#
Database     = employees
OPTION       = 3
CHARSET      = utf8

###- Oracle Net設定の変更

  • initファイル作成
$ORACLE_HOME:hs/admin/initMDS.ora
# This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC

#
# HS init parameters
#
HS_FDS_CONNECT_INFO = MDS
HS_FDS_TRACE_LEVEL = DEBUG
HS_FDS_TRACE_FILE_NAME = /home/oracle/odbc/hsodbcsql.trc
HS_FDS_SHAREABLE_NAME = /lib64/libodbc.so.2

#
# ODBC specific environment variables
#
set ODBCINI=/etc/odbc.ini

#
# Environment variables required for the non-Oracle system
#
#set <envvar>=<value>

HS_NLS_NCHAR=UCS2
HS_LANGUAGE=JAPANESE_JAPAN.AL32UTF8
  • tnsnames.oraの設定変更

MDSを追加

MDS =
   (DESCRIPTION=
      (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
      (CONNECT_DATA=(SID=MDS))
      (HS=OK)
      (SECURITY= (SSL_SERVER_CERT_DN="CN=dbcs"))
   )
  • listener.oraの設定変更

SID_LISTに、MDSを追加

SID_LIST_LISTENER =
   (SID_LIST =
      (SID_DESC =
       (SID_NAME=DG4ODBC)
       (ORACLE_HOME=/home/oracle/app/oracle/product/19.0.0/tghome_1)
       (ENV="LD_LIBRARY_PATH=/lib64:/usr/lib:/usr/lib64:/home/oracle/app/oracle/product/19.0.0/tghome_1/lib")
       (PROGRAM=dg4odbc)
      )
      (SID_DESC =
       (SID_NAME=MDS)
       (ORACLE_HOME=/home/oracle/app/oracle/product/19.0.0/tghome_1)
       (ENV="LD_LIBRARY_PATH=/lib64:/usr/lib:/usr/lib64:/home/oracle/app/oracle/product/19.0.0/tghome_1/lib")
       (PROGRAM=dg4odbc)
      )
   )
  • エンドポイントの更新

listenerのreload

$ lsnrctl reload

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 22-APR-2021 03:27:42

Copyright (c) 1991, 2019, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=instance-20210418-1233.sub04121421100.vcn05.oraclevcn.com)(PORT=1521)))
The command completed successfully

確認
Service "MDS"が登録されていることを確認

$ lsnrctl status

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 22-APR-2021 03:27:52

Copyright (c) 1991, 2019, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=instance-20210418-1233.sub04121421100.vcn05.oraclevcn.com)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                18-APR-2021 16:16:33
Uptime                    3 days 11 hr. 11 min. 18 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /home/oracle/app/oracle/product/19.0.0/tghome_1/network/admin/listener.ora
Listener Log File         /home/oracle/app/oracle/diag/tnslsnr/instance-20210418-1233/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=instance-20210418-1233.sub04121421100.vcn05.oraclevcn.com)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=instance-20210418-1233.sub04121421100.vcn05.oraclevcn.com)(PORT=1522)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "DG4ODBC" has 1 instance(s).
  Instance "DG4ODBC", status UNKNOWN, has 1 handler(s) for this service...
Service "MDS" has 1 instance(s).
  Instance "MDS", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

###- Firewall設定の変更

  • VCNのセキュリティリストにDG4OからMDSにアクセスするための設定を追加

image.png

  • DG4OからMDSエンドポイントに向けて接続確認
$ mysql -h mds01.sub04121421101.vcn05.oraclevcn.com -u remotemds -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.23-u2-cloud MySQL Enterprise - Cloud

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)
  • テスト用のDB/Table作成
$ mysql -h mds01.sub04121421101.vcn05.oraclevcn.com -u remotemds -p
mysql> create database employees;
mysql> use employees;
Database changed
mysql> show database;
+--------------------+
| Database           |
+--------------------+
| employees          |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
mysql> CREATE TABLE employees (
    emp_no      INT             NOT NULL,
    birth_date  DATE            NOT NULL,
    first_name  VARCHAR(14)     NOT NULL,
    last_name   VARCHAR(16)     NOT NULL,
    gender      ENUM ('M','F')  NOT NULL,
    hire_date   DATE            NOT NULL,
    PRIMARY KEY (emp_no)
);

insert test data

INSERT INTO `employees` VALUES (10001,'1953-09-02','Georgi','Facello','M','1986-06-26'),
(10002,'1964-06-02','Bezalel','Simmel','F','1985-11-21'),
(10003,'1959-12-03','Parto','Bamford','M','1986-08-28'),
(10004,'1954-05-01','Chirstian','Koblick','M','1986-12-01'),
(10005,'1955-01-21','Kyoichi','Maliniak','M','1989-09-12'),
(10006,'1953-04-20','Anneke','Preusig','F','1989-06-02'),
(10007,'1957-05-23','Tzvetan','Zielinski','F','1989-02-10'),
(10008,'1958-02-19','Saniya','Kalloufi','M','1994-09-15'),
(10009,'1952-04-19','Sumant','Peac','F','1985-02-18'),
(10010,'1963-06-01','Duangkaew','Piveteau','F','1989-08-24')

###- DBLINKの作成

  • ウォレットファイルの確認

Database Cloud Service(DBCS)からNon-OracleDB(MySQL)へのDBLINK接続で登録したクレデンシャルやウォレットファイルを確認

sql /nolog

!-- ADBのウォレットファイルを使ってADBにSQL接続
SQL> set cloudconfig /home/oracle/Wallet/Wallet_ADBS-Private.zip
Operation is successfully completed.
Operation is successfully completed.
Using temp directory:/tmp/oracle_cloud_config6589439447521943899

SQL> connect admin/WelCome123#123#@adbs_high

!-- ADBに登録されているクレデンシャルファイルを確認
>SQL SELECT * FROM DBMS_CLOUD.LIST_OBJECTS('OS_CRED', 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/hogehoge/b/ADB_DBLIN_DG4O/o/');

SQL> SELECT *  FROM all_credentials);
   OWNER    CREDENTIAL_NAME                                                USERNAME    WINDOWS_DOMAIN                                                   COMMENTS    ENABLED
________ __________________ _______________________________________________________ _________________ __________________________________________________________ __________
ADMIN    MYSQL_CRED         root                                                                      {"comments":"Created via DBMS_CLOUD.create_credential"}    TRUE
ADMIN    OS_CRED            oracleidentitycloudservice/hoge@oracle.com                      {"comments":"Created via DBMS_CLOUD.create_credential"}    TRUE

!-- DG4OへのTCPS接続用のウォレットファイルの確認
SQL> SELECT * FROM DBMS_CLOUD.LIST_OBJECTS('OS_CRED', 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/idqyzd41fwn7/b/ADB_DBLIN_DG4O/o/');

   OBJECT_NAME    BYTES                            CHECKSUM    CREATED                          LAST_MODIFIED
______________ ________ ___________________________________ __________ ______________________________________
cwallet.sso        6269 0b7425beae28120fab237db73e9cfbfd               20-APR-21 04.56.13.733000000 AM GMT

###- DBLINKの作成

  • MDS接続用のディレクトリの作成
SQL> CREATE DIRECTORY ADB_DBLINK_MDS_DIR AS 'ADB_DBLINK_MDS_DIR';

SQL> select * from dba_directories where directory_name = 'ADB_DBLINK_MDS_DIR';
   OWNER        DIRECTORY_NAME                                                        DIRECTORY_PATH    ORIGIN_CON_ID
________ _____________________ _____________________________________________________________________ ________________
SYS      ADB_DBLINK_MDS_DIR    /u03/dbfs/BFC7FF6CFC9043AEE0530714000AA508/data/ADB_DBLINK_MDS_DIR                  20
  • Walletファイルをディレクトリに取り込み
SQL> BEGIN 
     DBMS_CLOUD.GET_OBJECT(
    credential_name => 'OS_CRED',   
        object_uri => 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/idqyzd41fwn7/b/ADB_DBLIN_DG4O/o/cwallet.sso',
        directory_name => 'ADB_DBLINK_MDS_DIR'); 
END;
/
  • DBLINK用のクレデンシャル作成

username: MySQL User
Password: MySQL Password

BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'MDS_CRED',
    username => 'remotemds',
    password => 'WelCome123#123#'
  );
END;
/
  • DBLINKの作成
SQL> BEGIN
     DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
          db_link_name => 'ADB_DBLINK_MDS', 
          hostname => 'W.X.Y.Z', 
          port => '1522',
          service_name => 'DG4ODBC',
          ssl_server_cert_dn => 'CN=dbcs',
          credential_name => 'MDS_CRED',
          directory_name => 'ADB_DBLINK_MDS_DIR',
          gateway_link => TRUE);
END;
/
  • 確認
SQL>  select * from "employees"@ADB_DBLINK_MDS;

   emp_no    birth_date    first_name    last_name    gender    hire_date
_________ _____________ _____________ ____________ _________ ____________
    10001 02-SEP-53     Georgi        Facello      M         26-JUN-86
    10002 02-JUN-64     Bezalel       Simmel       F         21-NOV-85
    10003 03-DEC-59     Parto         Bamford      M         28-AUG-86
    10004 01-MAY-54     Chirstian     Koblick      M         01-DEC-86
    10005 21-JAN-55     Kyoichi       Maliniak     M         12-SEP-89
    10006 20-APR-53     Anneke        Preusig      F         02-JUN-89
    10007 23-MAY-57     Tzvetan       Zielinski    F         10-FEB-89
    10008 19-FEB-58     Saniya        Kalloufi     M         15-SEP-94
    10009 19-APR-52     Sumant        Peac         F         18-FEB-85
    10010 01-JUN-63     Duangkaew     Piveteau     F         24-AUG-89

10 rows selected.

#■ 参考情報

##● 資料

Database Gateway for ODBC

MySQL

ODBC

##● 関連する設定・コマンド

###- VNCの設定

oracleユーザ接続用のVNCを設定

$ sudo su - oracle
$ vncpasswd
$ vncserver :1
$ vncserver -list

TigerVNC server sessions:

X DISPLAY #     PROCESS ID
:1              11754

firewllの設定

$ sudo firewall-cmd --permanent --add-port=5900-5902/tcp
$ sudo firewall-cmd --permanent --add-port=1521-1523/tcp
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-all

###- MySQL設定

確認

$ mysql --version
mysql  Ver 8.0.23 for Linux on x86_64 (MySQL Community Server - GPL)

$ systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html

MySQL初期セットアップ

$ sudo systemctl start mysqld
$ sudo grep password /var/log/mysqld.log
2021-04-18T06:57:39.457413Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: J7gfAaMuX)wm

$ mysql -u root -p 
> ALTER USER 'root'@'localhost' IDENTIFIED BY 'WelCome123#123#';
> exit
$ mysql -u root -p

※ 本番環境ならばmysql_secure_installationを実施

sample dbのセットアップ

$ git clone https://github.com/datacharmer/test_db.git
$ cd test_db
$ mysql -u root -p < employees.sql
$ mysql -u root -p

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| employees          |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> use employees
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+----------------------+
| Tables_in_employees  |
+----------------------+
| current_dept_emp     |
| departments          |
| dept_emp             |
| dept_emp_latest_date |
| dept_manager         |
| employees            |
| salaries             |
| titles               |
+----------------------+
8 rows in set (0.00 sec)

mysql> select count(*) from employees;
+----------+
| count(*) |
+----------+
|   300024 |
+----------+
1 row in set (0.03 sec)
  • MySQL サービスコントロール
# MySQL サービスの起動
$ sudo systemctl start mysql
# MySQL サービスの停止
$ sudo systemctl stop mysql
# MySQL サービスの再起動
$ sudo systemctl restart mysql
# MySQL サービスの自動起動の有効化
$ sudo systemctl enable mysql
# MySQL サービスの自動起動の無効化
$ sudo systemctl disable mysql
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?