问题描述
嗨,汤姆,
In this section I'll explain how I come up with the question..
在正常操作下,我们的应用程序执行以下操作:
1.调用util.do_some_action,但不等待响应
2.做一些远程系统的网络调用
3.接收来自util.do_some_action的响应,并将操作标记为已保存
4.接收来自步骤2的响应,如果操作未标记为已保存,则调用util.do_some_action。
如果步骤4在步骤3之前完成,则将有2个调用util.do_some_action。
应用程序可以处理它,但我注意到有时log_messages表中的两个日志条目都具有相同的create_dt。
这没有意义,因为两次通话之间有明显的延迟。
question
我们的应用程序将日志保存到log_messages表中,期望create_dt字段代表我们调用util.save_log的时间
但是有时create_dt的值对于顺序调用可能是相同的,它们之间有一些延迟。
我有一个猜测,提交写批处理NOWAIT将缓冲 (批处理!) 事务,并在以后的某个时间将值分配给create_dt。
这是正确的吗?
In this section I'll explain how I come up with the question..
在正常操作下,我们的应用程序执行以下操作:
1.调用util.do_some_action,但不等待响应
2.做一些远程系统的网络调用
3.接收来自util.do_some_action的响应,并将操作标记为已保存
4.接收来自步骤2的响应,如果操作未标记为已保存,则调用util.do_some_action。
如果步骤4在步骤3之前完成,则将有2个调用util.do_some_action。
应用程序可以处理它,但我注意到有时log_messages表中的两个日志条目都具有相同的create_dt。
这没有意义,因为两次通话之间有明显的延迟。
question
我们的应用程序将日志保存到log_messages表中,期望create_dt字段代表我们调用util.save_log的时间
但是有时create_dt的值对于顺序调用可能是相同的,它们之间有一些延迟。
我有一个猜测,提交写批处理NOWAIT将缓冲 (批处理!) 事务,并在以后的某个时间将值分配给create_dt。
这是正确的吗?
专家解答
不,CREATE_DT将在调用时分配 (例如插入),而不是在提交时分配。
但是,这并不意味着如果任何一个条目的提交延迟,您都会同时 * 看到 * 这些条目。
例如
所以我看不到第二行,直到 “稍后”... 当会话1提交时,我看到了这个:
因此,该日期同时应用,但该行的 “外观” 出现延迟 (因为它是未提交的)。
但是,这并不意味着如果任何一个条目的提交延迟,您都会同时 * 看到 * 这些条目。
例如
SQL> create table t ( x date ); Table created. SQL> SQL> b例如in 2 insert into t values (sysdate); 3 commit; 4 insert into t values (sysdate); 5 end; 6 / PL/SQL procedure successfully completed. -- -- From another session -- SQL> select * from t; X ------------------- 07/04/2017 13:32:20
所以我看不到第二行,直到 “稍后”... 当会话1提交时,我看到了这个:
SQL> select * from t; X ------------------- 07/04/2017 13:32:20 07/04/2017 13:32:20
因此,该日期同时应用,但该行的 “外观” 出现延迟 (因为它是未提交的)。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




