You are on page 1of 84

DBA

1.

DBA
DBA
DBA
DBA


IT

IT
1

Oracle ORACLE
ORACLE DBA ORACLE


56
ORACLE
ORACLE
ORACLE


DBA
ORACLE ORACLE

DBA

DBA

DBA ORACLE
ORACLE

ORACLE CONCEPTS

1
DBA Oracle

Oracle DBA
Oracle Oracle
Oracle
DBA
Oracle DBA Oracle
Oracle

Oracle

Oracle DBA
Oracle
Oracle Oracle DBA
DBA Oracle Oracle
DBA DBA
Oracle
Oracle
Oracle Oracle

Oracle
Oracle DBA 10
JAVA 10
C 500

JAVA
JAVA
Thinking in JAVA JAVA
JAVA
JAVA JAVA

Thinking in JAVA JAVA

Thinking in JAVA
JAVA
Oracle
Oracle 10 20 DBA
Oracle

DBA DBA DBA

DBA
DBA
Oracle Internal Only
checkpoint
DBA Oracle
DBA
metalink
DBA DBA
DBA DBA

DBA DBA

Oracle


DBA
DBA Oracle
DBA

DBA
Metalink DBA

google
google

DBA qq
msn

DBA DBA
DBA
2000 Oracle
2000 DBA
Oracle
Oracle

Oracle
Oracle 3 2002

Oracle
Oracle Concepts
3 Oracle

DBA
DBA DBA

Oracle Oracle
Oracle

Oracle

DBA Oracle

Oracle DBA
Oracle Oracle
Oracle DBA

Oracle


Oracle
Oracle
Oracle Oracle
Oracle

Oracle

Oracle


Oracle DBA Oracle

Oracle



oracle DBA

Oracle oracle
BLOCKBLOCK Oracle
oracle BLOCK 2K-32K Oracle

Oracle Oracle IO Oracle
Oracle Oracle 8i
Oracle 9i
DB_BLOCK_SIZE

BLOCK Oracle BLOCK


BLOCK BLOCK
extent extent
block Extent Oracle Oracle
extent EXTENT 1 1
BLOCK

EXTENT SEGMENT,
EXTENT SEGMENT SEGMENT
SEGMENT
1

SEGMENT

Oracle "Segment"
SEGMENT
l
l

OVERFLOW
LOB LOB

l
N

l
CLUSTER()
SEGMENT

Oracle
EXTENT EXTENT BLOCK
BLOCK BLOCK
Oracle EXTENT

MAXEXTENTS MAXEXTENTS
255, MAXEXTENTS
ORA-01631: Max # Extents (%s)
Reached in TABLE %s.%s MAXEXTENTS

SEGMENT
BLOCK BLOCK

BLOCK BLOCK HEADER


SCN 4

BLOCK 3
BLOCK


EXTENT

Oracle

VARCHAR VARCHAR
VARCHAR
BLOCK VARCHAR
1
UPDATE 200
BLOCK
BLOCK 200
BLOCK Oracle

EXTENT EXTENT

EXTENT
1024
EXTENT
EXTENT
EXTENT
DBA


EXTENT

PCTFREE
PCTFREE
PCTFREE

INITRANS


24
Oracle

PCTFREE

set line 132


col statistic_name format a30 trunc
SELECT t.OWNER, t.OBJECT_NAME, t.OBJECT_TYPE, STATISTIC_NAME,
t.VALUE value
FROM v$segment_statistics t
WHERE t.STATISTIC_NAME = 'ITL waits'
AND t.VALUE > 10 order by value;

initrans
SQL
ITL initrans

Oracle 9i

Oracle varchar varchar


varchar
PCTFREE 10%
100%-PCTFREE

Oracle VARCAHR
Oracle

3
create table test1 ( a integer,b varchar2(100),c varchar2(100));
insert into test1 values (1,null,'aaaa');

insert into test1 values (2,null,'bbbb');


insert into test1 values (1,'11111',null);
commit;
EXTENT
SQL> select extent_id,file_id,block_id from dba_extents where
segment_name='TEST1' AND OWNER='SCOTT';

EXTENT_ID
FILE_ID
BLOCK_ID
---------- ---------- ---------0
10
497
10
SQL>select file_name from dba_data_files where file_id=10;
FILE_NAME
-------------------------------------------------------------------------------/opt/oracle/oradata/orcl/users02.dbf
dd 499 dump
dd if=/opt/oracle/oradata/orcl/users02.dbf of=a.dmp bs=8192 skip=501 count=1
501

2c 01 03 02 c1 02 FF 04 61 61 61 61
1,null,aaaa2c 01 1
ITL ,03 3 02 C1 02
02 C1 02
10 1 FF 04 61 61 61 61
aaaa 3 00001fd0h
2C 01 02
2 INSERT
null NULL
Oracle NULL
UPDATE TEST1 SET B=ABC WHERE
A=1

FF

VARCHAR
UPDATE


10% PCTFREE PCTFREE 10%
TRUNCATE
drop sequence seqt;
create sequence seqt;
alter table test1 pctfree 10;
truncate table test1;
begin
for i in 1..1000 loop
insert into test1 values (seqt.nextval,'abc',null);
end loop;
end;
/
commit;

SQL> select a,b from test1 where a=1;


A B
---------- -------------------------------------------------------------------------------1 abc
Execution Plan
---------------------------------------------------------Plan hash value: 4122059633
--------------------------------------------------------------------------| Id | Operation
| Name | Rows | Bytes | Cost (%CPU)| Time
|
--------------------------------------------------------------------------| 0 | SELECT STATEMENT |
|
2 | 12 |
2 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| TEST1 |
2 | 12 |
2 (0)| 00:00:01 |
---------------------------------------------------------------------------

Predicate Information (identified by operation id):


--------------------------------------------------1 - filter("A"=1)

Statistics
---------------------------------------------------------1 recursive calls
0 db block gets
8 consistent gets
0 physical reads
0 redo size
459 bytes sent via SQL*Net to client
400 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
8 CR GET
UPDATE
update test1 set c='123456789012345678901234567890abcdefghg';
commit;

20 02 00 02 80 01 f7 00
04 RDBA=0x028001f7
0x04
0x028001f7 SELECT

SQL> set autotrace on;


SQL> col b format a50 trunc
SQL> set line 132
SQL> select a,b from test1 where a=1;
AB
---------- -------------------------------------------------1 abc

Execution Plan
---------------------------------------------------------Plan hash value: 4122059633
--------------------------------------------------------------------------| Id | Operation
| Name | Rows | Bytes | Cost (%CPU)| Time
|
--------------------------------------------------------------------------| 0 | SELECT STATEMENT |
|
2 | 12 |
2 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| TEST1 | 2 | 12 |
2 (0)| 00:00:01 |
--------------------------------------------------------------------------Predicate Information (identified by operation id):
--------------------------------------------------1 - filter("A"=1)

Statistics
---------------------------------------------------------0 recursive calls
0 db block gets
17 consistent gets
0 physical reads
0 redo size
459 bytes sent via SQL*Net to client
400 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)

1 rows processed
8 CR GET 17 CR GET

PCTFREE
UPDATE
PCTFREE
PCTFREE 5

PCTFREE
B LOCK_SIZE

PCTFREE
PCTFREE


ALTER TABLE ... MOVE EXP/IMP
Oracle
DBA pctusedfreelistsfreelist groups
ASSM 9i
MSSM
Oracle FREELIST
PCTFREEPCTUSED
FREELISTSFREELIST GROUPS
FREELIST FREELIST

PCTFREE
FREELIST
PCTUSED
FREELIST

FREELIST
PCTUSED Oracle
PCTUSED
FREELIST FREELIST
FREELIST
MSSM PCTFREE PCTUSED

PCTFREE 30 PCTUSED 65
23
FREELIST FREELIST

MSSM PCTUSED
PCTUSED FREELIST PCTUSED

PCTUSED
FREELISTSFREELISTS FREELISTS
perment data segmenttemporary data segmentindex segmentrollback
segment FREELISTS
l
MASTER FREELISTS
l
PROCESS FREELISTS
l
TRANSACTION FREELISTS
MASTER FREELISTS FREELISTS
MASTER FREELISTS
MASTER FREELISTS
FREELISTS
FREELISTS
FREELISTS
ORACLE Oracle FreelistsProcess Freelists
Process Freelists Master Freelists Process Freelists
Master Freelists
Process Freelists Process Freelists
Process FreeLists
Master Freelists Process Freelists
Process Freelists Oracle
Process Freelists Freelists
Oracle Freelists 1 Freelists 1
Master Freelists Process Freelists
MSSM Freelists


Oracle 8i
MSSM 8
FREELISTS 8 FREELISTS 1 5.7%
Freelists
1-5%
Freelists

Freelists PCTUSED
Freelists
Freelists Oracle
Transaction Freelists 16
Transaction Freelists Transaction
Freelists Transaction Freelists

Transaction Freelists Segment

Header

Transaction Freelists Segment Header
MSSM Segment Header

Transaction Freelists
pctused Transaction
Freelists
Transaction Freelists
Transaction Freelists
Master Freelists

Oracle Freelists
Freelists
MSSM Freelists Groups
OPS/RAC
RAC RAC
MSSM Freelists CACHE
FUSION RAC
GLOBAL CACHE
INSTANCE 1 BLOCK 10
INSTANCE 2 BLOCK 10
INSTANCE 1 BLOCK 10

GLOBAL BUFFER BUSY RAC

Oracle Freelist Groups


RAC 2
Freelists Groups 2
Segment Header BLOCK
Freelists Freelists BlockSegment Header Block
Super Master Freelists Segment
Freelists Block Master Freelists Process Freelists
Freelists Freelists
INSTANCE_IDPIDINSTANCE
Freelists Groups Freelists Freelists
Freelists Groups INSTANCE
Freelists Freelists
Freelists Groups
Instance
Freelist Groups

RAC
Freelist Groups Oracle

Freelists Freelists Groups


Freelist Groups Freelists Groups

RAC Freelist Groups


Freelist Groups RAC
RAC Freelist Groups
Freelist Groups RAC
Freelist Groups RAC


segment header Freelist Groups 1
Freelist Segment Header Freelist Groups
Freelists Freelists Block

Freelists Freelist Groups

Freelists

OLTP

OLAP
OLAP

10g
11G oracle 9i
DBA MSSM
8i 9i
10g 8i MSSM
BUG 9i ASSM object
reuse ORA-600 [kcbget_xxx]ORA-600 [kcbnew_xxx] BUG
MSSM ASSM BITMAP
MSSM ASSM BITMAP
Freelists

MSSM

MSSM

3 18 2PCTFREE

Oracle 9i

Oracle varchar varchar


varchar
PCTFREE 10%
100%-PCTFREE

Oracle VARCAHR
Oracle

3
create table test1 ( a integer,b varchar2(100),c varchar2(100));
insert into test1 values (1,null,'aaaa');
insert into test1 values (2,null,'bbbb');
insert into test1 values (1,'11111',null);
commit;
EXTENT
SQL> select extent_id,file_id,block_id from dba_extents where segment
_name='TEST1' AND OWNER='SCOTT';

EXTENT_ID
FILE_ID BLOCK_ID
---------- ---------- ---------0
10
497
10
SQL>select file_name from dba_data_files where file_id=10;

FILE_NAME
------------------------------------------------------------------------------/opt/oracle/oradata/orcl/users02.dbf
dd 499 dump
dd if=/opt/oracle/oradata/orcl/users02.dbf of=a.dmp bs=8192 skip
=501 count=1
501

2c 01 03 02 c1 02 FF 04 61 61 61 61 1,
null,aaaa2c 01 1
ITL ,03 3 02 C1 02
02 C1 02 1
0 1 FF 04 61 61 61 61
aaaa 3 00001fd0h
2C 01 02
2 INSERT
null NULL Or
acle NULL
UPDATE TEST1 SET B=ABC WHERE A
=1
FF
VARCHAR
UPDATE


10% PCTFREE PCTFREE 10% TRUNCATE

drop sequence seqt;


create sequence seqt;
alter table test1 pctfree 10;
truncate table test1;
begin
for i in 1..1000 loop
insert into test1 values (seqt.nextval,'abc',null);
end loop;
end;
/
commit;

SQL> select a,b from test1 where a=1;


A B
---------- ------------------------------------------------------------------------------1 abc
Execution Plan
---------------------------------------------------------Plan hash value: 4122059633
-------------------------------------------------------------------------| Id | Operation
| Name | Rows | Bytes | Cost (%CPU)|
Time
|
-------------------------------------------------------------------------| 0 | SELECT STATEMENT |
|
2 |
12 |
2 (0)|
00:00:01 |
|* 1 | TABLE ACCESS FULL| TEST1 |
2 |
12 |
2 (0)|
00:00:01 |
-------------------------------------------------------------------------Predicate Information (identified by operation id):
--------------------------------------------------1 - filter("A"=1)

Statistics
---------------------------------------------------------1 recursive calls
0 db block gets
8 consistent gets
0 physical reads
0 redo size
459 bytes sent via SQL*Net to client
400 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
8 CR GET
UPDATE
update test1 set c='123456789012345678901234567890abcdefghg';
commit;

20 02 00 02 80 01 f
7 00 04 RDBA=0x0280

01f7 0x04
0x028001f7 SELECT

SQL> set autotrace on;


SQL> col b format a50 trunc
SQL> set line 132
SQL> select a,b from test1 where a=1;
A B
---------- -------------------------------------------------1 abc

Execution Plan
---------------------------------------------------------Plan hash value: 4122059633
-------------------------------------------------------------------------| Id | Operation
| Name | Rows | Bytes | Cost (%CPU)| Time
|
-------------------------------------------------------------------------| 0 | SELECT STATEMENT |
|
2 |
12 |
2 (0)| 00:0
0:01 |
|* 1 | TABLE ACCESS FULL| TEST1 |
2 |
12 |
2 (0)| 00:0
0:01 |
-------------------------------------------------------------------------Predicate Information (identified by operation id):
--------------------------------------------------1 - filter("A"=1)

Statistics
---------------------------------------------------------0 recursive calls
0 db block gets
17 consistent gets
0 physical reads
0 redo size
459 bytes sent via SQL*Net to client

400 bytes received via SQL*Net from client


2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
8 CR GET 17 CR GET

P
CTFREE
UPDATE PC
TFREE
PCTFREE 5

PCTFREE
B LOCK_SIZE

PCTFREE
PCTFREE

ALT
ER TABLE ... MOVE EXP/IMP

3 22 3
Oracle
DBA pctusedfreelistsfreelis
t groupsASSM 9i
MSSM
Oracle F
REELIST PCTFREEPCTUSED
FREELISTSFREELIST GROUPS FREELI
ST FREELIST
PCTFREE
FREELIST

PCTUSED
FREELIST

FREELIST PCTUSED Or
acle PCTUSED

FREELIST
FREELISTFREELIST

MSSM PCTFREE PCTUSED


PCTFREE 30
PCTUSED 65
23 FR
EELIST FREELIST MSSM
PCTUSED PCTUSED
FREELIST PCTUSED

PCTUSED FREEL
ISTSFREELISTS FREELISTS permen
t data segmenttemporary data segmentindex segmentrollback segme
nt FREELISTS

MASTER FREELISTS

PROCESS FREELISTS

TRANSACTION FREELISTS
MASTER FREELISTS FREELISTS
MASTER FREELISTS
MASTER FREELISTS
FREELISTS
FREELISTS
FREELISTS
ORACLE Oracle FreelistsProcess Freelists
Process Freelists Master Freelists Process
Freelists Master Freelists
Process Freelists
Process Freelists Process Fre
eLists Master Freelists
Process Freelists Process Freelists
Oracle Process Freelists Freeli
sts Oracle Freelists
1 Freelists 1 Master Freelist
s Process Freelists
MSSM Freelists

Oracle 8i
MSSM 8
FREELISTS 8 FREELISTS 1 5.7%
Freelists
1-5%

Freelists

Freelists PCTUSED
Freelists
Freelists Oracle
Transaction Freelists 16 T
ransaction Freelists Transaction
Freelists Transaction Freelists

Transaction Freelists Seg


ment Header

Transaction Freelists Segment


Header MSSM Segment Header

Transaction Freelists
pctused Transac
tion Freelists
Transaction Freelists
Transacti
on Freelists Master Freelists

Oracle Freelists
Freelists
MSSM Freelists Groups
OPS/RAC
RAC RAC MSS
M Freelists CACHE FUSION
RAC GLOBA
L CACHE
INSTANCE 1 BLOCK 10 INSTANCE 2
BLOCK 10 INSTANCE 1 BLOCK 10

GLOBAL BUFFER BUSY


RAC
Oracle Freelist Groups
RAC 2
Freelists Groups 2
Segment Header BLOCK Free
lists Freelists BlockSegment Header Block
Super Master Freelists Segment
Freelists Block Master Freelists Process Fr
eelists Freelists Freelists
INSTANCE_IDPID

INSTANCE Freelists Groups Freelists F


reelists Freelists Groups INSTANCE
Freelists
Freelists
Freelists Groups Instance
Freelist Groups

RAC
Freelist Groups Oracle
Freelists Freelists
Groups Freelist Groups Freel
ists Groups
RAC Freelist Groups
Freelist Groups RAC
RAC Freelist Groups
Freelist Groups RAC
Freelist Groups RAC

s
egment header Freelist Groups 1
Freelist Segment Header Freelist Gr
oups Freelists Freelists Block

Freelists Freelist Groups

Freelists

OLTP

OLAP
OLAP

10g
11G oracle 9i
DBA MSSM
8i 9i 10g
8i MSSM
BUG 9i ASSM object reuse
ORA-600 [kcbget_xxx]ORA-600 [kcbnew_xxx] BUG MSSM
ASSM BITMAP
MSSM ASSM BITMAP F
reelists

MSSM

MSSM

3 23 4

DBA
DBA
5% DB
A
SQL

Oracle buff
er busy waits

BUFFER BUSY WAITS


8.0-9.2 10.1 bl
ock BLOCK CLASS#buffer busy waits

db cach
e IO 10g
buffer busy waits read by another
session

BUFFER Segment HeaderUN


DO freelists ASSM
bmb block buffer busy waits

SEGMENT HEADER FREELISTS BMB


FREELISTS,FREELIST GROUPS
BMB

DB CACHE DB CACHE
30%

INITRANS
PCTFREE
PCTFREE BLOCK_SIZE

oracle
hash hash
HASH
HASH SEQUENCE
HASH

HASH
HASH

HASH
HASH HASH

HASH HASH

HASH

HASH
Oracle

Oracle

3 23 4

HAS
H O
racle
Oracle

HASH(HASH CLUSTER TABLE) HASH


HEAP TABLEHASH
HASH HASH
HASH
HASH
Hash Cluster CLUSTER
HASH CLUSTER TABLE
SELECT HASH
SQL> CREATE CLUSTER off_clu
2
( country
VARCHAR2(2),
3
postcode
VARCHAR2(10) )
4
SIZE
350
5
TABLESPACE case_large_data
6
HASHKEYS
6000;
SQL> CREATE TABLE office
2
( office_cd NUMBER(3),
3
cost_ctr
NUMBER(3),
4
country
VARCHAR2(2),
5
postcode
VARCHAR2(10) )
6
CLUSTER off_clu(country, postcode);

CLUSTER

HASHKEYS: KEY

HASH IS: HASH

SIZE: HASHVALUE HASHKEY


HASHKEY
HASH HASH CLUSTER TABLE
PCTFREE PCTFREE

BLOCK SIZE 9i Oracle


BLOCK SIZE
BLOCK SIZE
BLOCK SIZE

3 24 1

400

200

40

25%
CPU IO
SQL

80

SP SP

1200 1500

20%

20

ADC

11 50

IBM P
AIX 5.3 8.1.7.4
9.2.0.6
, Statspack
9
00-1000 Statspack
0.93
CPU 20%I
O CPU 10%
Statspack SQL
SQL INSERT SM_HISTABLE
59
200 14.2
Statspack SQL

TOP SQL SQL


2000 SQL
SQL

SELECT SELECT MSG_ID


PHONE_NO SQL

SQL ?
20-30%

8
800
SM_HISTABLE
SM_HISTABLEyymm
CREATED_DATE
MSG_ID MSG_I
D UPDATE ROWID UPD
ATE

3 25 2

8 8
00

2000 1 8 2
0.1 1 2
00 555 55
50 3000


2000
1500
50% 25%

Instance Efficiency Percentages (Target 100%)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Buffer Nowait %: 99.98
Redo NoWait %: 100.00
Buffer Hit %: 99.69
In-memory Sort %: 99.97
Library Hit %: 99.79
Soft Parse %: 88.82
Execute to Parse %: 98.61
Latch Hit %: 99.98
Parse CPU to Parse Elapsd %: 93.32
% Non-Parse CPU: 98.51
Shared Pool Statistics
Memory Usage %:
% SQL with executions>1:
% Memory for SQL w/exec>1:

Begin
-----93.70
35.74
29.93

End
-----95.50
34.34
21.30

Top 5 Wait Events


~~~~~~~~~~~~~~~~~
Wai
t
% Total
Event
Waits Time
(cs) Wt Time
-------------------------------------------- ------------ ----------- ------db file parallel write
2,922
3
6,456 47.99
db file sequential read
16,401
1
5,874 20.90
log file parallel write
8,824
1
0,812 14.23
log file sync
2,907
5,169
6.80
direct path read
17,046
3,639
4.79
-----------------------------------------------------------
IO IO RED
O LOG 21%,REDO LOG

Statspack redo buffer allocation retries


483 LOG BUFFER 1M LOG BUFFER
16 1 60M
1
10 56

LOG BUFFER REDO LOG 10-15%


STATSPACK BUFFER BUSY WAITS
BUFFER BUSY WAITS
300 800
10
8.1.7.4 9.
2.0.5(ASSM) freelist
s 1 freelists

freelists

freelists 5%10%
SM_HISTABLE
ID_HINT
10000000 1
PARTITION BY RANGE (ID_HINT)
(
PARTITION PART_01 VALUES LESS THAN (1000000)
NOLOGGING
TABLESPACE CQYDSMSC_CENTER1
PCTUSED
40
PCTFREE
10
INITRANS 1
MAXTRANS 255
STORAGE
(
INITIAL
504K
MINEXTENTS
1
MAXEXTENTS
2147483645
FREELISTS
1
FREELIST GROUPS 1
BUFFER_POOL
DEFAULT
),
FREELISTS

HASH IO

#1 4X36.4 RAID RAID10


PVhdisk2
VG
DATA1VG
#2 6X36.4 RAID RAID10
PVhdisk3
VG
DATA2VG
#3 6X36.4 RAID RAID10
PVhdisk4
VG
DATA3VG
#4 16X36.4 RAID RAID10
PVhdisk5
VG
DATA4VG
#5 16X36.4 RAID RAID10
PVhdisk8
VG
DATA5VG
72G 20 RAID 10, VG
stripe HASH
IO 5 IO
10-15%
ID_HINT SEQUENCEID_SEQ SE
QUENCE CACHE 1000 1000
CACHE

1-1-0.1*1
-0.05*1-0.1=23%

INSERT BULK INSERT


BULK INSERT

BULK INSERT

3
0%

60% 60%

3 26 3

SCOTT

SEQUENCE

FREELISTS INITRANS

HASH

800150030005000

BULK INSERT
SQL profiler
profiler
PL/SQL
7
PROFILER SQL
SEQUENCE CACHE

create or replace procedure testSeq(N integer)


is
i integer;
b integer;
v varchar2(20);
begin
i:=0;
v:=to_char(sysdate,'yyyy-mm-dd:hh24:mi:ss');
dbms_output.put_line(v);
loop
exit when i>N;
i:=i+1;
select sm_idseq.nextval into b from dual;
end loop;
v:=to_char(sysdate,'yyyy-mm-dd:hh24:mi:ss');
dbms_output.put_line(v);
end;
/

declare
err number;
begin
err:=DBMS_PROFILER.START_PROFILER (test seq 1000);
testseq(200000);
err:=DBMS_PROFILER.STOP_PROFILER ;
end;

column RUN_COMMENT format a40 truncate;


select runid, run_date, RUN_COMMENT from plsql_profiler_runs orde
r by runid;
column unit_name format a15 truncate;
column occured format 999999 ;
column line# format 99999 ;
column tot_time format 999999.999999 ;
select p.unit_name, p.occured, p.tot_time, p.line# line,
substr(s.text, 1,75) text
from
(select u.unit_name, d.TOTAL_OCCUR occured,
(d.TOTAL_TIME/1000000000) tot_time, d.line#
from plsql_profiler_units u, plsql_profiler_data d
where d.RUNID=u.runid and d.UNIT_NUMBER = u.unit_number
and d.TOTAL_OCCUR >0
and u.runid= &RUN_ID) p,
user_source s
where p.unit_name = s.name(+) and p.line# = s.line (+)
order by p.unit_name, p.line#;
run_id plsql_profiler_units PR
OFILER run_id
run_id run_id sequence

UNIT_NAME
OCCURED
TOT_TIME
LINE TEXT

--------------- ------- -------------- ---------<anonymous>


1
.000781
4

<anonymous>

.009996

<anonymous>

.002121

TESTLOG

.001145

i:=0;

TESTLOG
i>=N;

50001

40.602085

exit when

TESTLOG

50000

59.097742

i:=i+1;

TESTLOG
50000
2948.819922
dseq.nextval into v from dual;

10

select sm_i

PROFILER
SEQUENCE
CACHE

2
8
200001
942122
4.7
100
8
200001
73282
0.366
1000
8
200001
48250
0.241
5000
8
200001
47129
0.236
20000
8
200001
43299
0.216
sequence sequence
1000 cache sequence cac
he 1000 cache sequence cac
he

23%
sm_histable
freelists,initrans,initial,next

128.67
112.35 :14.5

3%
DB_DaeMon

0.00257
0.00224 :14.5

3
7
3%

14.5%
HASH
10 8 4

4 RAID 5 RAID
RAID REDO LOG REDO LO
G
PARTITION BY HASH (ID_HINT)
PARTITIONS 8
STORE IN (CQYDSMSC_CENTER1,CQYDSMSC_CENTER2,CQYDSMSC_CENTER3,CQYDSMS
C_CENTER4)

90.397
78.793
14.53%

, 14.7
DB_DaeMon
3%

0.00181
0.00158
14.53%

, 14.7

3%
27%

15.
5% HASH 10.27%
24%
1
30

20

8
00 5000

REDO LOG
1000

BULK INSERT BULK INSERT


BULK INSERT
BULK INSERT
BULK INSERT
CREATE OR REPLACE PROCEDURE TESTFORALL (N INTEGER)
IS
TYPE T_SM_ID
IS TABLE OF
NUMBER(10) INDEX BY BINARY_I
NTEGER;
TYPE T_SM_SUBID IS TABLE OF
NUMBER(3)
INDEX BY BINARY_I
NTEGER;
TYPE T_ORGADDR
IS TABLE OF
VARCHAR2(21) INDEX BY BINARY_I
NTEGER;
TYPE T_DESTADDR IS TABLE OF
VARCHAR2(21) INDEX BY BINARY_I
NTEGER;
TYPE T_ID_HINT
IS TABLE OF
NUMBER(10) INDEX BY BINARY_I
NTEGER;
V_SM_ID
T_SM_ID;
V_SM_SUBID
T_SM_SUBID;
V_ORGADDR
T_ORGADDR;
V_DESTADDR
T_DESTADDR;
V_ID_HINT
T_ID_HINT;
I INTEGER;
BEGIN
FOR I IN 1.. N
LOOP
V_SM_ID(I):=I;
V_SM_SUBID(I):=12;
V_ORGADDR(I):='444555565';
V_DESTADDR(I):='555555';
SELECT SM_IDSEQ.NEXTVAL INTO V_ID_HINT(I) FROM DUAL;
END LOOP;
FOR I IN 1..N LOOP
INSERT INTO SM_HISTABLE0101 (SM_ID,SM_SUBID,ORGADDR,DESTADDR,ID_
HINT) VALUES
(V_SM_ID(I),V_SM_SUBID(I),V_ORGADDR(I),V_DESTADDR(I),V_ID_HINT
(I));
END LOOP;
COMMIT;
FORALL I IN 1..N
INSERT INTO SM_HISTABLE0101 (SM_ID,SM_SUBID,ORGADDR,DESTADDR,ID_
HINT) VALUES
(V_SM_ID(I),V_SM_SUBID(I),V_ORGADDR(I),V_DESTADDR(I),V_ID_HINT
(I));
COMMIT;

END;
/

DB_DaeMon

DB_DaeMon

0.149
0.0389

3.83

0.000186

0.000048 3.83

0.0911

0.0247

0.0001138

0.000031 3.68

3.68

PPT, 4

3 27 4
REDO LOG
LOG BUFFER 1MREDO LOG 61M LOG BUFFER 1
20KREDO LOG 100M 2
REDO 2
REDO LOG 1
SGA
REDO

DB CACHE SIZE

NP:3072M

NP:4096M

RH:2048M

RH:2048M

DB CACHE

DB BUFFER

DB CACHE
INSERT
FORALL

DB KEEP SIZE

LOG BUFFER

NP:300M

HISTABLE

RH:300M

KEEP

NP: 102400

NP:20M

LOG BUFFER

RH:20M

log buffe

RH: 124416
SHARED POOL SIZE

r space

NP: 314572

NP:400M

800

RH:400M

LIBRARY CACHE S

RH: 318767

HARED POOL

104
REDO LOG

NP:61M

2000M

RH:100M
REDO LOG HDISK2 UNDO,TEMP
HDISK2 IO
UNDO HDISK3
SM_HISTABLE
SM_HISTABLE

FREELISTS

INITIAL

64K

8M

NEXT

64K

8M

INITRANS

SM_HISTABLE

FREELISTS

INITIAL

64K

4M

2M

NEXT

64K

4M

2M

INITRANS

5800 /CPU 50%IO


40%

CPU 20 IO

REDO

1RUNID 10

REDO LOG

LOG BUFFER

INSERT

1000K
8
60000K

50000
37968
0.75936
11
LOG BUFFER SPAC
E
BUFFER BUSY WAI
T
LOG SYNC

2 (RUNID 11)

LOG BUFFER

INSERT

20M
3
1500M

50000
24189
0.48378
5
BUFFER BUSY WAIT

57

7
8 PROFILER 800
50000 57%

38%

3 28 1
DBA Oracle

70 80
90

Oracle Oracle
b b

ID=3 ID
ID=3

IO CPU

3000 2000

5/6

6 6
6
TOAD
6 DBA 6
6 6

2/3
TOAD
6

DML OLTP SELECT DML


SELECT SELECT
80% 90%
CPU IO
100 6

SQL
BUFFER GET PHYSICAL READ
SQL WHERE

3 29 2

B B

B B B

WHERE

WHERE substr(id,2,3)='ID'

ID
substr(id,2,3 B ,

reverse key index


'1234
''4321'

sequence

DBA lik
e '%abc'like '%abc'

1abc,2abc abc1,abc2

DROP TABLE TINDEX;

CREATE TABLE TINDEX as SELECT DISTINCT OBJECT_NAME,OBJECT_ID,OBJECT_T


YPE,CREATED,STATUS,TEMPORARY,TIMESTAMP,'ABCDEFGHIJKLMNOPQRSTUVWXYZ123
4456' abc
from dba_objects;
INSERT INTO TINDEX SELECT DISTINCT OBJECT_NAME,OBJECT_ID,OBJECT_TYPE,
CREATED,STATUS,TEMPORARY,TIMESTAMP,'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234456
' abc
from dba_objects;
create index idx_tindex_name on tindex(object_name ) reverse;

exec DBMS_STATS.GATHER_TABLE_STATS(ownname=>'scott', tabname=>'tindex


', estimate_percent=>30, cascade=>true, degree=>2);
l
ike
SQL> set autotrace traceonly
select * froM tindex where object_name like '%TINDEX';
SQL>
Execution Plan
---------------------------------------------------------Plan hash value: 2264840918
--------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Tim
e
|
--------------------------------------------------------------------------| 0 | SELECT STATEMENT |
| 5297 | 553K| 103
(3)| 00:
00:01 |
|* 1 | TABLE ACCESS FULL| TINDEX | 5297 | 553K| 103
(3)| 00:
00:01 |
--------------------------------------------------------------------------Predicate Information (identified by operation id):
--------------------------------------------------1 - filter("OBJECT_NAME" LIKE '%TINDEX')

Statistics
---------------------------------------------------------1 recursive calls
0 db block gets
1717 consistent gets
0 physical reads
0 redo size
939 bytes sent via SQL*Net to client
400 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
2 rows processed
hint
SQL> select /*+ INDEX(TINDEX idx_tindex_name ) */ * froM tindex wher
e object_name like '%TINDEX';

Execution Plan
---------------------------------------------------------Plan hash value: 2021627753
---------------------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes
| Cost (%CPU)| Time
|
---------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT
|
| 5297 | 553
K| 5548 (1)| 00:00:54 |
| 1 | TABLE ACCESS BY INDEX ROWID| TINDEX
| 5297 | 553
K| 5548 (1)| 00:00:54 |
|* 2 | INDEX FULL SCAN
| IDX_TINDEX_NAME | 5287 |
| 520 (1)| 00:00:05 |
---------------------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------

2 - filter("OBJECT_NAME" LIKE '%TINDEX')

Statistics
---------------------------------------------------------1 recursive calls
0 db block gets
520 consistent gets
0 physical reads
0 redo size
939 bytes sent via SQL*Net to client
400 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
2 rows processed

SQL> create index idx_tindex_func on tindex(reverse(object_name));


Index created.
SQL> exec DBMS_STATS.GATHER_TABLE_STATS(ownname=>'scott', tabname=>'t
index', estimate_percent=>30, > cascade=>true, degree=>2);
PL/SQL procedure successfully completed.
SQL> select * froM tindex where reverse(object_name) like 'XEDNIT%';

Execution Plan
---------------------------------------------------------Plan hash value: 1286384425
---------------------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes
| Cost (%CPU)| Time
|
---------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT
|
|
4 | 436
|
7 (0)| 00:00:01 |

1 | TABLE ACCESS BY INDEX ROWID| TINDEX


|
4 | 436
|
7 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN
| IDX_TINDEX_FUNC |
4 |
|
3 (0)| 00:00:01 |
---------------------------------------------------------------------------------------------Predicate Information (identified by operation id):
--------------------------------------------------2 - access(REVERSE("OBJECT_NAME") LIKE 'XEDNIT%')
filter(REVERSE("OBJECT_NAME") LIKE 'XEDNIT%')

Statistics
---------------------------------------------------------1 recursive calls
0 db block gets
6 consistent gets
0 physical reads
0 redo size
939 bytes sent via SQL*Net to client
400 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
2 rows processed
reverse %TINDEX XEDN
IT% SQL SQL

google
reverse

SELECT *
FROM customer
WHERE Cust_Name LIKE '%Vilas%'

SELECT *
FROM customer
WHERE reverse(Cust_Name) LIKE '%saliV%';

SELECT *
FROM customer
WHERE Cust_Name LIKE '%saliV%';
like

Oracle Like
Oracle
Oracle 12 13
Oracle

3 30 3
DBA

Oracle DBA
Oracle
DBA

DBA

select emp_name,emp_id,sal from emp where emp_id=11023


emp emp
EMP_ID EMP_ID
SQL EMP_ID ROWID
EMP EMP_ID

select emp_id,sal from emp where emp_id=11023 and emp_name like 'Joh
n%'
WHERE emp_id=11023, emp_
name likje 'John%' oracle
CBO RBO
CBO
CBO CBO CBO

EMP_ID EMP_ID EMP


_ID=11023 SALEMP_

NAME EMP_ID EMP_NAME WHERE emp_


name like 'John%'

EMP_NAME
emp_name like 'John%' 10
10 ROWID emp_id,sal
emp_id=11023

10 9

EMP_NAME EMP_ID

EMP_ID SAL
ORACLE CBO
SQL
Oracle
emp_name
emp_name

ROWID

emp_id emp_name
Oracle 9i
IDX_ID_NAME E
MP_ID EMP_NAME SQL:
select emp_id,sal from emp where emp_name= 'John'
IDX_ID_NAME
EMP_NAME
UNIQUE RANGE SCAN
EMP_ID
EMP_ID
Oracle INDEX SKIP SC
ANINDEX SKIP SCAN
EMP_ID
INDEX SKIP SCAN

INDEX FULL SCAN


INDEX FAST FULL SCAN
SQL
select emp_name from emp where emp_name is not null

emp_name emp_name
SQL

extent
db fil
e scattered read db file scattered read

SQL
select emp_name from emp where emp_name is not null order by emp_name
SQL
EXTENTS EMP_NAME
emp_name emp_name

IO

IO
db file sequential read
ORDER BY SQL

IO

EXTENTS

DBA Oracle 4 1 1

4 1 1

CPU 20% CPU 90100%IDLE 0

2
12 CPU 24 r 40
CPU

SQL 2
SQL
PL/SQL
2

buffer get SQL, SQL CPU 10-1


5%
10 11 statspack :
Cache Sizes (end)
~~~~~~~~~~~~~~~~~
Buffer Cache:
8,000M
Std Block Size:
8K
Shared Pool Size:
3,200M
Log Buffer:
1
0,240K
Load Profile
~~~~~~~~~~~~
action

Per Second

Per Trans

---------------

---------

Redo size:

2,596,262.30

60,

Logical reads:

572,843.36

13,

Block changes:

22,523.53

Physical reads:

2,637.11

Physical writes:

672.75

User calls:

21,920.49

Parses:

6,339.75

Hard parses:

310.56

Sorts:

1,714.43

-----116.45
264.19
521.53
61.06
15.58
507.57
146.80
7.19
39.70

Logons:

0.44

Executes:

6,434.11

Transactions:

43.19

0.01
148.98

% Blocks changed per Read:

3.93

Recursive Call %:

9.0

Rollback per transaction %:

4.01

Rows per Sort:

48.6

Instance Efficiency Percentages (Target 100%)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Buffer Nowait %: 99.98
Redo NoWait %:

99.9

4
4

9
Buffer Hit

%:

99.60

In-memory Sort %:

100.0

Library Hit

%:

97.61

Soft Parse %:

95.1

Execute to Parse %:

1.47

Latch Hit %:

99.3

Parse CPU to Parse Elapsd %:

62.06

% Non-Parse CPU:

90.8

0
0
6
3
Shared Pool Statistics

Begin
-----Memory Usage %: 100.00
% SQL with executions>1: 30.49
% Memory for SQL w/exec>1: 34.11

End
-----100.00
31.15
34.20

Top 5 Timed Events


~~~~~~~~~~~~~~~~~~
% Total
Event
Waits
Time
(s) Ela Time
-------------------------------------------- ------------ ---------- -------db file sequential read
5,023,080
75,
306
41.99
CPU time
74,
925
41.77
global cache cr request
4,851,421
6,
662
3.71

db file scattered read


181,344
3,
582
2.00
latch free
4,553,880
3,
572
1.99
-----------------------------------------------------------CPU TIME db file seq
uential read NONE PARSE CPU 90% PARSE
CPU 2/3

Avg
Total Wait
wait
Waits
Event
Waits Timeouts Time (s)
(ms)
/txn
---------------------------- ------------ ---------- ---------- ----- -------db file sequential read
5,023,080
0
75,306
15
32.3
global cache cr request
4,851,421
4,394
6,662
1
31.2
db file scattered read
181,344
0
3,582
20
1.2
IO

TOP SQL
SQL

200M

Statspack SQL
SQL 50 1000 BUFFER GET

SQL
SELECT ORDER_ID ,
NVL(PAYMENT_ID, -1) PAYMENT_ID,
ACCT_ID,
SERV_ID,
ACTION,
STATE ,
TO_CHAR(CREATED_DATE,'YYYYMMDDHH24MISS'),
TO_CHAR(STATE_DATE,'YYYYMMDDHH24MISS') FROM A_XXX

WHERE NVL(PAYMENT_ID,-1)>=:lPaymentID

AND STATE=:sState

ORDER BY
NVL(PAYMENT_ID, -1), CREATED_DATE
SQL BUFFER GET 2500
56 SQL PAYMENT_ID
NVL
PAYMENT_ID 0 >
PAYMEN_ID NVL

SELECT ORDER_ID ,
NVL(PAYMENT_ID, -1) PAYMENT_ID,
ACCT_ID,
SERV_ID,
ACTION,
STATE ,
TO_CHAR(CREATED_DATE,'YYYYMMDDHH24MISS'),
TO_CHAR(STATE_DATE,'YYYYMMDDHH24MISS') FROM A_XXX
WHERE PAYMENT_ID>=:lPaymentID
AND STATE=:sState ORDER BY
PAYMENT_ID, CREATED_DATE
SQL PAYMENT_ID
PAYMENT_ID SQL
PAYMENT_ID NVL
NVL

NVL(PAYMENT_ID,-1)
SQL PAYMENT_ID STAT
E 5/6 PAYMENT_ID SEL
ECT COUNT(*) FROM A_XXX WHERE PAYMENT_ID>:PID PAYME
NT_ID 1/15 STATE
1/60 NVL(PAYMENT_ID)+
STATE PAYMENT_ID A_XXX
200

1:3
0CPU 50%
STATSPACK
6 SNAP STATSPACK SQL 2
buffer get 1500
SQL
sprepsql SQL SQL

3 -5 2
CPU 80%

3 10 CPU 90% 95%3 30


IDLE

4 2 2
SQL, SQL
10 CPU
SQL
SQL SQL BUFFER GET
3
select a.filename, b.source_id, b.source_path, b.localnet_abbr, b.fil
e_fmt,b.is_txt_fmt, a.deal_flag
from SCH_XXX a, BBB b
where (a.deal_flag='W' or a.deal_flag='B') and
a.validflag='Y' and b.pipe_id=:szPipeId and a.source_id=b.source_id

------------------------------------------------------------------------------| Operation
| PHV/Object Name
| Rows | Byte
s| Cost |
------------------------------------------------------------------------------|SELECT STATEMENT
|----- 1104374539 ----|
|
| 3486 |
|HASH JOIN
|
|
79K|
7
M| 3486 |
| TABLE ACCESS BY INDEX ROWID
|BBBBB
|
2 | 98
|
2 |
| INDEX RANGE SCAN
|FK_SOURCE_WORKFLOW |
1 |
|
1 |
| TABLE ACCESS FULL
|SCH_XXXXX
|
1M| 6
1M| 3474 |
------------------------------------------------------------------------------ SCH_XXXX
100 1M SPREPSQL
Statement Total

Per Execute

Buffer Gets:
Disk Reads:
Rows processed:
CPU Time(s/ms):
Elapsed Time(s/ms):
Sorts:
Parse Calls:
Invalidations:
Version count:
Sharable Mem(K):
Executions:

--------------626,984
425,693
46
50
988
0
16
0
2
29
16

--------------39,186.5
26,605.8
2.9
3,113.1
61,779.7
.0
1.0

2.9
3 79K
200 (a.deal_flag='W' or a.
deal_flag='B') and a.validflag='Y' validflag
Select validflag,count(*) from sch_xxxx group by validflag;
validflag='Y'
deal_flag deal_flag='Y'
0
SQL deal_flag
200

CREATE INDEX SHCJ.IDX_DEALFLAG ON SHCJ.SCH_XXXX(DEAL_FLAG) ;


Exec DBMS_STATS.GATHER_TABLE_STATS(ownname=> 'SHCJ', tabname=> 'SCH_X
XXX', estimate_percent=>30, method_opt=>'for all indexed columns size
skewonly',cascade=>true, degree=>2);

Method_opt 'for all columns size auto' 10G


9i 'for all columns size 1'
SQL BUFFER GET
4 10.7 SQL

3/4 SQL
10 -11 30 CPU 95-10
0% 20%
STATSPACK
SQL CPU S
QL BUFFER GET SQL 37%
SQL BUFFER GET 4%
SQL

TOP 1 SQL SQL SQ


L T_PRODUCT_INFO WHERE
PRODUCT_TYPE=:P1 AND PRODUCT_CLASS=:P2
20 HASH JOI
N T_PRODUCT_INFO PRODUCT_TYPE,PRODUCT_CLASS

60 T_PRODUCT_INFO
700 T_PRODUCT_INFO 800
800 700
SQL 1500 BUFFER GET C
LUSTER FACTOR DBA_INDEXES CLUSTER FACT
OR CLUSTER FACTOR
IO, BUF
FER GET

PRODUCT_TYPE PRODUCT_CLASS

1/200
100 PRODUCT_TYP
E PRODUCT_CLASS CLUSTER FACTOR
PRODUCT
_TYPE PRODUCT_CLASS
PRODUCT_ID P
RODUCT_ID

PRODUCT_TYPE PRODUCT_CLASS

1 rename t_product_info_old
2Create table t_product_info as select * from t_product_info ol
d order by product_type,product_class
3
4
C
LUSTER FACTOR
19
21 2
M
1

4 3 3

T_PRODUCT_INFO
8
8 10
buffer get buffer busy waits
200M 300M

REBUILD

300M
60 M

1G ONLINE REBUILD
20 1G
ONLINE REBUILD REBUIL
D ONLINE
REBUILD METALINK
ind$
CASCADE=>TRUE
2
SQL

10
1
1

CPU 60%
CPU 80-90%
CPU 80%-85% 9
0% OSW CPU 8
0% 10:30 90-95% S
TATSPACK T_PRODUCT_INFO SQL
40% 50%
SQL BUFFER GET TOP 5 BU
FFER GET 7%

10 10 PPT


EXCEL

PPT

PPT,
OK

30
800

N 6 500

SQL

REB
UILD

DBA 4 4 REDO LOG1


REDO LOG Oracle REDO L
OG INSTANCE RECOVERY
MEDIA RECOVERY
BUFFER CACHE

DBA
REDO LOG THREAD THREA
D RAC THREAD REDO L
OG LOG BUFFER THREAD
REDO LOG
REDO LOG
REDO LOG
CV SCN
UNDO REDO LOG U
NDO REDO LOG

UNDO

SHUTDOWN ABORT ALTER D


ATABASE OPEN RAC

ALTER DATABASE OPEN REDO LOG


REDO LOG
Oracle CACHE CACHE
CACHE

ONLINE REDO LOG

Oracle Log-Force-at-Commit
REDO LOG COMMIT LO
G BUFFER REDO LOG
BUFFER CACHE

REDO LOG

oracle checkpoint Oracle BUFF


ER CAHCE
BUFFER CACHE BUFFER CACHE BUFFER CACHE
DBWR DBWR

CHECKPOINT CHECKPOINT CK
PT DBWR SCN
CHECKPOINT SCN
CHECKPOINT
CHECKPOINT
RE
DO LOG

REDO LOG LOG BUFFER REDO LOG

Write-Ahead-Log
BUFFER CACHE R
EDO LOG BUFFER CACHE
REDO LOG
UNDO REDO LOG BUFFER CACHE

recover Database recover d


atafile

4 6 REDO LOG3 LOG BUFFER LGWR


REDO LOG K M RED LOG
REDO LOG 10M RE
DO K REDO K
K REDO REDO REDO LOG
REDO LOG REDO LOG
IO REDO LOG
REDO LOG Oracle REDO L
OG LGWR LOG BUFFER
LOG BUFFER Oracle REDO LOG LOG BUFFE
R REDO LOG LOG BUFFER, RED
O LOG REDO LOG

REDO LOG REDO LOG


LGWRLGWR LOG B
UFFER REDO LOG Oracle
REDO LOG
LOG BUFFER RDMBS

REDO LOG WRITE A


HEAD LOG REDO LOG
COMMIT CV C
V LOG BUFFER LGWR R
EDO LOG REDO LOG REDO LOG
REDO LOG

LGWR
REDO LOG
REDO LOG
Oracle REDO LOG

RDBMS

REDO LOG REDO LOG


Oracle

Oracle REDO LOG REDO LOG


REDO LOG BLOCK SIZE BLOCK SIZE R
EDO LOG BLOCK SIZE IO BLOCK SZIE
REDO LOG BLOCK IO REDO LOG BLOCK

LOG BUFFER LGWR


LOG BUFFER LOG BUFFER
BUFFER LOG BUFFER
BUFFERLOG BUFFER LOG BUFFER
BUFFER LOG BUFFER REDO LOG
LOG BUFFER
REDO LOG LOG BUFFER REDO LOG
LOG BUFFER LOG BUFFER Oracl
e LOG BUFFER REDO LOG LO
G BUFFER LOG BUFFER

REDO LOG
REDO

REDO LOG BUFFER LGWR


LOG BUFFER REDO LOG L
OG BUFFER REDO LOG BUFFER
LOG BUFFER LOG B
UFFER LOG BUFFER LOG BUFFER
LOG BUFFER LOG BUFFER
LOG BUFFER LGWR
REDO LOG B
UFFER LOG FILE SYNC
LGWR LOG BUFFER REDO LOG
Oracle LGWR

LOG BUFFER 1M
LOG BUFFER _log_io_size
3
REDO RECORD REC
ORD LOG BUFFER LGWR
LOG FILE SYNC LGWR REDO LOG

OLTP LGWR
LOG BUFFER REDO LOG

REDO LOG
1M 1-2
LGWR REDO LOG LO
G BUFFER oracle LOG BUFFER 1M LGWR
LOG BUFFER
LGWR BUFFER REDO LOG
Oracle _LOG_IO_SIZE LGWR
LOG BUFFER LGWR
LOG BUFFER 1/3 REDO LOG BLOCK
LOG BUFFER LGWR
LOG BUFFER
LOG BUFFER
LOG BUFFER REDO LOG
Oracle LGWR 3
LOG BUFFER
LGWR LGWR
LGWR LOG BUFFER
LOG FILE SYNC LOG FILE SYNC LGWR LOG BUFFER
REDO LOG L
OG FILE SYNC LOG FILE SYNC
REDO LOG LOG BUFFER RE
DO LOG LOG BUFFER LOG BUFFER

LOG BUFFER LGWR


REDO LOG LOG BUFFER
LOG FILE SYNC LOG BUFFER
LOG FILE SYNC
LOG BUFFER LOG BUFFER 1M
30M LOG BUFFER 3M
LOG BUFFER 3M
_LOG_IO_SIZE 300K 10M
REDO SIZE LGWR LO
G BUFFER 1M OLTP LGWR R
EDO LOG K K LOG FILE SYNC 1-10
LOG FILE SYNC
_LOG_IO_SIZE LOG FILE SYNC
REDO LOG LOG FILE SYNC
100 REDO LOG IO REDO L
OG IO IO LOG FILE SYNC
LOG FILE PARALLEL WRITE

REDO LOG IO REDO LOG IO

OLTP REDO LOG


K IO REDO LOG
IOPS IOPS SATA
REDO LOG REDO LOG REDO LOG
REDO LOG

4 8 REDO LOG4 REDO LOG


LOG BUFFER REDO LOG
REDO LOG
LGWR log file s
witch completion
CKPT CHECKPOINT LGWR
LGWR RED
O LOG CURRENT REDO LOG CURRENT REDO LOG
ACTIVE oracle u
nused REDO LOG CURRENT REDO LOG
LOG BUFFER REDO LOG REDO RECO
RD REDO LOG REDO RECORD SCN
HIGH SCN REDO LOG
REDO LOG
ACTIVE REDO LOG CURRENT
V$ARCHIVE


log_archive_max_processes LGWR

LGWR
LGWR SGA REDO LOG
ACTIVE DBWR CHECKPOINT
inactive

NOLOGGING BULK
DIRECT PATH WRITE NO
LOGGING Julian Dyke nologging
10

NOLOGGING CTAS REDO LOG


14M 39K
DBA_OBJECTS 10 CTAS NOLOG
GING REDO 113352 NOLOGGING RE

DO 176840NOLOGGING REDO
CTAS REDO NOLOGGING
DIRECT PATH WRITE REDO
REDO LOG DUMP INSERT /*+ APPEND */
REDO INSERT SELECT REDO
REDO RECORD - Thread:1 RBA: 0x0006d1.0000003f.0130 LEN: 0x2050 VLD: 0x01
SCN: 0x0000.053653c2 SUBSCN: 2 09/21/2010 09:56:40
CHANGE #1 MEDIA RECOVERY MARKER SCN:0x0000.00000000 SEQ: 0 OP:24.6
CHANGE #2 TYP:1 CLS: 1 AFN:10 DBA:0x0280c406 OBJ:122858 SCN:0x0000.053653bd SEQ:
9.1
Direct Loader block redo entry
Block header dump:

0x00000000

Object id on Block? Y
seg/obj: 0x1dfea csc: 0x00.53653bc itc: 3 flg: E typ: 1 - DATA
brn: 0 bdba: 0x280c38a ver: 0x01 opc: 0
inc: 0 exflg: 0
Itl

Xid

Uba

0x01

0x0001.00a.000054d6

0x00000000.0000.00

----

0 fsc 0x0000.00000000

0x02

0x0000.000.00000000

0x00000000.0000.00

----

0 fsc 0x0000.00000000

0x03

0x0000.000.00000000

0x00000000.0000.00

----

0 fsc 0x0000.00000000

data_block_dump,data header at 0xb68ab288


===============
tsiz: 0x1f80
hsiz: 0xc8
pbl: 0xb68ab288
bdba: 0x00000000
76543210
flag=-------ntab=1
nrow=91
frre=-1
fsbo=0xc8
fseo=0x432
avsp=0x36a
tosp=0x36a
0xe:pti[0]

nrow=91 offs=0

0x12:pri[0]

offs=0x1f36

0x14:pri[1]

offs=0x1eea

0x16:pri[2]

offs=0x1ea1

0x18:pri[3]

offs=0x1e57

0x1a:pri[4]

offs=0x1e09

0x1c:pri[5]

offs=0x1dbe

0x1e:pri[6]

offs=0x1d69

0x20:pri[7]

offs=0x1d1e

Flag Lck

Scn/Fsc

1 OP:1

0x22:pri[8]

offs=0x1cd2

0x24:pri[9]

offs=0x1c79

0x26:pri[10]

offs=0x1c2f

......

DIRECT PATH LOAD REDO LOG


REDO D
IRECT PATH LOAD

Q:

REDO RECORD - Thread:1 RBA: 0x0006d0.0000bf37.00fc LEN: 0x0060 VLD: 0x01


SCN: 0x0000.05364c72 SUBSCN: 2 09/21/2010 09:45:57
CHANGE #1 MEDIA RECOVERY MARKER SCN:0x0000.00000000 SEQ: 0 OP:24.6
CHANGE #2 INVLD AFN:10 DBA:0x0280c386 BLKS:0x0003 SCN:0x0000.05364c72 SE
1 OP:19.2
Direct Loader invalidate block range redo entry

REDO LOG REDO LOG


1M 60M REDO LOG
120M 2 REDO LOG
600M 10
DBA REDO LOG REDO LOG
REDO LOG REDO RECORD REDO LOG
REDO LOG
REDO LOG REDO LOG
REDO LOG REDO LOG
REDO LOG REDO LOG 2 REDO LOG

REDO LOG
CHECKPOINT
RE
DO LOG CHECKPOINT REDO LOG
REDO LOG
REDO LOG

REDO LOG
REDO LOG REDO LOG
REDO LOG

REDO LOG
DATA GUARD FAILOVER REDO LO
G CDC REDO LO
G
DBA REDO LOG 10-20
REDO LOG

1 2

4 9 REDO LOG5 BULK REDO


10
50 20-30
500
1999

60
7 UI
50 50
0 4 6
10
50 B B
ULK 50
BULK
BULK INSERT INSERT BULK
BULK Oracle BULK
USER SQL BULK
BULK SQL
BULK SQL SQLSQL
BULK BULK I
NSERT Oracle
REDO OPCODE LAYER 11 ROW ACCE
SS LAYER 11
Layer 11 : Row Access - KCOCODRW
[kdocts.h]
Opcode 1 : Interpret Undo Record (Undo)
Opcode 2 : Insert Row Piece
Opcode 3 : Drop Row Piece
Opcode 4 : Lock Row Piece
Opcode 5 : Update Row Piece
Opcode 6 : Overwrite Row Piece
Opcode 7 : Manipulate First Column (add or delete the 1rst colum
n)
Opcode 8 : Change Forwarding address
Opcode 9 : Change the Cluster Key Index
Opcode 10 :Set Key Links (change the forward & backward key links
on a cluster key)
Opcode 11 :Quick Multi-Insert
Opcode 12 :Quick Multi-Delete
Opcode 13 :Toggle Block Header flags

11..11 Quick Multi-insert11.12 Quick Multi-Delete O


PCODE BULK
drop table sm_histable0101;
CREATE TABLE SM_HISTABLE0101
(
SM_ID
NUMBER(10)
SM_SUBID
NUMBER(3)
SERVICE_TYPE
VARCHAR2(6),
ORGTON
NUMBER(3),
ORGNPI
NUMBER(3),
ORGADDR
VARCHAR2(21)
DESTTON
NUMBER(3),
DESTNPI
NUMBER(3),
DESTADDR
VARCHAR2(21)
PRI
NUMBER(3),
PID
NUMBER(3),
SRR
NUMBER(3),
DCS
NUMBER(3),
SCHEDULE
VARCHAR2(21),
EXPIRE
VARCHAR2(21),
FINAL
VARCHAR2(21),
SM_STATUS
NUMBER(3),
ERROR_CODE
NUMBER(3),
UDL
NUMBER(3),
SM_TYPE
NUMBER(10),
SCADDRTYPE
NUMBER(3),
SCADDR
VARCHAR2(21),
MOMSCADDRTYPE
NUMBER(3),
MOMSCADDR
VARCHAR2(21),
MTMSCADDRTYPE
NUMBER(3),
MTMSCADDR
VARCHAR2(21),
SCHEDULEMODE
NUMBER(3),
UD
VARCHAR2(255),
ID_HINT
NUMBER(10)
DELIVERCOUNT
NUMBER(10),
L2CACHE
NUMBER(10),
L2CACHEWRITECOUNT NUMBER(10),
SERVICE
NUMBER(10),
NEWORGADDRESS
VARCHAR2(21),
NEWDESTADDRESS
VARCHAR2(21)
);

NOT NULL,
NOT NULL,

NOT NULL,

NOT NULL,

NOT NULL,

redo1 redo2 bulk


create or replace procedure redo1 is

TYPE T_SM_ID

IS TABLE OF

NUMBER(10)

INDEX BY BINARY_INTEGE

TYPE T_SM_SUBID IS TABLE OF

NUMBER(3)

INDEX BY BINARY_INTEGE

TYPE T_ORGADDR

IS TABLE OF

VARCHAR2(21) INDEX BY BINARY_INTEGE

TYPE T_DESTADDR

IS TABLE OF

VARCHAR2(21) INDEX BY BINARY_INTEGE

TYPE T_ID_HINT

IS TABLE OF

NUMBER(10)

R;
R;
R;
R;
INDEX BY BINARY_INTEGE

R;
V_SM_ID
T_SM_ID;
V_SM_SUBID
T_SM_SUBID;
V_ORGADDR
T_ORGADDR;
V_DESTADDR
T_DESTADDR;
V_ID_HINT
T_ID_HINT;
I INTEGER;
VREDO1 INTEGER;
vredo2 integer;
BEGIN
FOR I IN 1.. 2000
LOOP
V_SM_ID(I):=I;
V_SM_SUBID(I):=12;
V_ORGADDR(I):='444555565';
V_DESTADDR(I):='555555';
V_ID_HINT(I):=i;
END LOOP;
select value into vredo1 from v$sysstat where name = 'redo size';
FOR I IN 1..2000 LOOP
INSERT INTO SM_HISTABLE0101 (SM_ID,SM_SUBID,ORGADDR,DESTADDR,ID_HIN
T) VALUES
(V_SM_ID(I),V_SM_SUBID(I),V_ORGADDR(I),V_DESTADDR(I),V_ID_HINT(I));
END LOOP;
COMMIT;
commit;
select value into vredo2 from v$sysstat where name = 'redo size';
select value into vredo2 from v$sysstat where name = 'redo size';
dbms_output.put_line('redo size:'||to_char(vredo2-vredo1));
END;
/
create or replace procedure redo2 is
TYPE T_SM_ID
IS TABLE OF
R;

NUMBER(10)

INDEX BY BINARY_INTEGE

TYPE T_SM_SUBID IS TABLE OF

NUMBER(3)

INDEX BY BINARY_INTEGE

TYPE T_ORGADDR

IS TABLE OF

VARCHAR2(21) INDEX BY BINARY_INTEGE

TYPE T_DESTADDR

IS TABLE OF

VARCHAR2(21) INDEX BY BINARY_INTEGE

TYPE T_ID_HINT

IS TABLE OF

NUMBER(10)

R;
R;
R;
INDEX BY BINARY_INTEGE

R;
V_SM_ID
T_SM_ID;
V_SM_SUBID
T_SM_SUBID;
V_ORGADDR
T_ORGADDR;
V_DESTADDR
T_DESTADDR;
V_ID_HINT
T_ID_HINT;
I INTEGER;
VREDO1 INTEGER;
vredo2 integer;
n integer;
BEGIN
n:=2000;
FOR I IN 1.. N
LOOP
V_SM_ID(I):=I;
V_SM_SUBID(I):=12;
V_ORGADDR(I):='444555565';
V_DESTADDR(I):='555555';
V_ID_HINT(I):=i;
END LOOP;
select value into vredo1 from v$sysstat where name = 'redo size';
FORALL I IN 1..N
INSERT INTO SM_HISTABLE0101 (SM_ID,SM_SUBID,ORGADDR,DESTADDR,ID_HIN
T) VALUES
(V_SM_ID(I),V_SM_SUBID(I),V_ORGADDR(I),V_DESTADDR(I),V_ID_HINT(I));
COMMIT;
commit;
select value into vredo2 from v$sysstat where name = 'redo size';
select value into vredo2 from v$sysstat where name = 'redo size';
dbms_output.put_line('redo size:'||to_char(vredo2-vredo1));
END;
/

set serveroutput on
truncate table sm_histable0101;
select max(ktuxescnw * power(2, 32) + ktuxescnb) from x$ktuxe;
exec redo1;

select max(ktuxescnw * power(2, 32) + ktuxescnb) from x$ktuxe;


truncate table sm_histable0101;
select max(ktuxescnw * power(2, 32) + ktuxescnb) from x$ktuxe;
exec redo2;
select max(ktuxescnw * power(2, 32) + ktuxescnb) from x$ktuxe;

Table truncated.
SQL>
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
-----------------------------------87596111
SQL> redo size:707356
PL/SQL procedure successfully completed.
SQL>
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
-----------------------------------87596151
SQL> truncate table sm_histable0101;
select max(ktuxescnw * power(2, 32) + ktuxescnb) from x$ktuxe;
exec redo2;
select max(ktuxescnw * power(2, 32) + ktuxescnb) from x$ktuxe;
Table truncated.
SQL>
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
-----------------------------------87596178
SQL> redo size:138728
PL/SQL procedure successfully completed.
SQL>
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
-----------------------------------87596195
INSERT 707356 REDO LOG,
BULK INSERT, 138728 REDO LOGREDO LOG 1/5
BULK INSERT ORACLE RDBMS
QUICK MULTI-INSERT DUMP REDO LOG
SQL> alter system dump logfile '/opt/oracle/oradata/orcl/redo01.log' scn m
in 87596178 scn max 87596195;
System altered.
DUMP REDO
CHANGE #2 TYP:0 CLS:18 AFN:7 DBA:0x01c007f2 OBJ:4294967295 SCN:0x0000.05389
bf0 SEQ: 2 OP:5.1
ktudb redo: siz: 396 spc: 5858 flg: 0x0012 seq: 0x2aba rec: 0x11
xid: 0x0001.021.0000551d

ktubl redo: slt: 33 rci: 0 opc: 11.1 objn: 122951 objd: 122956 tsn: 0
Undo type: Regular undo
Begin trans
Last buffer split: No
Temp Object: No
Tablespace Undo: No
0x00000000 prev ctl uba: 0x01c007f2.2aba.0f
prev ctl max cmt scn: 0x0000.05388a1f prev tx cmt scn: 0x0000.05388a26
txn start scn: 0xffff.ffffffff logon user: 0 prev brb: 29362160 prev bc
l: 0 KDO undo record:
KTB Redo
op: 0x03 ver: 0x01
op: Z
KDO Op code: QMD row dependencies Disabled
xtype: XA flags: 0x00000000 bdba: 0x00406482 hdba: 0x00406481
itli: 1 ispac: 0 maxfr: 4863
tabn: 0 lock: 0 nrow: 131
slot[0]: 0
slot[1]: 1
slot[2]: 2
slot[3]: 3
slot[4]: 4
slot[5]: 5
slot[6]: 6
slot[7]: 7
slot[8]: 8
slot[9]: 9
slot[10]: 10
slot[11]: 11
slot[12]: 12
slot[13]: 13
slot[14]: 14
slot[15]: 15
slot[16]: 16
slot[17]: 17
slot[18]: 18
slot[19]: 19
slot[20]: 20
slot[21]: 21
slot[22]: 22
slot[23]: 23
slot[24]: 24
UNDO INSERT UNDO
UNDO CHANGE VECTOR

CHANGE #3 TYP:0 CLS: 1 AFN:1 DBA:0x00406482 OBJ:122956 SCN:0x0000.05389c9


4 SEQ: 3 OP:11.11
KTB Redo
op: 0x01 ver: 0x01
op: F xid: 0x0001.021.0000551d
uba: 0x01c007f2.2aba.11
KDO Op code: QMI row dependencies Disabled
xtype: XA flags: 0x00000000 bdba: 0x00406482 hdba: 0x00406481
itli: 1 ispac: 0 maxfr: 4863
tabn: 0 lock: 1 nrow: 131
slot[0]: 0
tl: 53 fb: --H-FL-- lb: 0x0 cc: 29
col 0: [ 2] c1 02
col 1: [ 2] c1 0d
col 2: *NULL*
col 3: *NULL*
col 4: *NULL*
col 5: [ 9] 34 34 34 35 35 35 35 36 35
col 6: *NULL*
col 7: *NULL*
col 8: [ 6] 35 35 35 35 35 35
col 9: *NULL*
col 10: *NULL*
col 11: *NULL*
col 12: *NULL*
col 13: *NULL*
col 14: *NULL*
col 15: *NULL*
col 16: *NULL*
col 17: *NULL*
col 18: *NULL*
col 19: *NULL*
col 20: *NULL*
col 21: *NULL*
col 22: *NULL*
col 23: *NULL*
col 24: *NULL*
col 25: *NULL*
col 26: *NULL*
col 27: *NULL*
col 28: [ 2] c1 02
slot[1]: 1
tl: 53 fb: --H-FL-- lb: 0x0 cc: 29

OP CODE:11.11,BULK INSERT BULK I


NSERT BULK
1 2
REDO LAYER 11 11.11 MULTI-INSERT,11.12 MU
LTI-DELETE MULTI-UPDATE BULK UPDATE BULK INSERT
BULK UPDATE REDO
REDO1,REDO2 REDOU1,REDOU2
create or replace procedure redou1 is
TYPE T_SM_ID
IS TABLE OF
NUMBER(10) INDEX BY BINARY_INTEGE
R;
TYPE T_SM_SUBID IS TABLE OF
NUMBER(3)
INDEX BY BINARY_INTEGE
R;
TYPE T_ORGADDR
IS TABLE OF
VARCHAR2(21) INDEX BY BINARY_INTEGE
R;
TYPE T_DESTADDR IS TABLE OF
VARCHAR2(21) INDEX BY BINARY_INTEGE
R;
TYPE T_ID_HINT
IS TABLE OF
NUMBER(10) INDEX BY BINARY_INTEGE
R;
V_SM_ID
T_SM_ID;
V_SM_SUBID
T_SM_SUBID;
V_ORGADDR
T_ORGADDR;
V_DESTADDR
T_DESTADDR;
V_ID_HINT
T_ID_HINT;
I INTEGER;
VREDO1 INTEGER;
vredo2 integer;
BEGIN
FOR I IN 1.. 2000
LOOP
V_SM_ID(I):=I;
V_SM_SUBID(I):=12;
V_ORGADDR(I):='111111';
V_DESTADDR(I):='2222';
V_ID_HINT(I):=i;
END LOOP;
select value into vredo1 from v$sysstat where name = 'redo size';
FOR I IN 1..2000 LOOP
update SM_HISTABLE0101 SET ORGADDR=V_ORGADDR(I) WHERE ID_HINT=V_ID_HIN
T(I);
END LOOP;
COMMIT;
commit;
select value into vredo2 from v$sysstat where name = 'redo size';
select value into vredo2 from v$sysstat where name = 'redo size';

dbms_output.put_line('redo size:'||to_char(vredo2-vredo1));
END;
/
create or replace procedure redoU2 is
TYPE T_SM_ID
IS TABLE OF

NUMBER(10)

INDEX BY BINARY_INTEGE

TYPE T_SM_SUBID IS TABLE OF

NUMBER(3)

INDEX BY BINARY_INTEGE

TYPE T_ORGADDR

IS TABLE OF

VARCHAR2(21) INDEX BY BINARY_INTEGE

TYPE T_DESTADDR

IS TABLE OF

VARCHAR2(21) INDEX BY BINARY_INTEGE

TYPE T_ID_HINT

IS TABLE OF

NUMBER(10)

R;
R;
R;
R;
INDEX BY BINARY_INTEGE

R;
V_SM_ID
T_SM_ID;
V_SM_SUBID
T_SM_SUBID;
V_ORGADDR
T_ORGADDR;
V_DESTADDR
T_DESTADDR;
V_ID_HINT
T_ID_HINT;
I INTEGER;
VREDO1 INTEGER;
vredo2 integer;
n integer;
BEGIN
n:=2000;
FOR I IN 1.. N
LOOP
V_SM_ID(I):=I;
V_SM_SUBID(I):=12;
V_ORGADDR(I):='111111';
V_DESTADDR(I):='2222';
V_ID_HINT(I):=i;
END LOOP;
select value into vredo1 from v$sysstat where name = 'redo size';
FORALL I IN 1..N
update SM_HISTABLE0101 SET ORGADDR=V_ORGADDR(I) WHERE ID_HINT=V_ID_HIN
T(I);
COMMIT;
commit;
select value into vredo2 from v$sysstat where name = 'redo size';
select value into vredo2 from v$sysstat where name = 'redo size';
dbms_output.put_line('redo size:'||to_char(vredo2-vredo1));
END;

select max(ktuxescnw * power(2, 32) + ktuxescnb)


exec redou1;
select max(ktuxescnw * power(2, 32) + ktuxescnb)
select max(ktuxescnw * power(2, 32) + ktuxescnb)
exec redou2;
select max(ktuxescnw * power(2, 32) + ktuxescnb)
redo size:578904
PL/SQL procedure successfully completed.
SQL>
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
-----------------------------------87608317
SQL> SQL> SQL>
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
-----------------------------------87608317
SQL> redo size:571168
PL/SQL procedure successfully completed.
SQL>
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------

from x$ktuxe;
from x$ktuxe;
from x$ktuxe;
from x$ktuxe;

87610350
REDO BULK UPDATE
REDO DUMP REDO LOG
CHANGE #3 TYP:2 CLS: 1 AFN:1 DBA:0x00406482 OBJ:122959 SCN:0x0000.0538cbf
d SEQ: 1 OP:11.5
KTB Redo
op: 0x11 ver: 0x01
op: F xid: 0x0003.011.0000724a
uba: 0x00800ac1.32bc.1e
Block cleanout record, scn: 0x0000.0538cbff ver: 0x01 opt: 0x02, entries f
ollow...
itli: 2 flg: 2 scn: 0x0000.0538cbfd
KDO Op code: URP row dependencies Disabled
xtype: XA flags: 0x00000000 bdba: 0x00406482 hdba: 0x00406481
itli: 1 ispac: 0 maxfr: 4863
tabn: 0 slot: 0(0x0) flag: 0x2c lock: 1 ckix: 191
ncol: 29 nnew: 1 size: 0
col 5: [ 6] 31 31 31 31 31 31
OP CODE 11.5 UPDATE

4 10 1
10 VLDB
VLDB
1-200G

2000 2006

HASH

SQL> create table XJTPAR (


2
id integer not null,
3
txt varchar2(100),
4
tdate date
5
)
6
PARTITION BY RANGE (ID)
7 (
8
PARTITION XJPART_01 VALUES
9
PARTITION XJPART_02 VALUES
10
PARTITION XJPART_03 VALUES
11
PARTITION XJPART_04 VALUES
12
);

LESS
LESS
LESS
LESS

THAN
THAN
THAN
THAN

(10000),
(20000),
(30000),
(40000)

Table created.
XJTPAR 4 XJPART_01,XJPA
RT_02,XJPART_03 XJPART_04
DBA_OBJECTS
SQL> col object_name format a10 trunc
SQL> col subobject_name format a12 trunc
SQL> set line 132

SQL> select object_id,object_name,subobject_name,object_type,data_object_id fro


m dba_objects where object_name='XJTPAR';
OBJECT_ID OBJECT_NAM SUBOBJECT_NA OBJECT_TYPE
DATA_OBJECT_ID
---------- ---------- ------------ ------------------- -------------124950 XJTPAR
XJPART_01
TABLE PARTITION
124950
124951 XJTPAR
XJPART_02
TABLE PARTITION
124951
124952 XJTPAR
XJPART_03
TABLE PARTITION
124952
124953 XJTPAR
XJPART_04
TABLE PARTITION
124953
124949 XJTPAR

TABLE

XJTPAR ID 124949
Oracle
Oracle
DATA_OBJECT_ID
DATA_OBJECT_ID XJTPAR
DATA_OBJECT_ID
DBA_SEGMENTS
SQL> col segment_name format a10 trunc
SQL> col subsegment_name format a12 trunc
SQL> select segment_name,partition_name,segment_type,blocks from dba_segments w
here segment_name ='XJTPAR';
SEGMENT_NA PARTITION_NAME
SEGMENT_TYPE
BLOCKS
---------- ------------------------------ ------------------ ---------XJTPAR
XJPART_01
TABLE PARTITION
8
XJTPAR
XJPART_02
TABLE PARTITION
8
XJTPAR
XJPART_03
TABLE PARTITION
8
XJTPAR
XJPART_04
TABLE PARTITION
8
XJTPAR SEGMENT
SEGMENT
SEGMENT TABLE PARTITION
SEGMENT HEADER DATABLOCK DUMP
DBA_EXTENTS SEGMENT
SQL> select segment_name,partition_name,blocks,file_id,block_id from dba_extent
s where segment_name ='XJTPAR';
SEGMENT_NA PARTITION_NAME
BLOCKS
FILE_ID BLOCK_ID
---------- ------------------------------ ---------- ---------- ---------XJTPAR
XJPART_01
8
4
521
XJTPAR
XJPART_02
8
4
529
XJTPAR
XJPART_03
8
4
537
XJTPAR
XJPART_04
8
4
545
DUMP XJPART_01 XJPART_02
SQL> alter system dump datafile 4 block min 521 block max 524;
System altered.
SQL> alter system dump datafile 4 block min 529 block max 533;
System altered.

TRACE
Start dump data blocks tsn: 4 file#: 4 minblk 521 maxblk 524
buffer tsn: 4 rdba: 0x01000209 (4/521)
scn: 0x0000.055f126c seq: 0x01 flg: 0x04 tail: 0x126c2001
frmt: 0x02 chkval: 0x7b74 type: 0x20=FIRST LEVEL BITMAP BLOCK
Hex dump of block: st=0, typ_found=1
...
buffer tsn: 4 rdba: 0x0100020a (4/522)
scn: 0x0000.055f126b seq: 0x01 flg: 0x04 tail: 0x126b2101
frmt: 0x02 chkval: 0x6964 type: 0x21=SECOND LEVEL BITMAP BLOCK
Hex dump of block: st=0, typ_found=1
...
buffer tsn: 4 rdba: 0x0100020b (4/523)
scn: 0x0000.055f126c seq: 0x01 flg: 0x04 tail: 0x126c2301
frmt: 0x02 chkval: 0x46c7 type: 0x23=PAGETABLE SEGMENT HEADER
Hex dump of block: st=0, typ_found=1
...
buffer tsn: 4 rdba: 0x0100020c (4/524)
scn: 0x0000.001d78df seq: 0x01 flg: 0x06 tail: 0x78df0601
frmt: 0x02 chkval: 0x55bc type: 0x06=trans data
Hex dump of block: st=0, typ_found=1
xjpart_01 1ST BMB 2N
D BMB SEGMENT HEADER xjpart_02
Start dump data blocks tsn: 4 file#: 4 minblk 529 maxblk 533
buffer tsn: 4 rdba: 0x01000211 (4/529)
scn: 0x0000.055f1287 seq: 0x01 flg: 0x04 tail: 0x12872001
frmt: 0x02 chkval: 0x7b75 type: 0x20=FIRST LEVEL BITMAP BLOCK
...
buffer tsn: 4 rdba: 0x01000212 (4/530)
scn: 0x0000.055f1286 seq: 0x01 flg: 0x04 tail: 0x12862101
frmt: 0x02 chkval: 0x697d type: 0x21=SECOND LEVEL BITMAP BLOCK
...
buffer tsn: 4 rdba: 0x01000213 (4/531)
scn: 0x0000.055f1287 seq: 0x01 flg: 0x04 tail: 0x12872301
frmt: 0x02 chkval: 0x46c6 type: 0x23=PAGETABLE SEGMENT HEADER
SEGMENT HEADER,
SEGMENT HEADER
BMB

SQL SQL

You might also like