2016-01-29 39 views
0

我想知道如何在Oracle數據庫內部工作。特別是他們如何增加序列的價值。oracle序列如何在內部工作?

他們是否使用觸發器來增加序列值或其他?

+0

序列沒有觸發器 - 但觸發器可能會從序列中獲取值。 –

回答

2

Oracle不會像其他對象一樣處理序列,如表格。 如果您使用NEXTVAL插入100條記錄併發出ROLLBACK ,則該序列不會回滾。 取而代之的是,100條記錄會增加序列。 下一個插入將具有序列的第101個值。 這將導致序列中的「空格」。這允許多個人安全地使用序列而沒有重複的風險。 如果兩個用戶同時抓取NEXTVAL,他們會爲 分配唯一的號碼。 Oracle在內存中緩存序列。 init.ora參數SEQUENCE_CACHE_ENTRIES定義了緩存大小。

+0

注意:在最新版本的Oracle中,SEQUENCE_CACHE_ENTRIES已過時。如果需要,您可以使用alter sequence命令更改緩存大小。修改名爲seq的序列的高速緩存大小的示例:Alter sequence seq cache 100; –

+0

另一個注意:序列的值是在自治事務中生成的。默認情況下,Oracle會在新事務中生成新值之前緩存20個值。有很多插入會產生大量的序列值,並會導致序列上的大量I/O。運行基準測試以在高吞吐量情況下爲您的序列緩存找到合適的值。 –