Oracle version:11.2.0.4
目錄:
一、單個數(shù)據(jù)文件重命名和重定位
二笑撞、單個表空間中重命名和重定位數(shù)據(jù)文件
三棒仍、多個表空間中重命名和重定位數(shù)據(jù)文件
四、12c新特性
五蝎困、參考文檔
一、單個數(shù)據(jù)文件重命名和重定位
此方法只適用在可以置為offline的數(shù)據(jù)文件倍啥,不適用于 SYSTEM禾乘,默認臨時表空間文件,活動的undo表空間文件虽缕。且數(shù)據(jù)庫必須打開歸檔J寂骸!氮趋!
步驟如下:
- 數(shù)據(jù)庫開啟的情況下伍派,將數(shù)據(jù)文件置為 offline
此操作會阻止該數(shù)據(jù)文件的讀寫操作,生產(chǎn)環(huán)境請在業(yè)務低峰期且確保溝通OK的情況下執(zhí)行剩胁。
ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/orcl/users01.dbf' OFFLINE ;
2.在操作系統(tǒng)上重命名和重定位數(shù)據(jù)文件
將 u01 下的數(shù)據(jù)文件 users01.dbf 移動到 u02 目錄下且重命名為 users001.dbf
mv /u01/app/oracle/oradata/orcl/users01.dbf /u02/app/oracle/oradata/orcl/users001.dbf
3.使用 ALTER DATABASE ... RENAME FILE ... 改變數(shù)據(jù)庫中的文件名诉植。
執(zhí)行時必須提供完整的文件路徑名,源文件名可以從DBA_DATA_FILES視圖獲取昵观。
ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/orcl/users01.dbf' TO '/u02/app/oracle/oradata/orcl/users001.dbf' ;
查看數(shù)據(jù)文件狀態(tài):
FILE_NAME ONLINE_STATUS
-------------------------------------------------------------------- -------------
/u01/app/oracle/oradata/orcl/system01.dbf SYSTEM
/u01/app/oracle/oradata/orcl/sysaux01.dbf ONLINE
/u01/app/oracle/oradata/orcl/undotbs01.dbf ONLINE
/u02/app/oracle/oradata/orcl/users001.dbf RECOVER
4.讓數(shù)據(jù)文件online之前需要對文件進行recover晾腔,再執(zhí)行online
SQL> RECOVER DATAFILE '/u02/app/oracle/oradata/orcl/users001.dbf';
Media recovery complete.
SQL> ALTER DATABASE DATAFILE '/u02/app/oracle/oradata/orcl/users001.dbf' ONLINE ;
Database altered.
5.完成后立即執(zhí)行一次完整數(shù)據(jù)庫備份,完畢啊犬!
二灼擂、單個表空間中重命名和重定位數(shù)據(jù)文件
此方法只適用在可以置為offline的表空間,不適用于 SYSTEM觉至,默認臨時表空間剔应,活動的undo表空間。
如果很多個數(shù)據(jù)文件均在同一個表空間下,則可以通過將此表空間置為offline來重命名和重定位數(shù)據(jù)文件峻贮。
步驟如下:
- 數(shù)據(jù)庫開啟的情況下席怪,將數(shù)據(jù)文件所在表空間置為 offline
此操作會阻止該表空間下數(shù)據(jù)文件的讀寫操作,生產(chǎn)環(huán)境請在業(yè)務低峰期且確保溝通OK的情況下執(zhí)行月洛。
ALTER TABLESPACE users OFFLINE NORMAL;
2.在操作系統(tǒng)上重命名和重定位數(shù)據(jù)文件
將 u01 下的數(shù)據(jù)文件 users01.dbf 移動到 u02 目錄下且重命名為 users001.dbf
將 u01 下的數(shù)據(jù)文件 users02.dbf 移動到 u02 目錄下且重命名為 users002.dbf
mv /u01/app/oracle/oradata/orcl/users01.dbf /u02/app/oracle/oradata/orcl/users001.dbf
mv /u01/app/oracle/oradata/orcl/users02.dbf /u02/app/oracle/oradata/orcl/users002.dbf
3.使用 ALTER TABLESPACE ... RENAME DATAFILE ... 改變數(shù)據(jù)庫中的文件名何恶。
執(zhí)行時必須提供完整的文件路徑名,源文件名可以從DBA_DATA_FILES視圖獲取嚼黔。
ALTER TABLESPACE users
RENAME DATAFILE '/u01/app/oracle/oradata/orcl/users01.dbf',
'/u01/app/oracle/oradata/orcl/users02.dbf'
TO '/u02/app/oracle/oradata/orcl/users001.dbf',
'/u02/app/oracle/oradata/orcl/users002.dbf';
4.完成后立即執(zhí)行一次完整數(shù)據(jù)庫備份
表空間offline狀態(tài)下也是可以通過RMAN進行備份的细层。
5.此方法不需要進行recover,可直接將表空間置為 online唬涧,完畢疫赎!
ALTER TABLESPACE users ONLINE;
三、多個表空間中重命名和重定位數(shù)據(jù)文件
如果數(shù)據(jù)文件在多個表空間下碎节,則有下面三種方式處理:
①需要將所有數(shù)據(jù)文件置為offline捧搞;
②將數(shù)據(jù)文件對應的表空間置為offline;
③直接將數(shù)據(jù)庫置為mount狀態(tài)狮荔。
①和②已經(jīng)在前面有討論胎撇,下面直接看③,③的動作影響很大殖氏,需要重啟數(shù)據(jù)庫實例晚树,慎重!
SYSTEM雅采,默認臨時表空間文件爵憎,活動的undo表空間文件均可以通過此方式修改。
步驟如下:
1.關閉數(shù)據(jù)庫
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
2.在操作系統(tǒng)上重命名和重定位數(shù)據(jù)文件
mv /u01/app/oracle/oradata/orcl/lzh01.dbf /u02/app/oracle/oradata/orcl/lzh001.dbf
mv /u01/app/oracle/oradata/orcl/users01.dbf /u02/app/oracle/oradata/orcl/users001.dbf
3.啟動數(shù)據(jù)庫至mount
SQL> startup mount
ORACLE instance started.
Total System Global Area 805303360 bytes
Fixed Size 8901696 bytes
Variable Size 650117120 bytes
Database Buffers 138412032 bytes
Redo Buffers 7872512 bytes
Database mounted.
4.使用 ALTER DATABASE ... RENAME FILE ... 改變數(shù)據(jù)庫中的文件名婚瓜。
執(zhí)行時必須提供完整的文件路徑名宝鼓,源文件名可以從DBA_DATA_FILES視圖獲取。
SQL> ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/orcl/lzh01.dbf' TO '/u02/app/oracle/oradata/orcl/lzh001.dbf' ;
Database altered.
SQL> ALTER DATABASE RENAME FILE '/u01/app/oracle/oradata/orcl/users01.dbf' TO '/u02/app/oracle/oradata/orcl/users001.dbf' ;
Database altered.
5.打開數(shù)據(jù)庫
SQL> alter database open ;
Database altered.
6.完成后立即執(zhí)行一次完整數(shù)據(jù)庫備份巴刻。完畢愚铡!
四、12c新特性
前面的三種方法本質(zhì)上都是需要將數(shù)據(jù)文件置為offline再進行修改胡陪,12c引入新特性茂附,可以直接重命名和重定位online數(shù)據(jù)文件,一條命令搞定督弓,非常方便。
示例:
1.將 u01 下的數(shù)據(jù)文件 users01.dbf 移動到 u02 目錄下且重命名為 users001.dbf乒验。
此操作相當于move愚隧,u01下文件users01.dbf 會刪除。
如果u02下已經(jīng)存在 users001.dbf ,此操作會報錯狂塘。
SQL> ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/orcl/users01.dbf'
TO '/u01/app/oracle/oradata/orcl/users001.dbf';
Database altered.
SQL> ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/orcl/lzh02.dbf' TO '/u01/app/oracle/oradata/orcl/lzh002.dbf' ;
ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/orcl/lzh02.dbf' TO '/u01/app/oracle/oradata/orcl/lzh002.dbf'
*
ERROR at line 1:
ORA-01119: error in creating database file
'/u01/app/oracle/oradata/orcl/lzh002.dbf'
ORA-27038: created file already exists
Additional information: 1
2.可以通過參數(shù) REUSE 覆蓋上面文件已經(jīng)存在的報錯录煤。
SQL> ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/orcl/lzh02.dbf' TO '/u01/app/oracle/oradata/orcl/lzh002.dbf' REUSE ;
Database altered.
3.可以通過參數(shù) KEEP 讓源文件不被刪除,相當于 copy
SQL> ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/orcl/lzh02.dbf' TO '/u01/app/oracle/oradata/orcl/lzh002.dbf' KEEP ;
Database altered.
4.可以將本地文件Relocate到ASM磁盤組
ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/orcl/users01.dbf'
TO '+DATA01/data/orcl/datafile/users01.dbf';
5.完成后立即執(zhí)行一次完整數(shù)據(jù)庫備份荞胡。完畢妈踊!
注意事項:
1.如果指定的數(shù)據(jù)文件處于脫機狀態(tài),ALTER DATABASE MOVE DATAFILE 語句將會報錯泪漂。
2.如果使用備用數(shù)據(jù)庫廊营,則可以在主數(shù)據(jù)庫和備用數(shù)據(jù)庫(物理或邏輯)上獨立執(zhí)行移動online數(shù)據(jù)文件操作。當數(shù)據(jù)文件在主服務器上移動時萝勤,備用服務器不受影響露筒,反之亦然。
3.閃回操作不會將移動的數(shù)據(jù)文件重新定位到其以前的位置敌卓。如果你將一個數(shù)據(jù)文件從一個位置移動到另一個位置慎式,然后將數(shù)據(jù)庫閃回到移動之前的某個時間點,那么數(shù)據(jù)文件將保留在新位置趟径,但是數(shù)據(jù)文件的內(nèi)容將在閃回中指定的時間更改為內(nèi)容瘪吏。
4.在 Windows 平臺上重新定位數(shù)據(jù)文件時,原始數(shù)據(jù)文件可能會保留在舊位置蜗巧,即使省略了 KEEP 選項掌眠。在這種情況下,數(shù)據(jù)庫只有在語句成功完成時才使用新位置中的數(shù)據(jù)文件惧蛹。如果需要扇救,可以在操作完成后手動刪除舊數(shù)據(jù)文件。
五香嗓、參考文檔
11g官方文檔:https://docs.oracle.com/cd/E11882_01/server.112/e25494/dfiles.htm#ADMIN11430
12.1官方文檔:
https://docs.oracle.com/database/121/ADMIN/dfiles.htm#ADMIN11430