managing database storage structures system表空间

 

 

表空间的管理
表空间的管理实际就是区空间的管理,因为区是最小的分配单元。
查看表空间的类型,都是LOCAL,称为本地化管理表空间。早期的是用数据字典管理,缺点产生空间碎片,过于复杂化。
所谓本地化管理就是指oracle不再利用数据字典来记录表空间的使用情况,而是在每个表空间的数据文件的头部加入了一个
byte位图,代表1个区的位图,0或者1,放的是一手房,记录每个区的使用情况。每当区被使用,或者释放,oracle会更新
数据文件头部的这个记录,反映变化。

SQL> select TABLESPACE_NAME,EXTENT_MANAGEMENT,ALLOCATION_TYPE from dba_tablespaces;

TABLESPACE_NAME                EXTENT_MAN ALLOCATIO
------------------------------ ---------- ---------
SYSTEM                         LOCAL      SYSTEM
SYSAUX                         LOCAL      SYSTEM
UNDOTBS1                       LOCAL      SYSTEM
TEMP                           LOCAL      UNIFORM
USERS                          LOCAL      SYSTEM
EXAMPLE                        LOCAL      SYSTEM
EYGLE                          LOCAL      SYSTEM
EYGLE1                         LOCAL      SYSTEM
EYGLE02                        LOCAL      UNIFOR
在本地管理表空间中,若db_block_size=8kb,则文件头会保留8个数据块。其中数据块1和2 用于记录
数据文件头信息,数据库3~8用于记录区间的位图信息

select file_id,tablespace_name from dba_data_files;
 alter system dump datafile 8 block min 1 block max 3;
select value from v$diag_info where name ='Default Trace File';
查看的信息如下:
Start dump data blocks tsn: 9 file#:8 minblk 1 maxblk 3
Block 1 (file header) not dumped:use dump file header command
Block dump from cache:

*** 2013-08-02 14:41:10.914
Dump of buffer cache at level 4 for tsn=9, rdba=33554434
BH (0x36fe2ba4) file#: 8 rdba: 0x02000002 (8/2) class: 13 ba: 0x36c1e000
  set: 5 pool 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 272,28
  dbwrid: 0 obj: -1 objn: -1 tsn: 9 afn: 8 hint: f
  hash: [0x4e6ab384,0x4e6ab384] lru: [0x36fe2b7c,0x36fe2df8]
  ckptq: [NULL] fileq: [NULL] objq: [0x4b920614,0x4b920614]
  修改命令: alter session set events 'immediate trace name file_hdrs level 10';
 
  DATA FILE #1:
  name #13: +DATA/orcl/datafile/system.256.820439857
creation size=0 block size=8192 status=0xe head=13 tail=13 dup=1
 tablespace 0, index=1 krfil=1 prev_file=0
 unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
 Checkpoint cnt:130 scn: 0x0000.00134d00 08/02/2013 09:58:12
 Stop scn: 0xffff.ffffffff 08/02/2013 09:47:21

begin-hot-backup file size: 0
Checkpointed at scn:  0x0000.00134d00 08/02/2013 09:58:12
 thread:1 rba:(0x19.2.10)
 enabled  threads:  01000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  01代表00000001,倒过来10000000即used,free,free,free,free,free,free,free,代表已经分配一个区间。
  alter table EYGLE02 allocate extent;
  03代表00000011,转换11000000,代表used,used,free,free,free,free,free,free,代表已经分配两个区间。

 

  查看所有用户:
  select username from dba_users;或者all_users
  查看当前用户:
   select username from user_users;或者show user

 

system表空间:
转储数据文件头信息:只有system文件头才有root dba,直接指向了引导表BOOTSTRAP$的数据块

SQL> alter session set events 'immediate trace name FILE_HDRS level 10';

Session altered.

SQL> select value from v$diag_info where name ='Default Trace File';

创建getbfno函数:
create or replace function getbfno(p_dba in varchar2)
return varchar2
is
l_str varchar2(255) default null;
begin
l_str:=
       'datafile# is:'
||DBMS_UTILITY.data_block_address_file(TO_NUMBER(LTRIM(p_dba,'0x'),'xxxxxxxx'))
||chr(10)||'datablock is:'
||DBMS_UTILITY.data_block_address_block(TO_NUMBER(LTRIM(p_dba,'0x'),'xxxxxxxx'));
RETURN l_str;
END;
查看位于哪个文件,哪个数据块:
SQL> select getbfno('0x00400208') bfno from dual;

BFNO
--------------------------------------------------------------------------------
datafile# is:1
datablock is:520
查看存储的是什么对象,结果显示数据库启动引导表,这个对象正是创建其他对象需要的语句,这些语句需要
在数据库启动时被加载到内存中,再从硬盘上加载启动数据库元数据,从而启动数据库:

 select segment_name,segment_type,header_file,
  2* header_block from dba_segments where header_block=520
SQL> /

SEGMENT_NAME                   SEGMENT_TYPE       HEADER_FILE HEADER_BLOCK
------------------------------ ------------------ ----------- ------------
BOOTSTRAP$                     TABLE                        1          520
select *from bootstrap$ order by obj#;
     LINE#       OBJ#
---------- ----------
SQL_TEXT
--------------------------------------------------------------------------------
CREATE TABLE FET$("TS#" NUMBER NOT NULL,"FILE#" NUMBER NOT NULL,"BLOCK#" NUMBER
NOT NULL,"LENGTH" NUMBER NOT NULL) STORAGE (  OBJNO 12 TABNO 1) CLUSTER C_TS#(TS
#)

        13         13
CREATE TABLE UET$("SEGFILE#" NUMBER NOT NULL,"SEGBLOCK#" NUMBER NOT NULL,"EXT#"
NUMBER NOT NULL,"TS#" NUMBER NOT NULL,"FILE#" NUMBER NOT NULL,"BLOCK#" NUMBER NO
T NULL,"LENGTH" NUMBER NOT NULL) STORAGE (  OBJNO 13 TABNO 1) CLUSTER C_FILE#_BL
OCK#(TS#,SEGFILE#,SEGBLOCK#)

     LINE#       OBJ#
---------- ----------  。。。。。。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值