Oracle数据库中关于database link 
可以通过在A库设置指向B库的database link来直接访问B库的数据 
语法

Sql代码  
  1. 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库名称 
也可以直接使用以下的语句代替

Sql代码  
  1. USING '(DESCRIPTION =
  2. (ADDRESS_LIST =
  3. (ADDRESS = (PROTOCOL = TCP)(HOST = b.world.COM)(PORT = 1521))
  4. )
  5. (CONNECT_DATA =
  6. (SERVICE_NAME = b)
  7. )
  8. )';

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

Sql代码  
  1. 2.查询后关闭link :alter session close database link b_lk
  2. SQL> alter session close database link b_lk;
  3. ERROR:
  4. ORA-02080: database link is in use
  5. SQL> rollback;
  6. Rollback complete.
  7. SQL> alter session close database link b_lk;
  8. Session altered.

注意:在rollback因为dblink查询产生的事务前,无法关闭dblink。关闭后可以再次执行基于dblink的查询 
3.set transaction read only;让事务只读,dblink将不产生事务,但是也限制了同一个session下对本地库的写操作 
注意:有了dblink后,可以执行对b库的insert等dml操作,有安全隐患,如何控制只能对b库进行读操作呢?

------------------------------ 
如果使用dblink,我们需要及时显示的关闭dblink。以下提供两种方式,因为并不会在你建立的以后就自动的关闭和远程服务器建立的session,如果session太多,会0.+造成查询失败

Sql代码  
  1. alter session close database link <dblink_name>;
  2. dbms_session.close_database_link(<dblink_name>);

你的程序是JAVA或者其他;可以写个存储过程,然后用动态sql实现database link的显示关闭.

---用db link查询表事务的两个小灯也会亮!!! 
因为 DBLINK 会起一个新的事务处理的。 所以哪怕你是SELECT ROLLBACK和COMMIT都会亮的。 
每次使用db_link查询时释放连接,调用dbms_session包中的关闭函数即可 
    例:dbms_session.close_database_link(CONN_MY_LINK); 
   …… 
是本地数据库的事务

加上set transaction read only;

------------------------------

ORA-02068,ORA-03113 报错 
Cause: 
由于大量使用dblink远程连接未正常释放所致,也可能是bug所致。 
Solution: 
一,最好不要大量使用dblink方式实时远程取数据,有大概如下几个缺点: 
1,频繁对远程数据库创建连接,释放连接会有较大开销,特别是OLTP类数据库。 
2,此类远程dblink连接session,如本地session不退出或手动释放,此类session是不会及时自动释放的。大量耗用远程数据库资源。 
3,占用网络带宽 
4,触发bug,此类bug很多 
此类应用根绝实际需求可以用物化视图,触发器等方式替代. 
注:切忌使用dblink嵌套dblink的访问方式,性能会非常糟糕,而且不稳定。 
二,使用ALTER SESSION CLOSE DATABASE LINK dblink_name;语句来手动关闭远程dblink session. 
在使用此语句前,切忌先执行commit;否则报错ORA-02080或者不能达到预期效果。

-------------------------------

Sql代码  
  1. ORACLE "ORA--22992:无法使用远程表选择的LOB定位器,database link"
  2. 解决办法:
  3. 先创建一个临时表,然后把远程的含CLOB字段的表导入到临时表中,再倒入本表。
  4. create global temporary table demo_temp as select * from demo;
  5. insert into demo_temp select * from demo@D_LINK;
  6. insert into demo select * from demo_temp;
  7. commit;

database link问题解决相关推荐

  1. oracle database link mysql_oracle database link使用说明

    oracle database link使用说明 作用: 将多个oracle数据库逻辑上看成一个数据库,也就是说在一个数据库中可以操作另一个数据库中的对象. 简易语法: CREATE [PUBLIC] ...

  2. oracle 创建database link

    有时候需要在两个数据库的表join 查询 这时候要用到 database link . database link 的作用就是搭建数据库和数据库的连接. 1.先看如何使用 PL\SQL  工具创建. ...

  3. oracle database link使用说明

    作用:将多个oracle数据库逻辑上看成一个数据库,也就是说在一个数据库中可以操作另一个数据库中的对象 简易语法: CREATE [PUBLIC] DATABASE LINK dblink CONNE ...

  4. 【oracle】oracle经典sql,exception,database link纠错

    [oracle]oracle经典sql,exception,database link纠错 1111-01 oracle经典sql,exception,database link纠错 1.给表tabl ...

  5. oracle mssql交换数据库,Database link 连接oracle MSSql 实现逻辑数据互导

    项目的需要,需要将原有mssql里面的数据导入到新的oracle数据库架构下来,因为有数据结构需要通 过逻辑导入,故mssql的导入工具不能满足搞笑数据互导的需要. 网上找了些解决方案,透明网关什么的 ...

  6. oracle创建public链接,如何在oracle直接使用地址来创建database link

    在2个oracle之间手工同步数据时,DBlink是最快捷的手段之一吧.建dblink的时候需要知道待读取数据库的ip地址,ssid以及数据库用户名和密码. 前提: 创建dblink的用户有对应的数据 ...

  7. oracle提交数据按键,Oracle PLSQL - 仅提交数据库链接(Oracle PLSQL - Commit only database link)...

    Oracle PLSQL - 仅提交数据库链接(Oracle PLSQL - Commit only database link) 有没有办法只通过数据库链接而不是当前会话的数据提交在表上插入/更新的 ...

  8. Oracle_高级功能(3) synonym和database link

    一.同义词synonym connect sys/123 as sysdba; select * from emp; ORA-00942: 表或视图不存在 create synonym emp for ...

  9. 跨系统服务器data,oracle 新增pdb环境,并通过database link实现跨服务器在线克隆

    前提: 安装好数据库软件,并创建好CDB模式的数据库. 本文介绍内容: 一. 如何创建pdb,并创建表空间,用户 二. 并通过database link 在线跨服务器克隆此pdb. 一. 如何创建pd ...

  10. oracle database link创建

    database link 创建(转) 2010-02-24 13:38:41|  分类: 默认分类|字号 订阅 两台不同的数据库服务器,从一台数据库服务器的一个用户读取另一台数据库服务器下的某个用户 ...

最新文章

  1. python每行输出8个式子_求大神用python写出算术题的式子和结果。
  2. python 获取节假日
  3. 找工作这几天遇到的骗人套路
  4. 【机器学习】改善LBP特征提高SVM的可分性的经验总结(一)
  5. string.length_C.中的String.Length属性示例
  6. 编译环境与生成环境的JDK版本不一样,报:java.util.zip.ZipException: error in opening zip file
  7. TCP/IP review之 静态路由
  8. java day25【Junit单元测试 、反射 、 注解】
  9. windows驱动加载顺序
  10. HTML-----超链接与表格Lable(详细可看)
  11. Unable to open OMF51 file...
  12. 时间工具类封装以及时间戳之间的相互转换
  13. A. Harry Klopf是谁?
  14. win7保护眼睛的颜色设置方法
  15. 三分钟带你了解DCMM
  16. Linux下deb包和rpm包区别
  17. 复杂的1秒--图解Google搜索技术
  18. Android通讯录(联系人)-ContentProvider
  19. 基于HTML(服装商城)电商项目项目的设计与实现(html前端源码和论文设计)
  20. 编程之美:让CPU占用率曲线听你指挥

热门文章

  1. PS1045L-ASEMI肖特基二极管PS1045L正向压降怎么测
  2. 压力测试常用专业名词解释
  3. 软件工程---团队作业4
  4. 《人月神话》学习笔记
  5. mysql大于小于索引问题
  6. Codeforces 645D Robot Rapping Results Report【拓扑排序+二分】
  7. “抛弃 Gmail!”
  8. Bootstrap 新手学习手册---环境部署与网格系统
  9. 为啥互联网都使用缓存
  10. AI cs5序列号 注册机