段\區\塊

段(segment)

概述

爲特定的數據庫對象(如表,索引等)分配的一系列數據存儲區域。

默認段名與數據庫對象名相同。

一個對象 一般只對應 一個段。

一個段segment只能屬於一個表空間,但可以跨多個數據文件。

段分爲數據段,索引段,回滾段,臨時段等類型。

 

select segment_name,segment_type,tablespace_name,bytesfrom dba_segments;

【查詢系統中所有段】

SEGMENT_NAME                                                    SEGMENT_TYPE         TABLESPACE_NAME            BYTES

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

WRH$_LATCH_MISSES_SUMMARY                                        TABLE PARTITION    SYSAUX                  65536

WRH$_LATCH_MISSES_SUMMARY_PK                                         INDEX PARTITION    SYSAUX                 65536

WRH$_LATCH_MISSES_SUMMARY_PK                                         INDEX PARTITION    SYSAUX                 65536

WRH$_DB_CACHE_ADVICE                                                   TABLE PARTITION    SYSAUX                  65536

 

SQL> select segment_type fromdba_segments group bysegment_type;

【查詢系統中所有段種類】

SEGMENT_TYPE

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

LOBINDEX

INDEX PARTITION

TABLE PARTITION

NESTED TABLE

ROLLBACK

LOB PARTITION

LOBSEGMENT

INDEX

TABLE

CLUSTER

TYPE2 UNDO

 

11 rows selected.

 

Elapsed: 00:00:00.53

SQL> select distinct segment_type from dba_segments;

【查詢系統中所有段種類】

SEGMENT_TYPE

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

LOBINDEX

INDEX PARTITION

TABLE PARTITION

NESTED TABLE

ROLLBACK

LOB PARTITION

LOBSEGMENT

INDEX

TABLE

CLUSTER

TYPE2 UNDO

 

11 rows selected.

段管理方式

MSSM(manual segment space management手動段空間管理)在每個段中freelist鏈表方式管理段中空閒數據塊(塊中空閒區高於pctfree),是ora9.2以前的數據塊管理方式。

ASSM(automatic segment space management自動段空間管理,默認)以位圖BMBbitmap managed segments)方式管理段中的空閒數據塊(塊中空閒區高於pctfree 值)以避免freelist鏈表競爭,是ora9.2開始新出現的數據塊管理方式。

區別:1.注意ASSM與內存管理中ASMM(自動共享內存管理)不同。

2.DMTdictionary managed tablespace數據字典管理方式)     USET 和 FET

/LMTlocally managed tablespace,本地表管理空間)   每個表的數據文件的頭部加入一個二維表(auotoallocate(16,64k;63 ,1M;120,8M;64M)/uniform(1M))

 

 

和MSSM/ASSM的聯繫與區別:

      兩者都在建立表空間時指定。

      DMT/LMT用於管理(segment 中)空閒的extent.

      MSSM/ASSM用於管理(extent 中的)空閒的block.

SQL> select tablespace_name,extent_management,allocation_type,segment_space_managementfrom dba_tablespaces;

 

TABLESPACE_NAME        EXTENT_MAN ALLOCATIOSEGMEN

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

SYSTEM                   LOCAL      SYSTEM    MANUAL

UNDOTBS1              LOCAL      SYSTEM   MANUAL

SYSAUX                   LOCAL      SYSTEM   AUTO

TEMP                      LOCAL      UNIFORM  MANUAL

USERS                     LOCAL      SYSTEM   AUTO

EXAMPLE                 LOCAL      SYSTEM   AUTO

I                       LOCAL      SYSTEM   AUTO

TEST                       LOCAL      SYSTEM   AUTO

TEST2                     LOCAL      SYSTEM   AUTO

TEMP1                    LOCAL      UNIFORM  MANUAL

TEST4                     LOCAL      SYSTEM   AUTO

TEST5                     LOCAL      SYSTEM   AUTO

T1                    LOCAL      SYSTEM   AUTO

T2                    LOCAL      UNIFORM  AUTO

CWDATA                       LOCAL      SYSTEM   AUTO

CWINDEX                LOCAL      SYSTEM   AUTO

TEMP2                    LOCAL      UNIFORM  MANUAL

TEMP3                    LOCAL      UNIFORM  MANUAL

TEMP4                    LOCAL      UNIFORM  MANUAL

 

19 rows selected.

【查詢表空間的空閒extent管理方式(DMT/LMT(autoallocate/uniform))和空閒block管理方式(MSSM/ASSM)】

SQL> create tablespace tb1 datafile'/u01/tb1.dbf' size 50M segment space management manual;

【指定表空間的段空間管理方式爲MSSM

Tablespace created.

SQL> selecttablespace_name,extent_management,allocation_type,segment_space_management fromdba_tablespaces;

TB1                   LOCAL      SYSTEM   MANUAL

 

數據段

      數據段也稱爲表段,它包含數據並且與表和簇相關。當創建一個表時,系統自動創建一個以該表的名字命名的數據段。

      數據段是用於存儲數據的段,其存儲在數據表空間中。每一個表都有一個數據段,表的數據存儲在數據段中,默認情況下段名與表名相同。

SQL> create table xiao tablespace t1 asselect * from dba_objects;

create table xiao tablespace t1 as select *from dba_objects

                                                *

ERROR at line 1:

ORA-01652: unable to extend temp segment by128 in tablespace T1

SQL>alter tablespace t1 add datafile '/u01/a.dat' size 50M;

【擴展表空間】

Tablespace altered.

 

Elapsed: 00:00:07.48

SQL> create table xiao tablespace t1 as select* from dba_objects;

 

Table created.【在指定表空間中建表】

 

SQL> selectsegment_name,segment_type,tablespace_name,bytes from dba_segments wheresegment_name='XIAO';

【查詢隨建表而建立的數據段】

SEGMENT_NAME                                                    SEGMENT_TYPE         TABLESPACE_NAME            BYTES

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

XIAO                                                         TABLE    T1                        6291456

 

索引段

      索引段用於存儲索引,包含了用於提高系統性能的索引。一旦建立索引,系統自動創建一個以該索引的名字命名的索引段。

SQL> selectsegment_name,segment_type,tablespace_name,bytes from dba_segments wheresegment_name='X' and segment_type='INDEX';

【查詢索引段不存在】

no rows selected

SQL> create index x on xiao (object_id);

【對錶建立索引】

Index created.

 

SQL> selectsegment_name,segment_type,tablespace_name,bytes from dba_segments where segment_name='X'and segment_type='INDEX';

【再查索引段已存在】

SEGMENT_NAME                                                    SEGMENT_TYPE        TABLESPACE_NAME            BYTES

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

X                                                        INDEX    SYSTEM                     983040

 

SQL> selectindex_name,table_name,tablespace_name from dba_indexes where index_name='X';

【注意與索引本身信息的區別】

INDEX_NAME                 TABLE_NAME            TABLESPACE_NAME

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

X                      XIAO                       SYSTEM

 

回退段

      回退段用於存儲用戶數據修改之前的值,因而可以在特定條件下回退數據。回退段與事務是一對多的關係,一個事務只能使用一個回退段,而一個回退段可存放一個或多個事務的回退數據。當一個事務開始處理時,系統爲之分配回滾段存儲回滾信息,當所有回退段都已被事務佔用時,系統將創建出新的回退段來存儲新事務的回滾信息,當表空間中無空間可用於再分配新的回退段時,多個事務將共用一個回退段。

      Oracle9i之後,oracle增加了undo表空間,由系統自動管理。故可不再需要考慮對回退段的管理,在系統自動管理模式下,ORACLE會自動完成回退段的創建、刪除以及ONLINE/OFFLINEDBA不能干預這些操作

SQL> select segment_id,segment_name fromdba_rollback_segs;

【查詢Undo表空間中的回退段】

SEGMENT_ID SEGMENT_NAME

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

       0 SYSTEM   【系統回滾段】

       1 _SYSSMU1$

       2 _SYSSMU2$

       3 _SYSSMU3$

       4 _SYSSMU4$

       5 _SYSSMU5$

       6 _SYSSMU6$

       7 _SYSSMU7$

       8 _SYSSMU8$

       9 _SYSSMU9$

      10_SYSSMU10$

 

11 rows selected.

 

SQL> selecta.name,b.xacts,b.writes,b.extents,b.rssize from v$rollname a,v$rollstat b wherea.usn=b.usn;

【查每個回退段名稱,每個段當前所包含活動事務數,啓動後每個段上所有活動事務在該段上所佔字節數每個段的大小(extents的個數)每個段的大小(字節數)。】

NAME                        XACTS    WRITES EXTENTS     RSSIZE

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

SYSTEM                       0    7728           6    385024

_SYSSMU1$                  0     336628          3   1171456

_SYSSMU2$                  0     463522          3   1171456

_SYSSMU3$                  0     185212          3   1171456

_SYSSMU4$                  0     110000          3   1171456

_SYSSMU5$                  0     108264          3   1171456

_SYSSMU6$                  0      89612          3   1171456

_SYSSMU7$                  0     182510          3   1171456

_SYSSMU8$                  0     194032          4    253952

_SYSSMU9$                  0     315174          4    253952

_SYSSMU10$                      0     202786          3   1171456

 

11 rows selected.

 

SQL> drop table t1;

 

Table dropped.

 

Elapsed: 00:00:04.71

SQL> create table t1 as select * fromdba_objects where 1=2;

 

Table created.

 

Elapsed: 00:00:00.08

SQL> insert into t1 select * fromdba_objects;

 

50793 rows created.

SQL> select a.name,b.xacts,b.writes,b.extentsfrom v$rollname a,v$rollstat b where a.usn=b.usn;

 

NAME                        XACTS    WRITES EXTENTS

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

SYSTEM                       0    7728           6

_SYSSMU1$                  0     343316          3

_SYSSMU2$                  0     480452          3

_SYSSMU3$                  0     197400          3

_SYSSMU4$                  0     118040          3

_SYSSMU5$                  1     309656          3

_SYSSMU6$                  0      98656          3

_SYSSMU7$                  0     189976          3

_SYSSMU8$                  0     211206          4

_SYSSMU9$                  0   12295186         27

_SYSSMU10$                      0     234340          3

 

11 rows selected.

SQL> delete from t1;

 

50793 rows deleted.

 

Elapsed: 00:00:15.26

SQL> selecta.name,b.xacts,b.writes,b.extents from v$rollname a,v$rollstat b wherea.usn=b.usn;

 

NAME                        XACTS    WRITES EXTENTS

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

SYSTEM                       0    7728           6

_SYSSMU1$                  0     343316          3

_SYSSMU2$                  0     480452          3

_SYSSMU3$                  0     197400          3

_SYSSMU4$                  0     118040          3

_SYSSMU5$                  1   12086214         14

_SYSSMU6$                  0      98932          3

_SYSSMU7$                  0     190402          3

_SYSSMU8$                  0     211360          4

_SYSSMU9$                  0   12295186         27

_SYSSMU10$                      0     234340          3

 

11 rows selected.

 

 

SQL> select segment_name,extent_id,bytes,status from dba_undo_extents;

 

SEGMENT_NAME                 EXTENT_ID      BYTES STATUS

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

_SYSSMU1$                  0      65536 EXPIRED

_SYSSMU1$                  1      65536 UNEXPIRED

_SYSSMU1$                  2    1048576 UNEXPIRED

_SYSSMU2$                  0      65536 EXPIRED

_SYSSMU2$                  1      65536 EXPIRED

_SYSSMU2$                  2    1048576 EXPIRED

_SYSSMU3$                  0      65536 EXPIRED

_SYSSMU3$                  1      65536 EXPIRED

_SYSSMU3$                  2    1048576 EXPIRED

_SYSSMU4$                  0      65536 EXPIRED

_SYSSMU4$                  1      65536 EXPIRED

_SYSSMU4$                  2    1048576 EXPIRED

_SYSSMU5$                  0      65536 ACTIVE

_SYSSMU5$                  1      65536 ACTIVE

_SYSSMU5$                  2    1048576 ACTIVE

_SYSSMU5$                  3    1048576 ACTIVE

_SYSSMU5$                  4    1048576 ACTIVE

_SYSSMU5$                  5    1048576 ACTIVE

_SYSSMU5$                  6    1048576 ACTIVE

_SYSSMU5$                  7    1048576 ACTIVE

_SYSSMU5$                  8    1048576 ACTIVE

_SYSSMU5$                  9    1048576 ACTIVE

 

SEGMENT_NAME                 EXTENT_ID     BYTES STATUS

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

_SYSSMU5$                   10   1048576 ACTIVE

_SYSSMU5$                   11   1048576 ACTIVE

_SYSSMU5$                   12   1048576 ACTIVE

_SYSSMU5$                   13   1048576 ACTIVE

_SYSSMU6$                  0      65536 EXPIRED

_SYSSMU6$                  1      65536 EXPIRED

_SYSSMU6$                  2    1048576 EXPIRED

_SYSSMU7$                  0      65536 EXPIRED

_SYSSMU7$                  1     65536 EXPIRED

_SYSSMU7$                  2    1048576 EXPIRED

_SYSSMU8$                  0      65536 EXPIRED

_SYSSMU8$                  1      65536 EXPIRED

_SYSSMU8$                  2      65536 EXPIRED

_SYSSMU8$                  3      65536 EXPIRED

_SYSSMU9$                  0      65536 UNEXPIRED

_SYSSMU9$                  1      65536 UNEXPIRED

_SYSSMU9$                  2      65536 UNEXPIRED

_SYSSMU9$                  3      65536 UNEXPIRED

_SYSSMU9$                  4      65536 UNEXPIRED

_SYSSMU9$                  5      65536 UNEXPIRED

_SYSSMU9$                  6      65536 UNEXPIRED

_SYSSMU9$                  7      65536 UNEXPIRED

 

SEGMENT_NAME                 EXTENT_ID     BYTES STATUS

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

_SYSSMU9$                  8      65536 UNEXPIRED

_SYSSMU9$                  9      65536 UNEXPIRED

_SYSSMU9$                   10     65536 UNEXPIRED

_SYSSMU9$                   11     65536 UNEXPIRED

_SYSSMU9$                   12     65536 UNEXPIRED

_SYSSMU9$                   13     65536 UNEXPIRED

_SYSSMU9$                   14     65536 UNEXPIRED

_SYSSMU9$                   15   1048576 UNEXPIRED

_SYSSMU9$                   16   1048576 UNEXPIRED

_SYSSMU9$                   17   1048576 UNEXPIRED

_SYSSMU9$                   18   1048576 UNEXPIRED

_SYSSMU9$                   19   1048576 UNEXPIRED

_SYSSMU9$                   20   1048576 UNEXPIRED

_SYSSMU9$                   21   1048576 UNEXPIRED

_SYSSMU9$                   22   1048576 UNEXPIRED

_SYSSMU9$                   23   1048576 UNEXPIRED

_SYSSMU9$                  24    1048576 UNEXPIRED

_SYSSMU9$                   25   1048576 UNEXPIRED

_SYSSMU9$                   26     65536 UNEXPIRED

_SYSSMU10$                      0      65536 EXPIRED

_SYSSMU10$                      1      65536 EXPIRED

_SYSSMU10$                      2    1048576 EXPIRED

【查回退段的extent分配詳情及狀態】

Active:有活動事務在此extent上

Unexpired(未過期的,爲盡的):已結束事務,undo信息未達到undo_retention(保留,扣留,記憶)時間限制

Expired(過期的,失效的):已結束事務,undo信息超過undo_retention時間限制。

SQL> create table xiaoxue.t1 as select *from dba_objects;

 

Table created.

 

SQL> alter database datafile'/u01/a.dat' autoextend on maxsize 100M;

 

Database altered.

 

SQL>alter tablespace CWdata add datafile '/u01/e.dat' size 50M;

 

Tablespacealtered.

[oracle@desktop241 ~]$ sqlplusxiaoxue/123456

 

SQL> insert into t1 select * from t1;

 

50794 rows created.

 

Elapsed: 00:00:07.71

SQL> insert into t1 select * from t1;

 

101588 rows created.

 

Elapsed: 00:00:07.08

SQL> insert into t1 select * from t1;

 

203176 rows created.

 

SQL> selecta.username,b.name,c.used_ublk from v$session a,v$rollname b,v$transaction cwhere a.saddr=c.ses_addr and b.usn=c.xidusn;

【查DB中所有活動(未提交或回退)事務所佔用的回退段情況,sys】

USERNAME               NAME                       USED_UBLK

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

XIAOXUE                _SYSSMU9$                   166

 

SQL> selecta.name,b.xacts,b.writes,b.extents from v$rollname a,v$rollstat b wherea.usn=b.usn;[]

 

NAME                        XACTS    WRITES EXTENTS

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

SYSTEM                       0    7728           6

_SYSSMU1$                  0     447038          3

_SYSSMU2$                  0     519708          3

_SYSSMU3$                  0     274628          3

_SYSSMU4$                  0     236260          3

_SYSSMU5$                  0   12095186         14

_SYSSMU6$                  0     171158          3

_SYSSMU7$                  0     213268          3

_SYSSMU8$                  0     233848          4

_SYSSMU9$                  1   13797338          6

_SYSSMU10$                      0     357506          3

 

11 rows selected.

SQL> rollback;

 

Rollback complete.

SQL> selecta.name,b.xacts,b.writes,b.extents from v$rollname a,v$rollstat b wherea.usn=b.usn;

 

NAME                        XACTS    WRITES EXTENTS

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

SYSTEM                       0    7728           6

_SYSSMU1$                  0     447410          3

_SYSSMU2$                  0     519862          3

_SYSSMU3$                  0     275584          3

_SYSSMU4$                  0     236590          3

_SYSSMU5$                  0   12095962         14

_SYSSMU6$                  0     172834          3

_SYSSMU7$                  0     213804          3

_SYSSMU8$                  0     235596          4

_SYSSMU9$                  0   13797338          6

_SYSSMU10$                      0     357782          3

 

11 rows selected.

【回退上頁事務後再查回退段的使用情況】

 

SQL> selectsegment_name,extent_id,bytes,status from dba_undo_extents;

 

SEGMENT_NAME                 EXTENT_ID     BYTES STATUS

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

_SYSSMU1$                  0      65536 EXPIRED

_SYSSMU1$                  1      65536 EXPIRED

_SYSSMU1$                  2    1048576 EXPIRED

_SYSSMU2$                  0      65536 EXPIRED

 

事務可以使用回滾段的同一個區,但每個回滾段的塊只能包含一個事務的信息。

例如(兩個事務使用同一個回滾段,該回滾段由四個區):

1.   事務在進行中,他們正在使用回滾段的第三個區;

2.   當第三個區滿後,事務將寫到第四個區,當事務開始寫到一新區時,稱翻轉WRAP;

3.   當第四個區用滿時,若第一個區是空閒或非活動的,即該區中所有事務均已完成,沒有未提交或回退事務,則事務將循環再使用第一個區。

回滾段的擴張(EXTEND)

      在當前區的所有塊用完而事務還需要更多還需要更多的回滾空間時,將使用回滾的下一個區,當 最後一個區用完,將循環重新使用第一個區。

      回滾段使用下一個區的前提是下一個區沒有活動事務,若下一個區正在使用即存在活動事務時,則需進行回滾段擴張,事務將:

1.   從undo表空間中爲回滾段分配一個新的空閒區,或從其他回滾段中獲取一個expire狀態的區,插入到當前區和下一個區之間。

2.   若Undo空間已無新空閒區,或其他回滾段中也無exipre狀態區,則嘗試擴張undo空間;

3.   若表空間autoextensiable自動擴張屬性被禁止,則嘗試從其他回滾段中獲取unexipre狀態(未超過retention 期限)的區(因此可能導致之後發生01555錯))

4.   若上面所有擴張方法均失敗,則報錯空間不足。

爲確保其他回滾段中unexpired狀態的區不被用掉,避免01555錯誤,可設置參數guarantee,則extent將一定保留到超過retention時間,則回滾段擴展時將跳過第3步。

 

SQL> alter tablespace undotbs1 retention guarantee;

 

Tablespace altered.

 

SQL> select segment_name,owner,status from dba_rollback_segs;

【查詢數據庫自動管理回退信息時在undo表空間中使用的回退段】

SEGMENT_NAME             OWNER STATUS

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

SYSTEM                   SYS   ONLINE

_SYSSMU1$              PUBLIC ONLINE

_SYSSMU2$              PUBLIC ONLINE

_SYSSMU3$              PUBLIC ONLINE

_SYSSMU4$              PUBLIC ONLINE

_SYSSMU5$              PUBLIC ONLINE

_SYSSMU6$              PUBLIC ONLINE

_SYSSMU7$              PUBLIC ONLINE

_SYSSMU8$              PUBLIC ONLINE

_SYSSMU9$              PUBLIC ONLINE

_SYSSMU10$                  PUBLIC ONLINE

 

11 rows selected.

 

SQL> create table a as select * from dba_objects;

 

Table created.

 

Elapsed: 00:00:03.06

SQL> create table b as select * from dba_objects;

 

Table created.

SQL> delete from a;

 

50794 rows deleted.

 

Elapsed: 00:00:19.61

SQL> select distinct sid from v$mystat;

【建兩個測試表,發起一個delete操作耗費回滾段空間,並查找出任務號】

       SID

----------

       158

 

 

[oracle@desktop241 ~]$ sqlplus / as sysdba

【另開一個會話併發起另一個update操作耗費回滾段空間,並查找出任務號】

 

SQL> update b set object_id=0;

 

50795 rows updated.

 

Elapsed: 00:00:30.18

SQL> select distinct sid from v$mystat;

 

       SID

----------

       139

【會話號】

SQL> select r.name,s.serial#,s.sid,s.username,t.status,t.cr_get,t.phy_io,t.used_ublk,t.noundo,substr(s.program,1,40)from sys.v_$session s,sys.v_$transaction t,sys.v_$rollname r where t.addr =s.taddr and t.xidusn = r.usn and s.sid = 158;

 

NAME                       SERIAL#  SID USERNAME                STATUS      CR_GET     PHY_IO  USED_UBLK NOU SUBSTR(S.PROGRAM,1,40)

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

_SYSSMU8$                  7    158 SYS                    ACTIVE           879       448  1466 NO [email protected] (TNS V1-V

 

Elapsed: 00:00:00.09

SQL> select r.name,s.serial#,s.sid,s.username,t.status,t.cr_get,t.phy_io,t.used_ublk,t.noundo,substr(s.program,1,40)from sys.v_$session s,sys.v_$transaction t,sys.v_$rollname r where t.addr =s.taddr and t.xidusn = r.usn and s.sid = 139;

 

NAME                       SERIAL#  SID USERNAME                STATUS      CR_GET     PHY_IO  USED_UBLK NOU SUBSTR(S.PROGRAM,1,40)

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

_SYSSMU10$                  76    139 SYS                    ACTIVE          1544       390 1030 NO [email protected] (TNS V1-V

 

SQL> selectr.name,s.serial#,s.sid,s.username,t.status,t.cr_get,t.phy_io,t.used_ublk,t.noundo,substr(s.program,1,40)from sys.v_$session s,sys.v_$transaction t,sys.v_$rollname r where t.addr =s.taddr and t.xidusn = r.usn and s.sid = &sid;

Enter value for sid: 139

 

回滾表空間的回縮(SHRINK)

Undo表空間被系統自動重複使用,當有大事務發生時,系統將自動擴充undo表空間,但不會自動進行回縮,故需手工回縮undo表空間。

 

SQL> create undo tablespace undotbs02 datafile'/u01/app/oracle/oradata/ora10/undotbs02.dbf' size 50M;

【新建回滾表空間】

Tablespace created.

 

Elapsed: 00:00:05.12

SQL> alter system set undo_tablespace=undotbs02;

【設置新的回滾表空間】

System altered.

 

Elapsed: 00:00:00.27

SQL> show parameter undo_tablespace;

【查詢當前使用的undo表空間名】

NAME                          TYPE   VALUE

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

undo_tablespace                string   UNDOTBS02

SQL> select segment_name,owner,status from dba_rollback_segs;

【查詢數據庫自動管理回退信息時在undo表空間中使用的回退段。可見原測試所佔回退段仍online,提交或回退測試語句不久後將offline,才能刪除原undo空間,若原undo空間中還含有unexpire區,則可能導致之後發生01555錯,故應等待retention時間長度後再刪原undo空間】

SEGMENT_NAME             OWNER STATUS

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

SYSTEM                   SYS   ONLINE

_SYSSMU1$              PUBLIC OFFLINE

_SYSSMU2$              PUBLIC OFFLINE

_SYSSMU3$              PUBLIC OFFLINE

_SYSSMU4$              PUBLIC OFFLINE

_SYSSMU5$              PUBLIC OFFLINE

_SYSSMU6$              PUBLIC OFFLINE

_SYSSMU7$              PUBLIC OFFLINE

_SYSSMU8$              PUBLIC OFFLINE

_SYSSMU9$              PUBLIC OFFLINE

_SYSSMU10$                  PUBLIC ONLINE

_SYSSMU11$                  PUBLIC ONLINE

_SYSSMU12$                  PUBLIC ONLINE

_SYSSMU13$                  PUBLIC ONLINE

_SYSSMU14$                  PUBLIC ONLINE

_SYSSMU15$                  PUBLIC ONLINE

_SYSSMU16$                  PUBLIC ONLINE

_SYSSMU17$                  PUBLIC ONLINE

_SYSSMU18$                  PUBLIC ONLINE

_SYSSMU19$                  PUBLIC ONLINE

_SYSSMU20$                  PUBLIC ONLINE

 

21 rows selected.

 

臨時段

      當一個SQL語句需要臨時工作區時,由oracle將臨時表空間創建爲臨時段。一旦語句執行完畢,臨時表空間即臨時段的空間便退回給系統。

      臨時段用於order by 語句的排序以及一些彙總。

SQL> alter database default temporarytablespace temp;

 

Database altered.

 

Elapsed: 00:00:00.23

SQL> selectsegment_file,total_extents,total_blocks,used_extents,used_blocks,free_extentsfrom v$sort_segment;

【查臨時表空間(臨時段的總區、塊數,已用區、塊數及空閒區、塊數】

SEGMENT_FILE TOTAL_EXTENTS TOTAL_BLOCKS USED_EXTENTS USED_BLOCKS FREE_EXTENTS

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

         0           0        0         0            0         0

 

SQL> selectusername,segfile#,extents,blocks from v$sort_usage;

【查當前使用臨時表空間(臨時段)中的用戶,及所佔區、塊數】

no rows selected

 

 

SQL> conn xiaoxue/123456

 

SQL> select a.table_name,b.table_namefrom dict a,dict b order by a.table_name;

 

SQL> conn scott/tiger

SQL> select a.table_name,b.table_namefrom dict a,dict b order by b.table_name;

 

 

SQL> alter database default temporarytablespace temp2;

 

Database altered.

 

Elapsed: 00:00:00.13

SQL> selectusername,segfile#,extents,blocks from v$sort_usage;

 

USERNAME             SEGFILE#    EXTENTS BLOCKS

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

SCOTT                         202      20        2560

XIAOXUE                     202      21        2688

 

Elapsed: 00:00:00.16

SQL> selectsegment_file,total_extents,total_blocks,used_extents,used_blocks,free_extentsfrom v$sort_segment;

 

SEGMENT_FILE TOTAL_EXTENTS TOTAL_BLOCKS USED_EXTENTSUSED_BLOCKS FREE_EXTENTS

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

         0           0        0         0            0         0

         0           41     5248        41        5248         0

         0           0        0         0            0         0

 

SQL> select segment_file,total_extents,total_blocks,used_extents,used_blocks,free_extents,free_blocksfrom v$sort_segment;

 

SEGMENT_FILE TOTAL_EXTENTS TOTAL_BLOCKSUSED_EXTENTS USED_BLOCKS FREE_EXTENTS FREE_BLOCKS

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

         0           0        0         0            0         0           0

         0           41     5248        41        5248         0           0

         0           0        0         0            0         0           0

 

 

SQL> create temporary tablespacetempp  tempfile '/u01/temp01.dat' size10M;

 

Tablespace created.

 

Elapsed: 00:00:02.56

SQL> alter database default temporarytablespace tempp;

 

Database altered.

 

$Sqlplus /  as sysdba

SQL> create temporary tablespacetempp  tempfile '/u01/temp01.dat' size10M;

 

Tablespace created.

 

Elapsed: 00:00:02.56

SQL> alter database default temporarytablespace tempp;

 

Database altered.

 

Elapsed: 00:00:00.07

SQL> alter database tempfile'/u01/temp01.dat' autoextend on;

 

Database altered.

SQL> select a.table_name,b.table_namefrom dict a,dict b order by a.table_name;

SQL> conn / as sysdba

Connected.

 

SQL> selecttotal_extents,total_blocks,used_extents,used_blocks,free_extents,free_blocksfrom v$sort_segment;

 

TOTAL_EXTENTS TOTAL_BLOCKS USED_EXTENTSUSED_BLOCKS FREE_EXTENTS FREE_BLOCKS

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

          0          0        0        0        0        0

         41          5248        0        0       41     5248

          0          0        0        0        0        0

          9          1152        0        0        9     1152

 

SQL> select total_extents,total_blocks,used_extents,used_blocks,free_extents,free_blocksfrom v$sort_segment;

 

TOTAL_EXTENTS TOTAL_BLOCKS USED_EXTENTSUSED_BLOCKS FREE_EXTENTS FREE_BLOCKS

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

          0          0         0        0        0        0

         41          5248        0        0       41     5248

          0          0        0        0        0        0

         63          8064       63       8064        0        0

 

 

SQL> selecttotal_extents,total_blocks,used_extents,used_blocks,free_extents,free_blocksfrom v$sort_segment;

 

TOTAL_EXTENTS TOTAL_BLOCKS USED_EXTENTSUSED_BLOCKS FREE_EXTENTS FREE_BLOCKS

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

          0          0        0        0        0        0

         41          5248        0        0       41     5248

          0          0        0        0        0        0

         71          9088       71       9088        0        0

 

 

 

SQL> selecttotal_extents,total_blocks,used_extents,used_blocks,free_extents,free_blocksfrom v$sort_segment;

 

TOTAL_EXTENTS TOTAL_BLOCKS USED_EXTENTSUSED_BLOCKS FREE_EXTENTS FREE_BLOCKS

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

          0          0        0        0        0        0

         41          5248        0        0       41     5248

          0          0        0        0        0        0

        159         20352      159      20352            0        0

 

區(extent)

概述

又稱範圍,是一組表空間內連續分配的相鄰數據塊。

是數據庫分配磁盤空間的最小邏輯單位,也是表中數據增長的基本單位。

一個oracle對象包含至少一個數據區。

區的storage分配參數:

Initial:    段建立時被分配的第一個區(第一塊空間)的大小;

Next:      段被分配的第二個區的大小;

Minextents: 段被分配的區個數下限;

Maxextents:段被分配的區個數上限;

Pctincrease:從第3個分區開始,段被分配的新區比以前一個分配的分區擴大的百分比;

 

Autoallocate管理方式下,表空間的extent分配原則是:initial,min,max自動取默認值(分別爲64k,1,2^31),nextpct參數無效;表空間中建表時,extent分配情況按表空間所定參數進行,並以下列規則進行extent擴充,而建表時指定上述各項storage參數無效。

Next,pct 參數無效,所有空間分配按64K的整數倍大小進行分配;

第0—15 個分區,每個分區大小64k,合計1M;

第16—79個分區,每個分區大小1M,合計63M;

以上兩項大小合計64M;

第80—199個分區,每個分區大小8M,合計960M,

以上三項大小合計1024M;

第200個分區以上,每個分區大小是64M。

 

Oracle10.2.0.2分區分配規則:

第0—127個分區,每個分區大小8M,合計1G;

第128個分區以上,每個分區64M。

 

SQL> create tablespace tb2 datafile'tb2.dbf' size 50M;

【建表空間默認使用autoallocate管理方式】

Tablespace created.

 

Elapsed: 00:00:03.94

SQL> selectsubstr(tablespace_name,1,8),initial_extent,next_extent,min_extents,max_extents,pct_increasefrom dba_tablespaces;

【查看錶空間分區情況】

SUBSTR(TABLESPAC INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTSPCT_INCREASE

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

SYSTEM              65536                 1 2147483645

UNDOTBS1         65536                 1 2147483645

SYSAUX              65536                 1 2147483645

TEMP               1048576     1048576          1                   0

USERS               65536                 1 2147483645

EXAMPLE            65536                 1 2147483645

I                  65536                 1 2147483645

TEST                  65536                 1 2147483645

TEST2                65536                 1 2147483645

TEMP1             1048576     1048576          1                   0

TEST4                65536                 1 2147483645

TEST5                65536                 1 2147483645

T1               65536                 1 2147483645

T2             2097152     2097152          1 2147483645            0

CWDATA                  65536                 1 2147483645

CWINDEX           65536                 1 2147483645

TEMP2             1048576     1048576          1                   0

TEMP3             1048576     1048576          1                   0

TEMP4             1048576     1048576          1                   0

TB1              65536                 1 2147483645

UNDOTBS0         65536                 1 2147483645

TB2             65536                 1 2147483645

 

22 rows selected.

 

SQL> create table t2 tablespace tb2storage(initial 50k next 80k minextents 3 maxextents 9 pctincrease 40) asselect * from dba_objects where 1=2;

【建表時指定分區參數】

Table created.

 

SQL> selectsubstr(table_name,1,8),initial_extent,next_extent,min_extents,max_extents,pct_increasefrom dba_tables where table_name='T2';

【查表分區參數,可見所有指定參數均失效】

SUBSTR(TABLE_NAM INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTSMAX_EXTENTS PCT_INCREASE

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

T2             253952       81920           1 2147483645

 

50+80+80*40%+1=242k

SQL> selectextent_id,substr(segment_name,1,8),tablespace_name,bytes from dba_extents wheresegment_name='T2';

【查詢指定表的實際分區情況,可見首個分區分配爲64K

 EXTENT_ID SUBSTR(SEGMENT_N TABLESPACE_NAME                BYTES

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

       0 T2             TB2                      65536

       1 T2             TB2                      65536

       2 T2             TB2                      65536

       3 T2             TB2                      65536

 

SQL> insert into t2 select * fromdba_objects;

【擴充表後再用上一條命令查表的實際分區情況,可見擴充分區分配滿足上頁規則】

50795 rows created.

SQL> selectextent_id,substr(segment_name,1,8),tablespace_name,bytes from dba_extents wheresegment_name='T2';

 

 EXTENT_ID SUBSTR(SEGMENT_N TABLESPACE_NAME                BYTES

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

       0 T2             TB2                      65536

       1 T2             TB2                      65536

       2 T2             TB2                      65536

       3 T2             TB2                      65536

       4 T2             TB2                      65536

       5 T2             TB2                      65536

       6 T2             TB2                      65536

       7 T2             TB2                      65536

       8 T2             TB2                      65536

       9 T2             TB2                      65536

      10T2             TB2                      65536

      11T2             TB2                      65536

      12T2             TB2                      65536

      13T2             TB2                      65536

      14T2             TB2                      65536

      15T2             TB2                      65536

      16T2             TB2                       1048576

      17T2             TB2                       1048576

      18T2             TB2                       1048576

      19T2             TB2                       1048576

      20T2             TB2                       1048576

 

21 rows selected.

 

Uniform管理方式下,表空間的extent分配原則是:initial,next值固定爲uniform 指定值,min,max,pct參數自動設置默認值(分別爲1,2^310;表空間中新建表時,extent分配情況按表空間所定參數進行,並以固定不變的uniform值進行extent擴充,而建表時指定上述各項storage參數無效

 

SQL> create tablespace tb1 datafile'tb1.dbf' size 50Muniform size 1500k;

【建表空間指定Uniform分區大小】

Tablespace created.

 

SQL> select substr(tablespace_name,1,8),initial_extent,next_extent,min_extents,max_extents,pct_increasefrom dba_tablespaces;

【查表空間分區分配情況】

SUBSTR(TABLESPAC INITIAL_EXTENT NEXT_EXTENTMIN_EXTENTS MAX_EXTENTS PCT_INCREASE

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

SYSTEM              65536                 1 2147483645

UNDOTBS1         65536                 1 2147483645

SYSAUX              65536                 1 2147483645

TEMP               1048576     1048576          1                   0

USERS                65536                 1 2147483645

EXAMPLE            65536                 1 2147483645

I                  65536                 1 2147483645

TEST                  65536                 1 2147483645

TEST2                65536                 1 2147483645

TEMP1             1048576     1048576          1                   0

TEST4                65536                 1 2147483645

TEST5                65536                 1 2147483645

T1               65536                 1 2147483645

T2             2097152     2097152          1 2147483645            0

CWDATA                  65536                 1 2147483645

CWINDEX           65536                 1 2147483645

TEMP2             1048576     1048576          1                   0

TEMP3             1048576     1048576          1                   0

TEMP4             1048576     1048576          1                   0

TB1            1540096     1540096          1 2147483645            0

UNDOTBS0         65536                 1 2147483645

TB2              65536                 1 2147483645

 

22 rows selected.

 

SQL> create table t1 tablespace tb1storage (initial 50k next 80k minextents 3 maxextents 9 pctincrease 40) asselect * from dba_objects where 1=2;

【建表時指定分區參數】

Table created.

 

SQL> select substr(table_name,1,8),initial_extent,next_extent,min_extents,max_extents,pct_increasefrom dba_tables where table_name='T1';

【查表分區參數,可見所有指定參數均失效】

SUBSTR(TABLE_NAM INITIAL_EXTENT NEXT_EXTENTMIN_EXTENTS MAX_EXTENTS PCT_INCREASE

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

T1               65536    1048576           1 2147483645

T1             253952       81920           1  2147483645            0

 

SQL> selectextent_id,substr(segment_name,1,8),tablespace_name,bytes from dba_extents wheresegment_name='T1';

【查詢指定表的實際分區情況,可見首個分區分配爲uniform指定值】

 EXTENT_ID SUBSTR(SEGMENT_N TABLESPACE_NAME                BYTES

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

       0 T1             TB1                       1540096

 

 

SQL> insert into t1 select * fromdba_objects;

【擴充表後再用上一條命令查表的實際分區情況,可見擴充分區分配也均爲uniform值】

50795 rows created.

 

Elapsed: 00:00:01.93

SQL> selectextent_id,substr(segment_name,1,8),tablespace_name,bytes from dba_extents wheresegment_name='T1';

 

 EXTENT_ID SUBSTR(SEGMENT_N TABLESPACE_NAME                BYTES

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

       0 T1             TB1                       1540096

       1 T1             TB1                       1540096

       2 T1             TB1                       1540096

       3 T1             TB1                       1540096

     

塊(block)

概述

是一個或一組連續的OS塊(512bytes),大小是OS塊的整數倍。

是數據庫中粒度最小的數據組織單位管理單位

是數據文件磁盤存儲空間單位,也是數據庫I/O的最小單位

數據塊大小由DB_BLOCK_SIZE參數決定,默認8K

9i以前只能設定一種塊大小,9i/10g中不同表空間可指定不同塊大小。

 

塊結構

塊頭: 塊概要信息,包括塊地址,段類型

表目錄:在該塊中存儲了數據行的表的表信息

行目錄:存儲在該塊中的數據行的行信息

空閒區:用於插入新行和需要額外空間的行更新

行數據:存儲在該塊中的數據行的具體內容

 

塊參數(pctfree,pctused)

Pctfree(默認值10)

      當向一個空數據塊插入的數據量達到該數據塊大小1-pctfree時,即停止對該塊進行插入(剩餘空間留給update更新使用),而再分配另一新數據塊進行插入,並將該塊從空閒塊列表freelist中移出。

      經常進行update的表應將pctfree調高,則更新時可儘量保證更新數據仍位於原數據塊中,避免發生行遷移或行鏈接。因爲update操作會消耗掉空閒空間,當一個塊中的空閒空間因爲太小而不夠update操作消耗的話,系統就會增加新塊,從而形成記錄鏈接或行遷移映響表的I/O功能。

Pctused(默認值40)

      當數據塊內數據被刪除到pctused所指定的值時,即將該塊移入空閒列表freelist中,使其可以接受新數據的插入。

      經常進行delete的表應將pctused調高,以便能有效利用空間,因爲一個pctused值較高的數據塊,其中能存放的數據將更多,該參數和pctfree配合使用,pctused越大越有利於insert,pctfree越大越有利於update,兩參數加起來不能超過100.

 

行遷移:一行記錄初始插入時可以存儲在一個塊中,但因後來更新導致行長增加,而塊的自由空間已經完全滿了,此時產生行遷移,將整行的數據遷移到一個新的數據塊上,而將該行原先的空間只放一個指針,指向該行的新的位置。

 

行鏈接:當第一次插入數據時一個塊就不能存下一行記錄的情況下,系統將使用鏈接在多個塊中存儲該記錄。

 

SQL> create tablespace tb2 datafile't.dbf' size 10M;

 

Tablespace created.

 

SQL> create table t3 (x int,yvarchar2(200)) pctfree 0;

 

Table created.

 

SQL> create table t4 (x int,yvarchar2(200)) pctfree 20;

 

Table created.

 

SQL> begin

 2  for I in 1..4000

 3  loop

 4  insert into t3 values(I,'aaaaaaaaaa');

 5  insert into t4 values(I,'aaaaaaaaaa');

 6  end loop;

 7  commit;

 8  end;

 9  /

 

PL/SQL procedure successfully completed

 

SQL> select extent_id,blocks,block_idfrom dba_extents wheresegment_name='T3';

 

EXTENT_ID BLOCKS BLOCK_ID

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

      0      8   63537

      1      8   64041

 

SQL> select extent_id,blocks,block_idfrom dba_extents where segment_name='T4';

 

EXTENT_ID BLOCKS BLOCK_ID

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

      0      8   63569

      1      8   63897

 

SQL> analyze table t3 computestatistics;

 

Table analyzed.

 

SQL> analyze table t4 computestatistics;

 

Table analyzed.

 

SQL> select chain_cnt from dba_tableswhere table_name='T3';

 

CHAIN_CNT

---------

      0

 

SQL> select chain_cnt from dba_tableswhere table_name='T4';

 

CHAIN_CNT

---------

      0

 

 

SQL> update t3 set y='aaaaaaaaaaa';

 

4000 rows updated.

 

SQL> update t4 set y='aaaaaaaaaaa';

 

4000 rows updated.

 

SQL> commit;

 

Commit complete.

 

SQL> analyze table t3 computestatistics;

 

Table analyzed.

 

SQL> analyze table t4 computestatistics;

 

Table analyzed.

 

SQL> select chain_cnt from dba_tableswhere table_name='T3';【行鏈接信息】

 

CHAIN_CNT

---------

     402

 

SQL> select chain_cnt from dba_tableswhere table_name='T4';

 

CHAIN_CNT

---------

      0

 

 

SQL> select extent_id,blocks,block_idfrom dba_extents where segment_name='T3';

 

EXTENT_ID BLOCKS BLOCK_ID

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

      0      8   63537

      1      8   64041

 

SQL> select extent_id,blocks,block_idfrom dba_extents where segment_name='T4';

 

EXTENT_ID BLOCKS BLOCK_ID

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

      0      8   63569

      1      8   63897

 

SQL> selecttablespace_name,segment_space_management from dba_tablespaces;

【查詢表空間的段空間管理方式,ASSM方式下建立的表將忽略pct_used參數

TABLESPACE_NAME        SEGMEN

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

SYSTEM                   MANUAL

UNDOTBS1              MANUAL

SYSAUX                   AUTO

TEMP                      MANUAL

USERS                     AUTO

EXAMPLE                 AUTO

I                       AUTO

TEST                       AUTO

TEST2                     AUTO

TEMP1                    MANUAL

TEST4                     AUTO

TEST5                     AUTO

T1                    AUTO

T2                    AUTO

CWDATA                       AUTO

CWINDEX                AUTO

TEMP2                    MANUAL

TEMP3                    MANUAL

TEMP4                    MANUAL

TB1                   AUTO

UNDOTBS02             MANUAL

TB2                   AUTO

 

SQL> create table test1 (id char(2));

【使用系統默認pctfree/pctused參數】

Table created.

SQL> create table test2 (id char(2))pctfree 20 pctused 50 tablespace system;

【在system表空間(MSSM段空間管理方式)中指定表的pctfree/pctused值】

Table created.

 

SQL> create table test3 (id char(2))pctfree  20 pctused 50 tablespace users;

【在users表空間(ASSM段空間管理方式)中指定表的pctfree/pctused值】

Table created.

 

SQL> select table_name,pct_free,pct_usedfrom user_tables where table_name in ('TEST1','TEST2','TEST3');

【查詢表的pct_free 和pctused值】

TABLE_NAME                 PCT_FREE PCT_USED

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

TEST1                         10      40

TEST2                         20      50

TEST3                         20

 

Free list & free group

在segment中,若同一時刻發生多個Insert,將 引起free list爭用,故一個segment中一般存在多個free list。Free list 的多少決定了同一時刻可以在同一segment中進行insert操作的數量,多個free list 又可歸屬於不同的free list group ,free list group 用於進一步將一個段頭塊中的多個freelist分散到多個塊中去,進一步減少段頭塊的訪問競爭。

 

SQL> create table t5 (a int,b char(6));

 

Table created.

 

SQL> selectsegment_name,freelists,freelist_groups from dba_segments where segment_name='T5';

 

SEGMENT_NAME                                                    FREELISTS FREELIST_GROUPS

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

T5                                                            1

             1

 

SQL> alter table t5 storage (freelists5);

 

Table altered.

 

SQL> select segment_name,freelists,freelist_groupsfrom dba_segments where segment_name='T5';

 

SEGMENT_NAME                                                    FREELISTS FREELIST_GROUPS

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

T5                                                            5         1

 

SQL> create table t6(a int,b char(16)) storage (freelists 4 freelist groups2);

 

Table created.

 

SQL> selectsegment_name,freelists,freelist_groups from dba_segments where segment_name='T6';

 

SEGMENT_NAME                                                    FREELISTS FREELIST_GROUPS

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

T6                                                            4         2

 

當freelist group=1時,freelist都存儲在segment header(第一個塊)內,真正數據的存儲就從第2塊開始。當freelist group >1時,freelistsegment header內分離出來,存儲在單獨的塊裏面,每個freelist group佔一個block,即真正數據的存儲就從1for segment header+n(free list group數量)塊之後的塊開始。

 

 

Free list & HWM(high  water mark)

      一個表若預分配100萬個block(如果使用較大的initial extent 參數),則oracle不會講全部100萬個block都放到free list鏈表上,否則維護量太大,而是使用HWM進行解決。

      HWM是一個標記,用來標記segment中有多少block是“已被用過”的,有多少block是“從未被用過”的。只要一block被用過,其就位於HWM以下了,即使塊中數據全刪掉,該塊也仍位於HWM以下,即HWM只升不降。該塊也仍位於HWM以下,即HWM只升不降。

      HWM的好處是減小了freelist上,即Oracle總使自己用過的空閒塊進行Insert,避免了空間浪費同時提高了free list的性能和可管理性;同時在需要掃描整個segment中數據塊時,因HWM存在,也只需掃描HWM以下的塊,從而提高了性能。

SQL> create table t7 (a int,b char(10));

 

Table created.

 

SQL> analyze table t7 computestatistics;

 

Table analyzed.

 

SQL> select blocks,empty_blocks from dba_tables  where table_name='T7';

 

BLOCKS EMPTY_BLOCKS

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

0                        7

SQL> selectextent_id,block_id,blocks from dba_extents where segment_name='T7';

 

EXTENT_IDBLOCK_ID BLOCKS

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

0   63601  8

 

SQL> selectsegment_name,header_file,header_block,blocks from dba_segments wheresegment_name='T7';

 

SEGMENT_NAME                                                HEADER_FILE HEADER_BLOCK BLOCKS

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

T7                                                               1         63601 8

 

SQL> altersystem dump datafile 1 block 63601;

 

System altered.

[oracle@desktop241udump]$ vim ora10_ora_19189.trc

  #blocks in seg. hdr's freelists: 0

  #blocks below: 0

 

SQL> begin

  2  forI in 1..2000

  3  loop

  4 insert into t7 values (I,'aaaaaaaaaa');

  5  endloop;

  6 commit;

  7  end;

  8  /

 

PL/SQL proceduresuccessfully completed.

 

SQL> analyzetable t7 compute statistics;

 

Table analyzed.

 

SQL> selectblocks,empty_blocks from dba_tables where table_name='T7';

 

BLOCKS EMPTY_BLOCKS

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

     7           0

 

SQL> selectextent_id,block_id,blocks from dba_extents where segment_name='T7';

 

EXTENT_IDBLOCK_ID BLOCKS

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

0   63601  8

 

SQL> selectsegment_name,header_file,header_block,blocks from dba_segments wheresegment_name='T7';

 

SEGMENT_NAME                                                HEADER_FILE HEADER_BLOCK BLOCKS

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

T7                                                               1         63601 8

 

 

SQL> altersystem dump datafile 1 block 63601;

 

System altered.

 

[oracle@desktop241udump]$ vim ora10_ora_19189.trc

     Highwater::  0x0040f879 ext#: 0      blk#: 7      ext size: 7

  #blocks in seg. hdr's freelists: 2

  #blocks below: 7

  mapblk 0x00000000  offset: 0

 

 

 

SQL> begin

  2  forI in 2001..4000

  3  loop

  4 insert into t7 values (I,'aaaaaaaaaa');

  5  endloop;

  6 commit;

  7  end;

  8  /

 

PL/SQL proceduresuccessfully completed.

 

SQL> analyzetable t7 compute statistics;

 

Table analyzed.

 

SQL> selectblocks,empty_blocks from dba_tables where table_name='T7';

 

BLOCKSEMPTY_BLOCKS

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

    12           3

 

SQL> selectextent_id,block_id,blocks from dba_extents where segment_name='T7';

 

EXTENT_IDBLOCK_ID BLOCKS

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

0   63601  8

1   64049  8

 

SQL> selectsegment_name,header_file,header_block,blocks from dba_segments wheresegment_name='T7';

 

SEGMENT_NAME                                                HEADER_FILE HEADER_BLOCK BLOCKS

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

T7                                                               1         63601    16

 

SQL> altersystem dump datafile 1 block 63601;

 

System altered.

 

[oracle@desktop241udump]$ vim ora10_ora_19189.trc

     Highwater::  0x0040fa36 ext#: 1      blk#: 5      ext size: 8

  #blocks in seg. hdr's freelists: 1

  #blocks below: 12

  mapblk 0x00000000  offset: 1

 

SQL> deletefrom t7 where a>500;

 

3500 rowsdeleted.

 

SQL> commit;

 

Commit complete.

 

SQL> analyzetable t7 compute statistics;

 

Table analyzed.

 

SQL> selectblocks,empty_blocks from dba_tables where table_name='T7';

 

BLOCKSEMPTY_BLOCKS

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

    12           3

 

SQL> selectextent_id,block_id,blocks from dba_extents where segment_name='T7';

 

EXTENT_IDBLOCK_ID BLOCKS

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

0   63601  8

1   64049  8

 

SQL> select segment_name,header_file,header_block,blocksfrom dba_segments where segment_name='T7';

 

SEGMENT_NAME                                                HEADER_FILE HEADER_BLOCK BLOCKS

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

T7                                                               1         63601    16

 

SQL> altersystem dump datafile 1 block 63601;

 

System altered.

 

[oracle@desktop241udump]$ vim ora10_ora_19189.trc

     Highwater::  0x0040fa36 ext#: 1      blk#: 5      ext size: 8

  #blocks in seg. hdr's freelists: 11

  #blocks below: 12

  mapblk 0x00000000  offset: 1

                   Unlocked

 

HWM太高,HWM下空閒塊過多的解決辦法:

1.   recreate table;

2.   truncate table;

3.   alter talbe shrink space;(forora10g &ASSM)

數據塊頭(包含塊頭,表目錄區,行目錄區)組成:

1.   定長部分數據:記錄block type(即segment type),block 地址等。

2.   變長部分數據:行地址,ITL(interestedtransaction list 有效事務列表)等。

ITL實際爲block header中的一段用於保存數據的數據結構,稱爲ITL slot,其中保存的數據包括block中關於事務信息的記錄,包括List編號、回滾段地址、事務狀態,事務在該block影響的記錄條數等。

每個需要存取該數據塊的事務都需先獲得一個該數據塊的ITL slot,因此一個數據塊上ITL slot入口的多少決定該數據塊支持併發事務數量的多少,可在create table時以inittans(默認1)和maxtrans(默認255)參數指定初始和最大ITL slot數。當initrans<=2時,每個分配的數據塊中都會有2個ITL slot,當ITL slot不夠用時,oracle會動態增加ITL slot的數量。

SQL> create table t8 (x int,y varchar2(200)) pctfree 0;

 

Table created.

 

SQL> select ini_trans,max_trans from dba_tables where table_name='T8';

 

 INI_TRANS  MAX_TRANS

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

 1     255

 

SQL> begin

  2  for I in 1..4000

  3  loop

  4  insert into t8 values (I,'aaaaaaaaaa');

  5  end loop;

  6  commit;

  7  end;

  8  /

 

PL/SQL procedure successfully completed.

 

SQL> select extent_id,blocks,block_id from dba_extents wheresegment_name='T8';

 

 EXTENT_ID     BLOCKS     BLOCK_ID

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

 0       8       64057

 1       8       64065

 

SQL> select rowid from t8 where x=1;

 

ROWID

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

AAANkBAABAAAPo6AAA

 

SQL> select rowid from t8 where x=2;

 

ROWID

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

AAANkBAABAAAPo6AAB

 

SQL> select rowid from t8 where x=3;

 

ROWID

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

AAANkBAABAAAPo6AAC

 

 

SQL> select dbms_rowid.rowid_block_number('AAANkBAABAAAPo6AAA')from dual;

 

DBMS_ROWID.ROWID_BLOCK_NUMBER('AAANKBAABAAAPO6AAA')

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

                             64058

 

SQL> select dbms_rowid.rowid_block_number('AAANkBAABAAAPo6AAB')from dual;

 

DBMS_ROWID.ROWID_BLOCK_NUMBER('AAANKBAABAAAPO6AAB')

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

                             64058

 

SQL> select dbms_rowid.rowid_block_number('AAANkBAABAAAPo6AAC')from dual;

 

DBMS_ROWID.ROWID_BLOCK_NUMBER('AAANKBAABAAAPO6AAC')

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

                             64058

 

SQL> update t8 set x=1 where x=1;

 

1                        row updated.

SQL> updatet8 set x=2 where x=2;

 

2                        row updated.

SQL> update t8 set x=3 where x=3;

 

 

SQL> commit

 2  ;

 

Commit complete.

 

SQL> update t8 set x=3 where x=3;

 

1 row updated.

SQL> select rowid from scott.emp;

 

ROWID

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

AAAMfMAAEAAAAAcAAA

AAAMfMAAEAAAAAgAAA

AAAMfMAAEAAAAAgAAB

AAAMfMAAEAAAAAgAAC

AAAMfMAAEAAAAAgAAD

AAAMfMAAEAAAAAgAAE

AAAMfMAAEAAAAAgAAF

AAAMfMAAEAAAAAgAAG

AAAMfMAAEAAAAAgAAH

AAAMfMAAEAAAAAgAAI

AAAMfMAAEAAAAAgAAJ

AAAMfMAAEAAAAAgAAK

AAAMfMAAEAAAAAgAAL

AAAMfMAAEAAAAAgAAM

AAAMfMAAEAAAAAgAAN

 

15 rows selected.

 

A-Z:0-25 , a-z: 26-51,  0-9: 52-61,   /:62,  +:63

 

SQL> selectdbms_rowid.rowid_object('AAAMfMAAEAAAAAgAAN') from dual;

 

DBMS_ROWID.ROWID_OBJECT('AAAMFMAAEAAAAAGAAN')

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

                            51148

 

SQL> select object_name from dba_objectswhere object_id=&1;

Enter value for 1: 51148

old  1: select object_name from dba_objects where object_id=&1

new  1: select object_name from dba_objects where object_id=51148

 

OBJECT_NAME

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

EMP

 

SQL> selectdbms_rowid.rowid_object('AAANkBAABAAAPo6AAA') from dual;

 

DBMS_ROWID.ROWID_OBJECT('AAANKBAABAAAPO6AAA')

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

                            55553

 

SQL> select object_name from dba_objectswhere object_id=&1;

Enter value for 1: 55553

old  1: select object_name from dba_objects where object_id=&1

new  1: select object_name from dba_objects where object_id=55553

 

OBJECT_NAME

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

T8

 

 

 

SQL> selectdbms_rowid.rowid_relative_fno('AAANkBAABAAAPo6AAA') from dual;

 

DBMS_ROWID.ROWID_RELATIVE_FNO('AAANKBAABAAAPO6AAA')

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

                                    1

 

SQL> select file_name fromdba_data_files where file_id=&2;

Enter value for 2: 1

old  1: select file_name from dba_data_files where file_id=&2

new  1: select file_name from dba_data_files where file_id=1

 

FILE_NAME

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

/u01/app/oracle/oradata/ora10/system01.dbf

 

 

 

 

SQL> select dbms_rowid.rowid_relative_fno('AAAMFMAAEAAAAAGAAM')from dual;

 

DBMS_ROWID.ROWID_RELATIVE_FNO('AAAMFMAAEAAAAAGAAM')

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

                                    4

 

SQL> select file_name fromdba_data_files where file_id=&2;

Enter value for 2: 4

old  1: select file_name from dba_data_files where file_id=&2

new  1: select file_name from dba_data_files where file_id=4

 

FILE_NAME

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

/u01/app/oracle/oradata/ora10/users01.dbf

 

SQL> selectdbms_rowid.rowid_block_number('AAANkBAABAAAPo6AAA') from dual;

 

DBMS_ROWID.ROWID_BLOCK_NUMBER('AAANKBAABAAAPO6AAA')

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

                                  64058

 

SQL> select extent_id,blocks,block_idfrom dba_extents where segment_name='T8';

 

 EXTENT_ID    BLOCKS     BLOCK_ID

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

       0       8       64057

       1       8       64065

 

SQL> selectdbms_rowid.rowid_row_number('AAANkBAABAAAPo6AAA') from dual;

 

DBMS_ROWID.ROWID_ROW_NUMBER('AAANKBAABAAAPO6AAA')

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

                                  0

 

SQL> selectdbms_rowid.rowid_row_number('AAANkBAABAAAPo6AAB') from dual;

 

DBMS_ROWID.ROWID_ROW_NUMBER('AAANKBAABAAAPO6AAB')

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

                                  1

 

SQL> alter system dump datafile 1 block64058;

 

System altered.

 

 

[oracle@desktop241 udump]$ vimora10_ora_7438.trc

    fsl: 0  fnx: 0x0 ver: 0x01

 

 Itl          Xid                  Uba         Flag Lck        Scn/Fsc

0x01  0x000b.019.00000041  0x050015b4.001c.2c  --U-   1  fsc 0x0000.001e763d

0x02  0x0014.00b.0000003d 0x05000d08.0028.10  --U-    1 fsc 0x0000.001e7885

 

data_block_dump,data header at 0xdf2445c

===============

 

 

 

SQL> selectdbms_rowid.rowid_block_number ('AAAMFMAAEAAAAAGAAM') from dual;

 

DBMS_ROWID.ROWID_BLOCK_NUMBER('AAAMFMAAEAAAAAGAAM')

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

                                    6

 

SQL> select extent_id,blocks,block_idfrom dba_extents where segment_name='EMP';

 

 EXTENT_ID    BLOCKS     BLOCK_ID

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

       0       8          25

 

Free list和ITL都影響併發性,區別如下:

1.   ITL影響block層的併發性,free list影響segment層的併發性

2.   ITL影響併發的事務,freee list 影響併發的insert操作;

3.   事務進行全程均佔用ITL,事務結束後釋放;insert僅在事務進行前搜索佔用freelist ,事務進行時free list已釋放

塊清除block cleanouts

當事物commit時,block中的ITL被清除,稱爲block cleanouts.

Fast block cleanouts

Commit時若需cleanouts的塊位於buffer cache,則立即清除ITL(fast block cleanouts),若事物太大,需要清除的塊數量大於buffer cache的10%,則暫隻立即清除10%以內的部分。

Delalyed block cleanouts

Commit時若需cleanouts的塊已寫到磁盤,則延時清除ITL(delayed block cleanouts),若事物太大,需要清除的塊數量大於buffer cache的10%,則10%以外的部分進行延時清除。延時清除將在塊被再次訪問時進行,以提高commit的性能。

 

SQL> createtable test as select * from dba_objects;

 

Table created.

 

SQL> setautot on stat;

SQL> altersession set events='immediate trace name flush_cache';

 

Session altered.

 

SQL> commit;

 

Commit complete.

 

SQL> selectcount(*) from test;

 

  COUNT(*)

----------

     50793

 

 

Statistics

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

 28  recursive calls

  0  db block gets

777 consistent gets

698  physical reads

  0  redo size

413 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

 

SQL> selectcount (*) from test;

 

  COUNT(*)

----------

     50793

 

 

Statistics

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

  4  recursive calls

  0  db block gets

775 consistent gets

  0 physical reads

  0  redo size

413 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

補充:

MSSM段管理方式

SQL> create table a1 (a number,bchar(30)) tablespace system;

 

Table created.

 

SQL> begin

 2  For I in 1..2000 loop

 3  insert into a1 values(I,'aaaaaaaaaa');

 4  commit;

 5  end loop;

 6  end;

 7  /

 

PL/SQL procedure successfully completed.

 

SQL> select extent_id,blocks,block_idfrom dba_extents where segment_name='A1';

 

 EXTENT_ID    BLOCKS     BLOCK_ID

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

       0       8       64409

       1       8       64417

SQL> select header_file,header_blockfrom dba_segments where segment_name='A1';

 

HEADER_FILE HEADER_BLOCK

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

        1    64409

 

SQL> alter system dump datafile&HEADER_FILE block &HEADER_BLOCK;

Enter value for header_file: 1

Enter value for header_block: 64409

old  1: alter system dump datafile &HEADER_FILE block &HEADER_BLOCK

new  1: alter system dump datafile 1 block 64409

 

System altered.

 Extent Header:: spare1: 0     spare2: 0      #extents: 2      #blocks: 15

                  last map  0x00000000 #maps: 0      offset: 4128

     Highwater::  0x0040fba6  ext#: 1     blk#: 5      ext size: 8

  #blocks in seg. hdr's freelists: 1

  #blocks below: 12

 mapblk  0x00000000  offset: 1

                   Unlocked

SQL> select rowid from a1 where a=1;

 

ROWID

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

AAANkEAABAAAPuaAAA

 

SQL> selectdbms_rowid.rowid_block_number('AAANkEAABAAAPuaAAA') from dual;

 

DBMS_ROWID.ROWID_BLOCK_NUMBER('AAANKEAABAAAPUAAAA')

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

                                  64410

 

System表空間爲MSSM管理方式,由freelist鏈表管理段內空閒空間,上述可見所有已分配extent內所包含block中,僅第一個block爲段頭信息(存放freelist 及HWM信息,可dump後查看),其餘均爲數據塊,第一條數據即是從第二個塊開始插入的。

SQL> createtablespace tb2 datafile '/u01/tb2.dat' size 10M;

 

Tablespacecreated.

 

SQL> alterdatabase datafile '/u01/tb2.dat' autoextend on;

 

Databasealtered.

 

SQL> createtable a2 tablespace tb2 as select * from dba_objects;

 

Table created.

SQL> selectextent_id,blocks,block_id from dba_extents where segment_name='A2';

 

 EXTENT_ID    BLOCKS     BLOCK_ID

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

 0       8           9【一級位圖塊】10【二級位圖塊】11【區的編號和二級位圖地址】【三個塊存放控制信息】

 1       8         17

 2       8          25【一個塊存放控制信息】

 3       8         33

 4       8          41【一個塊存放控制信息】

 5       8         49

 6       8          57

 7       8         65

 8       8          73

 9       8         81

10      8          89

11      8          97

12      8         105

13      8         113

14      8         121

15      8         129

16   128         1372個塊存放控制信息】【126 個塊存放數據】

17    128         265【2個塊存放控制信息】【每個控制塊管理64個數據塊】

18    128         393

19    128         521

20    128         649

SQL> altersystem dump datafile 21 block 41;

 

System altered.

 

Dump of FirstLevel Bitmap Block

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

   nbits : 4 nranges: 2         parent dba:  0x0540000a  poffset: 2

   unformatted: 0       total: 16        first useful block: 1

   owning instance : 1

   instance ownership changed at

   Last successful Search

   Freeness Status:  nf1 0     nf2 0      nf3 0     nf4 0

 

   Extent Map Block Offset: 4294967295

   First free datablock : 16

   Bitmap block lock opcode 0

   Locker xid:     : 0x0000.000.00000000

   Inc #: 0 Objd: 55557

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

  DBA Ranges :

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

   0x05400029 Length: 8      Offset: 0

   0x05400031 Length: 8      Offset: 8

 

   0:Metadata   1:FULL   2:FULL  3:FULL

   4:FULL  5:FULL   6:FULL   7:FULL

   8:FULL  9:FULL   10:FULL   11:FULL

   12:FULL  13:FULL   14:FULL   15:FULL

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

End dump datablocks tsn: 28 file#: 21 minblk 41 maxblk 41

                                                                       

 

SQL> select header_file,header_blockfrom dba_segments where segment_name='A2';

 

HEADER_FILEHEADER_BLOCK

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

 21       11

  2 

SQL> alter system dump datafile21 block 11;

 

System altered.

 

[oracle@desktop241udump]$ vim ora10_ora_16134.trc

 

Extent ControlHeader

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

  Extent Header:: spare1: 0      spare2: 0      #extents: 21     #blocks: 768

                  last map  0x00000000 #maps: 0      offset: 2716

      Highwater::  0x054002d7 ext#: 20     blk#: 78     ext size: 128

  #blocks in seg. hdr's freelists: 0

  #blocks below: 718

  mapblk 0x00000000  offset: 20

                   Unlocked

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

  Low HighWater Mark :

      Highwater:: 0x054002d7  ext#: 20     blk#: 78     ext size: 128

  #blocks in seg. hdr's freelists: 0

  #blocks below: 718

  mapblk 0x00000000  offset: 20

  Level 1 BMB for High HWM block: 0x0540028a

  Level 1 BMB for Low HWM block: 0x0540028a

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

  Segment Type: 1 nl2: 1      blksz: 8192   fbsz: 0

  L2 Array start offset:  0x00001434

  First Level 3 BMB:  0x00000000

  L2 Hint for inserts:  0x0540000a

  Last Level 1 BMB:  0x0540028a

  Last Level II BMB:  0x0540000a

  Last Level III BMB:  0x00000000

     Map Header:: next  0x00000000 #extents: 21   obj#: 55557  flag: 0x10000000

  Inc # 0

  Extent Map【區圖】

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

   0x05400009 length: 8

   0x05400011 length: 8

   0x05400019 length: 8

   0x05400021 length: 8

   0x05400029 length: 8

   0x05400031 length: 8

   0x05400039 length: 8

   0x05400041 length: 8

   0x05400049 length: 8

   0x05400051 length: 8

   0x05400059 length: 8

   0x05400061 length: 8

   0x05400069 length: 8

   0x05400071 length: 8

   0x05400079 length: 8

   0x05400081 length: 8

   0x05400089 length: 128

   0x05400109 length: 128

   0x05400189 length: 128

   0x05400209 length: 128

   0x05400289 length: 128

 

  Auxillary Map【所有區的編號】

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

   Extent 0    :  L1 dba:  0x05400009 Data dba:  0x0540000c

   Extent 1    :  L1 dba:  0x05400009 Data dba:  0x05400011

   Extent 2    :  L1 dba:  0x05400019 Data dba:  0x0540001a

   Extent 3    :  L1 dba:  0x05400019 Data dba:  0x05400021

   Extent 4    :  L1 dba:  0x05400029 Data dba:  0x0540002a

   Extent 5    :  L1 dba:  0x05400029 Data dba:  0x05400031

   Extent 6    :  L1 dba:  0x05400039 Data dba:  0x0540003a

   Extent 7    :  L1 dba:  0x05400039 Data dba:  0x05400041

   Extent 8    :  L1 dba:  0x05400049 Data dba:  0x0540004a

   Extent 9    :  L1 dba:  0x05400049 Data dba:  0x05400051

   Extent 10   :  L1 dba:  0x05400059 Data dba:  0x0540005a

   Extent 11   :  L1 dba:  0x05400059 Data dba:  0x05400061

   Extent 12   :  L1 dba:  0x05400069 Data dba:  0x0540006a

   Extent 13   :  L1 dba:  0x05400069 Data dba:  0x05400071

   Extent 14   :  L1 dba:  0x05400079 Data dba:  0x0540007a

   Extent 15   :  L1 dba:  0x05400079 Data dba:  0x05400081

   Extent 16   :  L1 dba:  0x05400089 Data dba:  0x0540008b

   Extent 17   :  L1 dba:  0x05400109 Data dba:  0x0540010b

   Extent 18   :  L1 dba:  0x05400189 Data dba:  0x0540018b

   Extent 19   :  L1 dba:  0x05400209 Data dba:  0x0540020b

   Extent 20   :  L1 dba:  0x05400289 Data dba:  0x0540028b

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

 

 

   Second Level Bitmap block DBAs【二級位圖塊地址】

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

   DBA 1:  0x0540000a

 

End dump datablocks tsn: 28 file#: 21 minblk 11 maxblk 11

 

SQL> alter system dump datafile21 block 10;

[oracle@desktop241udump]$ vim ora10_ora_16480.trc

Dump of Second Level Bitmap Block【二級位圖塊】

   number: 18      nfree: 1       ffree: 17     pdba:    0x0540000b

   Inc #: 0 Objd: 55557

  opcode:0

 xid:

  L1 Ranges :

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

   0x05400009 Free: 1 Inst: 1

   0x05400019 Free: 1 Inst: 1

   0x05400029 Free: 1 Inst: 1

   0x05400039 Free: 1 Inst: 1

   0x05400049 Free: 1 Inst: 1

   0x05400059 Free: 1 Inst: 1

   0x05400069 Free: 1 Inst: 1

   0x05400079 Free: 1 Inst: 1

   0x05400089 Free: 1 Inst: 1

   0x0540008a Free: 1 Inst: 1

   0x05400109 Free: 1 Inst: 1

   0x0540010a Free: 1 Inst: 1

   0x05400189 Free: 1 Inst: 1

   0x0540018a Free: 1 Inst: 1

   0x05400209 Free: 1 Inst: 1

   0x0540020a Free: 1 Inst: 1

   0x05400289 Free: 1 Inst: 1

   0x0540028a Free: 5 Inst: 1

 

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

End dump datablocks tsn: 28 file#: 21 minblk 10 maxblk 10

                                                            

 

SQL> alter system dump datafile21 block 9;

 

System altered.

 

[oracle@desktop241udump]$ vim ora10_ora_16571.trc

 

Dump of First Level Bitmap Block【一級位圖塊】

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

   nbits : 4 nranges: 2         parent dba:  0x0540000a  poffset: 0

   unformatted: 0       total: 16        first useful block: 3

   owning instance : 1

   instance ownership changed at

   Last successful Search

   Freeness Status:  nf1 0     nf2 0      nf3 0      nf4 0

 

   Extent Map Block Offset: 4294967295

   First free datablock : 16

   Bitmap block lock opcode 0

   Locker xid:     : 0x0000.000.00000000

   Inc #: 0 Objd: 55557

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

  DBA Ranges :

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

   0x05400009 Length: 8      Offset: 0

   0x05400011 Length: 8      Offset: 8

 

   0:Metadata   1:Metadata   2:Metadata   3:FULL

   4:FULL  5:FULL   6:FULL   7:FULL

   8:FULL  9:FULL   10:FULL   11:FULL

   12:FULL  13:FULL   14:FULL   15:FULL

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

End dump datablocks tsn: 28 file#: 21 minblk 9 maxblk 9

                                                               

 

SQL> alter system dump datafile21 block 25;

 

System altered.

 

[oracle@desktop241udump]$ vim ora10_ora_16714.trc

 

Dump of FirstLevel Bitmap Block

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

   nbits : 4 nranges: 2         parent dba:  0x0540000a  poffset: 1

   unformatted: 0       total: 16        first useful block: 1

   owning instance : 1

   instance ownership changed at

   Last successful Search

   Freeness Status:  nf1 0     nf2 0      nf3 0      nf4 0

 

   Extent Map Block Offset: 4294967295

   First free datablock : 16

   Bitmap block lock opcode 0

   Locker xid:     : 0x0000.000.00000000

   Inc #: 0 Objd: 55557

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

  DBA Ranges :

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

   0x05400019 Length: 8      Offset: 0

   0x05400021 Length: 8      Offset: 8

 

   0:Metadata   1:FULL   2:FULL  3:FULL

   4:FULL  5:FULL   6:FULL   7:FULL

   8:FULL  9:FULL   10:FULL   11:FULL

   12:FULL  13:FULL   14:FULL   15:FULL

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

End dump datablocks tsn: 28 file#: 21 minblk 25 maxblk 25

                                                              

 

SQL> alter system dump datafile21 block 137;

 

System altered.

 

[oracle@desktop241udump]$ vim ora10_ora_16771.trc

 

Dump of FirstLevel Bitmap Block

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

   nbits: 4 nranges: 1         parent dba:  0x0540000a  poffset: 8

   unformatted: 0       total: 64        first useful block: 2

   owning instance : 1

   instance ownership changed at

   Last successful Search

   Freeness Status:  nf1 0     nf2 0      nf3 0      nf4 0

 

   Extent Map Block Offset: 4294967295

   First free datablock : 64

   Bitmap block lock opcode 0

   Locker xid:     : 0x0000.000.00000000

   Inc #: 0 Objd: 55557

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

  DBA Ranges :

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

   0x05400089 Length: 64     Offset: 0

 

   0:Metadata   1:Metadata   2:FULL  3:FULL

   4:FULL  5:FULL   6:FULL   7:FULL

   8:FULL  9:FULL   10:FULL   11:FULL

   12:FULL  13:FULL   14:FULL   15:FULL

   16:FULL  17:FULL   18:FULL   19:FULL

   20:FULL  21:FULL   22:FULL   23:FULL

   24:FULL  25:FULL   26:FULL   27:FULL

   28:FULL  29:FULL   30:FULL   31:FULL

   32:FULL  33:FULL   34:FULL   35:FULL

   36:FULL  37:FULL   38:FULL   39:FULL

40:FULL   41:FULL  42:FULL   43:FULL

   44:FULL  45:FULL   46:FULL   47:FULL

   48:FULL  49:FULL   50:FULL   51:FULL

   52:FULL  53:FULL   54:FULL   55:FULL

   56:FULL  57:FULL   58:FULL   59:FULL

   60:FULL  61:FULL   62:FULL   63:FULL

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

End dump datablocks tsn: 28 file#: 21 minblk 137 maxblk 137

                                                                  

         

SQL> altersystem dump datafile 21 block 138;

 

System altered.

 

[oracle@desktop241udump]$ vim ora10_ora_17269.trc

Dump of FirstLevel Bitmap Block

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

   nbits : 4 nranges: 1         parent dba:  0x0540000a  poffset: 9

   unformatted: 0       total: 64        first useful block: 0

   owning instance : 1

   instance ownership changed at

   Last successful Search

   Freeness Status:  nf1 0     nf2 0      nf3 0      nf4 0

Extent Map BlockOffset: 4294967295

   First free datablock : 64

   Bitmap block lock opcode 0

   Locker xid:     : 0x0000.000.00000000

   Inc #: 0 Objd: 55557

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

  DBA Ranges :

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

   0x054000c9 Length: 64     Offset: 0

 

   0:FULL  1:FULL   2:FULL   3:FULL

   4:FULL  5:FULL   6:FULL   7:FULL

   8:FULL  9:FULL   10:FULL   11:FULL

   12:FULL  13:FULL   14:FULL   15:FULL

   16:FULL  17:FULL   18:FULL   19:FULL

   20:FULL  21:FULL   22:FULL   23:FULL

   24:FULL  25:FULL   26:FULL   27:FULL

   28:FULL  29:FULL   30:FULL   31:FULL

   32:FULL  33:FULL   34:FULL   35:FULL

   36:FULL  37:FULL   38:FULL   39:FULL

   40:FULL  41:FULL   42:FULL   43:FULL

   44:FULL  45:FULL   46:FULL   47:FULL

   48:FULL  49:FULL   50:FULL   51:FULL

   52:FULL  53:FULL   54:FULL   55:FULL

   56:FULL  57:FULL   58:FULL   59:FULL

   60:FULL  61:FULL   62:FULL   63:FULL

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

End dump datablocks tsn: 28 file#: 21 minblk 138 maxblk 138

 

SQL> altersystem dump datafile 21 block 139;

 

System altered.

 

  [oracle@desktop241udump]$ vim ora10_ora_17343.trc                 

全部是數據                           

新建tb2表空間默認爲ASSM管理方式,由位圖管理段內空閒空間,上述可見所有已分配extent內所包含block中,第3個block爲段頭信息(存放所有區的編號及二級位圖塊地址,可dump後查看),第2個塊爲二級位圖塊,第1個塊爲一級位圖塊。

 

 

 

 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章