Oracle 在mount狀態下重新命名資料檔案

regonly1發表於2009-08-03

Oracle考試中看到一個題目
問:Oracle在mount狀態時,能做哪些動作。
其中就有renaming off datafile;
這個一開始認為Oracle在mount stage,已經載入了control file不能再重新命名資料檔案了。而實際卻恰恰相反,只有到control file被載入後,重新命名資料檔案的改動才會寫入到control file中。犯了一個先後顛倒的錯誤。
重新命名控制檔案,需要注意:在mount階段,首先將資料檔案更名為需要改動的目標名稱(在這裡是test02.dbf),再執行更名命令。
在此之前,我認為Oracle的重新命名命令會自動將物理的資料檔案命名為新的名稱,但是從實驗中可以看到,需要手工去先把物理的資料檔案更名。
以下是一些實驗的步驟:
SQL> alter tablespace fund_table rename datafile 'E:\ORACLE\ORADATA\LYON\TEST01.DBF' to 'E:\ORACLE\ORADATA\LYON\TEST02.DBF';
alter tablespace fund_table rename datafile 'E:\ORACLE\ORADATA\LYON\TEST01.DBF' to 'E:\ORACLE\ORADATA\LYON\TEST02.DBF'
*
ERROR 位於第 1 行:
ORA-01525: 重新命名資料檔案時出錯
ORA-01121: 無法重新命名資料庫檔案 29 - 檔案在使用中或在恢復中
ORA-01110: 資料檔案 29: 'E:\ORACLE\ORADATA\LYON\TEST01.DBF'


SQL> shutdowm immediate;
SP2-0734: 未知的命令開頭 "shutdowm i..." - 忽略了剩餘的行。
SQL> shutdown immediate;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup nomount;
ORACLE 例程已經啟動。

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
SQL> alter tablespace fund_table rename datafile 'E:\ORACLE\ORADATA\LYON\TEST01.DBF' to 'E:\ORACLE\ORADATA\LYON\TEST02.DBF';
alter tablespace fund_table rename datafile 'E:\ORACLE\ORADATA\LYON\TEST01.DBF' to 'E:\ORACLE\ORADATA\LYON\TEST02.DBF'
*
ERROR 位於第 1 行:
ORA-01109: ??????


SQL> alter database mount;

資料庫已更改。

SQL> alter tablespace fund_table rename datafile 'E:\ORACLE\ORADATA\LYON\TEST01.DBF' to 'E:\ORACLE\ORADATA\LYON\TEST02.DBF';
alter tablespace fund_table rename datafile 'E:\ORACLE\ORADATA\LYON\TEST01.DBF' to 'E:\ORACLE\ORADATA\LYON\TEST02.DBF'
*
ERROR 位於第 1 行:
ORA-01109: ??????


SQL> alter database rename file 'E:\ORACLE\ORADATA\LYON\TEST01.DBF'  to 'E:\ORACLE\ORADATA\LYON\TEST02.DBF';
alter database rename file 'E:\ORACLE\ORADATA\LYON\TEST01.DBF'  to 'E:\ORACLE\ORADATA\LYON\TEST02.DBF'
*
ERROR 位於第 1 行:
ORA-01511: ?????/???????
ORA-01141: ??????? 29 ??? - ?????? 'E:\ORACLE\ORADATA\LYON\TEST02.DBF'
ORA-01110: ???? 29: 'E:\ORACLE\ORADATA\LYON\TEST01.DBF'
ORA-27041: ??????
OSD-04002: N^7(4r?*NDO/S-Error: (OS 2) O5M3UR2;5=V86(5DND


SQL> alter database nomount;
alter database nomount
                     *
ERROR 位於第 1 行:
ORA-02231: ?????? ALTER DATABASE ??


SQL> shutdown immediate;
ORA-01109: ??????


已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup nomount U1;
SP2-0714: 無效的        STARTUP 選項組合
SQL> startup mount U1;
ORACLE 例程已經啟動。

Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
ORA-01504: ????'U1'??? db_name 'orcl'???


SQL> startup mount orcl;
ORA-01081: ????????? ORACLE --- ?????
SQL> alter database mount;

資料庫已更改。

SQL> alter database rename file 'E:\ORACLE\ORADATA\LYON\TEST01.DBF' to 'E:\ORACLE\ORADATA\LYON\TEST02.DBF'
  2  ;
alter database rename file 'E:\ORACLE\ORADATA\LYON\TEST01.DBF' to 'E:\ORACLE\ORADATA\LYON\TEST02.DBF'
*
ERROR 位於第 1 行:
ORA-01511: ?????/???????
ORA-01141: ??????? 29 ??? - ?????? 'E:\ORACLE\ORADATA\LYON\TEST02.DBF'
ORA-01110: ???? 29: 'E:\ORACLE\ORADATA\LYON\TEST01.DBF'
ORA-27041: ??????
OSD-04002: N^7(4r?*NDO/S-Error: (OS 2) O5M3UR2;5=V86(5DND


SQL> alter database rename file 'E:\ORACLE\ORADATA\LYON\TEST01.DBF' to 'E:\ORACLE\ORADATA\LYON\TEST02.DBF';

資料庫已更改。

SQL>
最終在最後一個步驟執行成功了。

另外,在mount階段,也可以更改資料庫的歸檔模式:
alter database archivelog/noarchivelog;
但是對於drop user這樣的操作,在mount階段是不能做的。個人分析原因在於mount階段所有v$/dba/user檢視都尚未啟用(只啟用了x$檢視),而user與這些檢視關係密切,所以不能在這個階段做此操作。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-611193/,如需轉載,請註明出處,否則將追究法律責任。

相關文章