首页 > 大数据 > 正文

利用OMF来管理Oracle数据库表空间

2009-07-17 11:21:54  来源:CIO时代网

摘要: 表空间是Oracle数据库管理中的一个重要对象。特别是在部署数据库时候,只要表空间规划好了,那么数据库设计也就已经成功一大半了。
关键词: Oracle数据库


    表空间是Oracle数据库管理中的一个重要对象。特别是在部署数据库时候,只要表空间规划好了,那么数据库设计也就已经成功一大半了。

    在Oracle数据库中,为了更好的管理表空间,提出了一种OMF的管理方式。通过这种工具,可以更加便捷的管理OMF表空间以及相关的数据文件。

    一、传统表空间的管理模式以及缺陷。

    在以前的Oracle数据库(在Oracle数据库维护中要做到前瞻性)系统中,管理表空间以及相关的数据文件是一件比较麻烦的事情。如需要如果如下的语句来创建表空间,并在创建表空间的同时表空间中包含的定义数据文件。create tablespace pc_date datafile 'd:pc_data.dbf' size 1G。

    在使用这种方式来管理表空间,主要的问题就是这个数据文件的命名问题。因为在Oracle数据库中,要求所有的数据文件的名字必须是唯一的。即使数据文件分属于不同的表空间(不要让临时表空间影响数据库性能),也要求其名字唯一。如果在创建表空间的时候,采用了不唯一的数据文件,则数据库就会拒绝建立数据文件或者表空间,并提示如下的错误信息:“ORA- 01537: 无法添加数据文件 'd: pc_data.dbf - 文件已是数据库的一部分”。为此在传统的表空间管理模式下,如何对数据文件进行命名以确保数据文件的名字唯一,这是比较复杂的一项工作。

    如果只是担心数据文件命名重复的问题,那么只需要规划充分还是可以避免的。但是在使用传统的方式管理表空间以及数据文件的时候,还有一个比较严重的问题,即不同操作系统上的兼容性问题。如现在数据库管理员由于用户的需求,需要在不同的操作系统平台上(如Windows操作系统与Linux操作系统上)管理多个数据库,此时就可能会发生一系列的问题。采用OMF来管理表空间,虽然不能够消除由此带来的一切问题,但是却仍然可以帮助管理员解决其中不少的难题。如可以消除不同操作系统中数据文件特定文件名的所造成问题。为此,除非有特殊的必要,笔者建议采用OMF的方式来管理表空间。特别是企业在部署数据库的时候,是从零开始的。由于此时不受低版本数据库系统的限制,为此笔者强烈建议采用OMF方式来管理表空间。由于OMF(Oracle管理文件)是在比较新的版本中才采用的管理机制。为此在考虑是否需要采用这个方式来管理表空间以及相关的数据文件时,还需要同时管理员所采用的数据库版本是否支持这个功能。

    二、修改初始化参数以启用OMF管理方式。

    简单的说,利用OMF工具,数据库管理员可以利用表空间而不是操作系统文件来指定数据文件等相关的操作。数据库管理员不需要手工命名数据文件或者临时文件。数据库系统会自动帮助管理员完成这项工作。不过默认情况下,这个工具是没有启用的。如果数据库管理员需要启用这项功能,就需要更改某个初始化参数让数据库启用这个OMF工具。这个初始化参数就是:alter system set db_create_file_dest='d:oracletablespace' scope=both。其中这个d:oracletablespace目录参数就是管理员打算让数据库用来创建和管理数据文件或者临时文件的目录。不过在设置这个参数的时候,需要注意两点。

    一是这个是一个动态参数。在修改的时候采用scope=both选项,就表示修改后立即生效。而且重新启动后这个配置仍然有效。因为 scope=both这个选项表示在内存中更改这个参数值(这表示修改后立即生效)的同时更改服务器参数文件中的参数值。所以重新启动后这个修改会被保存下来。不过需要注意的是,此时数据库采用的必须是服务器参数文件,即二进制参数文件。只有如此,利用alter system对数据库系统参数的更改才会保存到数据库的初始化参数文件中,下次重新启动后才会继续生效。如果采用的是文本参数文件,那么利用这个命令更改的配置不会被保存到初始化参数文件中。数据库管理员必须要手工更改文本参数文件。所以,在采取这个命令更改参数时,数据库管理员需要确认这个更改是否需要永远有效。如果需要永远有效的话,那么就需要考虑数据库启动的时候采用的初始化参数文件是什么。如果是服务器参数文件那么只需要采用scope=both 选项即可。如果不是的话,那么就可能在更改内存中的参数值的同时,在数据库初始化文件中也进行相应的更改。

    其次需要注意的是,在更改这个参数的时候,需要同时指定数据库管理员打算用来创建与管理数据文件的目录。这个目录必须在设置这个参数之前,在操作系统中已经存在。如果不存在的话,数据库系统不会自动创建相关的目录。这跟创建数据文件不同。在创建数据文件时,要求操作系统对应目录中不存在相同的文件。数据库系统会自动创建。如果这个目录不存在的话,操作系统会拒绝更改这个参数,并提示如下的错误信息:

    ORA-02097: 无法修改参数, 因为指定的值无效

    ORA-01261: 无法转换参数 db_create_file_dest 目标字符串

    ORA-01263: 文件目标目录的名称无效

    所以,在修改这个参数之前,数据库管理员一定要确保在操作雄中已经建立了相关的目录。另外需要注意的是,在不同的操作系统中建立目录的方式是不同的。如在Linux操作系统与Windows操作系统中建立目录的方式就不同。而且不同操作系统中目录大小写敏感程度也是不同的。如在Windows操作系统中,在操作系统上采用的是大写的目录,而在定义参数的时候采用的是小写的目录,这没有关系。因为在Windows操作系统中目录与文件大小写并不敏感。但是如果在Linux操作系统中则不同,它是大小写敏感的。为此如果数据库部署在Linux操作系统上,则在修改这个参数时,要确保在参数中定义的路径跟在操作系统中定义的路径必须是一模一样的,特别是大小写也要一致。

    三、数据文件的命名方式与表空间的类型。

    上面这个参数设置完以后,数据库管理员就可以利用语句create tablespace pc_data的形式来创建表空间。注意,此时数据库管理员并没有给这个表空间设置相关的数据文件。但是只有采用了OMF方式来管理表空间的话,在创建表空间的时候数据库自动会在对应的目录中创建一个数据文件。这个数据文件具有如下几个特性。首先采用唯一性数据文件名来创建表空间。如采用如上语句后,在操作系统对应目录中会生成一个O1_MF_PC_DATA__55OQLM9R_.DBF类似的文件名字。这是数据库自动创建的数据文件,其是唯一的。其次,这个数据文件具有自动扩展的能力。也就是说当数据超过这个这个文件的容量时,会自动扩展这个文件以容纳更多的数据。默认情况下,这个数据文件在创建时被初始化,其初始化的容量为100M。当然数据库管理员也可以指定一个想要的初始化大小,不过通常情况下没有这个必要。毕竟其会自动根据数据大多少来进行扩展。

    其次需要注意的是表空间的类型可以分为大文件表空间与小文件表空间。默认情况下采用这种方式建立的表空间,是小文件表空间。如果数据库管理员需要创建的是大文件表空间的话,那么需要采用关键字BIGFILE来进行修饰。即使启用了OMF方式来管理表空间,其实仍然可以采用传统的表空间管理方式。即如人可以通过create tablespace pc_date datafile 'd:pc_data.dbf' size 1G这种方式来建立表空间与数据文件。也就是说,两种方式可以并存。另外,如果数据库管理员需要同时在Windows和Linux等多种操作系统平台上维护数据库的话,则可以利用OMF工具从管理脚本中消除操作系统特定的文件名。不过需要注意的是,则只是针对文件名有效。由于两个操作系统存放文件格式上的差异,两个不同平台上的数据仍然不能够互导。除非使用Import等Oracle数据库系统提供的数据泵工具,才能够在两个不同平台的数据库系统之间进行数据的导入导出。对于这一点数据库管理员要特别的引起重视。以免在导入导出作业中引起比必要的麻烦。


第三十八届CIO班招生
国际CIO认证培训
首席数据官(CDO)认证培训
责编:

免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。