Oracle檔案改名實驗記錄

realkid4發表於2013-04-22

 

在日常工作中,我們經常會遇到諸如空間被回收、某個磁碟損壞或者需要更換的情況。這個時候,往往需要我們將資料檔案轉移到其他儲存位置上。本篇主要介紹常用的兩種處理手段,權當記錄,供自己和有需要的朋友不時之需。

 

1、環境準備

 

我們選擇11g進行試驗。

 

 

SQL> select * from v$version;

 

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

PL/SQL Release 11.2.0.1.0 - Production

CORE        11.2.0.1.0         Production

 

TNS for Linux: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 – Production

 

 

建立一個實驗的表空間用於測試。

 

 

SQL> create tablespace mvtbltest datafile '/u01/oradata/WILSON/datafile/mvtbltest01.dbf' size 10m autoextend off

  2   extent management local uniform. size 1m

  3   segment space management auto;

 

Tablespace created

 

SQL> col file_name for a45;

SQL> select file_name, tablespace_name from dba_data_files where tablespace_name='MVTBLTEST';

 

FILE_NAME                                     TABLESPACE_NAME

--------------------------------------------- ------------------------------

/u01/oradata/WILSON/datafile/mvtbltest01.dbf  MVTBLTEST

 

 

建立一些實驗物件。

 

 

SQL> create table t tablespace mvtbltest as select * from dba_objects ;

Table created

 

SQL> select tablespace_name, bytes from dba_segments where wner='SYS' and segment_name='T';

TABLESPACE_NAME                     BYTES

------------------------------ ----------

MVTBLTEST                         9437184

 

 

我們透過mvtbltest表空間進行試驗。

 

常用的處理方法有兩個,一個是線上online進行檔案的rename操作,另一個是需要停庫,在啟動過程中進行rename操作。

 

2Online檔案重新命名操作

 

首先我們進行online的檔案重新命名。首先,我們需要明確,無論是online還是停庫操作,表空間檔案都會有一定時間不能使用。兩者的差異在於是否會影響到其他表空間使用。

 

第一步,我們需要將表空間進行offline操作,此時所有檔案物件將不能被訪問。

 

 

SQL> alter tablespace mvtbltest offline;

Tablespace altered

 

SQL> select count(*) from t;

select count(*) from t

 

ORA-00376: 此時無法讀取檔案 10

ORA-01110: 資料檔案 10: '/u01/oradata/WILSON/datafile/mvtbltest01.dbf'

 

 

第二步,需要在作業系統層面進行檔案的複製操作。此時,最推薦的是使用mv命令操作。如果沒有把握而且空間不緊張,copy也是比較穩妥的方案。

 

 

[oracle@bspdev ~]$ cd /u01/oradata/WILSON/datafile/

[oracle@bspdev datafile]$ mv mvtbltest01.dbf /u01/oradata/WILSON/

[oracle@bspdev datafile]$ ls -l | grep mv

[oracle@bspdev datafile]$ cd ..

[oracle@bspdev WILSON]$ ls -l | grep mv

-rw-r----- 1 oracle oinstall 10493952 Apr 23 05:38 mvtbltest01.dbf

 

 

第三步,修改表空間對應檔案的連線。

 

 

SQL> select file_name, status, online_status from dba_data_files where tablespace_name='MVTBLTEST';

 

FILE_NAME                                     STATUS    ONLINE_STATUS

--------------------------------------------- --------- -------------

/u01/oradata/WILSON/datafile/mvtbltest01.dbf  AVAILABLE OFFLINE

 

SQL> alter tablespace mvtbltest rename datafile '/u01/oradata/WILSON/datafile/mvtbltest01.dbf'  to  '/u01/oradata/WILSON/mvtbltest01.dbf';

 

Tablespace altered

 

SQL> select file_name, status, online_status from dba_data_files where tablespace_name='MVTBLTEST';

 

FILE_NAME                                     STATUS    ONLINE_STATUS

--------------------------------------------- --------- -------------

/u01/oradata/WILSON/mvtbltest01.dbf           AVAILABLE OFFLINE

 

 

最後,將表空間進行online操作。

 

 

SQL> alter tablespace mvtbltest online;

Tablespace altered

 

 

SQL> select count(*) from t;

 

  COUNT(*)

----------

     72722

 

 

應該說,online檔案重新命名是很簡單的操作。過程消耗時間主要在OS層面的檔案複製。

 

3、停庫檔案重新命名

 

停庫檔案重新命名是另一種情況。在進行資料還原(從冷備份)過程中,我們經常需要在啟動過程中進行檔案資訊的替換。

 

我們首先進行停庫處理。

 

 

SQL> conn / as sysdba

Connected.

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

 

 

OS層面進行檔案複製。

 

 

[oracle@bspdev WILSON]$ ls -l | grep mv

-rw-r----- 1 oracle oinstall 10493952 Apr 23 05:55 mvtbltest01.dbf

[oracle@bspdev WILSON]$ mv mvtbltest01.dbf /u01/oradata/WILSON/datafile/mvtbltest01.dbf

[oracle@bspdev WILSON]$ ls -l | grep mv

[oracle@bspdev WILSON]$ cd datafile/

[oracle@bspdev datafile]$ ls -l | grep mv

-rw-r----- 1 oracle oinstall  10493952 Apr 23 05:55 mvtbltest01.dbf

[oracle@bspdev datafile]$

 

 

重新啟動資料庫,進入mount狀態。

 

 

SQL> conn / as sysdba

Connected to an idle instance.

SQL> startup mount

ORACLE instance started.

 

Total System Global Area  849530880 bytes

Fixed Size                  1339824 bytes

Variable Size             587206224 bytes

Database Buffers          255852544 bytes

Redo Buffers                5132288 bytes

Database mounted.

SQL>

 

 

使用rename file命令進行轉換。

 

 

SQL> alter database rename file '/u01/oradata/WILSON/mvtbltest01.dbf' to '/u01/oradata/WILSON/datafile/mvtbltest01.dbf';

 

Database altered.

 

 

最後成功啟動資料庫。

 

 

SQL> alter database open;

Database altered.

 

SQL> select count(*) from t;

 

  COUNT(*)

----------

     72722

 

 

4、結論

 

資料檔案重新命名是一個很簡單的過程,伴隨著OS層面和控制檔案之間的協調處理。在很多業務處理場景下,很有意義。

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

相關文章