1. DBLINKとは
DBLINK(データベースリンク)は、あるOracleデータベースから別のOracleデータベースに接続し、データを参照したり操作を行うためのリンクです。特に、異なるシステムやデータベースを連携させる必要がある際に便利な機能で、データのリアルタイム共有や一元管理を実現します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
DBLINKの主な用途
- データの一元化:複数のシステムからデータを収集し、データの一元管理を実現。
- 異なるシステム間のデータ参照:DBLINKを使って、複数のシステム間でデータを共有し、リアルタイムでの参照を可能にします。
- データの分散処理:異なるデータベース間での効率的なデータ分散と利用が可能です。
以下は、テーブルを使用したDBLINKのテキスト形式イメージ図です。ローカルのSQLがリモートのテーブルにアクセスしている様子を表しています。

補足:
- ローカル側のSQLから
をつけてリモートテーブル@remote_dbemployeesを参照。 - DBLINKは
tnsnames.oraに設定されたを使って接続。remote_db - あくまでローカルから見た仮想的なアクセスであり、物理的なテーブルはリモート側に存在。
記事内でこの図を使えば、読者が「DBLINK経由でどこにアクセスしているのか」を視覚的に理解しやすくなります。必要であれば、INSERTやUPDATEを含むバージョンもご提供可能です。
この記事では以下で作成した環境(シングル/非CDB)を使用しています。
※既存で作成されている環境があれば基本的に問題ありません。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
2. DBLINKの作成手順
2.1 前提条件
1.TNS設定
リモートデータベースの接続情報が記載されたTNSエントリ(tnsnames.ora)を準備します。以下はtnsnames.oraの設定例です:
remote_db =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = <remote_host>)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = <remote_database_service>)
)
)
↓↓tnsnames.oraについてはコチラ。↓↓
2.権限の確認
DBLINK作成には、CREATE DATABASE LINK権限が必要です。また、リモートデータベースのユーザーアカウントが、DBLINKを作成するデータベースのユーザーと連携する必要があります。
2.2 DBLINKの作成方法
DBLINK作成時に必要な構文は以下の通りです:
CREATE DATABASE LINK <dblink_name>
CONNECT TO <username> IDENTIFIED BY <password>
USING '<tns_alias>';
- dblink_name:データベースリンクの名前
- usernameとpassword:接続先データベース(リモート側)のユーザー認証情報
- tns_alias:接続先データベースのTNSエントリ名(tnsnames.ora)
2.3 DBLINKの作成例
たとえば、scottユーザーでリモートデータベースremote_dbに接続するDBLINKを作成します。
CREATE DATABASE LINK remote_db_link
CONNECT TO scott IDENTIFIED BY tiger
USING 'remote_db';
2.4 DBLINKの作成後の確認
DBLINKが正しく機能するかを確認するため、簡単なSELECT文を発行してみます。
構文: select <列名1>,<列名2>… from <テーブル名>@<DBLINK名>
※OracleNet 接続の <テーブル名>@<TNSエントリ名> では無い点に注意
SELECT * FROM employees@remote_db_link;
実機を使用した実行結果
実行結果を表示(ここをクリック)
●リモート側のデータベースでテーブル作成
[oracle@remote_server ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on 月 5月 26 10:32:04 2025
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
に接続されました。
SQL> @?/rdbms/admin/utlsampl.sql ★SCOTT サンプルスキーマをインストール
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0との接続が切断されました。
[oracle@remote_server ~]$ sqlplus scott/tiger
SQL*Plus: Release 19.0.0.0.0 - Production on 月 5月 26 10:38:01 2025
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
最終正常ログイン時間: 月 5月 26 2025 10:32:19 +09:00
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
に接続されました。
SQL> CREATE TABLE employees ( ★テーブルを作成
2 employee_id NUMBER PRIMARY KEY,
3 first_name VARCHAR2(50),
4 last_name VARCHAR2(50),
5 department VARCHAR2(50),
6 hire_date DATE,
7 salary NUMBER(10, 2)
8 );
表が作成されました。
SQL> INSERT INTO employees VALUES (1001, 'Taro', 'Yamada', 'Sales', TO_DATE('2020-04-01','YYYY-MM-DD'), 500000);
1行が作成されました。
SQL> INSERT INTO employees VALUES (1002, 'Hanako', 'Suzuki', 'HR', TO_DATE('2019-07-15','YYYY-MM-DD'), 420000);
1行が作成されました。
SQL> INSERT INTO employees VALUES (1003, 'Ichiro', 'Tanaka', 'IT', TO_DATE('2021-01-10','YYYY-MM-DD'), 550000);
1行が作成されました。
SQL> INSERT INTO employees VALUES (1004, 'Keiko', 'Kobayashi','Marketing', TO_DATE('2018-11-25','YYYY-MM-DD'), 470000);
1行が作成されました。
SQL> INSERT INTO employees VALUES (1005, 'Satoshi','Kato', 'Finance', TO_DATE('2017-03-30','YYYY-MM-DD'), 600000);
1行が作成されました。
SQL> commit;
コミットが完了しました。
SQL> set lin 1000 pages 1000
SQL> col first_name for a20
SQL> col last_name for a20
SQL> col department for a20
SQL> select * from employees;
EMPLOYEE_ID FIRST_NAME LAST_NAME DEPARTMENT HIRE_DAT SALARY
----------- -------------------- -------------------- -------------------- -------- ----------
1001 Taro Yamada Sales 20-04-01 500000
1002 Hanako Suzuki HR 19-07-15 420000
1003 Ichiro Tanaka IT 21-01-10 550000
1004 Keiko Kobayashi Marketing 18-11-25 470000
1005 Satoshi Kato Finance 17-03-30 600000
●ローカル側のデータベースで DBLINK を作成
[oracle@v19single ~]$ vi $ORACLE_HOME/network/admin/tnsnames.ora ★tnsnames.ora 作成
[oracle@v19single ~]$ cat $ORACLE_HOME/network/admin/tnsnames.ora
remote_db =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = remote_server)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = v19)
)
)
[oracle@v19single ~]$ sqlplus user1/user1
SQL*Plus: Release 19.0.0.0.0 - Production on 月 5月 26 10:57:55 2025
Version 19.3.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
に接続されました。
SQL> CREATE DATABASE LINK remote_db_link ★DBLINK 作成
2 CONNECT TO scott IDENTIFIED BY tiger
3 USING 'remote_db';
データベース・リンクが作成されました。
SQL> set lin 1000 pages 1000
SQL> col first_name for a20
SQL> col last_name for a20
SQL> col department for a20
SQL> SELECT * FROM employees@remote_db_link; ★DBLINK を使用してテーブルを select
EMPLOYEE_ID FIRST_NAME LAST_NAME DEPARTMENT HIRE_DAT SALARY
----------- -------------------- -------------------- -------------------- -------- ----------
1001 Taro Yamada Sales 20-04-01 500000
1002 Hanako Suzuki HR 19-07-15 420000
1003 Ichiro Tanaka IT 21-01-10 550000
1004 Keiko Kobayashi Marketing 18-11-25 470000
1005 Satoshi Kato Finance 17-03-30 600000
本記事に掲載の実機出力結果(コマンド結果・SQL実行結果・ファイル位置など)は、 DB のバージョン、構成、初期化パラメータ、 OS/仮想化/ネットワーク設定、およびパッチ適用状況(例:RU/RUR 等)等によって 変わる場合があります。実際にお使いの検証環境でご確認ください。
- Oracle VM VirtualBox
- Oracle Linux 7.9
- Oracle Database 19c(シングル構成/非CDB)
-
Oracle Linux 7.9でOracle 19cをインストール① – Oracle Linuxを構築
https://oracle-master00000.com/oracle-database-19c-install002/ -
Oracle Linux 7.9でOracle 19cをインストール② – Oracle Databaseをインストール
https://oracle-master00000.com/oracle-database-19c-install003/
【参考】
シノニムを使用することで @remote_db_link のようにせずにDBLINKを使用することもできます。
コマンド実行例
--シノニムを作成
CREATE SYNONYMemployees_syn FORemployees@remote_db_link;
--作成したシノニムを使用してselectSELECT * FROMemployees_syn;
※SELECT * FROM employees@remote_db_link;と同様
3. DBLINKの活用例
3.1 リモートデータの参照
リモートデータベースのテーブルをローカルのテーブルのように参照できます。
SELECT employee_id, first_name, last_name FROM employees@remote_db_link WHERE department = 'HR';
3.2 ローカルテーブルへのデータ挿入
リモートデータベースから取得したデータを、ローカルのテーブルに挿入します。
INSERT INTO local_employees (id, name, department)
SELECT employee_id, first_name, department FROM employees@remote_db_link;
3.3 データ更新
リモートデータベース上のデータを更新する場合もDBLINKを使用できますが、慎重に行う必要があります。
UPDATE employees@remote_db_link SET salary = salary * 1.05 WHERE department = 'IT';
4. DBLINK利用時のセキュリティ対策
DBLINKはリモートデータベースに直接アクセスするため、適切なセキュリティ対策が必要です。
4.1 アクセス権限の管理
DBLINKを作成するユーザーのアクセス権限を適切に管理し、最小限の権限で運用するようにします。
4.2 Oracle Walletの利用
Oracle Walletを利用して、DBLINKのパスワードを安全に管理します。これにより、パスワードがSQL文内に残らず、セキュリティが向上します。
4.3 DBLINKの監査とログ記録
DBLINKの利用状況を監査し、定期的にアクセスログを確認します。異常なアクセスがあれば即座に対応できるように監視体制を整備します。
5. DBLINKのエラーハンドリングとトラブルシューティング
DBLINK利用中に発生しやすいエラーとその対策を以下に示します。
- ORA-12154: TNSnot resolve the connect identifier specified
- 原因:指定したTNSエイリアスが見つからない。
- 対策:
tnsnames.ora設定を確認し、接続先のエントリが正しいか確認します。
- ORA-12541: TNSlistener
- 原因:リモートデータベースのリスナーが起動していない。
- 対策:リモートホストのリスナーが起動しているかを確認し、必要に応じて再起動します。
- ORA-01017: invalid username/password
- 原因:DBLINK作成時に指定したユーザー名またはパスワードが誤っている。
- 対策:DBLINKのユーザー認証情報を再確認し、修正します。
- ORA-28547: connection to server failed
- 原因:ネットワーク障害やファイアウォール設定による通信エラー。
- 対策:ファイアウォールやVPN設定、ネットワークの疎通を確認します。
6. DBLINKのメンテナンスと管理
DBLINKは長期にわたって運用されることが多いため、定期的なメンテナンスが必要です。
6.1 DBLINKの一覧確認
DBLINKの一覧を取得するには、以下のSQL文を使用します。
SELECT * FROM dba_db_links;
6.2 DBLINKの削除
DBLINKが不要になった場合は、以下のコマンドで削除します。
DROP DATABASE LINK remote_db_link;
6.3 パスワードの更新
リモートデータベースのパスワードを定期的に変更し、セキュリティリスクを低減します。Oracle Walletを使用している場合は、パスワードの更新が容易になります。
7. DBLINK利用のベストプラクティス
DBLINKの利用におけるベストプラクティスを紹介します。
7.1 必要なときだけ使用する
DBLINKはリモートデータベースに負荷をかけるため、必要なタイミングでのみ使用し、不要なときには削除するのが望ましいです。
7.2 簡潔なクエリの利用
DBLINKを介したクエリは、シンプルなSQL文に限定することでパフォーマンスを向上させます。JOIN操作や集計処理は可能な限りローカルで行い、リモートデータベースから必要なデータのみを取得します。
7.3 ネットワークのモニタリング
DBLINKを使用するとネットワーク経由での通信が発生するため、ネットワークの遅延が発生しないように定期的なモニタリングが推奨されます。
8. まとめと次のステップ
DBLINKは異なるデータベース間でのデータ共有やアクセスに非常に有用ですが、ネットワークやセキュリティに配慮する必要があります。DBLINKを適切に管理し、効率的なデータ連携を目指しましょう。
[参考]
SQL言語リファレンス – CREATE DATABASE LINK
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?




コメント