Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Redo Internals Julian Dyke Independent Consultant Web Version © 2005 Julian Dyke juliandyke.com.

Similar presentations


Presentation on theme: "1 Redo Internals Julian Dyke Independent Consultant Web Version © 2005 Julian Dyke juliandyke.com."— Presentation transcript:

1 1 Redo Internals Julian Dyke Independent Consultant Web Version © 2005 Julian Dyke juliandyke.com

2 © 2005 Julian Dyke juliandyke.com 2 Agenda 1.What is Redo? 2.Redo Records 3.Change Vectors 4.Row Operations 5.Index Operations 6.Other Redo Operations 7.Direct Loads / NOLOGGING 8.Transaction Auditing 9.Supplemental Logging

3 © 2005 Julian Dyke juliandyke.com 3 What is Redo?  Redo logs contain a history of all changes made to the database  Redo log files are used by  Recovery (instance and media)  Log Miner  Oracle Streams  Every change made to the database is  written to the redo log buffer before it is written to the data block buffer  written to the redo log file before it is written to the data file  The redo log buffer is flushed to the redo log file when a COMMIT is issued

4 © 2005 Julian Dyke juliandyke.com 4 What is Redo?  Redo log files  Include all changes made by DML statements  INSERT  UPDATE  DELETE  SELECT FOR UPDATE  Do not include DML statement text  Include all changes made to dictionary objects by DDL statements  Include DDL statement text (9.0.1 and above)  Include all changes made by recursive statements

5 © 2005 Julian Dyke juliandyke.com 5 Buffers and Writers Redo Log Buffer Redo Log File Data File Data Block Buffer LGWRDBWR

6 © 2005 Julian Dyke juliandyke.com 6 Arch 1 Logging and Archiving Archive Log FilesRedo Log Files Arch 2 Arch 3 Arch 4 Arch 5 Arch 6 LGWR Group 1 Group 3 Group 2 ARCH

7 © 2005 Julian Dyke juliandyke.com 7 Redo Log Files  Redo log uses operating system block size  usually 512 bytes  format dependent on  operating system  Oracle version  Each redo log consists of  header  redo records  Redo log is written sequentially Block 0Block 1Block 2 Redo Record 1 File Header Redo Header Block 3 Redo Records 2 & 3 Block 4 Redo Records 3 & 4 Block M Redo Record N...

8 © 2005 Julian Dyke juliandyke.com 8 Redo Records  A redo record consists of  redo record header  one or more change vectors  Each redo record contains undo and redo for an atomic change  Some changes do not require undo Redo Record Header Change #1 Change #2 Change #3 Change #N.....

9 © 2005 Julian Dyke juliandyke.com 9 Redo Record Header  Every redo record has a header REDO RECORD - Thread:1 RBA: 0x cf.0010 LEN: 0x019c VLD: 0x01 SCN: 0x eb1279 SUBSCN: 1 05/08/ :44:12  Fields include ThreadThread Number RBARedo Byte Address LENLength of record in bytes SCNSystem Change Number Date and Time of Change

10 © 2005 Julian Dyke juliandyke.com 10 Redo Byte Address (RBA)  Every redo record has a Redo Byte Address (RBA) e.g. RBA: 0x cf.0010  RBA is 10 bytes in length  RBA identifies start of redo record  Fields are  Log sequence number (0x3666)  Block number within redo log (0xcf)  Byte number within block (0x10)

11 © 2005 Julian Dyke juliandyke.com 11 System Change Number (SCN)  Also called System Commit Number  Defines committed version of database  SCN is 6 bytes in length  Contains  Wrap (2 bytes) e.g 0000  Base (4 bytes) e.g 0ac67cc3  Base is incremented for each new SCN  Saved in redo record header  RAC databases maintain a global SCN  Distributed transactions use highest SCN SCN:0x0000.0ac67cc3

12 © 2005 Julian Dyke juliandyke.com 12 Change Vector  Describes a change to a single data block  Can apply to  undo headers  undo blocks  data segment headers  data blocks  Is created in PGA before the data block buffer is modified  Consists of  header  array of change record lengths  array of change records

13 © 2005 Julian Dyke juliandyke.com 13 Change Vector  For example Change Record 1 Change Record 2 Change Record 3 Change Record 4 Change Record 5 Change Record 6 Change Record 7 Length Vector Change Header

14 © 2005 Julian Dyke juliandyke.com 14 Change Vector Header  Every change vector has a header e.g. CHANGE #2 TYP:0 CLS: 1 AFN:5 DBA:0x0144d023 SCN:0x0000.0ac67cce SEQ: 4 OP:11.5  Fields include CHANGEChange number TYPChange type CLSClass AFNAbsolute File Number DBARelative Database Block Address SCNSystem Change Number SEQSequence Number (relative to SCN) OPOperation Code

15 © 2005 Julian Dyke juliandyke.com 15 Block Classes  Class in change header is equivalent to X$BH.CLASS ClassDescription 1Data Block 2Sort Block 3Deferred Undo Segment Blocks 4Segment Header Block (Table) 5Deferred Undo Segment Header Blocks 6Free List Blocks 7Extent Map Blocks 8Space Management Bitmap Blocks 9Space Management Index Blocks 10Unused rSegment Header for Undo Segment r rData Blocks for Undo Segment r  e.g. 11 is System Rollback Segment Header

16 © 2005 Julian Dyke juliandyke.com 16 Database Block Address (DBA)  Every database block has a Database Block Address (DBA) e.g. DBA:0x0144d023  DBA is 4 bytes in length  Fields are  Upper 10 bits represent relative file number  Lower 22 bits represent block number  For example DECLARE l_dba NUMBER := TO_NUMBER ('0144D023','XXXXXXXX'); l_file NUMBER := DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE (l_dba); l_blockNUMBER := DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK (l_dba); BEGIN DBMS_OUTPUT.PUT_LINE ('File : '||l_file); DBMS_OUTPUT.PUT_LINE ('Block : '||l_block); END;

17 © 2005 Julian Dyke juliandyke.com 17 Operation Codes  Each change is represented by an operation in the redo log  There are over 150 different operations  Each operation has an layer code and a sub code e.g  Layers include LayerDescription 4Block Cleanout 5Transaction Management 10Index Operations 11Row Operations 13Segment Management 14Extent Management 17Tablespace Management LayerDescription 18Block Image (Hot backups) 19Direct Loader 20Compatibility Segment 22Locally Managed Tablespaces 23Block Writes 24DDL Statements

18 © 2005 Julian Dyke juliandyke.com 18 Transactions  The first DML statement in a session creates a transaction  Allocates an undo segment  Creates a 5.2 change to update transaction table in undo segment header CHANGE #1 TYP:0 CLS:25 AFN:3 DBA:0x00c0012e SCN:0x0000.0ac86eb8 SEQ: 1 OP:5.2 ktudh redo: slt: 0x0010 sqn: 0x a flg: 0x0012 siz: 96 fbi: 0 uba: 0x00c04d20.234b.0e pxid: 0x  A commit (or rollback) ends the transaction  A 5.4 change is created for a commit  Rollbacks apply all undo for the transaction followed by a commit CHANGE #1 TYP:0 CLS:25 AFN:3 DBA:0x00c0012e SCN:0x0000.0ac86ebf SEQ: 1 OP:5.4 ktucm redo: slt: 0x0010 sqn: 0x a srt: 0 sta: 9 flg: 0x0

19 © 2005 Julian Dyke juliandyke.com 19 Transaction ID (XID)  Every transaction has an XID xid: 0x e b  XID is 8 bytes in length  Contains  Undo segment number (USN) of transaction (0x0004)  Undo segment header transaction table slot (0x00e)  Sequence number (wrap) (0x b)

20 © 2005 Julian Dyke juliandyke.com 20 Undo Block Address (UBA)  Address of change in undo block uba: 0x00c01f  UBA is 7 bytes in length  Contains  DBA of undo block (0x00c01f17)  Sequence number (2758)  Record number in block (4)

21 © 2005 Julian Dyke juliandyke.com 21 UPDATE t1 SET c2 = 101 WHERE c1 = 1; UPDATE t1 SET c2 = 201 WHERE c1 = 2; COMMIT; Transactions Statements Undo Header Undo Block Data Block SLOTC1C SLOT 0 Undo Slot 0 c2 = 100 Undo Slot 1 c2 = 200 STATUS Redo Logs Undo Header 5.2 Undo Slot 0 c2 = Redo Slot 0 c2 = Undo Slot 1 c2 = Redo Slot 1 c2 = Commit 5.4

22 © 2005 Julian Dyke juliandyke.com 22 Physiological Logging  Oracle normally uses physiological logging  Only changes made to each block are recorded StatementUndoRedo INSERT INTO t1 VALUES (1, 'ABC'); Delete row 1Row 1 c1 := 1 c2 := 'ABC' UPDATE t1 SET c2 = 'DEF' WHERE c1 = 1; Row 1 c2 := 'ABC' Row 1 c2 := 'DEF' DELETE FROM t1 WHERE c1 = 1; Row 1 c1 := 1 c2 := 'DEF' Delete row 1 SELECT c2 FROM t1 WHERE c1 = 1 FOR UPDATE; Unlock row 1Lock row 1  Note that INSERT statements generate minimal undo

23 © 2005 Julian Dyke juliandyke.com 23 Redo Record Example  This is an example of a redo log dump for a single row update UPDATE t1 SET c2 = 20 WHERE c1 = 1;  The previous value of column c2 for this row was 10  The redo record starts with a header REDO RECORD - Thread:1 RBA: 0x003e cc LEN: 0x00f8 VLD: 0x01 SCN: 0x0000.0ac73691 SUBSCN: 1 06/26/ :40:14  This redo record is 248 (0xF8) bytes in length

24 © 2005 Julian Dyke juliandyke.com 24 Redo Record Example (Continued)  Change 1 updates the undo block CHANGE #1 TYP:0 CLS:26 AFN:3 DBA:0x00c04ab7 SCN:0x0000.0ac73690 SEQ: 2 OP:5.1 ktudb redo: siz: 104 spc: 1860 flg: 0x0022 seq: 0x233f rec: 0x02 xid: 0x b b ktubu redo: slt: 11 rci: 1 opc: 11.1 objn: objd: tsn: 4 Undo type: Regular undo Undo type: Last buffer split: No Tablespace Undo: No 0x KDO undo record: KTB Redo op: 0x02 ver: 0x01 op: C uba: 0x00c04ab7.233f.01 KDO Op code: URP row dependencies Disabled xtype: XA bdba: 0x0144d022 hdba: 0x0144d021 itli: 1 ispac: 0 maxfr: 1177 tabn: 0 slot: 2(0x2) flag: 0x2c lock: 0 ckix: 0 ncol: 2 nnew: 1 size: 0 col 1: [ 2] c1 0b

25 © 2005 Julian Dyke juliandyke.com 25 Redo Record Example (Continued)  Change 2 updates the data block CHANGE #2 TYP:0 CLS: 1 AFN:5 DBA:0x0144d022 SCN:0x0000.0ac73690 SEQ: 1 OP:11.5 KTB Redo op: 0x02 ver: 0x01 op: C uba: 0x00c04ab7.233f.02 KDO Op code: URP row dependencies Disabled xtype: XA bdba: 0x0144d022 hdba: 0x0144d021 itli: 1 ispac: 0 maxfr: 1177 tabn: 0 slot: 2(0x2) flag: 0x2c lock: 1 ckix: 0 ncol: 2 nnew: 1 size: 0 col 1: [ 2] c1 15

26 © 2005 Julian Dyke juliandyke.com 26 Row Operations  Row operations generate layer 11 redo  Opcodes include OpcodeMnemonicDescription 11.2IRPInsert Single Row 11.3DRPDelete Single Row 11.4LKRLock Row 11.5URPUpdate Row 11.6ORPChained Row 11.9CKICluster key index 11.10SKLSet cluster key pointers 11.11QMIInsert Multiple Rows 11.12QMDDelete Multiple Rows

27 © 2005 Julian Dyke juliandyke.com 27 Single Row Insert Redo Statements COMMIT 5.4 REDO #3 UNDO # UNDO #2 REDO # REDO #1 UNDO #1 HEADER COMMIT; -- Statement #1 INSERT INTO t1 VALUES (1); -- Statement #2 INSERT INTO t1 VALUES (2); -- Statement #3 INSERT INTO t1 VALUES (3);

28 © 2005 Julian Dyke juliandyke.com 28 Multi Row Insert Redo Statements COMMIT 5.4 UNDO #1 HEADER COMMIT; -- Statement #1 INSERT INTO t1 SELECT * FROM t2; REDO #

29 © 2005 Julian Dyke juliandyke.com 29 Single Row Update Redo Statements COMMIT 5.4 REDO #3 UNDO # UNDO #2 REDO # REDO #1 UNDO #1 HEADER COMMIT; -- Statement #1 UPDATE t1 SET c2 = c2 + 1 WHERE c1 = 1; -- Statement #2 UPDATE t1 SET c2 = c2 + 1 WHERE c1 = 2; -- Statement #3 UPDATE t1 SET c2 = c2 + 1 WHERE c1 = 3;

30 © 2005 Julian Dyke juliandyke.com 30 Multi Row Update Redo Statements COMMIT 5.4 REDO #3 UNDO # UNDO #2 REDO # REDO #1 UNDO #1 HEADER T1 contains 3 rows UPDATE t1 SET c2 = c2 + 1; COMMIT;

31 © 2005 Julian Dyke juliandyke.com 31 Single Row Delete Redo Statements COMMIT 5.4 REDO #3 UNDO # UNDO #2 REDO # REDO #1 UNDO #1 HEADER COMMIT; -- Statement #1 DELETE FROM t1 WHERE c1 = 1; -- Statement #2 DELETE FROM t1 WHERE c1 = 2; -- Statement #3 DELETE FROM t1 WHERE c1 = 3;

32 © 2005 Julian Dyke juliandyke.com 32 Multi Row Delete Redo Statements COMMIT 5.4 REDO #3 UNDO # UNDO #2 REDO # REDO #1 UNDO #1 HEADER COMMIT; -- T1 contains 3 rows DELETE FROM t1;

33 © 2005 Julian Dyke juliandyke.com 33 Single Row Select For Update Redo Statements COMMIT 5.4 UNDO #2 REDO # REDO #1 UNDO #1 HEADER COMMIT; -- Statement #1 SELECT c2 FROM t1 WHERE c1 = 1 FOR UPDATE; -- Statement #2 UPDATE t1 SET c2 = c2 + 1 WHERE c1 = 1;

34 © 2005 Julian Dyke juliandyke.com 34 Multi Row Select For Update Redo Statements COMMIT 5.4 REDO #3 UNDO # UNDO #2 REDO # REDO #1 UNDO #1 HEADER COMMIT; -- T1 contains 3 rows SELECT c2 FROM t1 FOR UPDATE;

35 © 2005 Julian Dyke juliandyke.com 35 Rollback Redo Statements COMMIT 5.4 REDO #3 UNDO # UNDO #2 REDO # REDO #1 UNDO #1 HEADER Statement #1 INSERT INTO t1 VALUES (1); ROLLBACK; -- Statement #2 INSERT INTO t1 VALUES (2); REDO #4 UNDO #

36 © 2005 Julian Dyke juliandyke.com 36 Global Temporary Tables Redo Statements COMMIT 5.4 REDO #3 UNDO # UNDO #2 REDO # UNDO #1 HEADER REDO # COMMIT; -- Statement #1 INSERT INTO t1 VALUES (1); -- Statement #2 INSERT INTO t1 VALUES (2); -- Statement #3 INSERT INTO t1 VALUES (3);

37 © 2005 Julian Dyke juliandyke.com 37 Index Operations  Index operations generate layer 10 redo  Opcodes include OpcodeDescription 10.2Insert Leaf Row 10.3Purge Leaf Row 10.4Delete Leaf Row 10.5Restore Leaf Log 10.6Lock block 10.7Clear block opcode on commit 10.8Initialise header 10.9Apply XAT do to ITL Set leaf block next pointer 10.11Set leaf block previous pointer 10.12Initialize root block after split OpcodeDescription 10.13Make leaf block empty 10.15Insert branch row 10.16Purge branch row 10.18Update key data in row 10.19Clear split flag 10.21Undo branch operation 10.22Undo leaf operation 10.24Shrink ITL 10.30Update nonkey value 10.31Create/Load Index 10.34Make leaf block empty

38 © 2005 Julian Dyke juliandyke.com 38 Index Insert Redo Statements COMMIT 5.4 REDO #3 UNDO # UNDO #2 REDO # REDO #1 UNDO #1 HEADER Insert into table t1 INSERT INTO t1 VALUES (1,10); COMMIT; -- Insert into index i1 -- Insert into index i2

39 © 2005 Julian Dyke juliandyke.com 39 Index Updates Redo Statements COMMIT 5.4 REDO #3 UNDO # UNDO #2 REDO # REDO #1 UNDO #1 HEADER Update table t1 UPDATE t1 SET c1 = 2 WHERE c1 = 1; COMMIT; -- Delete from index i1 -- Insert into index i1

40 © 2005 Julian Dyke juliandyke.com 40 Index Deletes Redo Statements COMMIT 5.4 REDO #3 UNDO # UNDO #2 REDO # REDO #1 UNDO #1 HEADER Delete from table t1 DELETE FROM t1 WHERE c1 = 1; COMMIT; -- Delete from index i1 -- Delete from index i2

41 © 2005 Julian Dyke juliandyke.com 41 Conditional Index Updates Update table row UNDO #1 5.1 REDO #111.5 UNDO #2 5.1 REDO #210.4 UNDO #3 5.1 REDO #310.2 UNDO #1 5.1 REDO #111.5 UNDO #1 5.1 REDO #111.5 UNDO #2 5.1 REDO #210.4 UNDO #1 5.1 REDO #111.5 UNDO #3 5.1 REDO #310.2 Delete index row Insert index row UPDATE t1 SET c1 = 2 WHERE c1 = 1; UPDATE t1 SET c1 = NULL WHERE c1 = 1; UPDATE t1 SET c1 = 1 WHERE c1 IS NULL UPDATE t1 SET c1 = 1 WHERE c1 = 1 Before 1 After2 Before 1 After1 Before 1 AfterNULL Before NULL After1

42 © 2005 Julian Dyke juliandyke.com 42 Block Cleanout  Occurs when ITL on data block has not been updated when changes were committed REDO RECORD - Thread:1 RBA: 0x ac LEN: 0x003c VLD: 0x01 SCN: 0x eb3219 SUBSCN: 1 05/08/ :53:41 CHANGE #1 TYP:2 CLS: 1 AFN:5 DBA:0x0142fca2 SCN:0x eb3201 SEQ: 1 OP:4.1 Block cleanout record, scn: 0x eb3219 ver: 0x01 opt: 0x02, entries follow... itli: 2 flg: 2 scn: 0x eb3201  Block Cleanout redo  Can be generated by SELECT statements  Opcode 4.1  requires 60 byte redo record for each block

43 © 2005 Julian Dyke juliandyke.com 43 Backups  If hot backups are in use, when backup mode is enabled REDO RECORD - Thread:1 RBA: 0x003e3b LEN: 0x0818 VLD: 0x01 SCN: 0x0000.0ac84345 SUBSCN: 1 06/27/ :06:06 CHANGE #1 TYP:3 CLS: 1 AFN:5 DBA:0x014343c2 SCN:0x0000.0ac8433d SEQ: 1 OP:18.1 Log block image redo entry ALTER TABLESPACE BEGIN BACKUP;  A block image is written to the redo log for each block that is modified (opcode 18.1)  When backup mode is disabled REDO RECORD - Thread:1 RBA: 0x003e3b c.0010 LEN: 0x0038 VLD: 0x01 SCN: 0x0000.0ac84347 SUBSCN: 1 06/27/ :06:09 CHANGE #1 MEDIA RECOVERY MARKER SCN:0x SEQ: 0 OP:17.1 End backup marker - file:5 scn: 0x0000.0ac84341 ALTER TABLESPACE END BACKUP;  an end backup marker is written to redo log (17.1)

44 © 2005 Julian Dyke juliandyke.com 44 Block Writes  In Oracle and above blocks written from buffer cache to disk by DBWR are recorded in redo logs  Supports fast recovery REDO RECORD - Thread:1 RBA: 0x003e LEN: 0x2948 VLD: 0x02 SCN: 0x0000.0ac8289c SUBSCN: 1 06/27/ :19:44 CHANGE #1 MEDIA RECOVERY MARKER SCN:0x SEQ: 0 OP:23.1 Block Written - afn: 5 rdba: 0x014238ad(5,145581) scn: 0x0000.0ac82889 seq: 0x07 flg:0x04 Block Written - afn: 5 rdba: 0x014238ac(5,145580) scn: 0x0000.0ac82889 seq: 0x08 flg:0x04 Block Written - afn: 5 rdba: 0x014238ab(5,145579) scn: 0x0000.0ac82889 seq: 0x07 flg:0x04 Block Written - afn: 5 rdba: 0x014238aa(5,145578) scn: 0x0000.0ac82889 seq: 0x07 flg:0x04  Each block record is 32 bytes in length (OS dependent)

45 © 2005 Julian Dyke juliandyke.com 45 Direct Loads  If archiving is enabled then direct load blocks are written to redo  In Oracle 9.2 each block requires a 19.1 and 24.2 change REDO RECORD - Thread:1 RBA: 0x003e LEN: 0x0848 VLD: 0x01 SCN: 0x0000.0ac83828 SUBSCN: 1 06/27/ :21:50 CHANGE #1 TYP:1 CLS: 1 AFN:5 DBA:0x0142b962 SCN:0x0000.0ac83826 SEQ: 1 OP:19.1 Direct Loader block redo entry Block header dump: 0x0e5c0000 Object id on Block? Y seg/obj: 0x4bd9 csc: 0x00.ac83825 itc: 3 flg: - typ: 1 – DATA fsl: 0 fnx: 0x0 ver: 0x01 Itl Xid Uba Flag Lck Scn/Fsc# 0x01 0x x fsc 0x x02 0x x fsc 0x x03 0x x fsc 0x Block dump follows CHANGE #2 MEDIA RECOVERY MARKER SCN:0x SEQ: 0 OP:24.2

46 © 2005 Julian Dyke juliandyke.com 46 NOLOGGING  Redo generation can be disabled for some operations using  UNRECOVERABLE (Oracle 7)  NOLOGGING (Oracle 8.0 and above)  Can be enabled for specific tables and indexes at  object level  statement level  The following redo log entry indicates a range of blocks which cannot be recovered REDO RECORD - Thread:1 RBA: 0x e0 LEN: 0x0028 VLD: 0x01 SCN: 0x ebaeec SUBSCN: 1 05/09/ :16:07 CHANGE #1 INVLD AFN:5 DBA:0x0142ff03 BLKS:0x001f SCN:0x ebaeec SEQ: 1 OP:19.2 Direct Loader invalidate block range redo entry

47 © 2005 Julian Dyke juliandyke.com 47 NOLOGGING  These tests were performed on an ARCHIVELOG database using a row table OperationLOGGINGNOLOGGING CREATE TABLE AS SELECT ALTER TABLE MOVE INSERT /*+ APPEND */ CREATE MATERIALIZED VIEW CREATE INDEX ALTER INDEX REBUILD ALTER INDEX REBUILD ONLINE SQL*Loader (Direct) Online Reorganization  Redo size in bytes  Median size from 3 runs

48 © 2005 Julian Dyke juliandyke.com 48 FORCE NOLOGGING  Objects created using NOLOGGING cannot be recovered  Backup should be taken immediately affect using NOLOGGING  In Oracle 9.2 and above NOLOGGING can be disabled using STARTUP MOUNT ALTER DATABASE FORCE LOGGING;  or ALTER TABLESPACE FORCE LOGGING;

49 © 2005 Julian Dyke juliandyke.com 49 Transaction Auditing  Introduced in Oracle to support Log Miner  Enabled by default  Each session includes 5.19 change vector CHANGE #4 MEDIA RECOVERY MARKER SCN:0x SEQ: 0 OP:5.19 session number = 9 serial number = 5 current username = US01 login username = US01 client info = OS username = BMC.COM\jdyke Machine name = BMC.COM\JDYKE-ABI-EU OS terminal = JDYKE-ABI-EU OS process id = 1784:1724 OS program name = sqlplusw.exe transaction name =  Last change of first redo record in session  Record length is variable

50 © 2005 Julian Dyke juliandyke.com 50 Transaction Auditing  Each subsequent transaction includes 5.20 change vector CHANGE #4 MEDIA RECOVERY MARKER SCN:0x SEQ: 0 OP:5.20 session number = 9 serial number = 5 transaction name =  Last change of second and subsequent redo records in session  Record length is variable  If LogMiner is not in use, transaction auditing can be disabled by setting initialisation parameter TRANSACTION_AUDITING = FALSE;

51 © 2005 Julian Dyke juliandyke.com 51 Supplemental Logging  Introduced in Oracle to enable LogMiner to support  Chained rows  Cluster keys  Extended in Oracle 9.2 to support Oracle Streams  Used with logical standby databases  ROWIDs may differ therefore cannot be used  Allows updated rows to be identified logically  Can be specified at  Database level  Table level  Enabled by default in 9.0.1; disabled by default in 9.2.0

52 © 2005 Julian Dyke juliandyke.com 52 Supplemental Logging  At database level can enable  minimal supplemental logging ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS; ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE KEY) COLUMNS; ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS; ALTER DATABASE DROP SUPPLEMENTAL LOG DATA;  Disabled using  Oracle selects a subset of columns to include in the redo log  Not necessarily unique ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;  identification key supplemental logging

53 © 2005 Julian Dyke juliandyke.com 53 Supplemental Logging  At table level columns must be specified  If ALWAYS keyword is specified, all specified columns will be logged for every update ALTER TABLE table1 ADD SUPPLEMENTAL LOG GROUP group1 (c2,c3) ALWAYS; ALTER TABLE table1 DROP SUPPLEMENTAL LOG GROUP group1;  Disabled using  Otherwise specified columns are only logged if one of them is updated ALTER TABLE table1 ADD SUPPLEMENTAL LOG GROUP group1 (c2,c3);  See data dictionary views  DBA_LOG_GROUPS  DBA_LOG_GROUP_COLUMNS

54 © 2005 Julian Dyke juliandyke.com 54 Supplemental Logging  Additional columns are appended to undo data CREATE TABLE t1 (c1 NUMBER,c2 NUMBER,c3 NUMBER); INSERT INTO t1 VALUES (100, 200, 300); ALTER TABLE table1 ADD SUPPLEMENTAL LOG GROUP group1 (c1,c2,c3) ALWAYS; HEADER5.2 Statements -- Statement #1 UPDATE t1 SET c3 = 400 WHERE c1 = 100; HEADER 5.2 REDO # c3 = 400 UNDO #1 5.1 c3 = 300 c2 = 200 c1 = 100 Redo

55 © 2005 Julian Dyke juliandyke.com 55 Dumping Logfiles  To dump the contents of a logfile use ALTER SYSTEM DUMP LOGFILE 'pathname';  A range of data file blocks can be specified ALTER SYSTEM DUMP LOGFILE 'pathname'; DBA MIN. DBA MAX.  A range of redo byte addresses can be specified ALTER SYSTEM DUMP LOGFILE 'pathname'; RBA MIN. RBA MAX.  A layer and (optional) opcode can be specified ALTER SYSTEM DUMP LOGFILE 'pathname'; LAYER OPCODE

56 © 2005 Julian Dyke juliandyke.com 56 Thank you for your interest For more information and to provide feedback please contact me My address is: My website address is:


Download ppt "1 Redo Internals Julian Dyke Independent Consultant Web Version © 2005 Julian Dyke juliandyke.com."

Similar presentations


Ads by Google