我有一个表,其中包含一个自动生成的主键和一个DateTime字段。我们有几个客户端插入记录,使用来自客户端计算机的时钟作为日期/时间(即它不是一个真正的"TimeStamp“字段)。当记录按主键排序时,我遇到过大量的日期/时间相差数小时的情况。起初,我认为客户端计算机的时钟是关闭的。但我越来越多地认为它可能是数据库上的某种缓存机制。
有什么可以解释这一点吗?
发布于 2012-10-10 23:39:31
Oracle不缓存插入或更新:当DML语句完成时,意味着更改已经完成。当你提交时,它们是永久的。
但是,Oracle可以缓存标识符的生成。如果您的主键是由一个序列生成的,那么在默认情况下,Oracle将缓存20个键,并且不保证这些键将按照所要求的顺序进行分发。
使用ORDER关键字可以:
...保证按请求顺序生成序列号。如果您使用序列号作为时间戳,则此子句非常有用。对于用于生成主键的序列,保证顺序通常并不重要。
示例:
CREATE SEQUENCE your_sequence ORDER当然,这假设所有插入也使用SYSTIMESTAMP或SYSDATE,如果它们使用客户端日期设置,则Oracle没有办法对插入进行排序。
最终,它真的很重要吗?对于大多数应用程序来说,只有单一性很重要,并且可以用GUID替换自动增量字段。特别是因为您已经有了一个时间戳列。
https://stackoverflow.com/questions/12823042
复制相似问题