修改分区表关键字字段
Jun122012
耗时将近2周的时间,终于将25TB的图片利用SQLLDR全部加载到数据库,如何利用SQLLDR加载图片或二进制文件参考我之前的文章:http://www.dbdream.com.cn/2011/09/15/%E5%88%A9%E7%94%A8sql-load%E5%8A%A0%E8%BD%BDtxt%EF%BC%8Ccsv%E5%8F%8A%E5%9B%BE%E7%89%87%E5%88%B0%E6%95%B0%E6%8D%AE%E5%BA%93/
在修改分区表关键字字段的时候,遇到ORA-14402错误:
SQL> update images set identifier=substr(identifier,1,16) where identifier like '%0000'; update images set identifier=substr(identifier,1,16) where identifier like '%0000' * ERROR at line 1: ORA-14402: updating partition key column would cause a partition change
本案例是64位OEL5.7操作系统,ORACLE11 gR2,图片以11G的新特性SECUREFILE模式存储,有一张25TB的分区表,hash档号字段分区,目前8个分区,由于客户在提供数据的时候,档号字段有些错误的数据,需要改正,而修改分区关键字字段,可能会导致各分区的数据产生移动,这就需要打开表的行移动,由于行的迁移过程可能会消耗大量的时间和资源,ORACLE默认没有打开行移动,就不能直接修改分区关键字字段,所以抛出ORA-14402错误,这个问题的解决方法也很简单,打开表的行移动就可以了。
SQL> alter table images enable row movement; Table altered. SQL> set timing on SQL> update images set identifier=substr(identifier,1,16) where identifier like '%0000'; 7616 rows updated. Elapsed: 00:04:45.30 SQL> commit; Commit complete.
正常情况下,这个UPDATE过程应该很快的,由于发生了行的迁移,所以花费了将近5分钟的时间。