OceanBaseデータベースのDBLink機能は、データソース間でのアクセスを可能にする機能であり、ローカルデータベース上からリモートデータベースにアクセスできます。
前提条件
- DBLinkを作成するアカウントはスーパーユーザーである必要があります。スーパーユーザーの作成方法については、アカウントの作成と管理をご参照ください。
- リモートデータベースのテナントは、ローカルからのアクセスアドレスに対してホワイトリストを開放する必要があります。詳細な操作手順については、ホワイトリストグループの設定をご参照ください。
- リモートデータベースの接続情報を取得済みであること。関連する説明については、データベース接続の概要をご参照ください。
DBLinkの作成
DBLinkの作成に成功すると、DBLinkを通じてリモートデータベースのオブジェクト(テーブル、ビュー、シノニムなど)にアクセスできるようになります。
OceanBaseデータベース間のDBLinkの作成
DBLinkを作成するには、DBLink名を指定し、リモートデータベースのアカウント名、テナントID、パスワード、アクセスアドレス、アクセスタイプなどの情報を提供する必要があります。DBLinkのデータ書き込み機能には、リバースリンク機能があります。この機能は主に、リモートデータベースがローカルデータベースのオブジェクト(テーブル、ビュー、シノニムなど)にアクセスする場合に使用されます。リバースリンク機能を使用する場合は、DBLinkを作成する際に、ローカルデータベースのアカウント名、テナントID、パスワード、アクセスアドレスなどの情報を提供する必要があります。
Oracle互換モードで、OceanBaseデータベースのOracleテナントから別のOceanBaseデータベースのOracleテナントへのDBLinkを作成するSQL構文は次のとおりです:
CREATE DATABASE LINK dblink_name CONNECT TO user@tenantid IDENTIFIED BY remote_password [OB] HOST 'ip:port'
[MY_NAME local_user@local_tenantid IDENTIFIED BY local_password HOST 'local_ip:local_port'];
関連パラメータの説明は以下のとおりです:
dblink_name:DBLinkの名前。長さは128文字以下である必要があります。user:リモート側OceanBaseデータベースのアカウント名。tenantid:リモート側OceanBaseデータベースのテナントID。remote_password:リモート側OceanBaseデータベースアカウントのログインパスワード。パスワードに数字やアルファベット以外の特殊文字(例:@#!)が含まれる場合は、二重引用符で囲んで記述する必要があります。これにより、構文エラーを回避できます。OB:オプションです。指定されたアクセス先のリモートデータベースのタイプがOceanBaseであることを示します。このパラメータを指定しなくても構いません。その場合、デフォルトでアクセスするリモートデータベースのタイプはOceanBaseとなります。ip:port:リモート側OceanBaseデータベーステナントのアクセスアドレスを指定します。アクセスアドレスがプライベートネットワークのアドレスの場合、ローカルデータベースと指定されたテナント間のネットワークが相互接続可能である必要があります。
[MY_NAME local_user@local_tenantid IDENTIFIED BY local_password HOST 'local_ip:local_port']:オプションです。ローカルデータベースのアカウント名、テナントID、パスワード、アクセスアドレスです。DBLinkのデータ書き込み機能でリバースリンク機能を使用する必要がある場合は、この情報を入力する必要があります。local_user:ローカルデータベースのアカウント名。local_tenantid:ローカルデータベースが属するテナントID。local_password:ローカルデータベースアカウントのログインパスワード。パスワードに数字や文字以外の特殊文字(例:@#!)が含まれる場合は、二重引用符で囲んで記述する必要があります。これにより、構文エラーを回避できます。local_ip:local_port:ローカルOceanBaseデータベーステナントのアクセスアドレス。
例:
リモートOceanBaseデータベースに接続するDBLinkを作成します。
obclient> CREATE DATABASE LINK ob_dblink CONNECT TO ob_user@t******** IDENTIFIED BY "******" OB HOST 'xx.xx.xx.xx:1521'; Query OK, 1 row affectedリモートOceanBaseデータベースに逆リンク機能を持つDBLINKを作成します。名前は
ob_dblink_reverse_linkです。obclient> CREATE DATABASE LINK ob_dblink_reverse_link CONNECT TO ob_user2@t******** IDENTIFIED BY "******" OB HOST 'xx.xx.xx.xx:1521' MY_NAME local_ob_user@oracle IDENTIFIED BY "******" HOST 'xx.xx.xx.xx:1521'; Query OK, 1 row affected
DBLinkを使用してリモートデータベーステーブルのデータをクエリする
SQLステートメントは以下のとおりです:
SELECT select_expr_list FROM table_name@dblink_name WHERE where_conditions;
パラメータの説明:
select_expr_list:クエリ対象の式または列名を指定します。複数の列は半角カンマ(,)で区切り、アスタリスク(*)はすべての列を表します。table_name@dblink_name:クエリ対象のリモートデータベースのテーブルを指定します。複数のデータベースは半角カンマ(,)で区切ります。where_conditions:フィルタ条件を指定します。クエリ結果には条件を満たすデータのみが含まれます。これはオプションです。
例
DBLinkを使用する手順は以下のとおりです:
以下のSQLステートメントを使用して、リモートOceanBaseデータベースのOracleモードに接続するDBLinkを作成します。DBLinkの名前は
my_linkです。CREATE DATABASE LINK my_link CONNECT TO user@t******** IDENTIFIED BY "******" OB HOST 'xxx.xxx.xxx.xxx:1521';以下のSQLステートメントを使用して、
my_linkという名前のDBLinkを通じて、リモートデータベースのテーブルtest_tbl1のデータをクエリします。SELECT * FROM test_tbl1@my_link;実行結果は次のとおりです:
+------+------+ | COL1 | COL2 | +------+------+ | 1 | a1 | | 2 | b2 | +------+------+ 2 rows in set