【问题现象】
在给表空间添加文件后,发现数据文件的添加的位置或名字不规范,需要规范性的更正
如下述场景:
sys@ora10g> col tablespace_name for a15
sys@ora10g> col file_name for a50
sys@ora10g> select tablespace_name,file_name from dba_data_files where tablespace_name = 'TBS_SEC_D';
TABLESPACE_NAME FILE_NAME
--------------- --------------------------------------
TBS_SEC_D /oracle/oradata/ora10g/tbs_sec_d01dbf
细心地您应该看到这个数据文件名字应该为tbs_sec_d01.dbf,这里少了一个点。(另外一种场景是错误的将数据文件添加到了不正确的路径中需要修改)
这种错误也许您也会遇到。
首先声明一下:如果保持这个错误名字不变,不会影响到数据库的正常运行,但为了防止在维护过程中产生不必要的干扰,还是应该将其更正的。
【处理方法1】OFFLINE数据文件 --> 修改操作系统上的文件名 --> 修改数据库中的文件名 --> 对数据文件进行恢复 --> ONLINE数据文件
特别强调:需要归档模式!因为需要对数据文件进行恢复
1.OFFLINE数据文件
sys@ora10g> alter database datafile '/oracle/oradata/ora10g/tbs_sec_d01dbf' offline;
Database altered.
2.修改操作系统上的文件名
ora10g@testdb /oracle/oradata/ora10g$ mv tbs_sec_d01dbf tbs_sec_d01.dbf
3.修改数据库中的文件名
sys@ora10g> alter database rename file '/oracle/oradata/ora10g/tbs_sec_d01dbf' to '/oracle/oradata/ora10g/tbs_sec_d01.dbf';
Database altered.
4.对数据文件进行恢复
sys@ora10g> recover datafile '/oracle/oradata/ora10g/tbs_sec_d01.dbf';
Media recovery complete.
5.ONLINE数据文件
alter database datafile '/oracle/oradata/ora10g/tbs_sec_d01.dbf' online;
6.确认修改成功
sys@ora10g> select tablespace_name,file_name from dba_data_files where tablespace_name = 'TBS_SEC_D';
TABLESPACE_NAME FILE_NAME
--------------- ---------------------------------------
TBS_SEC_D /oracle/oradata/ora10g/tbs_sec_d01.dbf
【处理方法2】OFFLINE表空间 --> 修改操作系统上的文件名 --> 修改数据库中的文件名 --> ONLINE表空间
1.OFFLINE表空间
sys@ora10g> alter tablespace tbs_sec_d offline;
Tablespace altered.
2.修改操作系统上的文件名
ora10g@testdb /oracle/oradata/ora10g$ mv tbs_sec_d01dbf tbs_sec_d01.dbf
3.修改数据库中的文件名
sys@ora10g> alter database rename file '/oracle/oradata/ora10g/tbs_sec_d01dbf' to '/oracle/oradata/ora10g/tbs_sec_d01.dbf';
Database altered.
4.ONLINE表空间
sys@ora10g> alter tablespace tbs_sec_d online;
Tablespace altered.
5.确认修改成功
sys@ora10g> select tablespace_name,file_name from dba_data_files where tablespace_name = 'TBS_SEC_D';
TABLESPACE_NAME FILE_NAME
--------------- ---------------------------------------
TBS_SEC_D /oracle/oradata/ora10g/tbs_sec_d01.dbf
【处理方法3】SHUTDOWN数据库 --> 修改操作系统上的文件名 --> 数据库启动到MOUNT --> 修改数据库中的文件名 --> OPEN数据库
1.SHUTDOWN数据库
sys@ora10g> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
2.修改操作系统上的文件名
ora10g@testdb /oracle/oradata/ora10g$ mv tbs_sec_d01dbf tbs_sec_d01.dbf
3.数据库启动到MOUNT
NotConnected@> startup mount;
ORACLE instance started.
Total System Global Area 562036736 bytes
Fixed Size 2022312 bytes
Variable Size 171967576 bytes
Database Buffers 381681664 bytes
Redo Buffers 6365184 bytes
Database mounted.
4.修改数据库中的文件名
NotConnected@> alter database rename file '/oracle/oradata/ora10g/tbs_sec_d01dbf' to '/oracle/oradata/ora10g/tbs_sec_d01.dbf';
Database altered.
5.OPEN数据库
NotConnected@> alter database open;
Database altered.
6.确认修改成功
sys@ora10g> select tablespace_name,file_name from dba_data_files where tablespace_name = 'TBS_SEC_D';
TABLESPACE_NAME FILE_NAME
--------------- ---------------------------------------
TBS_SEC_D /oracle/oradata/ora10g/tbs_sec_d01.dbf
【总结】
以上三个实验是按照对数据库运行影响加深的顺序进行的。很显然,需要停起数据库对数据库的可用性影响是最大的,单独对特定数据文件进行修改的影响最小,对表空间offline的方法影响介于其之间。