设为首页 收藏本站
查看: 313|回复: 0

[经验分享] Oralce OMF 功能详解

[复制链接]
累计签到:77 天
连续签到:1 天
发表于 2014-4-20 19:44:43 | 显示全部楼层 |阅读模式
OMF,全称是Oracle_Managed Files,即Oracle文件管理,使用OMF可以简化管理员的管理工作,不用指定文件的名字、大小、路径,其名字,大小,

路径由oracle 自动分配。在删除不再使用的日志、数据、控制文件时,OMF也可以自动删除其对应的OS文件。



OMF支持下列文件的自动管理:

    表空间

    日志文件(联机)

    控制文件

前提条件:需要为这些类型文件设定相关参数。



一.数据文件的OMF管理

  数据文件管理参数:db_create_file_dest

  db_create_file_dest:Oracle创建数据文件、临时文件时,在未明确指定路径的情况下的缺省路径,当db_create_online_log_dest_n未指定时,

                       也作为联机日志文件和控制文件的缺省路径。



  假定需要创建表空间s及数据文件



    SQL> CREATE TABLESPACE s;  /*收到了错误信息*/

       create tablespace s

                       *

       ERROR at line 1:

       ORA-02199: missing DATAFILE/TEMPFILE clause



    SQL> show parameter db_create_file   /*查看db_create_file_dest参数*/



       NAME                                 TYPE        VALUE

       ------------------------------------ ----------- ------------------------------

       db_create_file_dest                  string



    --设定db_create_file_dest参数

    SQL> ALTER SYSTEM SET db_create_file_dest = '/u01/app/oracle/oradata/orcl';



       System altered.



    --设定参数后,创建成功

    SQL> CREATE TABLESPACE s;



       Tablespace created.



    SQL> SELECT NAME FROM v$datafile;  /*可以看到ORCL/datafile/o1_mf_s_5vrl1t7h_.dbf是Oralce自动创建的数据文件*/



       NAME

       --------------------------------------------------------------------------------

       /u01/app/oracle/oradata/orcl/system01.dbf

       /u01/app/oracle/oradata/orcl/undotbs01.dbf

       /u01/app/oracle/oradata/orcl/sysaux01.dbf

       /u01/app/oracle/oradata/orcl/users01.dbf

       /u01/app/oracle/oradata/orcl/example01.dbf

       /u01/app/oracle/oradata/orcl/Test.dbf

       /u01/app/oracle/oradata/orcl/ORCL/datafile/o1_mf_s_5vrl1t7h_.dbf



    /*查看物理文件,缺省为MB*/

    SQL> ho ls -lh /u01/app/oracle/oradata/orcl/ORCL/datafile/o1_mf_s_5vrl1t7h_.dbf

       -rw------- 1 oracle oinstall 101M Apr  7 16:54 /u01/app/oracle/oradata/orcl/ORCL/datafile/o1_mf_s_5vrl1t7h_.dbf



    SQL> CREATE TABLESPACE t DATAFILE SIZE 10m;  /*也可指定数据文件的大小为MB*/



       Tablespace created.



    SQL> SELECT NAME FROM v$datafile;



       NAME

       --------------------------------------------------------------------------------

       /u01/app/oracle/oradata/orcl/system01.dbf

       /u01/app/oracle/oradata/orcl/undotbs01.dbf

       /u01/app/oracle/oradata/orcl/sysaux01.dbf

       /u01/app/oracle/oradata/orcl/users01.dbf

       /u01/app/oracle/oradata/orcl/example01.dbf

       /u01/app/oracle/oradata/orcl/Test.dbf

       /u01/app/oracle/oradata/orcl/ORCL/datafile/o1_mf_s_5vrl1t7h_.dbf

       /u01/app/oracle/oradata/orcl/ORCL/datafile/o1_mf_t_5vrlgqtl_.dbf



    SQL> ho ls -lh /u01/app/oracle/oradata/orcl/ORCL/datafile/o1_mf_t_5vrlgqtl_.dbf

       -rw------- 1 oracle oinstall 11M Apr  7 17:01 /u01/app/oracle/oradata/orcl/ORCL/datafile/o1_mf_t_5vrlgqtl_.dbf



    --删除表空间时,对于使用了OMF生成的数据文件将随着表空间的删除一起被删除

    SQL> DROP TABLESPACE t;



    Tablespace dropped.



    --查看物理文件,已经不存在

    SQL> ho ls -lh /u01/app/oracle/oradata/orcl/ORCL/datafile/o1_mf_t_5vrlgqtl_.dbf

       ls: /u01/app/oracle/oradata/orcl/ORCL/datafile/o1_mf_t_5vrlgqtl_.dbf: No such file or directory



    --对于未采用OMF来创建的表空间,在删除表空间之后,其数据文件并没有删除,v$datafile视图中被删除

    --下面是未使用OMF创建的x表空间及数据文件

    SQL> CREATE TABLESPACE x DATAFILE '/u01/app/oracle/oradata/orcl/x.dbf' SIZE 10m;



       Tablespace created.



    SQL> SELECT NAME FROM v$datafile;     



       NAME

       --------------------------------------------------------------------------------

       /u01/app/oracle/oradata/orcl/system01.dbf

       /u01/app/oracle/oradata/orcl/undotbs01.dbf

       /u01/app/oracle/oradata/orcl/sysaux01.dbf

       /u01/app/oracle/oradata/orcl/users01.dbf

       /u01/app/oracle/oradata/orcl/example01.dbf

       /u01/app/oracle/oradata/orcl/Test.dbf

       /u01/app/oracle/oradata/orcl/ORCL/datafile/o1_mf_s_5vrl1t7h_.dbf

       /u01/app/oracle/oradata/orcl/x.dbf



    SQL> DROP TABLESPACE x;



       Tablespace dropped.



    SQL> SELECT NAME FROM v$datafile; /*视图中已不存在x.dbf的数据文件*/



       NAME

       --------------------------------------------------------------------------------

       /u01/app/oracle/oradata/orcl/system01.dbf

       /u01/app/oracle/oradata/orcl/undotbs01.dbf

       /u01/app/oracle/oradata/orcl/sysaux01.dbf

       /u01/app/oracle/oradata/orcl/users01.dbf

       /u01/app/oracle/oradata/orcl/example01.dbf

       /u01/app/oracle/oradata/orcl/Test.dbf

       /u01/app/oracle/oradata/orcl/ORCL/datafile/o1_mf_s_5vrl1t7h_.dbf



    SQL> ho ls /u01/app/oracle/oradata/orcl/x.dbf   /*操作系统中依然存在*/

       /u01/app/oracle/oradata/orcl/x.dbf



    --注意:使用OMF的时候会将物理文件删除,应特别注意使用

    --使用下面的方法重建x表空间,然后使用including contents and datafiles 彻底删除表空间及物理文件

    SQL> CREATE TABLESPACE X DATAFILE '/u01/app/oracle/oradata/orcl/x.dbf' REUSE;  



       Tablespace created.



    SQL> DROP TABLESPACE x INCLUDING CONTENTS AND DATAFILES;



       Tablespace dropped.



    SQL> ho ls /u01/app/oracle/oradata/orcl/x.dbf

       ls: /u01/app/oracle/oradata/orcl/x.dbf: No such file or directory



总结:使用OMF管理文件的方法

  1.使用ALTER SYSTEM SET db_create_file_dest = '<path>'设置路径

  2.查看刚刚的设置SHOW PARAMETER db_create_file_dest;

  3.创建表空间及数据文件CREATE TABLESPACE tablespace_name

  4.单独创建表空间CREATE TABLESPACE <> DATAFILE '<path>' SIZE <>;

  5.也可以创建undo和temporary tablespace 。CREATE UNDO TABLESPACE tablespace_name ;CREATE TEMPORARY TABLESPACE tablespace_name;

  6.删除表空间DROP TABLESPACE tablespace_name ;OMF情况下则删除物理文件,等效于未使用OMF创建,使用INCLUDING CONTENTS ANDDATAFILES 删除方式





二.日志文件的OMF管理

  日志文件管理参数:db_create_online_log_dest_n

  db_create_online_log_dest_n:Oracle创建联机日志文件和控制文件时,在未明确指定路径的情况下的缺省路径



--查看日志文件的参数,下面是未作设置的db_create_online参数

    SQL> SHOW PARAMETER db_create_online



       NAME                                 TYPE        VALUE

       ------------------------------------ ----------- ------------------------------

       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,一般情况下我们仅仅需要个成员即可。因为在此设定个参数文件

    --下面是未设定的情况下创建日志文件,则默认为在数据文件路径及闪回区各放一个文件,因为上述两个路径都是OMF路径,如下:



    SQL> SELECT MEMBER FROM v$logfile;



       MEMBER

       --------------------------------------------------------------------------------

       /u01/app/oracle/oradata/orcl/redo03.log

       /u01/app/oracle/oradata/orcl/redo02.log

       /u01/app/oracle/oradata/orcl/redo01.log

       /u01/app/oracle/oradata/orcl/ORCL/onlinelog/o1_mf_4_5vtgzjyz_.log

       /u01/app/oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_4_5vtgzlhb_.log



    SQL> SHOW PARAMETER db_create_file_dest



       NAME                                 TYPE        VALUE

       ------------------------------------ ----------- ------------------------------

       db_create_file_dest                  string      /u01/app/oracle/oradata/orcl



       SQL> show parameter db_recovery_file_dest



       NAME                                 TYPE        VALUE

       ------------------------------------ ----------- ------------------------------

       db_recovery_file_dest                string      /u01/app/oracle/flash_recovery

                                                  _area

       db_recovery_file_dest_size           big integer 2G



    --将日志文件存放到指定的disk1,disk2下面

    SQL> ho mkdir /u01/app/oracle/disk1



    SQL> ho mkdir /u01/app/oracle/disk2



    SQL> ALTER SYSTEM SET db_create_online_log_dest_1 = '/u01/app/oracle/disk1';



       System altered.



    SQL> ALTER SYSTEM SET db_create_online_log_dest_2 = '/u01/app/oracle/disk2';



       System altered.



    SQL> ALTER DATABASE ADD logfile;



       Database altered.



    SQL> SELECT * FROM v$logfile; /*可以看到新的日志文件放到disk1,disk2下面*/



       GROUP# STATUS  TYPE    MEMBER                                   IS_

    ---------- ------- ------- ---------------------------------------- ---

            3         ONLINE  /u01/app/oracle/oradata/orcl/redo03.log  NO

            2         ONLINE  /u01/app/oracle/oradata/orcl/redo02.log  NO

            1         ONLINE  /u01/app/oracle/oradata/orcl/redo01.log  NO

            4         ONLINE  /u01/app/oracle/oradata/orcl/ORCL/online NO

                            log/o1_mf_4_5vtgzjyz_.log



            4         ONLINE  /u01/app/oracle/flash_recovery_area/ORCL YES

                            /onlinelog/o1_mf_4_5vtgzlhb_.log



            5         ONLINE  /u01/app/oracle/disk1/ORCL/onlinelog/o1_ NO

                            mf_5_5vtlpxo0_.log



       GROUP# STATUS  TYPE    MEMBER                                   IS_

    ---------- ------- ------- ---------------------------------------- ---



            5         ONLINE  /u01/app/oracle/disk2/ORCL/onlinelog/o1_ NO

                            mf_5_5vtlpz4d_.log



                            SQL> alter database drop logfile group 5;



    Database altered.



    /*删除日志文件组*/

    SQL> ALTER DATABASE DROP logfile GROUP 4;



       Database altered.



    SQL> SELECT group#,member FROM v$logfile;



       GROUP# MEMBER

    ---------- ----------------------------------------

            3 /u01/app/oracle/oradata/orcl/redo03.log

            2 /u01/app/oracle/oradata/orcl/redo02.log

            1 /u01/app/oracle/oradata/orcl/redo01.log



    SQL> ho ls /u01/app/oracle/disk1/ORCL/onlinelog/o1_mf_5_5vtlpxo0_.log;

       ls: /u01/app/oracle/disk1/ORCL/onlinelog/o1_mf_5_5vtlpxo0_.log: No such file or directory



总结:

  1.当定义了db_recovery_file_dest 和db_create_file_dest路径,且没有定义db_create_online_log_dest_n的时候,

    则OMF将日志文件存放在db_recovery_file_dest和db_create_file_dest路径下,而且日志组下为个成员

  2.当定义了db_create_online_log_dest_1则将日志文件存放到db_create_online_log_dest_1

    和db_create_file_dest路径下,且日志组下为个成员

  3.当定义了db_create_online_log_dest_1和db_create_online_log_dest_2则存放到

    db_create_online_log_dest_1和db_create_online_log_dest_2下

  4.当定义了多个db_create_online_log_dest_n,则为每个组n个日志成员,且多路复用

  5.增加日志文件的方法;

    alter database add logfile;

    alter database add logfile [group n];

    alter database add logfile member '<dir>' to group [n]

    /*add logfile member这个方法仅使用未使用OMF的日志文件,对于已经运用了OMF的日志组,无法使用该功能添加日志文件*/

  6.删除日志文件组时,对于OMF的日志文件组,其对应的物理文件同时被删除

    alter database drop logfile group [n]





三.使用OMF管理控制文件

  使用OMF管理控制文件同管理日志文件类似,主要涉及到的也是db_create_online_log_dest_n参数

  即控制文件默认存放在db_create_online_log_dest_n下,当定义了一个db_create_online_log_dest_n

  则生成一个控制文件,当定义了多了则生成多个控制文件。

  前提条件:去掉control_files参数

  alter system reset control_files scope = spfile sid = '*';



  以下是预留的OMF路径:

    SQL> SHOW PARAMETER db_create



       NAME                                 TYPE        VALUE

       ------------------------------------ ----------- ------------------------------

       db_create_file_dest                  string      /u01/app/oracle/oradata/orcl

       db_create_online_log_dest_1          string      /u01/app/oracle/disk1

       db_create_online_log_dest_2          string      /u01/app/oracle/disk2

       db_create_online_log_dest_3          string

       db_create_online_log_dest_4          string

       db_create_online_log_dest_5          string

    SQL> show parameter db_recovery_file



       NAME                                 TYPE        VALUE

       ------------------------------------ ----------- ------------------------------

       db_recovery_file_dest                string      /u01/app/oracle/flash_recovery

                                               _area

       db_recovery_file_dest_size           big integer 2G



总结

    参数                                         适用范围

    db_create_file_dest_size          datafile,create tablespace<>

    db_create_online_log_dest_n       logfile ,controlfile

    db_recovery_file_dest             rman, archivelog,onlinelog


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-17898-1-1.html 上篇帖子: sql全国省市区数据库建表过程 下篇帖子: Oracle基础学习之SQL及调优
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表