阿里巴巴数据库操作手册 03-创建、删除、修改sequence

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

五、 核心对象风险

高并发对象重建时短暂不可访问;

六、 回退方案

一般情况下无需回退。

七、 历史故障及教训

  1. da shang
    donate-alipay
               donate-weixin weixinpay

发表评论↓↓