تا قبل از اوراکل 12c، اطلاعات undo مربوط به جداول از نوع global temporary table، درundo tablespace پیش فرض بانک قرار می گیرد.
در اوراکل نسخه 12c، قابلیت TEMPORARY UNDO ارائه شد که با کمک آن، می توان اطلاعات undo این نوع از جداول را در temporary tablespace قرار داد.
این قابلیت دو کاربرد اساسی دارد:
1.در صورت استفاده از global temporary tableه، Redo و undo کمتری ایجاد می شود:
–without temporary undo
SQL> create global temporary table GTT as select * from sys.source$ where 1=2;
Table created.
SQL> insert into GTT select * from sys.source$ ;
346105 rows created.
SQL> select t.USED_UBLK from v$transaction t,v$session s where s.SADDR=t.SES_ADDR and s.AUDSID=sys_context(‘USERENV’,’SESSIONID’);
USED_UBLK
150
–with temporary undo
SQL> alter session set temp_undo_enabled=true;
Session altered.
SQL> create global temporary table GTT2 as select * from sys.source$ where 1=2;
Table created.
SQL> insert into GTT2 select * from sys.source$ ;
346105 rows created.
SQL> select t.USED_UBLK from v$transaction t,v$session s where s.SADDR=t.SES_ADDR and s.AUDSID=sys_context(‘USERENV’,’SESSIONID’);
USED_UBLK
1
2.امکان انجام عملیات DMLای بر روی global temporary table، در محیط read only(همانند محیط دیتاگارد) هم فراهم خواهد شد.
–in primary:
SQL> conn usef/abc
Connected.
SQL> alter system set temp_undo_enabled=true scope=both;
SQL> create global temporary table US_GTT on commit preserve rows as select * from v$datafile;
–in stb
SQL> conn usef/abc
Connected.
SQL> alter system set temp_undo_enabled=true scope=both;
SQL> insert into US_GTT select * from v$datafile;
4 rows created.