【TABLESPACE】資料庫Mount狀態下調整表空間資料檔案位置及名稱

secooler發表於2011-04-12
  本文給出在資料庫Mount狀態下調整表空間資料檔案位置及名稱的方法。關於在資料庫Open狀態下調整方法參見文章:《【TABLESPACE】資料庫Open狀態下調整表空間資料檔案位置及名稱》(http://space.itpub.net/519536/viewspace-692267)。
  注意:在完成調整操作之前請對資料庫做好有效備份,防止出現故障給資料庫的使用帶來不便。

1.建立測試用表空間TBS_SECOOLER_D
sys@ora10g> create tablespace tbs_secooler_d datafile '/oracle/ora10gR2/oradata/ora10g/tbs_secooler_d_01.dbf' size 10m;

Tablespace created.

2.獲取表空間與資料檔案之間的對應關係
sys@ora10g> select tablespace_name,file_name from dba_data_files where tablespace_name='TBS_SECOOLER_D';

TABLESPACE_NAME   FILE_NAME
----------------- ------------------------------------------------------
TBS_SECOOLER_D    /oracle/ora10gR2/oradata/ora10g/tbs_secooler_d_01.dbf

3.關閉資料庫例項
sys@ora10g> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

4.在作業系統中調整資料檔案位置和名稱
在Linux/UNIX作業系統中可以使用作業系統命令mv完成這一步的調整。
ora10g@secdb /home/oracle$ mv /oracle/ora10gR2/oradata/ora10g/tbs_secooler_d_01.dbf /home/oracle/tbs_secooler_d.dbf

確認檔案位置及名稱調整完畢。
ora10g@secdb /home/oracle$ ls -l /oracle/ora10gR2/oradata/ora10g/tbs_secooler_d_01.dbf
ls: /oracle/ora10gR2/oradata/ora10g/tbs_secooler_d_01.dbf: No such file or directory
ora10g@secdb /home/oracle$ ls -l /home/oracle/tbs_secooler_d.dbf
-rw-r----- 1 oracle oinstall 11M Apr 12 21:24 /home/oracle/tbs_secooler_d.dbf

5.啟動資料庫例項到Mount狀態
ora10g@secdb /home/oracle$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Apr 12 21:26:08 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to an idle instance.

NotConnected@> startup mount;
ORACLE instance started.

Total System Global Area  268435456 bytes
Fixed Size                  1218868 bytes
Variable Size             125830860 bytes
Database Buffers          134217728 bytes
Redo Buffers                7168000 bytes
Database mounted.

6.在資料庫中調整資料檔案位置及名稱
SQL> alter database rename file '/oracle/ora10gR2/oradata/ora10g/tbs_secooler_d_01.dbf' to '/home/oracle/tbs_secooler_d.dbf';

Database altered.

  注意此處的調整方法與資料庫Open狀態下的調整方法的不同之處:此處使用的是“alter database”命令,而非“alter tablespace”命令,在Mount狀態下是無法使用“alter tablespace”命令,否則會收到如下報錯資訊。
SQL> alter tablespace TBS_SECOOLER_D rename datafile '/oracle/ora10gR2/oradata/ora10g/tbs_secooler_d_01.dbf' to '/home/oracle/tbs_secooler_d.dbf';
alter tablespace TBS_SECOOLER_D rename datafile '/oracle/ora10gR2/oradata/ora10g/tbs_secooler_d_01.dbf' to '/home/oracle/tbs_secooler_d.dbf'
*
ERROR at line 1:
ORA-01109: database not open

7.調整資料庫例項至Open狀態
SQL> alter database open;

Database altered.

到此,調整的任務便順利完成。

8.最後的確認
sys@ora10g> select tablespace_name,file_name from dba_data_files where tablespace_name='TBS_SECOOLER_D';

TABLESPACE_NAME   FILE_NAME
----------------- -----------------------------------------------------
TBS_SECOOLER_D    /home/oracle/tbs_secooler_d.dbf

OK,已達到了調整表空間資料檔案位置及名稱的目的。

9.小結
  本文給出的在Mount狀態下調整資料檔名稱及位置的方法的侷限性在於,需要停啟資料庫例項。對於生產系統及對資料庫例項有效性要求極高的環境中很難找到這樣的維護視窗。
  這種調整方法的優勢在於,可以集中對一批資料檔案進行統一調整,避免了資料庫Open狀態下調整方法中對多個表空間分別完成離線的步驟,提高了調整效率。

Good luck.

secooler
11.04.12

-- The End --

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

相關文章