暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

使用OMF管理数据文件

原创 eygle 2019-10-15
1878

在创建数据库的过程中,有过这样一个步骤,需要指定创建的数据库文件的位置,其中的一个选项是“使用Oracle管理的文件”,如图5-27所示。


image.png

图5-27  指定数据库文件所在位置


这是从Oracle 9i开始引入的一个新特性:Oracle管理的文件,也就是通常所说的OMF(Oracle Managed Files),Oracle通过这个新特性实现了数据文件的自我管理。通过OMF,Oracle将DBA同操作系统的存储分开,DBA在数据库中通过命令操作数据文件,Oracle则通过文件系统接口自动地进行文件创建或删除,也就是说,现在数据文件都处在了Oracle自身的直接管理(Self-Managed)之下。


Oracle Managed Files特性可以将DBA从直接的与操作系统的交互中脱离出来,以前当DBA从数据库中删除一个表空间后,数据文件可能仍然在操作系统上存在,这样DBA可能就需要去操作系统上手工删除文件来释放空间,这个手工操作非常危险,由于误操作删除在用文件的案例很多,最终Oracle认识到需要解决这个问题,于是在Oracle 9i中就有了OMF。


越来越多的文件都可以通过OMF来进行管理,以下各类文件都可以使用OMF管理:Permanent Tablespaces、Temporary tablespaces、Control Files、Redo Log Files、Archive Log Files、Flashback Logs、Block Change Tracking Files和RMAN Backups。


使用OMF需要配置两个初始化参数:DB_CREATE_ONLINE_LOG_DEST_n和DB_CREATE_FILE_DEST。


1.DB_CREATE_ONLINE_LOG_DEST_n

这个参数定义默认联机重做日志和控制文件的文件系统目录位置,该目录必须是已经存在的目录,并且Oracle必须对该目录有读写权限。当在创建OMF形式的联机重做日志和控制文件时,如果没有给出具体文件路径,Oracle将在此目录位置创建联机重做日志和控制文件。对于多路复用的联机重做日志和控制文件,n可以是从1~5的值。


2.  DB_CREATE_FILE_DEST

这个参数定义默认的文件系统目录位置,该目录必须是已经存在的目录,并且Oracle必须对该目录有读写权限。当定义了这个参数之后,Oracle会将数据文件创建在这个目录当中,如果未定义DB_CREATE_ONLINE_LOG_DEST_n参数,联机重做日志和控制文件也用它作为默认的文件系统目录。


这两个参数都是动态参数,可以通过ALTER SESSION或者ALTER SYSTEM命令动态修改。数据库可以同时使用Oracle管理的文件和非Oracle管理的文件,两者可以并存。当创建OMF文件时,文件名会被记录在alert.log文件中,以便将来查找和使用。


首先来看一下参数的设置:

SQL> select * from v$version where rownum <2;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
SQL> show parameter db_create_file
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest                  string
SQL> select name from v$datafile;
NAME
---------------------------------------------------------------------------------
/opt/oracle/oradata/eygle/system01.dbf
/opt/oracle/oradata/eygle/undotbs01.dbf
/opt/oracle/oradata/eygle/eygle01.dbf
/opt/oracle/oradata/eygle/users.dbf
SQL> alter system set db_create_file_dest='/opt/oracle/oradata/eygle';
System altered.


当设置了db_create_file_dest后,就可以使用OMF的特性,现在创建一个表空间非常简单,如果不指定大小,Oracle会自动创建一个100MB大小,可以自动扩展,最大大小不限制(这里的MAXBYTES是32G,因为对于一个8K的small tablespace的数据文件而言,最大只能到32G,这个知识点在5.9.1里有提到)的数据文件:

SQL> create tablespace omf;
Tablespace created.
SQL> select file_name,bytes,AUTOEXTENSIBLE,round(MAXBYTES/1024/1024/1024) MaxG
  2  from dba_data_files where tablespace_name='OMF';
FILE_NAME                                               BYTES AUT       MAXG
-------------------------------------------------- ---------- --- ----------
/opt/oracle/oradata/eygle/o1_mf_omf_306c4ssl_.dbf   104857600 YES         32


观察警告日志文件,可以发现文件的创建已经被记录:

Fri Mar 23 09:25:53 2007
Created Oracle managed file /opt/oracle/oradata/eygle/o1_mf_omf_306c4ssl_.dbf
Completed: create tablespace omf
当DROP一个OMF表空间时,Oracle现在将自动地删除数据文件:
SQL> drop tablespace omf;
Tablespace dropped.
SQL> ! ls /opt/oracle/oradata/eygle/o1_mf_omf_306c4ssl_.dbf
ls: /opt/oracle/oradata/eygle/o1_mf_omf_306c4ssl_.dbf: No such file or directory
 
SQL> ! tail -5 $ORACLE_BASE/admin/eygle/bdump/alert_eygle.log
Fri Mar 23 09:33:16 2007
drop tablespace omf
Fri Mar 23 09:33:17 2007
Deleted Oracle managed file /opt/oracle/oradata/eygle/o1_mf_omf_306c4ssl_.dbf
Completed: drop tablespace omf


当然在创建表空间时也可以指定详细的参数设置:

SQL> create tablespace omf datafile size 10M autoextend on maxsize 20M;
Tablespace created.
SQL> select file_name,file_id,bytes,AUTOEXTENSIBLE,MAXBYTES/1024/1024 MaxM
  2  from dba_data_files where tablespace_name='OMF';
FILE_NAME                                             FILE_ID      BYTES AUT       MAXM
-------------------------------------------------- ---------- ---------- --- ----------
/opt/oracle/oradata/eygle/o1_mf_omf_306dcdb8_.dbf           5   10485760 YES         20


通过测试可以看到现在表空间的创建和维护被极大简化,很多选项可以被省略,在创建表空间时也不必再为每个文件输入一次长长的路径信息。


可是在Oracle 9i中,这个特性的使用并不广泛,因为一旦指定了db_create_file_dest,那么所有的数据文件将在这个目录下创建,这就意味着基于I/O存储的优化被大大局限,如果规划不当则可能会导致I/O上的竞争。

直到Oracle 10g的ASM引入之后,OMF的作用进一步体现。在ASM下,Oracle接管了以前由操作系统负责的存储管理,现在可以将存储划分为不同的磁盘组分配给ASM使用,ASM负责在底层进行I/O的均衡、负载的分担、存储的优化,至此OMF可以被放心地使用。


在ASM的管理之下,我们已经无法直接操作数据文件,一切都纳入到了Oracle的管理范畴之内。通过ASM和OMF的结合,Oracle在上层将数据文件进行自我管理,在底层将存储进行自我管理,整个体系结构越来越健全起来。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论