DBLINKの役割:データベースへのクロスドメインアクセス、対応するデータベーステーブルに直接アクセスでき、バックアップ中にデータベーステーブルを直接移行できます
DBLINKステートメントの作成:
CREATE [SHARED] [PUBLIC]データベースリンクlink_name
[CONNECT TO [user] [current_user] IDENTIFIED BY password]
[AUTHENTICATED BY user IDENTIFIED BY password]
[USING'connect_string ']
public:publicは、作成されたdblinkのすべてのユーザーを使用できることを意味します。dblinkの接続ユーザーにselect any table権限がある場合、すべてのユーザーがdblinkの任意のテーブルにアクセスでき、作成されたユーザーのみがパラメーターなしで使用できます。
データベースにDBLINKがあることを確認してください
select owner,object_name from dba_objects where object_type='DATABASE LINK';
または
select * from dba_db_links;
DBLINKを作成する権限があるかどうかを確認してください
例としてscottユーザーを取り上げます
select * from user_sys_privs where privilege like upper('%DATABASE LINK%') AND USERNAME='scott';
クエリがデータを返さない場合は、sysまたはシステムユーザーのログインを使用して権限を付与します
grant create public database link to scott;
DBLINKを作成する
testlinkという名前のリンクを作成します。対応するデータベースはユーザー名scott、パスワードは123456です。
1.データベース構成ファイルtnsnames.oraには、データベースエイリアスorcl(ユーザー名:scott、パスワード:123456)があります。
作成方法は次のとおりです。使用時にエイリアスを直接使用します。
create public database link testlink connect to scott identified by '123456' USING 'ORCL'
2.データベース構成ファイルtnsnames.oraに対応するデータベースエイリアスがありません:orcl(ユーザー名:scott、パスワード:123456)
作成方法は以下のとおりです。使用する場合は、対応するデータベースのIPアドレスを入力してください。
create database link 'linkname' connect to scott identified by '123456'
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)';
対応するDBLINKを削除します
drop databse link testlink
drop public databse link testlink
対応するDBLINKを使用します
ローカルデータベース内の別のデータベースのstudentテーブルにアクセスするには、ステートメントは次のとおりです。他のtestlinkはDBLINKの名前であり、他のDML操作は同じです。対応するテーブル名の代わりにstudent @testlinkを使用してください。
select * from student@testlink
1.挿入
insert into student@testlink values('id','name');
2.変更
update student@testlink set name='name' where id='id';
3.削除
delete from student@testlink where id='id';
対応するDBLINKの同義語を作成します。使いやすく、DBLINKの名前を人々に知らせることはできません。
create synonym student for student@testlink;
DQLおよびDMLステートメントの実行では、student @tesklinkの代わりにstudentを直接使用できます。
select * from student;
insert into student values('id','name');
delete from student where id='id';
create synonym student for student;