阿里巴巴数据库操作手册 23-删除表

V1.0

Revision

Author/Modifier Comments

No.

Date

1.0 2012/2/15 张中靖

一、 目的

说明删除表的前置条件、操作步骤,降低对对应用造成的影响及避免故障

二、 适用范围

l 所有生产数据库

三、 风险评估

l 应用评估不完善,仍有部分应用访问该表,删除后应用报错

l 跨库依赖关系没有整理,删除表后导致其他库上的应用报错

l DW有访问该表,删除表前没有通知dw,导致dw任务失败

l 重命名表时没有对erosa/otter配置进行更新,导致数据同步失败

l 误操作,登陆到其他schema下,导致删除其他表。

l 删除前未进行备份,后续无法及时进行有效的恢复

四、 操作流程

1. 准备工作

a) 整理依赖该表的对象(存储过程、视图、同义词等)及授权情况:

注意:9i库的同义词依赖在dba_dependencies没有记录,需要查dba_synonyms.

在其他库上查找访问该表所在库的dblink,如果存在dblink:

根据dblink名字查跨库依赖该表的对象:

select * from dba_dependencies where REFERENCED_LINK_NAME = ‘dblink名‘ and referenced_name=‘删除的表‘;

检查跨库的同义词依赖:

select * from dba_synonyms where DB_LINK = ‘dblink名‘ and table_name=‘删除的表‘;

根据dblink名字查使用dblink的物化视图,再检查物化视图的定义,确认是否依赖该表:

select * from dba_mviews where MASTER_LINK=‘dblink名字‘;

b) 根据表和其依赖对象,配合开发整理应用,对应用进行改造、下线处理

c) 检查数据库上的定时任务,以确实是否有访问该表及其依赖对象。如果有,跟开发确认后停掉。

d) 在监控系统(全文索引、awr报告等)中对该表进行持续一周以上的监控,监控表对应的seq值变化情况,表gmt_create,gmt_modified等字段最大值变化情况

e) 步骤a、b实施后,如表有依赖对象,先将依赖对象进行提变更将表进行重命名,请开发配合监控应用一周以上.

f) 通知平台的人,需要配合停起otter,修改表同步配置。

2. 执行过程

1

2

2.1 表重命名步骤:

a) 先备份依赖对象的脚本:

备份存储过程脚本:

使用@source取出脚本

视图备份:

select text from dba_views where owner=’视图的owner’ and view_name=’视图名字’;

物化视图备份:

select dba_mviews from dba_mviews where owner=’物化视图的owner’ and mview_name=’物化视图名字’;

同义词备份:

select ‘create synonym ‘ || owner || ‘.’ || synonym_name || ‘ for ‘ || table_owner || ‘.’ || table_name || ‘;’ from dba_synonyms

where table_owner = ’schema名字‘ and table_name = ‘表名‘;

b) 根据上面备份的脚本,修改其中表名为新名字,整理存储过程、视图、物化视图重建脚本,触发器、同义词重编译脚本

c) 从erosa配置中去掉该表并重启erosa,监控otter同步队列,等待该表的变更消费完毕

d) 重命名表:表名前加上schema以防止误操作

@conn schema/passwd

先删除步骤a 查到的依赖对象:

drop synonym 同义词; –这个需要到同义词的owner下执行

drop procedure 存储过程名;

drop view 视图名;

drop materialized view 物化视图名;

drop package body 包名;

drop package包名;

drop trigger 触发器;

–有通过dblink依赖表的关联库上也需要执行以上操作

Alter table schema.表名 rename to 新表名;

@dbcheck –检查失效对象

2.2 删除表步骤

a) 从erosa、otter配置中去掉该表的同步

b) 导出该表进行备份,导出文件保留两周

导数参数文件:

cat exp.par

direct=y

grants=y

indexes=y

triggers=y

constraint=y

tables=(表名)

log=exp_表名_日期.log

file=exp_表名_日期.dmp

执行导出:

exp userid=schema/passwd parfile=exp.par

注:如果该表比较大,由于os限制,一个dmp文件可能无法存放所有数据,可以修改上面的参数文件:

cat exp.par

direct=y

grants=y

indexes=y

triggers=y

constraint=y

tables=(新表名)

log=exp_表名_日期.log

filesize=xxxxm –这里指定文件大小,比os限制小点

file=exp_表名_日期_01.dmp, exp_表名_日期_02.dmp,…. –这里用多个文件

c) 删除表

drop table 新表名;

3. 验证方案

a) 在表所在库及其dblink关联库检查失效对象

b) 检查erosa、otter配置

c) 通知开发检查应用

五、 核心对象风险

对于核心表,关联的应用比其他表要多,风险主要在排查应用上,一般情况下核心表极少有删除需求。

六、 回退方案

上面删除表的过程中,回退可能出现在两个地方:

1. 表重命名的回退:

a) 恢复原表名:

@conn schema/passwd

alter schema 新表名 rename to 旧表名表名;

重编译触发器、同义词等

使用备份脚本重建依赖对象(存储过程、视图、物化视图等)

@dbcheck –检查失效对象

b) 根据应用需求配置数据同步

c) 通知开发检查应用

2. 表删除的回退:

a) 导入备份数据:

cat imp.par:

ignore=n

grants=y

indexes=y

constraint=y

commit=y

tables=(表名)

log=imp_表名_日期.log

file=exp_表名_日期.dmp

imp userid=schema/password parfile=imp.par

b) 恢复原表名

@conn schema/passwd

alter table 新表名 rename to 旧表名;

重编译触发器等

使用备份脚本重建依赖对象(存储过程、视图、物化视图、同义词等)

@dbcheck –检查失效对象

c) 根据应用需求配置数据同步

d) 通知开发检查应用

七、 历史故障及教训

无。

  1. da shang
    donate-alipay
               donate-weixin weixinpay

发表评论↓↓