列cache的默认值是20,使用cache的好处是:可以加快获得序列值。
但坏处是如果非正常关库时,保存在内存中的所有用户的序列值,全部丢失,导致序列值跳跃。
甚至把cache值保持到sharepool中,异常关机照样会丢失序列值。
所以,shut abort慎用,或者用之前使用以下sql,把序列cache值不为0的改为0,等库重启后,再改为原值。
sys用户下执行:
SQL> set pages 9000
SQL> set lines 400
SQL> spool seq_cache.txt
SQL> select 'alter sequence '||sequence_owner||'.'||sequence_name||' cache '||CACHE_SIZE||';' from dba_sequences where cache_size!=0;
SQL> spool off
把结果保存到一个文件中。
把cache值不为0的序列改为0:
select 'alter sequence '||sequence_owner||'.'||sequence_name||' nocache;' from dba_sequences where cache_size!=0;
把结果执行。
测试过程:
SQL> show user
USER is "SCOTT"
SQL> select scott_seq.nextval from dual;
NEXTVAL
----------
65
SQL> show user
USER is "SYS"
SQL> select sys_seq.nextval from dual;
NEXTVAL
----------
26
SQL> select JOBSEQ.nextval from dual;
NEXTVAL
----------
48
SQL> shut immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 238530560 bytes
Fixed Size 1335724 bytes
Variable Size 150998612 bytes
Database Buffers 83886080 bytes
Redo Buffers 2310144 bytes
Database mounted.
Database opened.
SQL> select JOBSEQ.nextval from dual;
NEXTVAL
----------
49
SQL> select sys_seq.nextval from dual;
NEXTVAL
----------
27 --正常关库没有导致序列丢失
[oracle@db ~]$ sqlplus scott/tiger
SQL*Plus: Release 11.2.0.1.0 Production on Sun Aug 19 11:40:22 2012
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select scott_seq.nextval from dual;
NEXTVAL
----------
66 --正常关库没有导致序列丢失
SQL> show user
USER is "SYS"
SQL> shut abort
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 238530560 bytes
Fixed Size 1335724 bytes
Variable Size 150998612 bytes
Database Buffers 83886080 bytes
Redo Buffers 2310144 bytes
Database mounted.
Database opened.
SQL> select sys_seq.nextval from dual;
NEXTVAL
----------
47
SQL> select JOBSEQ.nextval from dual;
NEXTVAL
----------
69 --异常关库导致sys用户的序列递增了20
[oracle@db ~]$ sqlplus scott/tiger
SQL*Plus: Release 11.2.0.1.0 Production on Sun Aug 19 11:42:35 2012
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> select scott_seq.nextval from dual;
NEXTVAL
----------
86 --异常关库导致scott用户的序列递增了20
再把JOBSEQ保持到sharepool,看看异常关库会不会导致该序列数值跳跃。
SQL> exec dbms_shared_pool.keep('JOBSEQ','Q');
PL/SQL procedure successfully completed.
SQL> show user
USER is "SYS"
SQL> shut abort
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 238530560 bytes
Fixed Size 1335724 bytes
Variable Size 150998612 bytes
Database Buffers 83886080 bytes
Redo Buffers 2310144 bytes
Database mounted.
Database opened.
SQL> select JOBSEQ.nextval from dual;
NEXTVAL
----------
89 --看来dbms_shared_pool.keep()不能防止序列跳跃
把三个序列设为nocache,再做异常关库
SQL> alter sequence sys_seq nocache;
Sequence altered.
SQL> alter sequence jobseq nocache;
Sequence altered.
SQL> alter sequence scott.scott_seq nocache;
Sequence altered.
SQL> shut abort
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 238530560 bytes
Fixed Size 1335724 bytes
Variable Size 150998612 bytes
Database Buffers 83886080 bytes
Redo Buffers 2310144 bytes
Database mounted.
Database opened.
SQL> select sys_seq.nextval from dual;
NEXTVAL
----------
48 --此时序列是正常的
SQL> select JOBSEQ.nextval from dual;
NEXTVAL
----------
70
SQL> select scott.scott_seq.nextval from dual;
NEXTVAL
----------
87 --此时序列正常了。
看来shut abort 执行前,要先做的一步是把cache值不为0的序列,改为0,才能防止序列值跳跃。
以下是序列的语法和用法:
sequence 序列
流水号(整数)递增或递减
存在于library cache
通常为主键或唯一约束提供值
减少编写生成序列的程序代码量
比如QQ号的产生
语法
CREATE SEQUENCE seq_name
[INCREMENT BY n]
[START WITH n] 3 1
[{MAXVALUE N | NOMAXVALUE}]
[{MINVALUE N | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE N|NOCACHE}];
INCREMENT BY N表示步长
START WITH N N表示初始值
[NO]MAXVALUE N N表示有没有最大 最大值是多少 NOMINVALUE选项最大值时10^27
[NO]MINVALUE N N最小值
CYCLE 达到最大是否循环回到初始值
[NO]CACHE 就是你每次在内存里预保存多少个值 免得每次都要获取 浪费资源 一次获取批量存在内存中
取值方法
NEXTVAL 返回下一个值
CURRVAL 返回当前值
钉(pin)缓存
start with 不能修改 历史回溯只能删了再建
SQL> create sequence my_seq;
Sequence created.
SQL> select my_seq.currval from dual;
select my_seq.currval from dual
*
ERROR at line 1:
ORA-08002: sequence MY_SEQ.CURRVAL is not yet defined in this session
初始的序列必须用nextval先取值
SQL> select my_seq.nextval from dual;
NEXTVAL
----------
1
SQL> select my_seq.currval from dual;
CURRVAL
----------
1
SQL>
通过nextval获取 序列就是在增长
SQL> select my_seq.nextval from dual;
NEXTVAL
----------
2
修改序列
alter SEQUENCE seq_name
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE N | NOMAXVALUE}]
[{MINVALUE N | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE N|NOCACHE}];
SQL> alter sequence seq2 start with 10;
alter sequence seq2 start with 10
*
ERROR at line 1:
ORA-02283: cannot alter starting sequence number
SQL> alter sequence seq2 cache 10;
Sequence altered.
SQL> alter sequence seq2 cycle;
Sequence altered.
相关推荐
现在,实现LRU算法的主要逻辑在up_cache函数中,该函数将页面访问序列walk_sort和缓存数组cache作为输入参数。 void up_cache(Cache cache[], int walk_sort[]) { int i = 0; // i 为访问序列数组的下标 int x; ...
但是,这种缓存机制有一个缺陷,即缓存的数据会随着应用程序的重启而丢失。为了解决这个问题,可以使用 Redis 作为二级缓存,将缓存数据存储在 Redis 中,从而使缓存数据更加持久。 使用 Redis 作为二级缓存的步骤 ...
RedisCache 类使用 JdkSerializationRedisSerializer 来序列化和反序列化缓存数据,并使用 RedisConnectionFactory 来创建 Redis 连接。 知识点4:RedisConnectionFactory 配置 为了使用 Redis 集群,我们需要配置...
- **ZEO Cache**:探索使用ZEO Cache的可能性,进一步优化多服务器环境下的性能。 #### 八、结论 综上所述,Plone性能优化和扩展是一项复杂但必要的工作。通过对系统的全面评估和持续监测,结合合理的缓存策略、...
在软件工程中,“动作”通常指的是程序执行过程中的一系列操作或指令序列。 **Activate 激活** 激活是指使某个组件或功能处于可用状态的操作,例如启动一个程序或激活一个服务。 **Active 活动的** 活动的是指...
- 存储层次结构:寄存器、高速缓存(Cache)、主存、外存 6. **软件工程**: - 软件生命周期:需求分析、设计、编码、测试、维护 - UML统一建模语言:用例图、类图、序列图、状态图 - 质量保证和质量控制:测试...
Jira是Atlassian公司开发的一款项目与事务跟踪工具,广泛应用于缺陷跟踪、问题跟踪和项目管理领域。本文档“jira-7-9-2-database-schema.pdf”所包含的是Jira 7.9.2版本的数据库模式信息,即数据库中各个表的结构、...
- Bug:错误或缺陷,程序运行时可能出现的问题。 - Binary:二进制,计算机中基于0和1的数字系统。 - Byte:字节,通常由8位组成,是计算机存储和处理数据的基本单位。 C - Compiler:编译器,将高级语言转化为机器...
HBase弥补了这一缺陷,允许在Hadoop环境中进行高效的数据检索和实时分析。HBase利用Hadoop的分布式存储能力,但提供了一种更结构化的存储模式,适合处理大规模的、稀疏的多维数据。 **Hadoop随机存取数据库** HBase...
Algorithm 是一个非常重要的编程概念,指的是一个详细的、明确的、有限的、确定性的步骤序列,可以解决一个特定的问题或任务。Algorithm 是编程的核心,良好的算法可以提高程序的效率、可靠性和可维护性。 Alias ...
3. 存储系统:RAM、ROM、Cache的工作原理,主存与CPU的交互。 4. 指令执行过程:取指、译码、执行、写回等步骤。 5. 输入/输出系统:中断、DMA、程序控制方式。 五、数据库系统 1. 数据库设计:ER模型、关系模型、...
- 算法是一系列定义明确、有限步骤的操作序列,用于解决特定问题或执行特定任务。在计算机科学中,算法的设计与分析是非常重要的。 3. **Alias (别名):** - 在编程中,别名通常指的是同一个数据对象的不同名称。...
4.1 值 类 型 .28 4.2 引 用 类 型 .33 4.3 装箱和拆箱 .39 4.4 小 结 .42 第五章 变量和常量 .44 5.1 变 量 .44 5.2 常 量 .46 5.3 小 结 .47 第六章 类 型 转 换 .48 6.1 隐式类型转换 .48 6.2...
13. **单片高速缓存(On-chip Cache)**:集成在处理器芯片上的高速缓存,用于快速访问常用数据。 14. **硅片(Silicon Die)**:集成电路制造中的基本单元,通常包含一个完整的处理器或其它复杂电路。 15. **磁盘...