暂无图片
如何解决 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怎么弄模拟数据?
回答 1
可以使用DBeaver的企业版(网上有破解版),自己创建表结构,然后选中刚创建的表单机右键——工具——GenerateMockData,可以自动生成地址、邮件、姓名等数据。
建库报这个错,一台服务器,多个实例的db_block_size都必须一样?参数不允许改
回答 2
已采纳
必须一样,至于创建的方法:Oracle默认创建8192的dbblock如果想要创建其它size的dbblock的话,你可以在创建的时候点createshell。然后将脚本拷贝出来跑,但这个的缺点是比较
oracle生成的awr报告中信息不全
回答 1
可能的原因和解决方法:Undo表空间问题:检查系统的Undo表空间是否存在,以及是否已正确配置。如果Undo表空间不存在或配置错误,需要创建新的Undo表空间或更正配置。统计信息丢失:如果Undo表空
Oracle 中max_string_size这个值改为extend有什么影响吗?
回答 2
已采纳
基本没什么影响,这个参数改成EXTENDED,就是增大了VARCHAR2、NVARCHAR2、RAW字段类型的最大长度,可能影响就更改之后,往低版本或者其他没有更改该参数的数据库中迁移数据时,部分数据
RAC 19C在打32895426补丁过程中,报如下错误,请问如何解决。
回答 6
记起来了,你这错误就是因为有其他的Oracle用户登录系统了,退到root或者直接退出即可,然后解决问题后继续执行打补丁/app/app/19.0.0.0/grid/OPatch/opatchauto
ORACLE10G ORA-00600: internal error code, arguments: [17089]
回答 5
已采纳
Mos找到一篇文档,没有workaround,看文档与trigger相关,可以考虑禁用trigger或者删除trigger再进行相同操作。
Oracle case when语法,可以判断多个字段吗?
回答 3
可以
异地备份Oracle,没有exp命令怎么办?
回答 3
已采纳
1、远程机器如果能安装oracleclient是可以用EXP或者expdp命令。2、设置shell脚本通过本地expdp导出后sftp传输到异地机器。3、直接用rman配合NFS也能实现异地机器备份。
数据冗余指的是相同的数据在数据库中重复存储的情况?
回答 2
已采纳
是的,数据冗余指的是相同的数据在数据库中重复存储的情况。在数据库中,数据通常以表的形式组织,并且可以在不同的表或同一表的不同行中存储相同的数据。这种重复存储的情况称为数据冗余。
oracle 日期
回答 1
第一句根本就没法执行啊,你确认你贴对了?date’text’这种,叫dateliteral,理解为字符串直接表达的日期就ok