熊哥的ODU从302开始加了一个unload delete的功能(只需要把unload_deleted设为yes就可以了),用于在"数据被意外DELETE了,然后日志也被覆盖了,闪回也不行了"了的情况下恢复被delete掉的数据。
有没有朋友深究过这里恢复的原理是什么?
其实在oracle里,某一行被删掉后,这一行的数据并没有丢,oracle这里只是在行头累加了一个0x10的标记。
这就是ODU的unload delete的原理。
行头的row flag有这样一些值:
#define KDRHFK 0x80 Cluster Key
#define KDRHFC 0x40 Clustered table member
#define KDRHFH 0x20 Head piece of row
#define KDRHFD 0x10 Deleted row
#define KDRHFF 0x08 First data piece|
#define KDRHFL 0x04 Last data piece
#define KDRHFP 0x02 First column continues from Previous
piece
#define KDRHFN 0x01 Last column continues in Next piece
A hexadecimal dump of a data block showing an entire row has a row flag value of "
这里的含义是一目了然的,2c=0x20+0x08+0x04
Leave a comment