OceanBaseデータベースのDBLink機能は、データソース間でのアクセスを実現し、ローカルデータベースからリモートデータベースにアクセスできるようにします。
現在、OceanBaseデータベースのOracleモードでは、OceanBaseデータベースのOracleテナントから他のOceanBaseデータベースのOracleテナントへ、またはOceanBaseデータベースのOracleテナントからOracleデータベースへのDBLinkの作成がサポートされています。
前提条件
DBLinkを作成するユーザーには、CREATE DATABASE LINKまたはCREATE PUBLIC DATABASE LINK権限が付与されている必要があります。ユーザーへの権限付与に関する操作については、直接権限付与を参照してください。
OceanBaseデータベースからOceanBaseデータベースへのDBLinkの作成
リモートのOceanBaseデータベースにアクセスする場合は、OceanBaseデータベースのOracleテナントと他のOceanBaseデータベースのOracleテナント間でDBLinkを作成できます。
DBLinkを作成するには、DBLink名を指定し、リモートデータベースのユーザー名、テナント名、パスワード、IPアドレス、ポート番号、アクセスタイプなどの情報を提供する必要があります。DBLinkの書き込み機能には、リバースリンク特性という機能があり、この特性は主にリモートデータベースからローカルデータベースのオブジェクトにアクセスするために使用されます。オブジェクトには、テーブル、ビュー、シノニムなどが含まれます。リバースリンク特性を使用する必要がある場合は、DBLinkを作成する際にローカルデータベースのユーザー名、テナント名、パスワード、IPアドレス、ポート番号などの情報を提供する必要があります。
OracleモードでOceanBaseデータベースのOracleテナントから他のOceanBaseデータベースのOracleテナントへのDBLinkを作成するSQL構文は以下のとおりです:
obclient> CREATE DATABASE LINK dblink_name CONNECT TO user@tenant IDENTIFIED BY remote_password [OB] HOST 'ip:port' [CLUSTER "cluster_name"]
[MY_NAME local_user@local_tenant IDENTIFIED BY local_password HOST 'local_ip:local_port' [CLUSTER "local_cluster_name"]];
関連パラメータの説明は以下のとおりです:
dblink_name:DBLinkの名前。長さは128文字以下です。user:リモートOceanBaseデータベースのユーザー名。tenant:リモートOceanBaseデータベースのテナント名。remote_password:リモートOceanBaseデータベースのユーザー名のログインパスワード。パスワードに数字やアルファベット以外の特殊文字(例えば@#!など)が含まれている場合は、構文エラーを避けるためにパスワードをダブルクォーテーションマークで囲む必要があります。OB:オプション。アクセス対象のリモートデータベースのタイプがOceanBaseであることを示します。このパラメータを指定しなくても、デフォルトではアクセス対象のリモートデータベースのタイプはOceanBaseになります。
ip:リモートOceanBaseデータベースのIPアドレス。IPアドレスは、クラスタのOBProxyの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デプロイ方式:OBProxy起動時に、コマンド内で
obproxy_config_server_urlパラメータを指定してOceanBaseクラスタのRootServer情報を照会取得する方式を指します。 - RsListデプロイ方式:OBProxy起動時に、コマンド内で
-rパラメータを指定してOceanBaseクラスタのRootServer情報を指定する方式を指します。
- ConfigUrlデプロイ方式:OBProxy起動時に、コマンド内で
[MY_NAME local_user@local_tenant IDENTIFIED BY local_password HOST 'local_ip:local_port' [CLUSTER "local_cluster_name"]]:オプション。ローカルデータベースのユーザー名、テナント名、パスワード、IPアドレス、ポート番号、およびクラスタ情報です。DBLinkの書き込み機能でリバースリンク特性を使用する必要がある場合は、この情報を入力する必要があります。local_user:ローカルデータベースのユーザー名。local_tenant:ローカルデータベースが属するテナント名。local_password:ローカルデータベースユーザーのログインパスワード。パスワードに数字やアルファベット以外の特殊文字(例えば@#!など)が含まれている場合は、構文エラーを避けるためにパスワードをダブルクォーテーションマークで囲む必要があります。local_ip:ローカルデータベースクラスタ内の特定のOBServerサーバーのIPアドレス。local_port:ローカルデータベースクラスタ内の特定のOBServerサーバーのSQLポート番号。OBServerサーバーのSQLポート番号はデフォルトで2881です。local_cluster_name:ローカルOceanBaseデータベースに対応するクラスタの名前。IPアドレスとポート番号がクラスタのProxyのIPアドレスとポート番号であり、かつProxyがConfigUrl方式でデプロイされている場合にのみ、クラスタ名を指定する必要があります。クラスタ名はダブルクォーテーションマークで囲む必要があります。
例:
リモートOceanBaseデータベースに接続するDBLinkを作成し、IPアドレスとポート番号を指定されたOBServerサーバーのIPアドレスとポート番号に設定します。
obclient> CREATE DATABASE LINK ob_dblink CONNECT TO ob_user@oracle IDENTIFIED BY ****** OB HOST 'xx.xx.xx.xx:2881'; Query OK, 1 row affectedリモートOceanBaseに接続するDBLinkを作成し、IPアドレスとポート番号をクラスタのProxyのIPアドレスとポート番号に設定します。同時にProxyはConfigUrl方式でデプロイされています。
obclient> CREATE DATABASE LINK ob_dblink_proxy CONNECT TO ob_user@oracle IDENTIFIED BY ****** OB HOST 'xx.xx.xx.xx:2883' CLUSTER "ob410"; Query OK, 1 row affected注意
クラスタ名を入力する際は、クラスタ名の文字が大文字に変換されるのを防ぐためにダブルクォーテーションマークを付ける必要があります。
リバースリンク特性を備えたリモートOceanBaseデータベースに接続するDBLinkを作成し、その名前を
ob_dblink_reverse_linkに設定します。obclient> CREATE DATABASE LINK ob_dblink_reverse_link CONNECT TO ob_user2@oracle IDENTIFIED BY ****** OB HOST 'xx.xx.xx.xx:2881' MY_NAME local_ob_user@oracle IDENTIFIED BY ****** HOST 'xx.xx.xx.xx:2881'; Query OK, 1 row affected
OceanBaseデータベースからOracleデータベースへのDBLinkの作成
リモートのOracleデータベースにアクセスする場合は、OceanBaseデータベースのOracleテナントとOracleデータベースとの間でDBLinkを作成できます。
DBLinkを作成するには、DBLink名を指定し、リモートデータベースのユーザー名、テナント名、パスワード、IPアドレス、ポート番号、アクセスタイプなどの情報を提供する必要があります。DBLinkの書き込み機能にはリバースリンク特性があり、この特性は主にリモートデータベースからローカルデータベースのオブジェクトにアクセスするために使用されます。オブジェクトにはテーブル、ビュー、シノニムなどが含まれます。OceanBaseデータベースからOracleデータベースへのDBLinkは、現在リバースリンク特性をサポートしていません。
OceanBaseデータベースからOracleデータベースへのDBLinkを作成するSQL構文は次のとおりです:
obclient> CREATE DATABASE LINK dblink_name CONNECT TO user@oracle IDENTIFIED BY remote_password OCI HOST 'ip:port/oracle_service_name';
ステートメントの使用方法:
dblink_name:DBLinkの名前。長さは128文字以内です。user:リモートOracleデータベースのユーザー名。oracle:Oracleデータベースに接続する際、この値は常にoracleです。remote_password:リモートOracleデータベースユーザーのログインパスワード。パスワードに数字やアルファベット以外の特殊文字(例えば@#!など)が含まれる場合は、構文エラーを回避するためにパスワードをダブルクォーテーションマークで囲む必要があります。OCI:指定されたリモートデータベースのタイプがOracleであることを示します。このパラメータを指定しない場合、デフォルトでアクセスするリモートデータベースのタイプはOceanBaseになります。ip:リモートOracleデータベースインスタンスのIPアドレスを指定します。説明
IPアドレスに加えて、OceanBaseデータベースはドメイン名アドレスもサポートしています。例えば、
example.com:portのように。実際の環境に応じて、適切なドメイン名アドレスを使用してリモートデータベースに接続できます。port:リモートOracleデータベースインスタンスのポート番号を指定します。oracle_service_name:リモートOracleデータベースサービスの名前。
リモートOracleデータベースに接続するDBLinkを作成する例は次のとおりです:
obclient> CREATE DATABASE LINK orcl_dblink CONNECT TO orcl_user@oracle IDENTIFIED BY ****** OCI HOST 'xx.xx.xx.xx:1521/ORCL';
Query OK, 1 row affected
関連ドキュメント
DBLinkに関するその他の操作については、以下の情報を参照してください: