#언두란 무엇인가?

리두언두
{code:noneborderStyle=solid}
장애가 발생한 경우 트랜잭션을 '재생' 하기 위해 리두 로그 파일에 기록하는 정보
{code}
{code:noneborderStyle=solid}
트랜잭션을 리버스 또는 롤백하기 위해 언두 세그먼트에 기록하는 정보
{code}

변경이 일어나기 이전 상태로 데이터를 되돌릴 수 있도록, 데이터 변경 시 데이터베이스가 생성하는 정보

변경언두비고
{code:noneborderStyle=solid}INSERT{code}{code:noneborderStyle=solid}DELETE{code}{code:noneborderStyle=solid}삭제할 레코드의 ROWID{code}
{code:noneborderStyle=solid}DELETE{code}{code:noneborderStyle=solid}INSERT{code}{code:noneborderStyle=solid}생성할 레코드의 전체정보{code}
{code:noneborderStyle=solid}UPDATE{code}{code:noneborderStyle=solid}UPDATE{code}{code:noneborderStyle=solid}원복할 레코드의 변경정보{code}
Demo#1 (논리적인 복원1)
{code:sqlborderStyle=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















--
0 recursive calls
0 db block gets
0 consistent gets
0 physical reads
0 redo size
1343 bytes sent via SQL*Net to client
508 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
0 rows processed
– I/O 없다

SQL> insert into t select * from all_objects;

61504 rows created.

SQL> rollback;

Rollback complete.

SQL> select * from t;

no rows selected

Statistics















--
0 recursive calls
0 db block gets
916 consistent gets
0 physical reads
0 redo size
1343 bytes sent via SQL*Net to client
508 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
0 rows processed
– I/O 있다 (916)

|
||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>

|