关于Oracl的DBLINK的问题

程序猿3000 2014-02-26 01:35:20
问题描述。
由于业务需要,我们系统要每天把生成的数据通过Oracle的DBLINK要传到财务系统的中间表里,假设中间表是gl_table,财务系统也是Oracle数据库。
我们系统的实现方式如下:
1.jsp页面上单击按钮调用数据库后台的包,业务逻辑就在包里写的。
2.数据库创建DBL_XZD这个dblink,连接对方财务系统的数据库,以便能访问中间表gl_table。
3.在本地Oracle数据库里创建一个一摸一样的gl_table,以便先把本地的逻辑数据放到本地的gl_table表中,最后统一通过DBL_XZD上传到财务系统的中间表里去。
--省略部分逻辑SQL----
INSERT INTO gl_table@DBL_XZD(id,tf_sign,tr_date,tr_type,tr_num)
select id,tf_sign,tr_date,tr_type,tr_num from gl_table where gl.tr_date = to_date(v_biz_date, 'yyyymmdd')
其中v_biz_date是包要传的参数。
现在的问题是,执行起立很慢,有的时候就传不到财务系统的gl_table里面去?请问是什么原因啊????
100分求助!
...全文
205 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhzhs007 2014-03-01
  • 打赏
  • 举报
回复
数据量如何 既然从本地插入对方db慢,可以试试从对方数据库抽取
另类清晨 2014-02-28
  • 打赏
  • 举报
回复
PL/SQL DEVELOPER里面直接按F5,或者命令行set autotrace on
流浪川 2014-02-27
  • 打赏
  • 举报
回复
查询的是本地的数据,在本地系统中的gl_table中的tr_date创建索引即可。 财务系统中建立索引过多的话,也会影响插入的效率。
流浪川 2014-02-27
  • 打赏
  • 举报
回复
引用 5 楼 lushichen 的回复:
tr_date这个字段一定要创建索引的吗?财务系统和本地系统中的gl_table中的tr_date要创建索引,是吗?不能是其他的字段,是吗?
你可以看看下面sql的执行计划,如果没有使用其他索引过滤的话,建议你按照我说的创建索引测试一下效率。
select id,tf_sign,tr_date,tr_type,tr_num from  gl_table where tr_date = to_date(v_biz_date, 'yyyymmdd');
程序猿3000 2014-02-27
  • 打赏
  • 举报
回复
tr_date这个字段一定要创建索引的吗?财务系统和本地系统中的gl_table中的tr_date要创建索引,是吗?不能是其他的字段,是吗?
程序猿3000 2014-02-27
  • 打赏
  • 举报
回复
oracle 的执行计划怎么看啊?不会操作啊?
orc1979 2014-02-27
  • 打赏
  • 举报
回复
以前类似的功能我们是采用 materialized view做的,效率还可以,因为是增量的。
流浪川 2014-02-26
  • 打赏
  • 举报
回复
这个看具体你操作的数据集大小了。 另外gl.tr_date 是一定要建立索引的。。
程序猿3000 2014-02-26
  • 打赏
  • 举报
回复
这个是规定死的,必须通过页面来实现!
_拙计 2014-02-26
  • 打赏
  • 举报
回复
既然是每天都更新数据,你何不用job 执行 每天的业务数据,何必去前台操作呢
程序猿3000 2014-02-26
  • 打赏
  • 举报
回复
财务系统的中间表里gl_tabl里实现已经创建了索引,最后也是统一commit的。 --省略部分逻辑SQL(提取本地数据到本地的gl_table中)---- INSERT INTO gl_table@DBL_XZD(id,tf_sign,tr_date,tr_type,tr_num) select id,tf_sign,tr_date,tr_type,tr_num from gl_table where tr_date = to_date(v_biz_date, 'yyyymmdd'); commit; 其中v_biz_date是包要传的参数。 我换成 execute immediate ’INTO gl_table@DBL_XZD(id,tf_sign,tr_date,tr_type,tr_num) select id,tf_sign,tr_date,tr_type,tr_num from gl_table where tr_date = :biz_date' using to_date(v_biz_date, 'yyyymmdd'); commit; 还是很慢,有的时候失败。

17,380

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧