从Oracle 9i开始,Oracle提供了OMF(Oracle Manage File)特性,实现了文件系统命名自动化。目前的Oracle版本中,已经可以支持对数据文件(Data File)和在线日志文件(Online Log File)的OMF处理。
1、OMF特性与相关参数
传统的方式下,我们建立数据文件或者日志文件要明确的确定出建立文件的名称和路径。而使用OMF特性的时候,是不需要明确指定出文件名称路径,Oracle会通过预先设定参数建立符合规范的文件名称。
对Data File和Online Redo Log而言,Oracle提供了参数进行目录指定。
SQL> select * from v$version where rownum<2;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
SQL> show parameter create
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
create_bitmap_area_size integer 8388608
create_stored_outlines string
db_create_file_dest string /u01/oradata
db_create_online_log_dest_1 string
db_create_online_log_dest_2 string
db_create_online_log_dest_3 string
db_create_online_log_dest_4 string
db_create_online_log_dest_5 string
其中,标注红色的内容为使用OMF所涉及到的参数。db_create_file_dest指定的就是在创建数据文件时,如果语句命令不指定数据文件的位置,就在db_create_file_dest总目录下进行创建。同样,db_create_online_log_destn就表示当创建一个日志文件时,同时在多个位置进行的多重备份(Online Redo Log File通常是成组出现,每个日志组中包括很多相同的Redo Log File)。
下面的实验中,我们通过数据文件的OMF创建,来掩饰其特性。
2、传统表空间Tablespace创建与相关选项参数
首先,我们查看一下传统方式建立Tablespace和数据文件的方法和参数。
SQL> create tablespace tradway datafile '/u01/oradata/WILSON/datafile/trad.dbf' size 100m autoextend off extent management local uniform. size 1m segment space management manual;
Tablespace created
SQL> select tablespace_name, extent_management, allocation_type, SEGMENT_SPACE_MANAGEMENT from dba_tablespaces;
TABLESPACE_NAME EXTENT_MANAGEMENT ALLOCATION_TYPE SEGMENT_SPACE_MANAGEMENT
------------------------------ ----------------- --------------- ------------------------
(篇幅原因,有省略…)
TRADWAY LOCAL UNIFORM MANUAL
9 rows selected
在传统方式下,我们需要明确指定数据文件的位置和命名。
SQL> col file_name for a60;
SQL> select file_name,tablespace_name,bytes/1024/1024,AUTOEXTENSIBLE, INCREMENT_BY from dba_data_files;
FILE_NAME TABLESPACE_NAME BYTES/1024/1024 AUTOEXTENSIBLE INCREMENT_BY
------------------------------------------------------------ ------------------------------ --------------- -------------- ------------
(篇幅原因,有省略……)
/u01/oradata/WILSON/datafile/trad.dbf TRADWAY 100 NO 0
7 rows selected
传统方式下,如果我们直接进行表空间的删除,对应的数据文件是不会自动随之删除的。
SQL> drop tablespace tradway;
Tablespace dropped
//表空间被删除,但是数据文件依然存在
[oracle@oracle11g datafile]$ pwd
/u01/oradata/WILSON/datafile
[oracle@oracle11g datafile]$ ls -l | grep trad
-rw-r----- 1 oracle oinstall 104865792 Jun 5 07:59 trad.dbf
[oracle@oracle11g datafile]$
当然,也可以使用命令drop tablespace xxx including contents and datafiles;来实现直接删除。
此处,我们需要注意一下与数据文件相关的参数。在Oracle中,数据文件相关常见参数选项包括下面几个:
ü 数据文件大小size:表示创建文件时刻的初始大小;
ü 自动拓展功能autoextend开关:该数据文件在使用尽预设值空间之后,是否允许进行自动拓展;
ü 拓展体积参数increasment by:如果数据文件是允许进行自动拓展(autoextend on),那么每次拓展的空间大小是多大。如果数据文件增加频繁,建议设置略大的拓展体积参数,避免操作系统OS进行过于频繁的拓展操作;
ü 最大文件体积max size:生产环境下,所有的文件和磁盘空间都是受控制的,不会允许无限制的增长。max size就是设置数据文件增长的上限;
3、OMF效用实现
首先,我们检查一下默认下,OMF使用情况。
SQL> create tablespace defaulttbs;
Tablespace created
SQL> select tablespace_name, extent_management, allocation_type,SEGMENT_SPACE_MANAGEMENT from dba_tablespaces;
TABLESPACE_NAME EXTENT_MANAGEMENT ALLOCATION_TYPE SEGMENT_SPACE_MANAGEMENT
------------------------------ ----------------- --------------- ------------------------
(篇幅原因,有省略…)
DEFAULTTBS LOCAL SYSTEM AUTO
9 rows selected
没有指定数据文件的位置和名称,检查自动生成的效果。
SQL> select file_name,tablespace_name,bytes/1024/1024,AUTOEXTENSIBLE, INCREMENT_BY from dba_data_files;
FILE_NAME TABLESPACE_NAME BYTES/1024/1024 AUTOEXTENSIBLE INCREMENT_BY
------------------------------------------------------------ ------------------------------ --------------- -------------- ------------
(篇幅原因,有省略…)
/u01/oradata/WILSON/datafile/o1_mf_defaultt_6yoksxvd_.dbf DEFAULTTBS 100 YES 12800
7 rows selected
可见,在不指定数据文件相关参数的情况下,Oracle对OMF数据文件命名是采用系统内部命名方式。创建的数据文件大小为100M,支持自动文件拓展,每次增加大小为10m。
说明:在数据字典中的increment_by列列出的12800为每次拓展时候分配的数据块数量。计算公式:10*1024*1024/(8*1024)=1280,也就是10m的数据库空间在每个数据块8k大小的数据库中,对应1280个块。
此时,如果我们删除表空间,Oracle会连带负责的将文件删除。
//删除表空间
SQL> drop tablespace defaulttbs;
Tablespace dropped
[oracle@oracle11g datafile]$ ls
o1_mf_example_6bcsrj44_.dbf o1_mf_temp_6bcsr6d8_.tmp perfstatdata.dbf
o1_mf_sysaux_6bcsnqjb_.dbf o1_mf_undotbs1_6bcsnqjt_.dbf perfstattemp.dbf
o1_mf_system_6bcsnqfc_.dbf o1_mf_users_6bcsnql5_.dbf
如果我们在创建文件时指定参数,方式是如何呢?
--设置参数实验
SQL> create tablespace customf datafile size 150m autoextend off extent management local uniform. size 1m segment space management manual;
Tablespace created
SQL> select file_name,tablespace_name,bytes/1024/1024,AUTOEXTENSIBLE, INCREMENT_BY from dba_data_files;
FILE_NAME TABLESPACE_NAME BYTES/1024/1024 AUTOEXTENSIBLE INCREMENT_BY
------------------------------------------------------------ ------------------------------ --------------- -------------- ------------
(篇幅原因,有省略…)
/u01/oradata/WILSON/datafile/o1_mf_customf_6yol3wr2_.dbf CUSTOMF 150 NO 0
7 rows selected
我们通过datafile字句不带路径名称的参数size等,实现了自定义OMF数据文件。
4、结论
从网络中的一些反映看,OMF在生产环境下使用的情况还是有限的。
OMF的核心就是将文件存储透明化。实现DBA和数据库配置人员不需要关注文件具体名称和位置,通过Oracle的OMF和OFA体系实现规范化。但是目前的很多数据库系统部署,特别是生产部署,是需要将文件级别列入到部署规范中的。所以,从目前的OMF来看,实际应用还是相对较窄。
不过伴随着ASM、裸设备等存储技术的发展和透明化,OMF的发展应用还是值得关注的。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17203031/viewspace-697689/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17203031/viewspace-697689/