Oracle逻辑结构

逻辑结构

oracle的逻辑结构包括表空间(tablespace),段(segment),数据块(data block)以及模式对象(schema)。

一、表空间


1.什么是表空间?

 

    表空间是数据库中的基本逻辑结构,一系列数据文件的集合。一个表空间可以包含多个数据文件,但是一个数据文件只能属于一个表空间。 

    表空间具有在线(online)和离线(offline)属性,可以将除SYSTEM和RBS以外的其他作何表空间置为离线。


    查询表空间的文件信息:SELECT * FROM DBA_DATA_FILES。查询表空间的空闲空间信息:SELECT * FROM DBA_FREE_SPACE。若表空间的剩余空间不够,可以重新设置数据文件的大小:ALTER DATABASE DATAFILE 'filenamespec' RESIZE 500m。查询数据库中的表空间信息:SELECT * FROM DBA_TABLESPACE。

 

2.表空间的特性
a.限制用户可以使用的磁盘空间大小
SQL>ALTER USER user1 QUOTA 100M ON tablespace1


b.设置为离线、在线、只读、读写
SQL>ALTER TABLESPACE tbs1 ONLINE;
SQL>ALTER TABLESPACE tbs1 OFFLIKE;
SQL>ALTER TABLESPACE tbs1 READ ONLY;
SQL>ALTER TABLESPACE tbs1 READ WRITE;
  注意,在表空间被设置为READ ONLY或OFFLINE之后,该表空间数据文件的同步信息将不能改变,从而会造成不同步。在表空间置为READ WRITE或ONLINE之后,使用命令ALTER SYSTEM SWITCH LOGFILE强制执行多次日志切换后,系统自动保持所有数据文件的同步。
  不能将SYSTEM表空间置为READ ONLY或OFFLINE。如果undo空间中已经创建了回退段,且该回退段的状态为ONLINE,则undo表空间不能设置为READ ONLY或OFFLINE。


c.备份与恢复表空间
  数据库备份时,可以只备份一个独立的表空间。表空间备份可以在线执备份也可以离线冷备份。


d.优化I/O性能,应将表空间中的各数据文件放在不同的磁盘以平衡I/O。

 

3.临时表空间
  临时表空间用于为用户排序的ORDER BY语句使用。创建数据库时可以指定数据库的默认临时表空间。在创建用户的时候可以指定用户的默认临时表空间。
SQL>CREATE USER fey IDENTIFIED BY 12345 TEMPORARY TABLESPACE temp;
  在oracle8i中,如果创建用户时未指出用户的临时表空间,系统使用SYSTEM表空间作为该用户的临时表空间。而在oracle10g中,如果创建用户时未指出用户的临时表空间,系统使用TEMP表空间作为该用户的临时表空间。

 

4.基本表空间介绍


a. 系统表空间
主要存放数据字典和内部系统表基表
查看数据数据字典的SQL
select * from dict
查看内部系统表的SQL
select * from v$fixed_view_definition
DBA对系统的系统表中的数据字典必须有一个很深刻的了解,他们必须准备一些基础的SQL语句,通过这些SQL可以立即了解系统的状况和数据库的状态,这些基本的SQL包括
系统的剩余空间
系统的SGA
状态系统的等待
用户的权限
当前的用户锁
缓冲区的使用状况等


      在成为DBA 的道路上我们不建议你过分的依赖于OEM/Quest 等优秀的数据库管理工具,因为他们不利于你对数据数据字典的理解,SQL语句可以完成几乎全部的数据库管理工作。
大量的读少量的写是该表空间的一个显著的特点。

 
b. 临时表空间.
临时表空间顾名思义是用来存放临时数据的,例如排序操作的临时空间,他的空间会在下次系统启动的时候全部被释放。


c. 回滚段表空间
i. 回滚段在系统中的作用
       当数据库进行更新插入删除等操作的时候,新的数据被更新到原来的数据文件,而旧的数据(Before Image)就被放到回滚段中,如果数据需要回滚,那么可以从回滚段将数据再复制到数据文件中。来完成数据的回滚。在系统恢复的时候, 回滚段可以用来回滚没有被commit 的数据,解决系统的一至性。
       回滚段在什么情况下都是大量的写,一般是少量读,因此建议把回滚段单独出来放在一个单独的设备(如单独的磁盘或RAID),以减少磁盘的IO争用。
ii. 回滚段的工作方式
·一个回滚表空间可以被划分成多个回滚段.
·一个回滚段可以保存多个会话的数据.
·回滚段是一个圆形的数据模型
       假设回滚段由4 个区间组成,他们的使用顺序就是区间1à区间2à区间3à区间4à区间1。也就是说,区间是可以循环使用的,当区间4到区间1的时候,区间1里面的会话还没有结束, 区间4用完后就不能再用区间1,这时系统必须分配区间5,来继续为其他会话服务服务。

 
我们分析一个Update 语句的完成
①. 用户提交一个Update 语句
②. Server Process 检查内存缓冲.
如果没有该数据块的缓冲,则从磁盘读入
i. 如果没有内存的有效空间,DBWR被启动将未写入磁盘的脏缓冲写入磁盘
ii. 如果有有效空间,则读入
③. 在缓冲内更新数据
i. 申请一个回滚段入口,将旧数据写如回滚段
ii. 加锁并更新数据
iii. 并在同时将修改记录在Redo log buffer中
④. 用户提交一个Commit 语句
i. SCN增加
ii. 将Redo log buffer 写入Redo log file
iii. 返回用户Commit 完成

 

二、段

 

       段是对象在数据库中占用的空间,虽然段和数据库对象是一一对应的,但段是从数据库存储的角度来看的。一个段只能属于一个表空间,当然一个表空间可以有多个段。
       表空间和数据文件是物理存储上的一对多的关系,表空间和段是逻辑存储上的一对多的关系,段不直接和数据文件发生关系。一个段可以属于多个数据文件,关于段可以指定扩展到哪个数据文件上面。

  数据库的段可以分为四类:数据段、索引段、回退段、临时段。


1.数据段
  数据段是用于存储数据的段,他存储在数据表空间中。每一个表都有一个数据段(聚簇除外),表的数据存储在数据段中,默认情况下段名与表名相同。以下语句查询段的信息:
SQL>SELECT SEGMENTNAME,TABLESPACE,NAME,BYTES,BLOCKS FROM USER_EXTENTS;

 

2.索引段
  索引段用于存储索引,以下语句查询索引信息:
SQL>SELECT * FROM ALL_INDEXS
SQL>SELECT * FROM USER_INDEXS

 

3.回退段
  回退段用于存储用户数据修改之前的值,因而可以在特定条件下回退数据。回退段与事务是一对多的关系,一个事务只能使用一个回退段,而一个回退段可存放一个或多个事务的回退数据。


  在oracle8i及之前的版本中,管理回退段是项很复杂的工作,管理员需要根据每个事务的大小和事务数量来确定、计算回退段的数量及存储参数,在oracle9i之后,oracle增加了undo表空间,由系统自动管理它。从此不再需要考虑对回退段的管理。参数undo_management决定数据库使用的是回退段还是undo表空间,其值为auto表示使用undo表空间自动管理,manual表示手动管理回退段。

 

4.临时段
  临时段用于order by语句的排序以及一些汇总。

 

三、区


    表空间是数据库中最大的逻辑单位,每一个表空间由一个或多个数据文件组成,一个数据文件只能与一个表空间相联系。每一个数据库都有一个SYSTEM表空间,该表空间是在数据库创建或数据库安装时自动创建的,用于存储系统的数据字典表,程序系统单元,过程函数,包和触发器等,也可用于存储用户数据表,索引对象。

       关于Extent的翻译有多种解释,有的译作扩展,有的译作盘区,我这里通常译为区间。在一个段中可以存在多个区间,区间是为数据一次性预留的一个较大的存储空间,直到那个区间被用满,数据库会继续申请一个新的预留存储空间,即新的区间,一直到段的最大区间数(Max Extent)或没有可用的磁盘空间可以申请。
       在ORACLE8i以上版本,理论上一个段可以无穷个区间,但是多个区间对ORACLE却是有性能影响的,ORACLE建议把数据分布在尽量少的区间上,以减少ORACLE的管理与磁头的移动。


  一个段中,最小的区的个数是由参数MINEXTENTS来确定。参数MAXEXTENTS决定一个数据段中的区的最大个数。这些参数是可以在线动态修改的。
  区的分配过程中,每次至少分配5个区,如果所剩的空闲空间不够5个区,就会出现错误:ORA-01653。
  可以通过字典dba_tablespace查询表空间中区的信息。可以通过字典user_table查询段中区的信息。可以通过字典user_extents查询区的分配状况。

 

四、数据块


  数据块是数据中中最小的数据组织单位与管理单位,是数据文件磁盘存储空间单位,也是数据库I/O 的最小单位,数据块大小由DB_BLOCK_SIZE参数决定,不同的oracle版本DB_BLOCK_SIZE的默认值是不同的。
  9i以前的版本只能设定一种块大小,在9i及10g中,可以设定多种块大小,不同表空间可以指定不同的块大小。

 

五、模式对象


  模式对象是一种应用,包括:表、视图、聚簇、索引序列生成器、同义词、哈希、程序单元、数据库链等。模式对象以后在oracle schema专栏中详细说明。

你可能感兴趣的:(oracle,数据库,存储,System,磁盘,数据库管理工具)