OceanBaseデータベースのDBLink機能は、データソース間のアクセスを可能にする機能であり、ローカルデータベース上からリモートデータベースにアクセスできます。
現在、OceanBaseデータベースのMySQLモードでは、OceanBaseデータベースのMySQLテナントから他のOceanBaseデータベースのMySQLテナントへのDBLinkの作成がサポートされています。同一クラスタ内の異なるMySQLテナント間でもDBLinkを作成できます。
使用上の制限
- OceanBaseデータベースのMySQLテナントからMySQLデータベースへのDBLinkの作成は現在サポートされていません。
- MySQLモードでは、現在DBLinkの書き込みおよび逆リンク機能はサポートされていません。
前提条件
DBLinkを作成するユーザーはCREATE DATABASE LINK権限を持っている必要があります。ユーザーへの権限付与に関する操作については、直接権限付与を参照してください。
OceanBaseデータベースからOceanBaseデータベースへのDBLinkの作成
リモートのOceanBaseデータベースにアクセスする場合、OceanBaseデータベースのMySQLテナントから他のOceanBaseデータベースのMySQLテナントへのDBLinkを作成できます。
指定したリモートデータベースにアクセスするためのDBLinkを作成する際には、そのDBLinkの名前を指定し、リモートデータベースのユーザー名、テナント名、データベース名、パスワード、IPアドレス、ポート番号、およびクラスタ名を提供する必要があります。
MySQLモードでOceanBaseデータベースのMySQLテナントからOceanBaseデータベースのMySQLテナントへのDBLinkを作成するSQL構文は以下のとおりです:
CREATE DATABASE LINK [IF NOT EXISTS] dblink_name CONNECT TO user@tenant DATABASE database_name IDENTIFIED BY 'remote_password' HOST 'ip:port' [CLUSTER "cluster_name"];
関連パラメータの説明は以下のとおりです:
dblink_name:作成するDBLinkの名前。IF NOT EXISTS:MySQLデータベースの構文との互換性を持たせるために使用します。IF NOT EXISTSを指定すると、作成対象のDBLinkが既に存在してもエラーは報告されません。指定しない場合、作成対象のDBLinkが既に存在するとシステムはエラーを報告します。user:リモートのOceanBaseデータベースのユーザー名。tenant:リモートのOceanBaseデータベースのテナント名。remote_password:リモートのOceanBaseデータベースのユーザー名のログインパスワード。パスワードに数字や文字以外の特殊文字(例:@#!)が含まれる場合は、構文エラーを回避するために、パスワードをシングルクォートまたはダブルクォートで囲む必要があります。database_name:リモートのMySQLテナントのデータベース名。DBLinkを通じてデータを読み取る際、デフォルトでこのデータベースにアクセスします。他のデータベースにアクセスする必要がある場合は、SQLステートメントでテーブルに特定のデータベースを指定できます。ip:リモートのOceanBaseデータベースのIPアドレス。IPアドレスは、クラスタのProxyのIPアドレス、またはクラスタ内の特定のOBServerノードのIPアドレスを指定できます。IPアドレスが指定されたOBServerノードのIPアドレスの場合、ローカルデータベースと指定されたOBServerノード間のネットワークが相互接続可能である必要があります。
説明
IPアドレスに加えて、OceanBaseデータベースはドメイン名もサポートしています。例えば、
example.com:portのように指定できます。実際の環境に応じて、適切なドメイン名を使用してリモートデータベースに接続できます。port:リモートのOceanBaseデータベースのポート番号です。クラスタのProxyのポート番号(デフォルトは2883)を指定するか、クラスタ内の特定のOBServerノードのSQLポート番号(デフォルトは2881)を指定できます。ポート番号が指定されたOBServerノードのSQLポート番号の場合、ローカルデータベースと指定されたOBServerノード間のネットワークが相互接続可能である必要があります。
cluster_name:リモートのOceanBaseデータベースが対応するクラスタの名前です。IPアドレスとポート番号がクラスタのProxyのIPアドレスとポート番号であり、かつProxyがConfigUrl方式でデプロイされている場合にのみ、クラスタ名を指定する必要があります。クラスタ名は大文字小文字を区別するため、二重引用符で囲む必要があります。説明
クラスタのProxy(例:ODP)をデプロイする際、以下の2つの方法があります:
- ConfigUrlデプロイメント方式:ODP起動時に、コマンドで
obproxy_config_server_urlパラメータを指定し、OceanBaseクラスタのRoot Server情報を取得する方式です。 - RsListデプロイメント方式:ODP起動時に、コマンドで
-rパラメータを指定し、OceanBaseクラスタのRoot Server情報を指定する方式です。
- ConfigUrlデプロイメント方式:ODP起動時に、コマンドで
例:
リモートのOceanBaseデータベースに接続するためのDBLinkオブジェクト
ob_dblinkを作成します。IPアドレスとポート番号は、指定されたOBServerノードのものを使用します。CREATE DATABASE LINK IF NOT EXISTS ob_dblink CONNECT TO username@mysql DATABASE test IDENTIFIED BY '********' HOST 'xx.xx.xx.xx:2881';リモートのOceanBaseデータベースに接続するためのDBLinkオブジェクト
ob_dblink_proxyを作成します。IPアドレスとポート番号は、クラスタのProxyのものを使用します。また、ProxyはConfigUrl方式でデプロイされている必要があります。CREATE DATABASE LINK IF NOT EXISTS ob_dblink_proxy CONNECT TO username@mysql DATABASE test IDENTIFIED BY '********' HOST 'xx.xx.xx.xx:2883' CLUSTER "obcluster";注意
クラスタ名を入力する際は、二重引用符を付ける必要があります。これは、クラスタ名のアルファベットが大文字に変換されるのを防ぐためです。
関連ドキュメント
DBLinkに関するその他の操作については、以下の情報を参照してください: