Oracle入门教程:ADF中解决sequence断号问题


定义Sequence时,如果使用缓存,在数据库关闭或者宕掉时,将出现Sequence跳号。

要解决ADF程序中的sequence断号,首先要确保Oracle数据库中不产生断号。

1,对于非频繁使用的Sequence,可以在定义中加NOCACHE,即不缓存。这样数据库中不会出现断号了。

2,对于频繁使用的Sequence,定义的时候又使用了CACHE。可以使用DBMS_SHARED_POOL来KEEP SEQUENCE的CACHE。

命令如下:

  1. exec dbms_shared_pool.keep(name => 'myseq', flag => 'Q')  

测试:

1)未设置DBMS_SHARED_POOL

  1. SQL> create sequence myseq cache 100;  
  2.   
  3. 序列已创建。  
  4.   
  5. SQL> select myseq.nextval from dual;  
  6.   
  7.    NEXTVAL  
  8. ----------   
  9.          1  
  10.            
  11. SQL> conn / as sysdba  
  12. 已连接。  
  13.   
  14. SQL> alter system flush shared_pool;  
  15.   
  16. 系统已更改。  
  17.   
  18. SQL> conn hr/hr  
  19. 已连接。  
  20.   
  21. SQL> select myseq.nextval from dual;  
  22.   
  23.    NEXTVAL  
  24. ----------   
  25.        101  
2)设置DBMS_SHARED_POOL
  1. SQL> conn / as sysdba  
  2. 已连接。  
  3.   
  4. SQL> exec dbms_shared_pool.keep(name => 'hr.myseq',flag => 'Q');  
  5.   
  6. PL/SQL 过程已成功完成。  
  7.   
  8. SQL>  alter system flush shared_pool;  
  9.   
  10. 系统已更改。  
  11.   
  12. SQL> conn hr/hr  
  13. 已连接。  
  14. SQL> select myseq.nextval from dual;  
  15.   
  16.    NEXTVAL  
  17. ----------   
  18.        102  

3,为了避免ADF应用程序中不断点击新增按钮产生的Sequence断号,可以使用定义字段类型为DBSequence并结合Trigger的技巧。

ADF中使用DBSequence的方法可参考我的另一篇文章:ADF 中使用Sequence的方法总结

相关内容