Oracle入门教程:ADF中解决sequence断号问题
Oracle入门教程:ADF中解决sequence断号问题
定义Sequence时,如果使用缓存,在数据库关闭或者宕掉时,将出现Sequence跳号。
要解决ADF程序中的sequence断号,首先要确保Oracle数据库中不产生断号。
1,对于非频繁使用的Sequence,可以在定义中加NOCACHE,即不缓存。这样数据库中不会出现断号了。
2,对于频繁使用的Sequence,定义的时候又使用了CACHE。可以使用DBMS_SHARED_POOL来KEEP SEQUENCE的CACHE。
命令如下:
- exec dbms_shared_pool.keep(name => 'myseq', flag => 'Q')
测试:
1)未设置DBMS_SHARED_POOL
- SQL> create sequence myseq cache 100;
- 序列已创建。
- SQL> select myseq.nextval from dual;
- NEXTVAL
- ----------
- 1
- SQL> conn / as sysdba
- 已连接。
- SQL> alter system flush shared_pool;
- 系统已更改。
- SQL> conn hr/hr
- 已连接。
- SQL> select myseq.nextval from dual;
- NEXTVAL
- ----------
- 101
- SQL> conn / as sysdba
- 已连接。
- SQL> exec dbms_shared_pool.keep(name => 'hr.myseq',flag => 'Q');
- PL/SQL 过程已成功完成。
- SQL> alter system flush shared_pool;
- 系统已更改。
- SQL> conn hr/hr
- 已连接。
- SQL> select myseq.nextval from dual;
- NEXTVAL
- ----------
- 102
3,为了避免ADF应用程序中不断点击新增按钮产生的Sequence断号,可以使用定义字段类型为DBSequence并结合Trigger的技巧。
ADF中使用DBSequence的方法可参考我的另一篇文章:ADF 中使用Sequence的方法总结
评论暂时关闭