LinuxEye - Linux系统教程

LinuxEye - Linux系统教程

当前位置: 主页 > 数据库 >

oracle数据库逻辑结构

时间:2012-07-01 18:53来源:未知 编辑:admin 点击:
数据库存储空间由一个或多个表空间构成。(如system、sysaux...) 表空间(tablespace) 组织数据库空间的逻辑结构,其对物理结构是数据文件,一个表空间物理上由一个或多个数据文件组成
·数据库存储空间由一个或多个表空间构成。(如system、sysaux...)
·表空间(tablespace)
组织数据库空间的逻辑结构,其对物理结构是数据文件,一个表空间物理上由一个或多个数据文件组成,逻辑上由一个或多个数据段组成。
·数据段(segment)
逻辑对象所占用空间,如表段,索引段,回滚段等,段存在于表空间中,并对应一定的存储空间。
数据段又划分为一个或多个区间。
·区(extent)
区间是用于为数据一次性预留的一个逻辑上连续的一组disk空间(默认8块),每个区间占用一定数量的数据块。区不能跨数据文件。
·块(block)
数据库最小的存储单位(默认8k),是所有逻辑结构的基本分配单元。
 
一.    表空间
1.    表空间概述
Ø    功能和作用
·组织数据段空间,控制存储空间的分配
·通过使单个表空间在线或离线,控制数据的可用性
·通过表空间划分实现跨越设备分配数据存储,以提高性能
·通过指定用户使用指定表空间实现对用户的限制
·执行部分数据的后备和恢复操作
Ø    特点
·数据中的最大逻辑单位
·一个数据库逻辑上至少由一个系统表空间构成
·一个表空间物理上至少由一个数据文件构成
·一个表空间至少包括一个段(控制信息)
·表空间的大小等于所有从属于它的数据文件大小的总和
Ø    查询表空间使用状况
SQL> select * from dba_tablespaces;  查询数据库中所有表空间信息
SQL>  select * from dba_data_files;  查询表空间所含数据文件信息,不含临时表空间
SQL> select * from dba_temp_files;   专查临时表空间所含数据文件
SQL> select tablespace_name,sum(bytes) from dba_data_files
group by tablespace_name;            查询表空间大小
SQL> select tablespace_name,sum(bytes) from dba_free_space
group by tablespace_name;            查询表空间空闲空间大小
 
测试表空间使用情况
SQL> create tablespace test datafile '/u01/a.dat' size 5m;
SQL> alter tablespace test add datafile '/u01/b.dat' size 6m;
SQL> select tablespace_name,sum(bytes) from dba_data_files
group by tablespace_name;
TABLESPACE_NAME                SUM(BYTES)
------------------------------ ----------
TEST                             11534336
..........
SQL> select tablespace_name,sum(bytes) from dba_free_space group by tablespace_name;
TABLESPACE_NAME                SUM(BYTES)
------------------------------ ----------
TEST                             11403264 (控制信息)
..........
SQL>create table lj tablespace test as select * from dba_objects;
SQL> select tablespace_name,sum(bytes) from dba_free_space group by tablespace_name;
TABLESPACE_NAME                SUM(BYTES)
------------------------------ ----------
TEST                              5111808
 
Ø    更改表空间
SQL> alter tablespace test rename to fff;   表空间更名
SQL> alter tablespace test offline;         表空间脱机
SQL> alter tablespace test online;          表空间联机
SQL> alter database datafile '/u01/a.dat' offline; 表空间中数据文件脱机
SQL> alter database datafile '/u01/a.dat' online;  表空间中数据文件联机失败
alter database datafile '/u01/a.dat' online
*
ERROR at line 1:
ORA-01113: file 6 needs media recovery
ORA-01110: data file 6: '/u01/a.dat'
SQL> recover datafile 6;
SQL> alter database datafile '/u01/a.dat' online;
表空间offline,数据文件offline 的区别
在对表空间进行offline时,oracle需要针对这个表空间生成检查点,刷新表空间中数据文件的相关事务,更新数据文件头SCN,数据文件SCN,文件终止SCN,达到一致状态,当表空间被再次ONLINE时,oracle会捕捉online时刻的SCN,更新上面各个位置的SCN(当然文件结束SCN号会置为无穷大),将数据文件都打开
在对单个数据文件做offline时,是立即offline,此时不会针对数据文件生成检查点,所以数据文件的终止SCN为无穷大,处于不一致状态,数据文件也需要recover,在v$recover_file视图也可以看到这个文件的信息,要想将数据文件online,必须先对文件执行recover操作,所以建议offline数据文件后应该立刻执行recover操作,使他处于一致状态,以免后面出现不必要的麻烦
SQL> alter tablespace test read only;   设置表空间只读
SQL> alter tablespace test read write;  设置表空间可读写
 
Ø    扩展表空间
SQL> alter tablespace test add datafile '/u01/c.dat' size 500M;
增加数据文件个数以扩充表空间(数据文件大约5~20个)
SQL> alter database datafile '/u01/a.dat' resize 80M;扩充数据文件大小扩充表空间
SQL> alter database datafile '/u01/a.dat' autoextend on maxsize 100M;
                        设置自动扩充参数以自动扩充表空间
 
Ø    删除表空间
SQL> drop tablespace test including contents and datafiles;
                        删除表空间和os下的数据文件
 
2. 表空间的管理方式
Ø    数据字典管理方式:(DMT dictionary managed tablespace)
UET$(used extent):记载以使用的区间
FET$(free extent):记载空闲空间
每个使用空间或空闲空间(一个或多个extent)都在两表中对应了一行,当一表(即段)被删除的时候,oracle就移动UET$中相应的行到FET$,建表则反之,当并发性很高的时候,发生数据字典争用;另外当表达空间很不连续或表空间有大量的碎片引起这两个表达增大,也会引起数据库性能下降。
oracle9.2以后已不支持DMT管理方式
 
Ø    本地表空间管理:(LMT,locally managed tablespace,默认)
oracle不再利用数据字典表达记录表空间内区的使用状况,而是在每个表空间的数据文件的头部加入了一个位图区(二维数组区),在其中记录每个区的使用状况。每当一个区被使用,或者被释放以供重新使用时,oracle都会跟新数据文件头部的这个记录以反映该变化,从而减少了数据字典表的竞争,提高了空间管理的并发性,且能自动优化区的管理以避免碎片的产生。
SQL> select tablespace_name,extent_management from dba_tablespaces;
                                        查询表空间使用的管理方式
本地表空间管理分两类
·autoallocate管理方式:由系统自动决定extents大小(默认)
若表空间中的extent的尺寸是不一定的,即需要不同的区大小和拥有很多区的大小变动的对象,这时使用autoallocate是比较合理的选择。虽然有可能浪费了一些空间,但是有oracle管理空间的使用(空间分配和回收),简化了用户的管理
对于8k的data blocks,每个segment的前16个exten大小是64k,接着的63个extent是1M的,再接着是120个8M的,然后是64M
·uniform管理方式:由用户指定extents大小(临时表空间只能使用此方法)若想要准确控制未用的空间,并且能够精确地预计为一个或更多对象要分配的空间和盘区的数目、大小等,那么使用uniform选项更合适,因为它确保在表空间中永远不会有一定数量的未用空间。uniform size的默认大小是1M,此时,使用此方式创建数据文件时,数据文件的大小至少为1M
当指定uniform参数时,若过小则大表被分配过多分区,若过大则小表将浪费掉分区空间,可设置不同uniform大小的表空间以适应不同大小对象,一个较标准的LMT+uniform的用户表空间(不考虑system/temp/undo)应有8个表空间,4个for data,4个for index:
对象小于1M:      uniform size 64k(or 128k)
对象介于1~20M:  uniform size 1M
对象介于10~100M:uniform size 10M
对象大于100M:    uniform size 100M
SQL> create tablespace t1 datafile 't1.dbf' size 5M;
默认建立autoallocate管理的表空间
SQL> create tablespace t2 datafile 't2.dbf' size 5M uniform size 2M;
                                   建立uniform管理的表空间
SQL> select tablespace_name,allocation_type from dba_tablespaces;
                                  查看所有表空间的本地管理方式

转载请保留固定链接: https://linuxeye.com/database/666.html

------分隔线----------------------------
标签:逻辑结构Oracle
栏目列表
推荐内容