OGG早上停了,看了log报错:
ORA-14402: updating partition key column would cause a partition change。
ORA-14402: 更新分区关键字列将导致分区的更改
网上搜索,总结一下:
1、默认情况下,oracle的分区表对于分区字段是不允许进行update操作的,
如果有对分区字段行进update,就会报错ORA-14402。
2、解决办法:开启表的行转移功能
alter table XX enable row movement
alter table XX disable row movement(修改回来的语句)
这样在update以后,会在老分区删除数据,新分区插入数据。
3、enable row movement会改变rowid。
扩展rowid
扩展rowid是oracle8i之后的版本中引入的,其结构如下:
数据对象号+相对文件号+块号+行号
存储(32bit) (10bit)(22bit)(16bit)=10B
显示 6 3 6 3
一个扩展rowid需要10B的空间存储用18个字符显示其组成如下
1、数据对象号:唯一标识数据库对象的数据对象号,被赋予每一个对象
2、相对文件号:对同一个表空间中每一个文件都是唯一的,标识同一个表空间中的不同数据文件
3、块号:为相对文件中包含数据行的数据块的位置
4、行号:标识了块头中行目录的位置
扩展rowid的显示是用一种64位的编码,使用的显示字符为A~Z a~z 0~9和+、/总共64个字符
oracle使用rowid定位数据行的机制:
1、使用数据对象号找到表空间
2、使用相对文件号找到存储的数据文件
3、使用块号找到存储数据行的数据块
4、使用行号找到行目录项,然后使用行目录项就可以定位数据行的起始地址