Chinaunix首页 | 论坛 | 博客
  • 博客访问: 380580
  • 博文数量: 113
  • 博客积分: 3035
  • 博客等级: 中校
  • 技术积分: 1430
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-01 16:32
文章分类
文章存档

2011年(42)

2010年(70)

2009年(1)

我的朋友

分类: Oracle

2010-10-25 16:23:55

可以通过在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库进行读操作呢?
阅读(1266) | 评论(1) | 转发(0) |
0

上一篇:关于v$session

下一篇:count效率分析

给主人留下些什么吧!~~

chinaunix网友2010-10-26 18:58:31

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com