Oracle DBLINK(データベースリンク)は、別のOracleデータベースに対してSQLを実行できる便利な機能です。
本記事では、2台のOracleデータベースを想定し、DBLINKの設定から接続確認、ユーザー作成、実行例まで丁寧に解説します。
↓DBLINKのイメージ↓

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
1. 🔰 DBLINKとは?
Oracle DBLINKは、別サーバーにあるOracleデータベースにSQLでアクセスできる仕組みです。
たとえば、ローカルのSCOTTユーザーが、リモートDBにあるHRユーザーのテーブルにアクセスできます。
2. 🖥️ システム構成とDBLINKの図解
┌──────────────────────────────┐
│ 接続元データベース(ローカル) │
│ ホスト名:dbhost01 │
│ SID:DBA01 │
│ ユーザー:SCOTT(DBLINK作成・利用) │
└────┬─────────────────────────┘
│ DBLINK (dbb01_link)
▼
┌──────────────────────────────┐
│ 接続先データベース(リモート) │
│ ホスト名:dbhost02 │
│ SID:DBB01 │
│ ユーザー:HR(DBLINK接続先、表を持つ) │
│ 表:employees │
└──────────────────────────────┘
SCOTTユーザーから、employees@dbb01_linkのようにアクセスします。
3. 🔧 TNS接続情報の設定と確認 –ローカル(接続元DB側)
📄 tnsnames.oraの設定
<接続識別子> =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = <ホスト名>)(PORT = <ポート番号>))
(CONNECT_DATA =
(SID = <サービス名>)
)
)
--作成例DBB01 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbhost02)(PORT = 1521))
(CONNECT_DATA =
(SID = DBB01)
)
)
⚠
HOST、PORT、SIDは実際の接続先環境に合わせて適切に変更してください。
ファイル場所(デフォルト)
$ORACLE_HOME/network/admin/tnsnames.ora
(例):/u01/app/oracle/product/19.0.0/dbhome_1/network/admin/tnsnames.ora
✅ TNS接続の確認方法
TNSが正しく設定されているか、sqlplusで接続確認を行います。
sqlplus hr/hrpw@DBB01
成功例:
SQL*Plus: Release 19.0.0.0.0 - Production
に接続されました。
エラーになる場合は、tnsping DBB01 も併せて実行して、接続確認を行ってください。
4. 🏗 接続先DBにユーザーと表を作成(接続先:DBB01)
✅ ユーザー:HRの作成
CREATE USER hr IDENTIFIED BY hrpw;
GRANT CONNECT, RESOURCE TO hr;
✅ テーブル:employees の作成とデータ投入
CREATE TABLE hr.employees (
employee_id NUMBER PRIMARY KEY,
first_name VARCHAR2(50),
salary NUMBER
);
INSERT INTO hr.employees VALUES (1, '佐藤 太郎', 300000);
INSERT INTO hr.employees VALUES (2, '鈴木 花子', 320000);
COMMIT;
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
5. 🛠 DBLINKの作成(接続元:DBA01のSCOTTユーザー)
接続先にアクセスするためのDBLINKを作成します。
-- DBLINK作成構文CREATE (PUBLIC) DATABASE LINK <DBLINK名>
CONNECT TO <ユーザー名> IDENTIFIED BY <パスワード>
USING '<接続識別子(tnsnames.ora)>';
※ユーザー名は接続先DB側に存在するユーザー-- 実行例(SCOTTユーザーでログインして実行)
CREATE DATABASE LINK dbb01_link
CONNECT TO hr IDENTIFIED BY hrpw
USING 'DBB01';
USINGに指定するのはtnsnames.oraに登録したTNS名です。
※SCOTTサンプルスキーマは以下を実行することでインストール可能です。
$ sqlplus / as sysdba
SQL> @?/rdbms/admin/utlsampl.sql
$ sqlplus scott/tiger
6. ✅ DBLINKの使用例
データの参照
SELECT * FROM employees@dbb01_link;
条件付きで参照
SELECT employee_id, first_name
FROM employees@dbb01_link
WHERE salary > 310000;
このクエリは、ローカルDBにいながら、接続先の
hr.employees表を直接参照しています。
7. 🧱 DBLINKの種類と注意点
| 種類 | 特徴 |
|---|---|
| プライベート | 作成したユーザー(例:SCOTT)だけが使用可能 |
| パブリック | 他のユーザーも使用可能(DBA権限が必要) |
🚨 セキュリティ注意点
- パスワードは平文でCREATE文に記述される
- 接続先ユーザーには最小限の権限のみ付与する
- DBLINK経由でDMLも可能なので、用途を限定した専用ユーザーが望ましい
8. ✅ まとめ
| 項目 | 内容 |
|---|---|
| 目的 | 別のOracle DBにSQLでアクセスできる |
| 準備 | 接続先ユーザー・TNS設定・DBLINK作成 |
| 使用方法 | SELECT ~ FROM 表@リンク名でリモート表を参照 |
| 接続確認 | sqlplus ユーザー/パスワード@TNS名でテスト可能 |
| セキュリティ | パスワード管理・アクセス制限を必ず検討する |
[参考]
SQL言語リファレンス – CREATE DATABASE LINK




コメント