概念:
oracle的逻辑结构一般可以分成:
表空间(tablespace)、段(segment)、区(extent)、数据块(data block)。oracle由表空间组成,表空间由段组成,段由区组成,区由数据块组成。
分类:
表空间:
1.表空间是数据库中最大的逻辑单位,几个表空间组成了数据库。
2.表空间由一个或多个数据文件在物理上构成,一个数据文件只能属于一个表空间,这里通过数据文件位置的不同形成表空间在多个磁盘的分布。3.根据组成的段类型,表空间分成:数据段表空间、索引段表空间、临时段表空间、回退段表空间。4.可以通过修改数据文件大小或者添加删除数据文件来管理表空间大小。5.表空间可以在线(ONLINE)或者离线(OFFLINE),也可以将空间中的部分表在线或离线。也有只读(read only)或者读写(read write)的属性。--system等某些特殊表空间不得设置成离线或者只读6.可以通过QUOTA参数限制用户在表空间上的使用大小。7.特殊的临时表空间,主要存储在使用ORDER BY语句进行排序或者汇总时所需的临时空间。9i后一般都用TEMP表空间做为临时表空间,不建议用system等特殊空间当临时表空间使用。基表不能在临时表空间上建立。系统指定默认临时表空间后不得使用其他表空间作为临时表空间。
分类1:系统表空间和非系统表空间。系统表空间主要用于存储系统数据,非系统表空间用于存储用户及其他非系统数据。系统表空间:1.系统表空间对于数据库是必须存在的,不能离线或者只读。一旦瘫痪,整个数据库将无法正常运作。2.系统表空间包含了全部的数据字典、存储过程、包和触发器。你可以通过ALL_OBJECTS查看所有系统对象。3.系统表空间可以包含非系统对象,比如用户数据,但是不推荐这样做。4.系统表空间包含了系统回退段.通过查询 select segment_name,owner,tablespace_name from dba_rollback_seg;非系统表空间:1.更加灵活的管理数据库、2.强化数据库安全和优化运行性能分类2:数据字典管理表空间(Dictionary-Managed Tablespaces)和本地化管理表空间(Locally Managed Tablespaced).数据字段管理表空间:必须手动为表空间设置各种参数,容易引起磁盘碎片,管理难度较大本地化管理表空间:8i以上版本使用,区管理全由系统自动进行,磁盘碎片自动消除,管理难度低且效率高。通过语句:select tablespace_name,extent_management,allocation_type from dba_tablespaces;一些关于表空间的查询:a.查询表空间内的数据文件select file_id,bytes,maxbytes,tablespace_name,file_name from dba_data_files;b.查询表空间的自由空间相关信息select tablespace_name,sum(bytes),sum(blocks) from dba_free_space group by tablespace_name;c.查询临时文件的信息select file#,status,name from v$tempfile;d.查询用户所使用的临时表空间信息select username,temporary_tablespace from dba_users;段:按照存储数据的不同分成4类:数据段,索引段,回退段,临时段。数据段:用于存储数据,每建立一个表,就在表空间里面创建一个数据段(CLUSTER聚集除外,聚集2个表只有一个数据段)。表内数据不断增加,就是段增大的过程,从而引起段内区的个数的增加。数据段信息的查询:select segment_name,tablespace_name,bytes from user_extents;某些数据段分布于多个表空间(表分区):select segment_name,partition_name,tablespace_name from user_extents;索引段:用于存储索引数据,如果创建了索引,就在索引空间内自动创建一个索引段。查询索引及其相关信息:select a.table_name,a.index_name,uniqueness,column_namefrom user_ind_columns b,user_indexes a where b.index_name=a.index_name and b.table_name = a.table_name and rownum<10;索引分成B+树索引、位图索引和反向索引。一般默认使用B+树索引,在一些只读数据库或者大表查询中可以使用位图索引。所谓的反向索引就是把键值反过来查询。回退段:用于存储用户数据修改之前的值,生成读一致性,在数据库恢复的时候回退未提交的事务。一个事务只能用一个回退段存储,但是一个回退段可以存储多个事务。在oracle9i后,管理回退段从非常麻烦的事情变成了一个简单事情,因为提供了Undo空间的自动管理,你只要保证undo空间的大小足够即可,不必担心回退段个数、大小之类的事情。是否使用自动管理,可以查看初始化参数UNDO_MANAGEMENT的值是否为AUTO。诺是,则为自动管理。反之诺为MANUAL,则表示使用回退段管理。回退段分成系统回退段和非系统回退段及DEFERED回退段。系统回退段:数据库创建后,oracle自动创建一个回退段SYSTEM,只能用于存储系统表空间system的回退信息。非系统回退段:数据库至少含有一个非系统回退段,用于存储非系统表空间的回退信息。DEFERED回退段:在表空间离线时自动创建,在表空间在线时自动删除,用于存储在离线时产生的回退信息。查询系统回退段信息:select segment_name,owner,tablespace_name from dba_rollback_segs;select segment_name,tablespace_name,bytes,blocks from sys.dba_segements where segment_type=‘ROLLBACK‘;临时段:用于存储进行排序或者汇总及执行如连接、分组、创建索引等操作的时候需要的临时表空间,用完后自动消失。当内存安排的大小不够排序的时候,自动使用磁盘临时段。可以通过参数 sort_area_size 进行内存排序区大小的查看。查看临时文件的信息:select file#,status,name from v$tempfile;
区:区或者叫做范围,是磁盘分配空间的最小单位。磁盘按区分配,每次至少分配一个区。随着区数目的增多,所在的段也不断变大,表空间自然也就大起来了。当区的个数超过MAXEXTENTS的限制时候,不能再增加区的个数,段的大小也不能在增大,表数据不能再增加。查询表空间的存储参数:select tablespace_name,contents,initial_extent,next_extent,min_extents,max_extents,extent_management,allocation_type from dba_tablespaces; 管理:分成数据字典表空间(9i Release2中取消了)和本地化管理空间。 上述查询语句的extent_management表明了管理方式,allocation_type表示管理方式下的区的分配方式。UNIFORM表示区大小为统一大小,SYSTEM表示区大小自动管理。这里管理方式的区别决定了磁盘碎片的管理。在数据字典方式中,会造成很多磁盘碎片,一般需要通过命令ALTER TABLESPACE TEMP COALESCE进行整理。而在本地化管理中,由于区时统一的大小原因或者自动管理,不需要担心这个磁盘问题。查询用户创建的基表的存储空间大小及存储方法:select initial_extent,next_extent,min_extents,max_extents,pct_increase from user_tables where table_name=‘XXXX‘;initial_extent表示分配给段的第一个区大小;next_extent表示下一个分配区的大小。min_extents表示第一次创建段时候分配的区的最小个数;max_extents表示段中区的最大个数。pct_increase表示从第三个区开始后,相对于上一个区所增加的百分比===>next=next*(1+pctincrease).查询数据段中的区分配情况:select segment_name,table_name,extent_id,bytes,blocks from user_extents where segment_name=‘XXXX‘; 数据块:数据块是数据库中最小的数据组织单位和管理单位,也是最小的I/O单位。大小由参数DB_BLOCK_SIZE确定,范围在2k-64k之间。对于系统表空间与默认表空间使用且只能使用参数db_block_size指定的数据块,对于其他表空间则可以使用不同的数据块组合。查询数据块大小:1.show parameter db_block_size 2.select name,value from v$parameter where name like ‘%size%;3.参数文件..数据块通常由块头、表目录、行目录、行数据和空闲空间组成。可以通过一系列的参数来控制数据块的行为,如空闲率(PCTFREE)、使用率(PCTUSED)、最小事务数(INITRANS)和最大事务数(MAXTRANS).如PCTFREE用于指定块中要保留的空间率,比如取值20%,那么你的块最多存储80%的块空间。这些空闲的空间可以用于已经存在的行修改的时候可能要使用。PCTUSED用于指定块中使用率的限定值。比如取值60%,在没有存储满的时候可以继续插入新的行值。它主要还是用于插入语句。INITRANS指定在每一个数据块中分配的事务入口的初始数,范围1-255,初始为1。MAXTRANS指定在每一个数据块中分配的事务入口的最大数,范围1-255,默认为255。查询数据块参数设置:select table_name,pct_free,pct_used,ini_trans,max_trans from user_tables;