리두 | 언두 | ||
---|---|---|---|
{code:none | borderStyle=solid} 장애가 발생한 경우 트랜잭션을 '재생' 하기 위해 리두 로그 파일에 기록하는 정보 {code} | {code:none | borderStyle=solid} 트랜잭션을 리버스 또는 롤백하기 위해 언두 세그먼트에 기록하는 정보 {code} |
변경이 일어나기 이전 상태로 데이터를 되돌릴 수 있도록, 데이터 변경 시 데이터베이스가 생성하는 정보
변경 | 언두 | 비고 | |||
---|---|---|---|---|---|
{code:none | borderStyle=solid}INSERT{code} | {code:none | borderStyle=solid}DELETE{code} | {code:none | borderStyle=solid}삭제할 레코드의 ROWID{code} |
{code:none | borderStyle=solid}DELETE{code} | {code:none | borderStyle=solid}INSERT{code} | {code:none | borderStyle=solid}생성할 레코드의 전체정보{code} |
{code:none | borderStyle=solid}UPDATE{code} | {code:none | borderStyle=solid}UPDATE{code} | {code:none | borderStyle=solid}원복할 레코드의 변경정보{code} |
Demo#1 (논리적인 복원1) | |
---|---|
{code:sql | borderStyle=solid} -- 새로운 익스텐트(BLOCK)가 할당 된 INSERT 문을 롤백 할 때, 단지 DELETE 할 뿐이며, 익스텐트(BLOCK)을 지우거나 하지 않음 SQL> create table t 2 as 3 select * 4 from all_objects 5 where 1 = 0; |
Table created.
SQL> select * from t;
no rows selected
SQL> set autotrace traceonly statistics
SQL> select * from t;
no rows selected
Statistics
SQL> insert into t select * from all_objects;
61504 rows created.
SQL> rollback;
Rollback complete.
SQL> select * from t;
no rows selected
Statistics
|
||Demo#2 (논리적인 복원2)||
|{code:sql|borderStyle=solid}
-- 트랜잭션에 의해 생성된 EXTENT 까지 ROLLBACK 되지 않음
SQL> create table t ( x int ) segment creation deferred;
Table created.
SQL> select extent_id, bytes, blocks from user_extents
2 where segment_name = 'T'
3 order by extent_id;
no rows selected
SQL> insert into t ( x ) values ( 1 );
1 row created.
SQL> rollback;
Rollback complete.
SQL> select extent_id, bytes, blocks from user_extents
2 where segment_name = 'T'
3 order by extent_id;
EXTENT_ID BYTES BLOCKS
---------- ---------- ----------
0 65536 8
SQL>
|