问题描述
嗨,团队,
在处理数据库链接时,您能帮助理解提示吗?
当前,我们正在使用下面的命令将数据从源移动到目标,是否可以在下面的MERGE语句中使用此提示 (表TB_STATEMENT_X保存数十亿条记录)。
合并到TB_STATEMENT_X @ connect_tsys tgt
使用 (
从TB_STATEMENT_X中选择 *,其中ROWID在 (从tb_archive_staging中选择row_id)
) src
ON (src.CARD_NO = tgt.CARD_NO和src.STMT_BEGIN_DATE = tgt.STMT_BEGIN_DATE)
当匹配时,然后
更新
设置tgt.ACC_NO = src.ACC_NO
,tgt.ACC_STATUS = src.ACC_STATUS
,....
,....
当不匹配时
插入 (tgt.CARD_NO,tgt.STMT_BEGIN_DATE,tgt.ACC_NO,tgt.PRIMARY_CARD_NO,..,..)
值 (src.CARD_NO,src.STMT_BEGIN_DATE,src.ACC_NO,src.PRIMARY_CARD_NO,..,..);
在处理数据库链接时,您能帮助理解提示吗?
当前,我们正在使用下面的命令将数据从源移动到目标,是否可以在下面的MERGE语句中使用此提示 (表TB_STATEMENT_X保存数十亿条记录)。
合并到TB_STATEMENT_X @ connect_tsys tgt
使用 (
从TB_STATEMENT_X中选择 *,其中ROWID在 (从tb_archive_staging中选择row_id)
) src
ON (src.CARD_NO = tgt.CARD_NO和src.STMT_BEGIN_DATE = tgt.STMT_BEGIN_DATE)
当匹配时,然后
更新
设置tgt.ACC_NO = src.ACC_NO
,tgt.ACC_STATUS = src.ACC_STATUS
,....
,....
当不匹配时
插入 (tgt.CARD_NO,tgt.STMT_BEGIN_DATE,tgt.ACC_NO,tgt.PRIMARY_CARD_NO,..,..)
值 (src.CARD_NO,src.STMT_BEGIN_DATE,src.ACC_NO,src.PRIMARY_CARD_NO,..,..);
专家解答
driving_site并不真正适合合并 (或更改表的内容),因为合并 * 必须 * 在表所在的站点上完成。
我在两个数据库上做了这个
然后我们可以在 * select * 中看到driving_site提示的影响
我在两个数据库上做了这个
SQL> create table t as select OWNER 2 ,OBJECT_NAME 3 ,SUBOBJECT_NAME 4 ,OBJECT_ID 5 ,DATA_OBJECT_ID 6 ,OBJECT_TYPE 7 ,CREATED 8 ,LAST_DDL_TIME 9 ,TIMESTAMP 10 ,STATUS 11 ,TEMPORARY 12 ,GENERATED 13 ,SECONDARY 14 ,NAMESPACE 15 ,EDITION_NAME 16 ,SHARING 17 ,EDITIONABLE 18 ,ORACLE_MAINTAINED from dba_objects; Table created.复制
然后我们可以在 * select * 中看到driving_site提示的影响
select /*+ driving_site(src) */ * from t@np121 tgt, (SELECT * FROM t WHERE ROWID IN (SELECT rowid FROM t where rownum < 1000) ) src where src.object_id = tgt.object_id; --------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Inst |IN-OUT| --------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 249 | 288 (2)| 00:00:01 | | | |* 1 | HASH JOIN | | 1 | 249 | 288 (2)| 00:00:01 | | | | 2 | NESTED LOOPS | | 1 | 134 | 9 (12)| 00:00:01 | | | | 3 | VIEW | VW_NSO_1 | 999 | 11988 | 7 (0)| 00:00:01 | | | | 4 | HASH UNIQUE | | 1 | 11988 | | | | | |* 5 | COUNT STOPKEY | | | | | | | | | 6 | TABLE ACCESS FULL | T | 999 | 11988 | 7 (0)| 00:00:01 | | | | 7 | TABLE ACCESS BY USER ROWID| T | 1 | 122 | 1 (0)| 00:00:01 | | | | 8 | REMOTE | T | 92273 | 10M| 279 (2)| 00:00:01 | NP121 | R->S | --------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - access("T"."OBJECT_ID"="TGT"."OBJECT_ID") 5 - filter(ROWNUM<1000) Remote SQL Information (identified by operation id): ---------------------------------------------------- 8 - SELECT "OWNER","OBJECT_NAME","SUBOBJECT_NAME","OBJECT_ID","DATA_OBJECT_ID","OBJECT_TYPE"," CREATED","LAST_DDL_TIME","TIMESTAMP","STATUS","TEMPORARY","GENERATED","SECONDARY","NAMESPACE","ED ITION_NAME","SHARING","EDITIONABLE","ORACLE_MAINTAINED" FROM "T" "TGT" (accessing 'NP121' ) Note ----- - this is an adaptive plan select /*+ driving_site(tgt) */ * from t@np121 tgt, (SELECT * FROM t WHERE ROWID IN (SELECT rowid FROM t where rownum < 1000) ) src where src.object_id = tgt.object_id; --------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Inst |IN-OUT| --------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT REMOTE| | 999 | 242K| 935 (1)| 00:00:01 | | | |* 1 | HASH JOIN | | 999 | 242K| 935 (1)| 00:00:01 | | | |* 2 | HASH JOIN | | 999 | 130K| 503 (1)| 00:00:01 | | | | 3 | VIEW | VW_NSO_1 | 999 | 11988 | 252 (1)| 00:00:01 | NP121 | | |* 4 | COUNT STOPKEY | | | | | | | | | 5 | REMOTE | T | 999 | 11988 | 252 (1)| 00:00:01 | ! | R->S | | 6 | REMOTE | T | 78131 | 9308K| 252 (1)| 00:00:01 | ! | R->S | | 7 | TABLE ACCESS FULL | T | 92273 | 10M| 431 (1)| 00:00:01 | NP121 | | --------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - access("A1"."OBJECT_ID"="A2"."OBJECT_ID") 2 - access("A1".ROWID="$kkqu_col_1") 4 - filter(ROWNUM<1000) Remote SQL Information (identified by operation id): ---------------------------------------------------- 5 - SELECT ROWID FROM "T" "A3" (accessing '!' ) 6 - SELECT ROWID,"OWNER","OBJECT_NAME","SUBOBJECT_NAME","OBJECT_ID","DATA_OBJECT_ID","OB JECT_TYPE","CREATED","LAST_DDL_TIME","TIMESTAMP","STATUS","TEMPORARY","GENERATED","SECONDAR Y","NAMESPACE","EDITION_NAME","SHARING","EDITIONABLE","ORACLE_MAINTAINED" FROM "T" "A1" (accessing '!' ) Note ----- - fully remote statement 36 rows selected.复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
595次阅读
2025-04-15 17:24:06
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
564次阅读
2025-04-18 14:18:38
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
482次阅读
2025-04-08 09:12:48
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
473次阅读
2025-04-20 10:07:02
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
457次阅读
2025-04-22 00:20:37
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
431次阅读
2025-04-22 00:13:51
Oracle 19c RAC更换IP实战,运维必看!
szrsu
430次阅读
2025-04-08 23:57:08
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
417次阅读
2025-04-17 17:02:24
火焰图--分析复杂SQL执行计划的利器
听见风的声音
359次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
357次阅读
2025-04-15 14:48:05