Oracle檔案改名實驗記錄
在日常工作中,我們經常會遇到諸如空間被回收、某個磁碟損壞或者需要更換的情況。這個時候,往往需要我們將資料檔案轉移到其他儲存位置上。本篇主要介紹常用的兩種處理手段,權當記錄,供自己和有需要的朋友不時之需。
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操作。
2、Online檔案重新命名操作
首先我們進行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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle實驗記錄 (oracle 10G dataguard(3)檔案管理)Oracle
- oracle實驗記錄 (恢復-關於控制檔案(1))Oracle
- oracle實驗記錄 (恢復-關於控制檔案(2))Oracle
- oracle實驗記錄 (恢復-關於控制檔案(3))Oracle
- oracle實驗記錄 (恢復-關於控制檔案(4))Oracle
- oracle實驗記錄 (flashback)Oracle
- oracle實驗記錄 (OMF)Oracle
- oracle實驗記錄 (NET)Oracle
- oracle實驗記錄 (audit)Oracle
- oracle實驗記錄 (恢復,備份-含壞塊資料檔案)Oracle
- oracle實驗記錄(恢復-丟失未備份資料檔案)Oracle
- oracle實驗記錄 (恢復-rman基於控制檔案的恢復)Oracle
- oracle實驗記錄 (oracle reset parameter)Oracle
- Oracle Data Redaction實驗記錄Oracle
- oracle實驗記錄 (block cleanout)OracleBloC
- oracle實驗記錄 (dump undo)Oracle
- oracle實驗記錄 (inlist card)Oracle
- oracle實驗記錄 (恢復-恢復未備份的資料檔案)Oracle
- oracle實驗記錄 (oracle 資料字典)Oracle
- oracle實驗記錄 (選擇率)Oracle
- oracle實驗記錄 (dump logfile)Oracle
- oracle實驗記錄 (事務控制)Oracle
- oracle實驗記錄 (函式index)Oracle函式Index
- oracle實驗記錄 (bigfile tablespace)Oracle
- oracle實驗記錄 (恢復-redo)Oracle
- oracle實驗記錄 (expdp/impdp使用)Oracle
- oracle實驗記錄 (transport tablespace(Rman))Oracle
- oracle實驗記錄 (使用exp/imp)Oracle
- oracle實驗記錄 (dump index b*tree)OracleIndex
- oracle實驗記錄 (CKPT的觸發)Oracle
- oracle實驗記錄 (dump undo4)Oracle
- oracle實驗記錄 (dump undo3)Oracle
- oracle實驗記錄 (dump undo2)Oracle
- oracle實驗記錄 手工 duplicate database(1)OracleDatabase
- oracle實驗記錄Rman duplicate database(1)OracleDatabase
- oracle實驗記錄 (許可權,role)Oracle
- oracle實驗記錄 (SQL*PLUS 命令操作)OracleSQL
- oracle實驗記錄 (PFILE 啟動SPFILE)Oracle