OceanBaseデータベースのDBLink機能は、データソース間でのアクセスを可能にする機能であり、ローカルデータベース上からリモートデータベースにアクセスできます。DBLinkの作成が完了すると、それを通じてテーブルやビューなどのリモートデータベースのオブジェクトにアクセスできるようになります。
使用上の制限
現在のOceanBaseデータベースのMySQLモードDBLink読み取り機能は、異なるMySQLモードのテナント間でのデータの読み取りのみをサポートしています。
MySQLモードでは、DBLinkを介してアクセス可能なデータ型は以下のとおりです:
数値型:
TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT、FLOAT、DOUBLE、DECIMAL。日付時刻型:
DATE、TIME、YEAR、DATETIME、TIMESTAMP。文字列型:
CHAR、VARCHAR、TINYBLOB、TINYTEXT、BLOB、TEXT、MEDIUMBLOB、LONGBLOB、LONGTEXT。その他の型:
ENUM、SET。注意
OBClientの制限により、現在DBLlinkを使用してテーブルデータを読み取る際、リモートテーブル内の
ENUMおよびSET型の列はVARCHAR型の列として処理されます。
各データ型の詳細については、データ型の概要を参照してください。
前提条件
DBLinkが作成済みであること。DBLinkの作成方法の詳細については、DBLinkの作成を参照してください。
リモートデータベーステーブルのデータのクエリ
SQLステートメントは以下のとおりです:
SELECT select_expr_list FROM table_name@dblink_name WHERE where_conditions;
パラメータの説明:
select_expr_list:クエリ対象の式または列名を指定します。複数の列は半角カンマ(,)で区切り、アスタリスク(*)はすべての列を表します。table_name@dblink_name:クエリ対象のリモートデータベース内のテーブルを指定します。複数のデータベースは半角カンマ(,)で区切ります。デフォルトでは、DBLink作成時に指定したデータベース内のテーブルにアクセスします。他のデータベース内のテーブルにアクセスする必要がある場合は、SQLステートメントでdatabase_name.table_name@dblink_nameの形式で指定できます。where_conditions:フィルタ条件を指定します。クエリ結果には条件を満たすデータのみが含まれます。これはオプションです。
例
DBLinkを使用する手順は以下のとおりです:
以下のSQLステートメントを使用して、リモートのOceanBaseデータベースMySQLモードに接続するDBLinkを作成します。DBLinkの名前は
my_link、リモートテナントはmysql001、デフォルトのアクセスデータベースはtestです。CREATE DATABASE LINK my_link CONNECT TO root@mysql001 DATABASE test IDENTIFIED BY '******' HOST '10.10.10.1:2881';以下のSQLステートメントを使用して、ステップ1で作成したDBLinkを使用して、リモートデータベース内のデータをクエリします。
my_linkを使用して、リモートデータベースのtestデータベース内のテーブルtest_tbl1のデータをクエリします。
```sql
SELECT * FROM test_tbl1@my_link WHERE id = 1;
```
実行結果は次のとおりです:
```shell
+------+------+
| id | name |
+------+------+
| 1 | A1 |
+------+------+
1 row in set
```
my_linkを使用して、リモートデータベースのtestデータベース内のテーブルtest_tbl1を読み取り、ローカルデータベースのテーブルtbl1とJoin操作を実行します。
```sql
SELECT a.id, b.name FROM tbl1 a, test_tbl1@my_link b WHERE a.id = b.id;
```
実行結果は次のとおりです:
```shell
+------+------+
| id | name |
+------+------+
| 1 | A1 |
| 2 | A2 |
+------+------+
2 rows in set
```
my_linkを使用して、リモートデータベースのstudent_dbデータベース(DBLink作成時に指定したデータベースはtest)内のテーブルstudentのデータを読み取ります。
```sql
SELECT * FROM student_db.student@my_link LIMIT 3;
```
実行結果は次のとおりです:
```shell
+------+---------+--------+------+-------+-----------------+
| id | name | gender | age | score | enrollment_date |
+------+---------+--------+------+-------+-----------------+
| 1 | Emma | 0 | 20 | 85 | 2021-09-01 |
| 2 | William | 1 | 21 | 90.5 | 2021-09-02 |
| 3 | Olivia | 0 | 19 | 95.5 | 2021-09-03 |
+------+---------+--------+------+-------+-----------------+
3 rows in set
```
関連ドキュメント
データ型の詳細については、データ型の概要を参照してください。
DBLinkの作成方法の詳細については、DBLinkの作成を参照してください。
DBLinkの使用方法の詳細については、DBLinkを使用したリモートデータベースへのアクセスを参照してください。
SELECTの使用方法の詳細については、SELECTステートメントを参照してください。