Oracle数据库中的数据文件有一个特性,即可以设置是否脱机。如果将数据文件设置为脱机,数据库就无法读取这个数据文件。只有在文件联机,时数据库才能够读取其中的内容。为此有时候改变这个数据文件的状态也是数据库维护过程中的一个必要手段。
一、为什么要更改其可用性?
1、 处于更改数据文件名或者位置的需要。
在数据库部署的时候,如果没有给数据文件取一个合适的名字,或者说没有给其选择一个合适的分区。此时在后续的维护中可能就需要更改数据文件的名字或者位置。如有时候处于性能优化的考虑,会将一些存在并发性访问的数据文件存放在不同的硬盘分区上,以减少I/O冲突提高数据库性能。在这种情况下,就必须要移动数据文件的位置。要实现这个目的的话,就必须首先要让数据文件脱机,然后再将其启动到合适的位置。
2、 系统遇到数据文件故障时会自动关闭。
有时候数据库系统也会自动关闭数据文件。如当数据库系统往数据文件中写入数据的时候,如果发现写入过程中出现错误的话,就会将这个数据文件设置为脱机,并将这个信息写入到日志中。数据库管理员接到报警信息后,就需要修复这个数据文件。修复完毕后,还需要手工的将这个数据文件设置为联机。此时数据库系统才会重新启用这个数据文件。可见,当数据文件无法正确写入时,也是数据文件脱机的一个原因。
将某个数据文件设置为脱机时,不会影响到其他数据文件的可用性。如数据库管理员在规划数据文件的时候,是按照部门来规划的。即其他部门的用户仍然可以在系统中访问自己若需要的数据。为此这个特性的话可以有效的的减少数据库当机的时间,实现数据库的最大可用性。 分步启动数据库以重命名数据文件
二、归档模式与非归档模式下分别如何更改?
Oracle数据库工作模式大致分为归档模式与非归档模式。在不同的操作模式下,其数据文件可用性维护的方法稍有差异。为此各位数据库管理员要了解在不同操作模式下的维护方式。只有如此,才能够采取合适的方式来改变数据文件的可用性。
若数据库处于归档模式,则要使一个单独的数据文件联机或者脱机,则只需要使用ALTER DATABASE的DATEFILE字句即可。即按照如下的形式就可以将某个数据文件设置为脱机或者联机。当以下命令执行成功后,系统会提示“数据库已经更改”。
ALTER DATABASE DATAFILE ‘数据文件存储路径与名字’ OFFLINE/ONLINE;
但是要注意,如果数据库不是处于归档模式,则执行上面的语句更改数据文件的可用性时,数据库会提示错误信息。若将某个数据文件设置为脱机时,“ 除非使用介质恢复,否则不允许立即脱机”。如将某个数据文件设置为联机时,会提示“数据文件5,需要介质恢复”。注意这里的5代表的是数据文件的绝对文件号。在Oracle数据库中文件号是数据库系统标识数据文件的一个工具,就好像人的身份证一样,唯一标识了一个数据文件。在Oracle中,文件号分为绝对文件号和相对文件号。绝对文件号是在整个数据库中唯一的标识一个数据文件。而相对文件号是在表空间中唯一的标识一个数据文件。也就是说,相对文件号在同一个表空间内是唯一的,但是并不保障在整个数据库内是唯一的。此时数据库可能需要表空间与相对文件号两个参数才能够唯一的定位数据文件。对于中等规模以下的数据库系统,往往相对文件号与绝对文件号是相同的。但是当数据库变得很大时,相对文件号与决定文件号就可能有所差异。由于在错误信息中没有直接说明数据文件的名称,为此数据库管理员不得不先将这个文件号转换到对应的数据文件名字,然后再去想解决方法。IT专家网独家:重定位数据文件的位置可见,如果当数据库采用非归档模式时,就无法采用上面方式将数据文件联机或者脱机。此时需要稍微修改一下上面的语句来完成。如可以将这个语句改为:
ALTER DATABASE DATAFILE ‘数据文件存储路径与名字’ OFFLINE DROP;
即需要在原先的语句后面加入DROP关键字。此时就可以正常将非归档模式下的数据文件脱机了。不过需要注意的一点就是,无非采用正常的方式将非归档模式下的数据文件设置为联机。正常情况下,只有采用介质恢复的形式才能够将非归档模式下的数据文件设置为联机。所以说,如果数据库采用的是非归档模式,那么在将数据文件设置为脱机时,就需要慎重了。因为此时再想将脱机的数据文件设置为联机,可没有这么简单了。
三、更改数据文件可用性的注意事项。
从以上的分析中可以看出要改变某个数据文件的状态,特别是归档模式下数据文件的可用性,并不是很困难的一件事情。不过在维护数据文件可用性的时候,下面的一些内容还需要引起各位数据库管理员的注意。
1、 系统表空间不能够脱机。
在Oracle数据库中,表空间可以分为系统表空间和非系统表空间。这里需要明白的是,系统表空间中的数据文件无法设置为脱机。后续大家还没有认识到这个的重要性。系统表空间中的数据文件无法脱机,就表示当数据库投入生产之后,就无法更改系统表空间中数据文件的存储位置。所以在数据库规划时,就好规划好系统表空间中数据文件的存储。另外,也不要将用户的数据文件存放到这个系统表空间中。
2、 表空间可用性与数据文件可用性之间的关系。
数据库表空间的可用性与数据文件的可用性存在着很密切的联系。一般来说,当将某个表空间设置为脱机或者联机时,这个表空间下面的所有数据文件的可用性也会随之变为脱机或者联机。但是,反过来即不成立。如先通过表空间脱机将所有的数据文件的可用性设置为脱机状态。然后再一一的将这个表空间的数据文件全部设置为联机,此时这些数据文件仍然不可用。这主要是因为这些数据文件的主人,表空间的使用状态还是为脱机。所以说,数据文件可用性的改变,不会影响到表空间。但是表空间使用状态的改变,却会影响其下面的所有数据文件。
这个特性有时候很有用。如现在数据库管理员出于性能优化的考虑,要将某个表空间移植到另外一个快性能更佳的硬盘上,以减少硬盘I/O的冲突。此时就需要将这个表空间的数据文件设置为脱机。为此数据库管理员就不需要一一的去改变这个表空间下面数据文件的可用性。而是可以直接将这个表空间设置为脱机,那么下面数据文件的可使用状态也会发生相应的改变。然后就可以移动这些数据文件的位置了。等到移动完成后,再将这个表空间设置为联机即可。此时这个表空间下面的所有数据文件也会变为联机。可见,通过表空间的可用性来维护数据文件的可用性,在需要维护整个表空间中数据文件的可用形时是非常便捷的一个方式。不过这里仍然需要注意一点,就是其仍然受到归档模式与非归档模式两种操作模式的限制。
最后需要说明的一点就是,数据文件在创建数据库或者增加数据文件时就会被创建。如现在为某个表空间增加了一个数据文件,即使这个数据文件还没有数据,系统就已经为其分配了存储空间。为此当数据文件创建后要调整数据文件的名字与位置时,会比较麻烦。所以笔者建议数据库管理员,在创建数据文件之前先要对其进行合理的规划,以免后续调整的麻烦。在数据文件创建之后,最好不要随意的通过更改可用性来调整数据文件的配置。