案例:
某一子公司数据库要迁移几个表到其他表空间,告诉新手DBA做好准备工作,先建立好表空间,预判要迁移的数据量大小,关注约束,联系客户停机等等,最重要的做好备份。
一切按计划执行,完毕后,他告诉我,OK了,数据迁移完毕,过程中提示索引失效,但rebuild就好了,当时也没在意。那好吧,下班回家。结果在路上,子公司的人打电话过来,系统变得非常非常慢,慢的离谱。回到公司连接数据库,发现,迁移的表索引和主键全部丢失,百万纪录的表,系统不慢才怪。赶紧增加索引,系统恢复正常。查找索引对象表,看有没有异常,发现,丢失的索引都在system表空间下,疑惑中,再看属主,都在迁移表后缀名+bak的表中。询问那个新手DBA,我去,这兄弟听话,不但做了冷备,别出心裁的,把要迁移的表都rename成带bak后缀的表了。难怪。他疑惑,分析过程如下:
1、rename表的时候,原表中所有的属性对象均还依附原表,并为做任何改变。只是系统表的表名发生变化。
2、用exp迁移原表,原表中的索引和rename表的索引同名,导致索引失败,也就是他迁移时看到的内容。
3、rebuild成功了,但rebuild的是rename表的内容,而不是迁移表的内容。
4、因为要迁移到新的表空间,过程中,有quota 0on 原表空间的操作,所以,rebuild索引的结果是到了system表空间。
画蛇添足净捣乱。