Круглый стол: Опыт использования недокументированных возможностей
Источник: Russian Oracle User Group
Дата публикации: 02.04.2010
Тема 1: Чтение данных незафиксированной транзакции.
--Подготовка: create table t ( i number ); insert into t values( 1 ); commit; --Сеанс 1: update t set i=100; --Сеанс 2: oradebug setospid <pid_of_lgwr> oradebug suspend --Сеанс 1: commit; --висит --Сеанс 3: select * from t; --видим незафиксированные данные --Сеанс 2: shutdown abort startup select * from t; --видим начальное значение
Тема 2: Увеличение кол-ва LIO при обновлении данных.
--Подготовка: create table t ( i number ); insert into t values( 1 ); commit; --Сеанс 1: update t set i=1; --Сеанс 2: set autotrace on select * from t; --видим кол-во LIO --Сеанс 1: update t set i=1; --Сеанс 2: select * from t; --кол-во LIO возросло --Сеанс 1: update t set i=1; --Сеанс 2: select * from t; --кол-во LIO возросло ...
Тема 3: Использование параметра _corrupted_rollback_segments.
--Подготовка: create table t ( i number ); insert into t values( 1 ); commit; --Сеанс 1: update t set i=100; --Сеанс 2: select XIDUSN, XIDSLOT, XIDSQN, UBAFIL, UBABLK from v$transaction ; select * from v$rollname where usn=<XIDUSN> ; select HEADER_FILE, HEADER_BLOCK from dba_segments where segment_name=<NAME> ; alter system dump datafile <HEADER_FILE> block <HEADER_BLOCK> ; alter system dump datafile <HEADER_FILE> block <UBABLK> ; alter system dump undo block <NAME> xid <XIDUSN> <XIDSLOT> <XIDSQN> ; !dd if=/u01/oradata/DB11/undotbs01.dbf of=/u01/block.dd bs=8192 skip=<UBABLK> count=1 !dd if=/dev/zero of=/u01/oradata/DB11/undotbs01.dbf bs=8192 seek=<UBABLK> count=1 conv=notrunc shutdown abort startup alter system set "_corrupted_rollback_segments=(<NAME>) scope=spfile; shutdown immediate startup select * from t;