ORACLE 修改分区表存储参数freelists后偶然性丢失数据
环境:
ORACLE 9.2.0.8,AIX 5.3ML5 64bit;
表A是个分区表,共存储大约2千万条记录;表所在的表空间未启用ASSM,为Manual 模式;
场景说明:
由于对该表的操作非常频繁,出现在该表上的I/O等待;为了增强并发性,修改表的存储参数:
alter table A storage (freelists 10 );
修改后,在系统高峰时期,对该表的Insert操作会出现数据丢失。客户端执行Insert语句并commit成功,但实际数据并没有保存到的数据库中。
系统的Alert.log中并无任务警告或错误。
将freelists参数改为1后,症状消失。
原因:
search 了meatlink,没有相关症状的记录。
现在还不清楚这个现象是客户端bug导致还是数据库bug导致,但将存储参数改回原值之后,系统的确不再丢失数据。
经验:
高并发表建议使用ASSM+Manual的tablespace;
建表后,建议不要修改存储参数;表的存储参数最好在建表时指定;
指定合适的freelists参数对频繁操作的表的性能优化非常明显;