暂无图片
如何解决 insert into select /*+ driving_site(t) */ 这类hint 失效的问题?
我来答
分享
暂无图片 匿名用户
如何解决 insert into select /*+ driving_site(t) */ 这类hint 失效的问题?

我能想到的办法就是两个,一个是在远端数据库建立反向dblink到本地,然后建一个select的view,本地在insert into select from view。 另外一个办法就是,将这个insert分成两部分,一个是select 单独执行,保存结果,然后在执行insert了。

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
赵勇

1、driving_site用于提示跨数据库操作(分布式)数据时,在哪一侧做数据处理。但对于DML操作,必须以发生DML的一侧为数据处理的所在。这里的问题,主要是当有大量数据需要传输到本地侧时,时间耗时会比较长。
2、对于INSERT INTO table1 select … from table2@dblink 这样的操作,数据处理必定是在本地侧。如果select … from table2@dblink的结果集较小(比如有过滤条件,或集合操作),可以考虑分两步处理,第1步,在另一侧将结果存到一个中间表中。第2步,从中间表中获取数据。由于中间表中的数据少,所以,需要在网络上传输的代价就会降低。反之,如果结果集较大,甚至只是简单地将远端的表“复制”到本地,那么没有什么太好的方法。因为大量的数据传输,是没有什么规避的方法的。
3、但是,当条件允许时,可以考虑建基于DBLINK的物化视图。其目的是将远端的数据以增量的方式同步的本地。其实现的效果是执行 insert into 时,不存在大量的数据传输过程(因为这个传输工作被分散到执行前就做了),从而实现缩短执行特定SQL时的处理时长的目标。但如果远端表的数据无法提前提供,或者创建基于DBLINK的物化视图的方法不能接受,目前看来,暂时没想到什么好的方法。
以上,供参考。

暂无图片 评论
暂无图片 有用 0
打赏 0
周伟

我今天也碰到了这么个现象,insert into 本地表 select from dblink 超级慢,但是单独执行 select from dblink 就秒出,后来仔细看了执行计划,insert的语句,是将driving_site固定到了本地库,无论怎么修改hint提示都无效。

后来采用中间办法,在本地执行  create table temp as select from dblink,就非常快,然后insert into 本地表 select from temp 表,就比较顺利了。

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
oracle 11g 使用EXpdp 导出数据如何优化导出速度, CPU是32逻辑cpu
回答 4
已采纳
不到每秒10m的落地速度,瓶颈可能在数据库。看下是不是主要是几张表慢?这张表是否有lob类字段。是否有行链接、行迁移问题。
sql
回答 5
练一下手,我是菜鸟1.selectSNo,CNo,avg(CScore)fromstuleftjoinStuCourseonstu.SNoStuCourse.SNogroupbySNohavingby
oracle备份管理软件
回答 2
已采纳
免费的好像没有,oracle自己有商业软件oraclesecurebackup,其他公司还有NBU,EMCnetworker,还有国产的鼎甲,云信达,DSG,爱数,火星舱等。其实简单不是集中多套数据库
Oracle更新到了19.12 ,sqlplus 显示 数据库还是19.3 但是查询dba_registry_history发现已经更新到了19.12
回答 1
脚本执行了吗?跑一下下面的脚本再看看。cd$ORACLEHOME/OPatch./datapatchverbose
Halo数据库有性能诊断工具吗?
回答 1
已采纳
Halo数据在Oracle数据库兼容模式时,有性能诊断工具叫HWR,与Oracle的AWR功能类似,能够产生html的数据库分析报告,使用方法也与AWR类似。HWR可以帮助我们找出Halo数据库中大多
Oracle expdp可以把文件指向asm里吗?
回答 1
已采纳
可以,创建导出目录在asm里即可;CREATE DIRECTORYASMDIRDUMPas'DISKGROUP1/';
想部署用Oracle的程序,是不是这台机子上必须要装客户端?
回答 4
已采纳
连接oracle数据库,肯定需要客户端,但这是指广义上的客户端。而且客户端并不一定需要安装,几个动态库文件可以算得上是客户端,像odbc/jdbc这种其实都算是客户端,它们只是客户端的不同形式罢了。所
WHERE与HAVING的区别都有什么?
回答 1
已采纳
WHERE与HAVUNG有如下区别:①WHERE操作是从数据表中获取数据,将数据从磁盘存储到内存中,而HAVING是对已存放到内存中的数据进行操作。②HAVING位于GROUPBY子句后,而WHERE
name-service call wait解释
回答 1
Fornameservicecallwait:    1)Topublisha(key,value)entrywiththeNameservice. 
Oracle数据库中什么样的数据文件不能被删除?
回答 2
已采纳
对于不再使用的数据文件,可以进行删除操作。但如果数据文件处于以下三种情况,不可以被删除:1)数据文件或者数据文件所在的表空间处于只读状态。2)数据文件中存在数据。3)数据文件是表空间中唯一一个或第一个