oracle中database,Oracle数据库中关于database link

本文介绍如何在Oracle A库中设置指向B库的database link,并详细解释了create databaselink语法及注意事项。此外还介绍了通过dblink进行查询时如何管理事务,以及如何限制对目标库的读写权限。

可以通过在A库设置指向B库的database link来直接访问B库的数据

语法

create [public] database link b_lk connect to userA identified by xxx using 'tnsname'

其中,如果省略public则创建的是private的连接,只能当前所有者可以使用这个link

使用connect to user identified by xxx则所有通过dblink的用户在访问B库时都使用userA这个用户

b_lk指的是database link的名字,如果A库的global_names=true,则这个名字一定要使用B库的global_name.在b库执行select * from global_name可以得到。否则建立db link的时候不会报错,但是在执行查询时会报错

ORA-02085: database link b_lk connects to b.world.COM

tnsname指的是A库的tnsnames文件中配置的b库名称

也可以直接使用以下的语句代替

USING '(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = b.world.COM)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = b)

)

)';

a库使用dblink访问b库时比如select * from table@b_lk默认会在a库生成一个事务,可以查询v$transaction得到。有三种方法来控制这个事务

1.查询后执行rollback或者commit

2.查询后关闭link :alter session close database link b_lk

SQL> alter session close database link b_lk;

ERROR:

ORA-02080: database link is in use

SQL> rollback;

Rollback complete.

SQL> alter session close database link b_lk;

Session altered.

注意:在rollback因为dblink查询产生的事务前,无法关闭dblink。关闭后可以再次执行基于dblink的查询

3.set transaction read only;让事务只读,dblink将不产生事务,但是也限制了同一个session下对本地库的写操作

注意:有了dblink后,可以执行对b库的insert等dml操作,有安全隐患,如何控制只能对b库进行读操作呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值