12C關於CDB、PDB線上移動資料檔案、線上重新命名資料檔案的操作說明

lusklusklusk發表於2020-02-10

11G移動、重新命名資料檔案有兩種方法

方法1:使用ALTER DATABASE 命令,資料庫必須處於mount狀態

alter database rename file '/XX/YY.dbf' to '/ZZ/WW.dbf';

方法2:使用ALTER TABLESPACE 命令,資料庫必須處於open狀態,但是資料檔案對應的表空間必須是offline狀態

alter tablespace tablespace_name rename datafile '/XX/YY.dbf' to '/ZZ/WW.dbf';




12C線上移動、重新命名資料檔案的方法

alter database move datafile '/XX/YY.dbf' to '/ZZ/WW.dbf';



12C線上移動、重新命名資料檔案的總結

1、每個資料檔案只能到所屬的PDB下進行移動,CDB也無法移動其他PDB的檔案

2、在OMF管理方式下資料檔案的移動不能用同樣的檔名。

3、在PDB中移動資料檔案需要PDB處於OPEN狀態,否則移動出現錯誤。

4、system、sysaux、undo表空間資料檔案也是可以移動的

5、移動資料檔案的過程中是控制檔案在做一致性維護:在轉移的過程中,Oracle需要同時維護移動的原始檔和目標檔案這兩個資料檔案;透過批次的資料塊複製來逐步完成檔案轉移;在這個過程中對於完成複製部分的檔案寫操作,需要同時寫兩個檔案;

6、當然12C也可以使用rename來移動檔案,一樣的需要檔案處於offline狀態,見





--只能移動自己當前容器的檔案,CDB也無法移動PDB的檔案

SQL> show con_name

CON_NAME

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

CDB$ROOT


SQL> alter database move datafile '/u02/data/OCP/ABC/datafile/o1_mf_users_h142b2l2_.dbf' to  '/u02/data/test/users_101.dbf';

alter database move datafile '/u02/data/OCP/ABC/datafile/o1_mf_users_h142b2l2_.dbf' to  '/u02/data/test/users_101.dbf'

*

ERROR at line 1:

ORA-01516: nonexistent log file, data file, or temporary file "58" in the

current container



SQL> select pdb_name from cdb_data_files a,cdb_pdbs b where a.con_id=b.con_id and a.file_name like '%o1_mf_users_h142b2l2_.dbf%';

PDB_NAME

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

POCP999



SQL> alter session set container=pocp999;

Session altered.


SQL> set linesize 150;

SQL> select file_name from cdb_data_files;

FILE_NAME

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

/u02/data/OCP/ABC/datafile/o1_mf_system_h142b2h7_.dbf

/u02/data/OCP/ABC/datafile/o1_mf_sysaux_h142b2h2_.dbf

/u02/data/OCP/ABC/datafile/o1_mf_undotbs1_h142b2jz_.dbf

/u02/data/OCP/ABC/datafile/o1_mf_users_h142b2l8_.dbf

4 rows selected.



SQL> alter database move datafile '/u02/data/OCP/ABC/datafile/o1_mf_users_h142b2l8_.dbf' to '/u02/data/test/o1_mf_users_h142b2l8_.dbf';

alter database move datafile '/u02/data/OCP/ABC/datafile/o1_mf_users_h142b2l8_.dbf' to '/u02/data/test/o1_mf_users_h142b2l8_.dbf'

*

ERROR at line 1:

ORA-01276: Cannot add file /u02/data/test/o1_mf_users_h142b2l8_.dbf.  File has an Oracle Managed Files file name.



SQL>  alter database move datafile '/u02/data/OCP/ABC/datafile/o1_mf_users_h142b2l8_.dbf' to '/u02/data/test/users_b218.dbf';

Database altered.


--system檔案可以移動

SQL> alter database move datafile '/u02/data/OCP/ABC/datafile/o1_mf_system_h142b2h7_.dbf' to '/u02/data/test/system_42b.dbf';

Database altered.


--sysaux檔案可以移動

SQL> alter database move datafile '/u02/data/OCP/ABC/datafile/o1_mf_sysaux_h142b2h2_.dbf' to '/u02/data/test/sysaux42b.dbf';

Database altered.


--undo檔案可以移動

SQL> alter database move datafile '/u02/data/OCP/ABC/datafile/o1_mf_undotbs1_h142b2jz_.dbf' to '/u02/data/test/undotbs42b.db';

Database altered.




SQL> select file_name from cdb_data_files;

FILE_NAME

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

/u02/data/test/system_42b.dbf

/u02/data/test/sysaux42b.dbf

/u02/data/test/undotbs42b.db

/u02/data/test/users_b218.dbf

4 rows selected.




--非open狀態線上移動檔案會報錯

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

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

         5 POCP999                        MOUNTED

SQL> select status from v$instance;

STATUS

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

MOUNTED


SQL> alter database move datafile '/u02/data/test/system_42b.dbf' to '/u02/data/test/system_ocp999.dbf';

alter database move datafile '/u02/data/test/system_42b.dbf' to '/u02/data/test/system_ocp999.dbf'

*

ERROR at line 1:

ORA-01135: file 54 accessed for DML/query is offline

ORA-01110: data file 54: '/u02/data/test/system_42b.dbf'


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

相關文章