Oracle数据库物理文件的布局
---------------------------------------
Oracle数据库文件的布局管理方式有两种:
-----------------------------------------------------
1.用户管理
-----------------------------------
1.当管理员创建表空间时,必须明确指定数据文件的位置,才能创建成功。
2.当管理员删除表空间时,Oracle缺省是不会删除磁盘文件的,要想同时删除磁盘文件
必须如下操作:
drop tablespace test including contents and datafiles;
-----------------------------------------------------------------------------------------------------------------
2.Oracle管理(OMF)
-----------------------------------
OMF是Oracle在9i中引入的管理文件布局的一个新特性。
----------------------------------------------------------------------------------------------------------------
要想使用OMF,先要配置以下3组参数:
----------------------------------------------------
1.db_create_file_dest:
定义一个缺省的目录,当创建数据文件,临时表空间文件时,如果没有明确定义
文件路径和名称,新文件就被创建在这个目录下。
如果定义了这个参数,而没有定义db_create_online_log_dest_n参数,则联机
日志和控制文件也会创建在这个目录下。
------------------------------------------------------------------------------------------------------------
2.db_create_online_log_dest_n(n=1~5):
最多可以定义5个缺省目录,如果创建联机日志,控制文件时,没有明确定义
文件路径和名称,则文件就会在这些目录下创建,如果定义了多个目录,则自动
实现了复用(Multiplexed)的功能。
-------------------------------------------------------------------------------------------------------------
3.db_recover_file_dest:
定义一个缺省目录。在使用RMAN工具进行备份时,如果没有定义备份集的格式,
则备份文件就保存在这个目录下。归档日志的自动管理也是使用这个目录。
和db_create_file_dest参数一样,如果没有定义db_create_online_log_dest_n
参数,则联机日志和控制文件也会创建在这个目录下。
------------------------------------------------------------------------------------------------------------
使用了OMF后,创建数据文件或日志文件时就不再需要考虑文件位置、大小等属性,OMF会自
动保证这些文件被创建到预定义的目录下。同时在删除表空间或日志组时,这些文件也就
同时删除了。OMF还会按照一定规则自动为文件指定名称,这个规则就是OFA(最佳灵活结构
Optimal Flexible Architecture)。
------------------------------------------------------------------------------------------------------------------------------
在OFA中,每个文件名格式如下:
/ol_mf_%t_%u_.dbf
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
其中destination_prefix是文件的保存路径,其格式如下:
//
--------------------------------------------------------------------
destination_location:
------------------------------
是由一些列**_create_file_dest参数定义的路径,db_unique_name使用的是数据库
参数db_unique_name的值,如果没有定义这个参数值,则使用db_name的值。
--------------------------------------------------------------------------------------------------------------
datafile:
------------------------------
根据文件类型不同,这个值不同。如果是数据文件,这个值是datafile,如果是联机日
志,这个值是onlinelog,如果是归档日志,这个值是archivelog/,也就是按照
日期细分成更多子目录。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%t:
------------------------------
根据文件类型不同,这个值不同。如果是数据文件,使用表空间的名称,如果是联机
日志,则是联机日志组号,如果是归档日志则是归档日志的序列号。
--------------------------------------------------------------------------------------------------------------
%u:
------------------------------
这是一个8个字符的串,OMF通过这个串来保证文件名的唯一性
--------------------------------------------------------------------------------------------------------------
归档日志的OMF配置,需配置3下参数:
-----------------------------------------------------
SQL>alter system set db_recovery_file_dest_size=1g;
SQL>alter system set db_recovery_file_dest='/tmp';
SQL>alter system set log_archive_dest_1='location=use_db_recovery_file_dest'
-------------------------------------------------------------------------------------------------
验证归档日志的OMF配置:
-----------------------------------------
SQL>alter system switch logfile;
SQL>select name from v$archived_log;
------------------------------------------------------------------------------------------
数据文件的OMF配置,只需配置1个参数:
-----------------------------------------
SQL>alter system set db_create_file_dest='/tmp' scope=both;
------------------------------------------------------------------------------------------
测试:
-----------------------------------------
SQL>create tablespace test;
SQL>create temporary tablespace temp;
SQL>alter database add logfile group 4;
SQL>alter database add logfile member 'member_name' to group group#;
------------------------------------------------------------------------------------------
SQL>select name from v$datafile;
SQL>select member from v$logfile;
SQL>select name from v$tempfile;
=================================================================================
The Logical Structure of Oracle
=================================================================================
Oracle的逻辑结构分为:
-----------------------------
1.数据块 (Block )
2.区 (Extents )
3.段 (Sgement )
4.表空间 (Tablespace)
------------------------------------------------------------------------------------------
1.数据块(Block)
---------------------
磁盘最小的存储单位是Sector,每个Sector是512字节。Oracle数据库的最基本存储
单位是数据块,每个数据块是由磁盘上连续的Sector组成的。数据块的大小是由初始
化参数db_block_size指定的,通常这个值是8KB,也可以定义成2KB,4KB,16KB,32KB
64KB,甚至其它值。
***注意:Oracle和操作系统间的数据交互都是以Oracle数据块为单位进行的。而OS和存储设备
间的交互是依据磁盘数据块为单位进行的。
--------------------------------------------------------------------------------------------------------------------------
数据块结构:
----------------------
数据块是数据的最终归宿,每个数据块依次可分为4个部分:
1.数据块头(Block Header)
2.行目录 (Row Directory)
3.空闲空间(Free Space)
4.已用空间(Used Space)
---------------------------------------------------------------------------------
数据块头:
这一部分会记录数据块的身份信息,包括数据块地址,数据块类型,(索引块,UNDO块等),事务表(ITL)。
----------------------------------------------------------------------------------------------------------------------
ITL是数据块最为重要的部分,它是Oracle"行级锁"和"读一致性"的实现基础。
也是Oracle优于其它数据库的"锁机制"体现。ITL相当于一个表格,每个表项
都指向在本数据块中参与到某个事务的一条记录,包括内容有UBA(Undo Block Address)
事务号(Transaction ID),SCN号。
----------------------------------------------------------------------------------------------------------------------
2.区(Extent)
--------------------------
连续的数据块组成了一个区,这个结构仅是用于为便于空间管理,包括空间
的分配和释放。
------------------------------------------------------------------------------------------------------
当用户创建表,索引等需要占用磁盘空间的对象时,Oracle要为这个对象分配
一块磁盘空间作为存储空间,这块空间叫做段,而段的空间不是以数据块为单位
分配的,是以区为单位分配的。以后随着数据的不断插入,需要空间扩展时,
也是以区为单位来进行的,而不是以数据块为单位进行的。
-------------------------------------------------------------------------------------------------------
正是因为对象的空间分配与释放以区为单位进行的,从这个意义上讲,区
的意义是简化管理的复杂性。
***注意:每次Oracle以区为单位进行空间分配时,区是一个连续的空间,只会定义
起、始两个数据块,因此会产生空间碎片。
采用本地管理的表空间对连续的空间碎片有自动合并处理的能力,但对不连续
的空间碎片却无能为力。
-------------------------------------------------------------------------------------------------------
3.段(Sgement)
--------------------------
段是位于区上一级的逻辑结构,Oracle的每个表或索引都会对应着一个段,如果用的
是分区表或者分区索引,每个分区都对应着一个段(这里的分区叫做Partition)。每个段
都会有名字,这个名字就是对象的名字。
----------------------------------------------------------------------------
段是由Extent组成,但是段并不要求Extent必须连续,这一点和Extent对数据块的要求不同。
--------------------------------------------------------------------------------------------------------------------------
4.表空间(Tablespace)
--------------------------
表空间是最高层次的逻辑结构,每个表空间由若干个物理文件组成。Oracle数据库由若干
个表空间组成。
--------------------------------------------------------------------------------------------------------------------------
从存放的数据类型来分类的话,可以认为只有三种表空间:
----------------------------------------------------------------------------
1.永久表空间
2.临时表空间
3.UNDO表空间
-----------------------------------------------------------------------------
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25963200/viewspace-700399/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25963200/viewspace-700399/