Autonomous DBでのDBリンク利用時の注意点


本ブログは、[オラクル・クラウドの個人ブログ一覧]()の1つです。

# 初めに
Autonomous Database（以下、Autonomous DB）でデータベースリンク（DBリンク）を利用する際には、通常のOracle Databaseとは異なる点に注意が必要です。本記事では、DBリンクの作成・管理に関する注意点や手順について解説します。

- [1. 作成前の事前準備](#1-作成前の事前準備)
  - [1-1. 権限付与](#1-1-権限付与)
  - [1-2. クレデンシャルの作成](#1-2-クレデンシャルの作成)
- [2. DBリンクの利用](#2-dbリンクの利用)
  - [2-1. DBリンクの作成](#2-1-dbリンクの作成)
  - [2-2. DBリンクの確認](#2-2-dbリンクの確認)
  - [2-3. DBリンクの削除](#2-3-dbリンクの削除)
  - [2-4. DBリンクの編集](#2-4-dbリンクの編集)
- [付録 - DBリンクの接続パターン](#付録---dbリンクの接続パターン)

※、リンク先がAutonomous DBである場合、事前にリンク先ADBのWalletファイルを所定のディレクトリに保存する必要があるケースもあります。本記事ではそのケースは扱っておりませんので、あらかじめご了承ください。

# 1. 作成前の事前準備
## 1-1. 権限付与
管理者（ADMIN）以外のユーザーがDBリンクを作成する場合は、以下の権限を事前に付与する必要があります。

DBMS_CLOUDの実行権限：クレデンシャル作成に必要
DBMS_CLOUD_ADMINの実行権限：DBリンク作成に必要

コマンド例：（ADMINユーザーによる実行）
```sql
GRANT EXECUTE ON DBMS_CLOUD TO <DBユーザー名>;
GRANT EXECUTE ON DBMS_CLOUD_ADMIN TO <DBユーザー名>;
```

## 1-2. クレデンシャルの作成
接続先のデータベースにアクセスするために、あらかじめクレデンシャルを作成しておきます。これにより、ユーザー名やパスワードなどの接続情報を安全に管理できます。

```sql
BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => '<クレデンシャル名>',
    username => '<DBユーザー名>',
    password => '<パスワード>'
  );
END;
/
```

# 2. DBリンクの利用
## 2-1. DBリンクの作成
Autonomous DBでは、Oracle DBの `CREATE DATABASE LINK` SQL文は使用できません。このコマンドを実行しようとすると、次のようなエラーが表示されます
```sql
ORA-01031: insufficient privileges
```

代わりに、`DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK`プロシージャを使用してください。
詳細な使用方法については、公式[マニュアル](https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/dbms-cloud-admin.html#ADBSB-GUID-8F1DEFF0-08ED-4BB7-825A-01FEE214A079)を参照してください。

## 2-2. DBリンクの確認
__ビューからの確認__
作成されたDBリンクは以下のビューから確認できます：
- 一般ユーザー：ALL_DB_LINKS, USER_DB_LINKS
- 管理者ユーザー（ADMIN）：DBA_DB_LINKS (上記２つのビューも参照可能)
```sql
select * from ALL_DB_LINKS;
```

__動作確認__
- SQLコマンドでの確認
例えば、リンク先のデータベースにある特定テーブルの件数を確認するには、次のようなSQLを実行します：
```sql
select count(*) from <表名>@<DBリンク名>;
```
- SQL Developerでの確認
a). 接続名を展開
b).「データベース・リンク」を選択
c). 対象のリンクを右クリック →「データベース・リンクのテスト」→ 適用

成功すると、以下のようなメッセージが表示されます：
`データベース・リンク"<リンク名>"が正常にテストされました`

## 2-3. DBリンクの削除
`DROP DATABASE LINK`コマンドもAutonomous DBでは使用できません。代わりに、`DBMS_CLOUD_ADMIN.DROP_DATABASE_LINK`を使用してください。

実行例：
```sql
BEGIN
    DBMS_CLOUD_ADMIN.DROP_DATABASE_LINK(
        db_link_name => '<DBリンクの名前>' );
END;
/
PL/SQL procedure successfully completed.
```
※、SQL Developer を使用している場合、Autonomous DBでは、DBリンクを右クリックして「削除」を選択する方法では<font color=blue>削除できません</font>。


## 2-4. DBリンクの編集
:::note
Autonomous DBでは、作成済みのDBリンクを編集することはできません。編集したい場合は、いったんDBリンクを削除し、<font color=blue>再作成</font>する必要があります。
:::

# 付録 - DBリンクの接続パターン

| No. | 接続パターン | ドキュメントリンク |
|:-:|:-:|:-:|
| 1  | Autonomous DB同士  | [リンク](https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/autonomous-database-links-otherdb.html)  |
| 2  | Autonomous DB ⇒ Oracle DB  | [リンク](https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/autonomous-database-links-target-oracle-db.html)  |
| 3  | Autonomous DB ⇒ Non-Oracle DB  | [リンク](https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/autonomous-database-links-non-oracle-db.html)  |
| 4  | Oracle DB ⇒ Autonomous DB  | [リンク](https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/database-links-inbound.html)  |

以上

----
__ドキュメントリンク__
SQL Commands: [英語](https://docs.oracle.com/en-us/iaas/autonomous-database-serverless/doc/autonomous-sql-commands.html) [日本語](https://docs.oracle.com/ja-jp/iaas/autonomous-database-serverless/doc/autonomous-sql-commands.html)
Use Database Links with Autonomous Database: [英語](https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/database-links.html) [日本語](https://docs.oracle.com/ja-jp/iaas/autonomous-database-serverless/doc/database-links.html)
Summary of DBMS_CLOUD_ADMIN Subprograms: [英語](https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/dbms-cloud-admin.html#GUID-D76B229E-781E-45C0-9F14-CAF30F9E6E3B) [日本語機械翻訳](https://docs.oracle.com/cd//E83857_01/paas/autonomous-database/serverless/adbsb/dbms-cloud-admin.html#GUID-D76B229E-781E-45C0-9F14-CAF30F9E6E3B)