V1.0
Revision |
Author/Modifier | Comments | |
No. |
Date |
||
1.0 | 2012-2-15 | 陈立 | 初稿 |
一、 目的
明确定义对于sequence对象的操作风险及步骤。
二、 适用范围
l 项目发布创建新sequence。
l 以删除、重建的方式修改sequence的起始值。
l 在线修改sequence的cache值。
三、 风险评估
l Sequence命名与应用程序中不一致,导致应用无法正常访问sequence。
l 双向同步的库,多库创建同名sequence,起始值和步长值设置不合理,导致生成的值在表中对应主键值同步产生冲突。
l 删除、重建sequence的过程中,应用无法访问sequence,高并发的应用可能会产生故障。
l 删除、重建sequence之后没有对sequence的权限进行恢复,导致原本访问该sequence的其他schema无法正常访问。
l Sequence的cache设置不合理,设置过小会导致大量的系统相关等待,反之则导致sequence生成值断层过多浪费严重。
l Java程序的int16数据类型只能容纳最大21亿,所以sequence不能超过这个值,如果有可能超过,需要跟开发确认。
四、 操作流程
1. 准备工作
a) 默认使用变更系统生成的sequence名称,如果要修改,必须跟开发人员沟通一致。
b) 与开发人员、项目发布负责人沟通变更时间点。对于删除、重建的操作必须明确告诉他们其间会有短暂的无法访问,如果是高并发的应用则选择在系统访问量最低的时候执行,规避风险。
c) 根据并发数确定cache值,默认为100,如遇特殊需求,酌情调整。
d) 删除、重建的操作,事先检查是否有其他schema拥有对于该sequence的访问权限:
SELECT grantee, owner, table_name, privilege
FROM dba_tab_privs
WHERE table_name = upper(’重建的对象名‘);
e) 全面考虑同步的风险,确定同步环节中各个数据库的同名sequence起始值及步长,保证不会发生冲突,通常有如下两种做法:
i. 起始值相差不大,步长值等于数据库个数。以双库同步为例,起始值分别设为1和2,步长均设为2。
ii. 起始值相距较大,步长值相同。以双库同步为例,A库起始值设为1,B库起始值设为2亿,步长均设为1。相差的值可以根据增长预期进行调整。
2. 执行过程
a) 标准新建脚本:
CREATE SEQUENCE seq_tablename START WITH 1 CACHE 100;
命名规范: seq_tablename
默认不指定recycle和max value。
b) 标准重建脚本:
DROP SEQUENCE seq_tablename ;
CREATE SEQUENCE seq_tablename START WITH 1 CACHE 100;
为了尽量缩短sequence不可用时间,这两个语句一起放在SecureCRT的chartWindow中一起执行。
c) 标准修改cache脚本:
ALTER SEQUENCE seq_tablename CACHE 200;
d) 标准赋权脚本:
GRANT SELECT ON seq_tablename to username;
3. 验证方案
a) @dbcheck 检查是否有失效对象
b) 通知应用验证是否可以正常访问sequence
五、 核心对象风险
高并发对象重建时短暂不可访问;
六、 回退方案
一般情况下无需回退。