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テーブルのデータをクエリします。SELECT * FROM test_tbl1@my_link WHERE id = 1;実行結果は次のとおりです:
+------+------+ | id | name | +------+------+ | 1 | A1 | +------+------+ 1 row in setmy_linkを使用してリモートデータベースのtestライブラリ内のtest_tbl1テーブルを読み取り、JOIN操作でローカルデータベースのtbl1テーブルと結合します。SELECT a.id, b.name FROM tbl1 a, test_tbl1@my_link b WHERE a.id = b.id;実行結果は次のとおりです:
+------+------+ | id | name | +------+------+ | 1 | A1 | | 2 | A2 | +------+------+ 2 rows in setmy_linkを使用して、リモートデータベースのstudent_dbライブラリ(DBLinkの作成時に指定したデータベースの場合はtest)内のstudentテーブルからデータを読み取ります。SELECT * FROM student_db.student@my_link LIMIT 3;実行結果は次のとおりです:
+------+---------+--------+------+-------+-----------------+ | 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ステートメントを参照してください。