私たちの会社には、Oracle 11g データベースを使用する CRM システムがあります。これは、サード パーティ ベンダーによって開発されています。
CRM システムを実行するサーバーへのアクセス権がありません。それでもなお、作業中の DBA ログイン データを使用できます (SYS ユーザー)。以下で構成されています。
- サーバー IP: 172.1.2.3
- ポート: 1521
- SID: abc
- ユーザー: システム
- パスワード: *
これを使用して、Oracle SQL Developer 3.1で DB にアクセスできます(接続 >> プロパティ) 。
ここで、データの一部をCRM データベースから別のサーバーにある別の Oracle データベースにコピーする必要があります。
私の理解では、ターゲット データベースにデータベース リンクを作成する必要があります。私はこのようなことを試しました:
CREATE PUBLIC DATABASE LINK xxx CONNECT TO sys IDENTIFIED BY ***** USING 'MYTNSENTRY'
私のtnsnames.oraは次のとおりです。
MYTNSENTRY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.1.2.3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = abc)
)
)
....そして私のlistener.oraは次のようになります:
MYLISTENER=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=172.1.2.3)(PORT=1521))
))
SID_LIST_MYLISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=MYTNSENTRY)
(ORACLE_HOME=C:\somepath) # path to Oracle home of target DB
(PROGRAM=extproc)))
PROGRAM=extproc は正しい選択ですか? 選択する他のプログラムがいくつかあります。「ユーザーを確認」できないなどの理由で、 lsnrctlでリスナーを起動することさえできませんでした。皮肉なことに、リスナーのセットアップとMS SQL サーバーへのデータベース リンクはスムーズに機能します。
CRM DB システムに関するいくつかの重要な情報が不足しているにもかかわらず、SQL Developer で DB に接続できます。2 つの Oracle DB 間で接続を確立することも可能ではないでしょうか? データベース リンクのセットアップと作成を手伝ってください。
- - - 編集: - - - -
Alex Poole のヒントは、それを機能させるのに役立ちました。使った
show parameters service_names;
完全なサービス名を取得します。abc.defという形式で、defはドメインです。したがって、ドメイン名をtnsnames.oraの TNS エイリアスに追加しました。
MYTNSENTRY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.1.2.3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = abc.def)
)
)
接続は、ターゲット DB サーバーのコマンド プロンプトでtnsping MYTNSENTRYを使用してテストできます。tnsnames.ora はローカルです。ただし、リスナーは実際にはCRMサーバーに存在するため、「ローカル」listener.oraへのすべての変更を削除しました。
SQL コマンドはほとんど変更されていませんが、接続が機能するようになりました。
CREATE PUBLIC DATABASE LINK xxx CONNECT TO some_user IDENTIFIED BY ***** USING 'MYTNSENTRY'