完成本课程的学习后,您应该能够:

•数据库总体的逻辑结构

•深入理解数据库最小存储单元block
•理解行迁移和行链接
•理解高水位线
•Drop、truncate、delete区别
 
1.数据库的逻辑
  方案(schema)是一个逻辑数据结构的集合。每个数据库用户拥有一个与之同名的方案,且只有这一方案(详情请见concepts第5章)。

  数据库逻辑结构为数据块(Data Block)、数据扩展(Extent)、和段(Segment); 物理结构为数据文件。

  Block是最精细的数据存储粒度,一个数据块相当于磁盘上一段连续的物理存储空间,oracle每次访问数据的单位是block。

  Extent是为存储数据而分配的一组连续的block,只能在一个数据文件中。

  Segment则是由一个或多个Extent。一张表可以看做是一个段,一个索引可以做作是一个段。查看段的分类select distinct        segment_type from user_segments 。可以跨数据文件。

   数据逻辑上存储表空间(Tablespace)中,而物理上则存储于属于表空间的数据文件(data file)中。

1.1表空间管理

•字典管理

  依赖数据字典表来跟踪空间使用(已经过时)

•本地管理(默认)

 

  使用位图(而不是数据字典表)来跟踪使用和空闲空间在表空间本地管理的情况下,Oracle先在表空间第一候选的数据文件上寻找可以分配给第一个区段的空间,然后查看数据文件的位图来查看是否有足够数目的空闲块。如果数据文件没有足够的空闲块,然后Oracle会转向新的数据文件。

1.2段空间分配方式

 

Uniform

 

•对于统一大小区段,你可以指定区段大小或者使用默认大小,默认大小为1M。根据给定的块大小,要保证每个区段至少包含5个数据块。临时表空间管理区段的方式只能采取这种方式。

AUTOALLOCATE

•对于系统管理的区段,Oracle确定新增区段的最优大小,最小区段的大小是64K。如果表空间创建包括“segment space management auto”,如果数据库块大小是16k或者更高,然后Oracle管理段创建区段的最小尺寸是1M。这是持久表空间的默认管理方式。

select * from dba_segments where owner='SCOTT';

1.3表中的段分配

一个表在创建之后,除非进行truncate,否则数据库段中分配的所有数据块都只属于这个表。Oracle在一个块有足够空间的情况下插入新行。甚至你删除了表的所有行,Oracle也不会释放数据块,表空间的其他对象也无法使用这些数据块。

1.4索引的段分配

只要索引存在,索引段中的所有区段都属于索引段。当你删除(drop)索引或者相关的表时,Oracle释放区段,本表空间的其他对象可以使用这部分空间。

1.5临时段的段分配

当Oracle执行完一个需要临时段的语句时,Oracle自动删除临时段。如果排序操作能够在内存中进行,Oracle不会创建这个段。

1.6回滚段的段分配

Oracle周期性的检查数据库的回滚段,来检查是否超过了它们的最优尺寸。如果回滚段远大于最优尺寸(也就是说,有太多的区段),然后Oracle会自动从回滚段中释放一个或者多个区段。

1.7区的大小?

在我们默认的本地管理表空间中,extent是通过bitmap位图块来管理,Oracle通过内部的算法来自动决定下一个extent的大小

 

create table t(id number);select * from user_extents where segment_name='T'drop table t purge;
create table t as select * from dba_objects;select * from user_extents where segment_name='T';
View Code

1.8小结:

1.数据库有一个或多个表空间组成。
2.表空间有一个或多个数据文件组成。
3.段(TABLE、INDEX)有一个或多个区段组成。段在表空间中,但是可以包含这个表空间中多个数据文件中的数据。
4.区段是磁盘上一组逻辑连续的块。区段只在一个表空间中,而且总是在改表空间内的一个文件中。
5.块是数据库中最小的分配单元,也是数据库使用的最小I/O单元。
 
2.block的内部结构
seg/obj: 0x180a2  csc: 0x95a.e56f14c6  itc: 2  flg: E  typ: 1 - DATA
     brn: 0  bdba: 0x181e541 ver: 0x01 opc: 0
     inc: 0  exflg: 0
 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0002.002.000072bb  0x0081fa06.1e1c.26  --U-    2  fsc 0x0000.e56f14ce
0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000
 。。。。。。。。。。。省略。。。。。。。。。。。
0x14:pri[1]    offs=0x1f88
block_row_dump:
tab 0, row 0, @0x1f90
tl: 8 fb: --H-FL-- lb: 0x1  cc: 1
col  0: [ 4]  d6 d0 b9 fa
tab 0, row 1, @0x1f88 
tl: 8 fb: --H-FL-- lb: 0x1  cc: 1
col  0: [ 4]  c3 c0 b9 fa
end_of_block_dump
Dump文件的block信息

dump的文件在 盘符:\oracle\product\10.2.0\admin\ordb10\udump

SQL>alter session set tracefile_identifier = 'Look_For_Me';
SQL>create table test(name varchar2(10));
SQL>insert into test values('中国');
SQL>nsert into test values('美国');
SQL>commit;
SQL>select rowid,
       dbms_rowid.rowid_object(rowid) object_id,
       dbms_rowid.rowid_relative_fno(rowid) file_id,
       dbms_rowid.rowid_block_number(rowid) block_id,
       dbms_rowid.rowid_row_number(rowid) num
  from test;

SQL>alter system dump datafile 6 block 124232;
生成dump bock信息

相关文章:

  • 2021-06-30
  • 2021-10-27
  • 2021-03-31
  • 2021-03-29
  • 2022-01-14
  • 2022-01-02
  • 2021-11-04
猜你喜欢
  • 2021-11-24
  • 2021-11-08
  • 2021-06-04
  • 2021-06-08
  • 2021-10-30
  • 2021-12-31
  • 2021-07-21
相关资源
相似解决方案