阿里巴巴数据库操作手册 22-Truncate

V1.0

Revision

Author/Modifier Comments

No.

Date

1.0 2012.2 王涛 初稿

一、 目的

明确truncate表操作的风险及标准流程,最大限度避免truncate表操作带来的故障。本文涉及到truncate table,truncate partition两个操作。

二、 适用范围

l 数据清理

l 定时truncate表数据清理

三、 风险评估

l 登录到错误的schema下,导致truncate到错误的schema里,而应用无法访问。

l 脚本末尾缺少分号,导致该truncate没有被执行上,而执行DDL的过程又不会报错。

l 其他原因truncate错了表,导致应用访问错误。

l 目前同步程序均不支持truncate表,因此被同步环境需要手工truncate。

四、 操作流程

1. 准备工作

a) Truncate操作分为两类:定时truncate,数据清理。操作之前,请明确操作类型,然后选择合适的truncate操作。

b) 定时truncate:

i. 明确告知开发部门truncate操作是不可逆操作;

ii. 确认数据是定期build生成且是可重复操作;

iii. truncate操作,必须要有exception处理,防止诸如表上有事务等,truncate不成功的情况发生。进而影响整个脚本的执行;

iv. 模板:

Begin
Execute Immediate ‘truncate table table_name’;
Exception When Others Then
–which error info you want to do?
…….;
End;

c) 数据清理

i. 在数据清理之前,明确如下事宜:

1. 知晓备库的延迟时间,针对所有版本数据库;

2. 确认主数据库是否开启闪回功能,针对10g以后的数据库;

3. 确认所做操作表,是否开启闪回数据归档功能,针对11g以后的数据库;

ii. 登录主库使用@size脚本,确认所truncate表的物理size,分区表则明确所truncate分区。

iii. 和应用部门协商所清理数据,是否需要备份。Truncate操作不推荐备份,因为都是临时数据或不重要数据。

1. 若需要备份:truncate表主要是为了节省空间,因此推荐使用EXP的方法导到本地,然后ZIP的方式处理。此外还可以使用create table .. as ..的方法进行备份;

2. 不需要备份,则直接处理。

d) Truncate语法说明:

i. Truncate 表:

Truncate table table_name;

ii. Truncate 分区:

Alter Table table_name Truncate Partition partition_name;

e) Truncate操作,会把UNUSABLE的索引变成VALID。这点需要注意,目前规范中不允许把索引置为UNUSABLE。因此该风险理论上不存在,但需要注意。

f) Truncate操作,不需要维护相关依赖。

g) Truncate操作尽量安排在变更窗口执行,若是定时build数据清理,则结合应用处理时间及变更窗口,综合评估。

h) Truncate操作属于一般变更,在ITIL上提单即可。

2. 执行过程

a) 用应用账户登录数据库,SHOW USER检查是否连接到正确的schema。严禁使用sys、system等用户操作。

b) 请再次确认truncate所操作表名,分区名是否正确。

c) Truncate命令必须一条条粘贴,只有确认上一条命令执行成功后,方可执行下一条命令。

d) 查看过程若无报错,退出当前登录。若有报错,找出报错的地方,修改确认再执行,直至全部执行通过,最后退出当前登录。

3. 验证方案

a) 常规检查:@dbcheck

b) 检查表是否被truncate成功:@size

c) 同步库若建表,也需要执行 a) 和 b) 两个步骤。

五、 核心对象风险

核心对象严禁truncate操作,防止数据无法回滚。

六、 回退方案

Truncate操作回滚方案分为有备份和无备份两类:

有备份:直接从备份里恢复。

无备份:马上联系产品DBA,打开备库,然后从备库拖数据进行恢复。

七、 历史故障及教训

  1. da shang
    donate-alipay
               donate-weixin weixinpay

发表评论↓↓