Oracleデータファイル名の特殊文字を修正する手法

Oracleデータベースのデータファイル名に末尾のスペースが含まれていたため、通常のSQLコマンドでリネームが不可能な状況が発生しました。以下は、この問題を解決するための実際の手順です。

SQLコマンドによるリネームの失敗

ALTER TABLESPACE ... RENAME DATAFILE コマンドを使用してファイル名を修正しようとしましたが、OSレベルでファイルが見つからないというエラーが発生しました。

SQL> alter tablespace WST_DATA rename datafile 'D:\oracle11\oradata\teblespace\WST_DATA .DBF' TO 'D:\oracle11\oradata\teblespace\WST_DATA.DBF';
*
ERROR at line 1:
ORA-01525: error in renaming data files
ORA-01141: error renaming data file 6 - new file 'D:\oracle11\oradata\teblespace\WST_DATA.DBF' not found
ORA-01110: data file 6: 'D:\ORACLE11\ORADATA\TEBLESPACE\WST_DATA .DBF'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 系统找不到指定的文件。

また、ファイル番号を指定してリネームしようとすると、無効なファイル名というエラーが返されます。

SQL> alter tablespace WST_DATA rename datafile 6 TO 'D:\oracle11\oradata\teblespace\WST_DATA.DBF';
*
ERROR at line 1:
ORA-02236: invalid file name

RMANを用いた代替対応

SQLレベルでの操作が不可能なため、RMAN(Recovery Manager)を使用してファイルをコピーし、制御ファイルを更新する方法を採用しました。

  1. データベースをシャットダウンし、マウント状態に起動します。
  2. データファイル6を新しい名前でコピーします。
  3. コピーしたファイルを新しいパスに切り替えます。
  4. データベースをオープンします。
RMAN> shutdown immediate;
database closed
database dismounted
Oracle instance shut down

RMAN> startup mount;
Oracle instance started
database mounted

RMAN> copy datafile 6 to 'D:\oracle11\oradata\teblespace\WST_DATA.DBF';
Starting backup at 10-FEB-15
allocated channel: ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile fno=00006 name=D:\ORACLE11\ORADATA\TEBLESPACE\WST_DATA .DBF
output filename=D:\ORACLE11\ORADATA\TEBLESPACE\WST_DATA.DBF tag=TAG20150210T145554 recid=1 stamp=871311470
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:01:56
Finished backup at 10-FEB-15

RMAN> run {
  2> set newname for datafile 6 to 'D:\oracle11\oradata\teblespace\WST_DATA.DBF';
  3> switch datafile 6;
  4> }
executing command: SET NEWNAME
datafile 6 switched to datafile copy
input datafile copy recid=1 stamp=871311470 filename=D:\ORACLE11\ORADATA\TEBLESPACE\WST_DATA.DBF

RMAN> alter database open;
database opened

変更後の確認

データベースを再起動し、v$datafileビューでファイル名の更新を確認します。

SQL> col name format a60;
SQL> set linesize 180;
SQL> select file#, status, name from v$datafile;

     FILE# STATUS  NAME
---------- ------- ------------------------------------------------------------
         1 SYSTEM  D:\ORACLE11\ORADATA\ORA11\SYSTEM01.DBF
         2 ONLINE  D:\ORACLE11\ORADATA\ORA11\SYSAUX01.DBF
         3 ONLINE  D:\ORACLE11\ORADATA\ORA11\UNDOTBS01.DBF
         4 ONLINE  D:\ORACLE11\ORADATA\ORA11\USERS01.DBF
         5 ONLINE  D:\ORACLE11\ORADATA\TEBLESPACE\WSTJFX_DATA.DBF
         6 OFFLINE D:\ORACLE11\ORADATA\TEBLESPACE\WST_DATA.DBF
         7 ONLINE  D:\ORACLE11\ORADATA\TEBLESPACE\WSXXZB_DATA.DBF
         8 ONLINE  D:\ORACLE11\ORADATA\TEBLESPACE\TESTBIRPT.DBF
         9 ONLINE  D:\ORACLE11\ORADATA\TEBLESPACE\WFGS.DBF
        10 ONLINE  D:\ORACLE11\ORADATA\TEBLESPACE\ZDJWBI.DBF
        11 ONLINE  E:\DATA\GYBANK\KHFX.DBF

ファイル名の末尾スペースが削除され、正しく更新されていることが確認できました。その後、必要に応じてテーブルスペースをONLINE状態に復旧します。

タグ: Oracle RMAN 数据文件 文件名修正 特殊字符

7月4日 21:59 投稿