#■この記事で記載すること
Oracle DBLINKの基本接続構成の設定例と、Oracleを用いた以下のDBLINK構成自分用メモのまとめページを記載します。
- 基本接続
- TCP接続:OracleからOracleへのDBLINK接続(TCP接続)
- TCPS接続:上記接続をTCPからTCPSに変更
- Autonomous Database(ADB)を用いたDBLINK接続
- ADBからADBへのDBLINK接続
- ADBからDBCSへのDBLINK接続
- OracleからNon-OracleDBへのDatabase Gateway for ODBC(DG4ODBC)を用いたDBLINK接続
- DBCSからNon-OracleDB(MySQL)へのDBLINK接続
- ADBからNon-OracleDB(MySQL)へのDBLINK接続(DG4ODBCとNon-OracleDBを同一ノードに配置)
- ADBからNon-OracleDB(MySQL Database Service : MDS)へのDBLINK接続(DG4ODBCとNon-OracleDBを別ノードに配置)
#■Oracle DBLINKの概要説明
##● DBLINKとは
データベース・リンクとは、他のデータベース上のオブジェクトにアクセスできる、データベース上のスキーマ・オブジェクトです。他のデータベースは、Oracle Databaseシステムである必要はありません。ただし、Oracle以外のシステムにアクセスする場合は、Oracle異機種間サービスを使用する必要があります。
データベース・リンクを作成した後で、表名、ビュー名またはPL/SQLオブジェクト名に@dblinkを追加し、そのリンクをSQL文で利用して、他のデータベース上の表、ビューおよびPL/SQLオブジェクトを参照できます。SELECT文を使用して、他のデータベース上の表またはビューを問い合せることができます。INSERT文、UPDATE文、DELETE文またはLOCK TABLE文を使用してもリモート表およびビューにアクセスできます。`
SQL言語リファレンスから引用
#■ DBLINK基本接続構成(TCP接続)
##● システム構成イメージ
Oracle(ローカル) -- [Oracle Net : TCP] --> Oracle(リモート)
※システム構成図に変更予定
##● 主な構成要素と概要説明
構成要素 | 概要説明 |
---|---|
Oracle(ローカル) | リモートに接続するためのOracle Net(sqlnet/tnsnames)設定 |
Oracle(リモート) | ローカルからの接続を受けるためのOracle Net(sqlnet/listener)設定 |
##● 設定例
- Oracle(リモート)のOracle Net設定
- Oracle(ローカル)のOracle Net設定
- DBLINKの作成
###- Oracle(リモート)のOracle Net設定
ネットワーク経由で接続を受け付けるためのノーマルなOracle Net設定
- sqlnet.ora
- listener.ora
###- Oracle(ローカル)のOracle Net設定
Oracle ClientとしてのノーマルなOracle Net設定
- sqlnet.ora
- tnsnames.ora
###- DBLINKの作成
DBLINKを作成
CREATE PUBLIC DATABASE LINK remote USING 'remote';
リモートのオブジェクトにアクセス
UPDATE employees@remote
SET salary=salary*1.1
WHERE last_name = 'Baer';
##● 留意事項
-
global namesの利用要否
global namesを利用する場合、DBLNIKの名前をglobal namesのルールに沿って設定する必要がある。global namesを利用しない場合はglobal namesを無効化する -
ローカルとリモートのOracleのバージョン間の整合性
ローカルはClietnの位置づけ、リモートはServerの位置づけで以下のMatrixを参考にバージョン間の整合性を確認する
-
ローカルとリモートの間の疎通(L3/L4レベル)
一般的なL4レベルで疎通がとれていることを確認する
→ 特に、DBCSを利用している場合は、OCIのFirewall設定(SecurityListやNetwork Security Group)やDBCSのOSレベルでのFirewall設定(firewall-cmdやiptables)の設定を確認する
#■ DBLINK基本接続構成(TCPS接続)
##● システム構成イメージ
Oracle(ローカル)/w クライアントウォレットファイル -- [Oracle Net : TCPS] --> Oracle(リモート) /w サーバウォレットファイル
※システム構成図に変更予定
##● システム構成説明(TCP接続との差分)
「DBLINK基本接続構成(TCP接続)」を基本に、TCPをTPCSに変更するための構成が必要となる
- ウォレットファイルの作成、配置
- ウォレットファイルを利用するためのOracle Net設定
##● 設定例
- 環境
- ウォレットファイルの作成、配置
- Oracle(リモート)のOracle Net設定
- Oracle(ローカル)のOracle Net設定
- DBLINKの作成
###- 環境
この例では、Oracle(リモート)、Oracle(ローカル)ともにDBCS(Oracle Cloud Database Service)を利用
###- ウォレットファイルの作成、配置
この記事を参考にウォレットファイルを作成のうえ、以下に配置する。
・クライアントウォレットファイル
Oracle(ローカル)の/u01/client/wallet/
に配置
・サーバウォレットファイル
Oracle(リモート)の/u01/server/wallet/
に配置
###- Oracle(リモート)のOracle Net設定
・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 =
(SOURCE=
(METHOD=File)
(METHOD_DATA=
(DIRECTORY=/u01/server/wallet)))
・TCPSエンドポイントの再構成
$ srvctl modify listener -p "TCP:1521/TCPS:1522"
$ srvctl stop listener
$ srvctl start listener
$ srvctl stop database -database dbcs0502_iad1fq #11gの場合は、-databaseの代わりに-dを用いる
$ srvctl start database -database dbcs0502_iad1fq
$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 17-APR-2021 02:59:33
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date 17-APR-2021 01:06:13
Uptime 0 days 1 hr. 53 min. 20 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/19.0.0.0/grid/network/admin/listener.ora
Listener Log File /u01/app/grid/diag/tnslsnr/dbcs0502/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=10.0.1.136)(PORT=1522)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.0.1.136)(PORT=1521)))
Services Summary...
Service "+APX" has 1 instance(s).
Instance "+APX1", status READY, has 1 handler(s) for this service...
Service "+ASM" has 1 instance(s).
Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "+ASM_DATA" has 1 instance(s).
Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "+ASM_RECO" has 1 instance(s).
Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "dbcs0502XDB.subnet.vcn05.oraclevcn.com" has 1 instance(s).
Instance "dbcs0502", status READY, has 1 handler(s) for this service...
Service "dbcs0502_iad1fq.subnet.vcn05.oraclevcn.com" has 1 instance(s).
Instance "dbcs0502", status READY, has 2 handler(s) for this service...
The command completed successfully
###- Oracle(ローカル)のOracle Net設定
sqlnet.oraの編集
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /u01/client/wallet)
)
)
SSL_SERVER_DN_MATCH=(ON)
tnsnames.oraの編集
DBCS0502_IAD1FQ =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.1.136)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dbcs0502_iad1fq.subnet.vcn05.oraclevcn.com)
)
)
DBCS_TCPS =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCPS)(HOST = 10.0.1.136)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dbcs0502_iad1fq.subnet.vcn05.oraclevcn.com)
)
(SECURITY= (SSL_SERVER_CERT_DN="CN=dbcs"))
)
###- DBLINKの作成
SQL> CREATE PUBLIC DATABASE LINK DBLINK_DBCS_TCPS CONNECT TO "hoge" IDENTIFIED BY "WelCome123#123#" USING 'DBCS_TCPS';
#■参考情報
##● 参考リンク
- Documentation
- SQL言語リファレンス:create database link
- MOS(My Oracle Support)
- Client / Server Interoperability Support Matrix for Different Oracle Versions (Doc ID 207303.1)
- 分散トランザクション (Doc ID 1773383.1)
- How to view open dblink connections (Doc ID 387848.1)
- Blogs
- 古いバージョンのOracleデータベースでデータベース・リンクを使用している場合はパッチ適用が必要な場合があります