S-JIS[2008-10-03/2008-10-30] 変更履歴

DBリンク

Oracleのデータベースリンクのメモ。
データベースリンクとは、別のDB(別のSID)のテーブルへアクセスする為の機能。


DBリンクの作成

connect USERNAME/PASSWORD@DBNAME」で接続できる他のDBへのDBリンクを作成する例。

create database link LINKNAME
connect to USERNAME identified by PASSWORD
using 'DBNAME';

作成が成功すると、以下のようにしてリンク先のテーブルにアクセスできる。

SQL> select * from TABLE@LINKNAME;

DBリンクの確認

SQL> select * from user_db_links;

DB_LINK
--------------------------------------------------------------------------------
USERNAME                       PASSWORD
------------------------------ ------------------------------
HOST
--------------------------------------------------------------------------------
CREATED
----------
LINKNAME.HISHIDAMA.JP
USERNAME                       PASSWORD
DBNAME
2008/10/04

DBリンクの削除

CREATEの反対がDROPなのはお約束。

drop database link LINKNAME;

共有サーバー接続

Oracleでクライアントからサーバー(DB)へ接続するには、2つの方法がある。[2008-10-30]

専用サーバー接続 DEDICATED デフォルト。
共有サーバー接続 SHARED 以前は「マルチスレッド・サーバー(MTS)」と呼ばれていたらしい。

どちらの方法で接続されるかは、クライアントの状況(とサーバーの設定)次第らしい。特に何も設定していなければ専用サーバー接続になる模様。
クライアントがXAトランザクションを使う(JDBCのクラスで言えば、oracle.jdbc.xa.client.OracleXADataSourceを使用する)場合、DBリンク経由でテーブルにアクセスする為には、共有サーバー接続でなければならないらしい。

ただし、共有サーバー接続をする為には、DB側でそれを受け入れるように設定しておく必要がある。

現状の確認方法

SQL> show parameters shared

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address             integer     0
max_shared_servers                   integer     20
shared_memory_address                integer     0
shared_pool_reserved_size            big integer 2516582
shared_pool_size                     big integer 50331648
shared_server_sessions               integer     165
shared_servers                       integer     1		←1以上である必要があるらしい
SQL> show parameters disp

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
dispatchers                          string      (PROTOCOL=TCP) (SERVICE=ora92XDB)
max_dispatchers                      integer     5
mts_dispatchers                      string      (PROTOCOL=TCP) (SERVICE=ora92XDB)
mts_max_dispatchers                  integer     5

dispatchersの設定に、使用しているサービス名が入っている必要がある。デフォルトでは、この例で言うora92XDBだけ共有サーバー接続を受け付けるようになっている模様。

変更方法

SQL> ALTER SYSTEM SET DISPATCHERS='(PROTOCOL=tcp)';

これで、どのサービスでも共有サーバー接続を受け付けるようになる模様。
(SYSTEMに対する変更なので、ユーザーとかは無関係(全ユーザーの接続方法が対象))

参考


SQLメモへ戻る / Oracle目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま