oracle表空間數據文件的移動
需求:把用戶的某一個表空間中的數據文件由於某種原因從一個路徑移動到裡一個路徑
原因:
(1)當前實例中的表空間文件及系統表空間文件全在一塊硬盤上,導致IO增加。裝數據庫表空間移走。減少IO。
(2)磁盤空間有限,這個磁盤空間太小了,隨著數據的增長,需要換一塊大的磁盤
可行性:linux的文件都是通過掛載,到一個目錄下,磁盤的移動就只是文件路徑的改變。
實現此方法有兩種方法
1.alter tablespace
(1)查看要改變的這個表空間所對應的數據文件信息
SQL> select tablespace_name,file_name from dba_data_files where tablespace_name='MAIL';
TABLESPACE_NAME FILE_NAME
------------------------------ --------------------------------------------------------------------------------
MAIL /u01/app/oracle/oradata/orcl/mail.dbf
(2)使表空間脫機
SQL> alter tablespace mail offline;
表空間已更改。
SQL> select tablespace_name,file_name,online_status from dba_data_files where tablespace_name='MAIL';
TABLESPACE_NAME FILE_NAME ONLINE_STATUS
------------------------------ -------------------------------------------------------------------------------- -------------
MAIL /u01/app/oracle/oradata/orcl/mail.dbf OFFLINE
(3)把原來的數據文件復制到新的路徑
SQL> host cp '/u01/app/oracle/oradata/orcl/mail.dbf' '/home/oracle/mail01.dbfdbf'
(4)修改數據文件名字,路徑。(注意:實際就是修改控制文件,告訴控制文件這個表空間的數據文件改變了)
SQL> alter tablespace mail rename datafile '/u01/app/oracle/oradata/orcl/mail.dbf' to '/home/oracle/mail01.dbfdbf';
表空間已更改。
(5)表空間在線
SQL> alter tablespace mail online;
(6) 查看表空間對應的數據文件狀態
SQL> select tablespace_name,file_name,online_status from dba_data_files where tablespace_name='MAIL';
TABLESPACE_NAME FILE_NAME ONLINE_STATUS
------------------------------ -------------------------------------------------------------------------------- -------------
MAIL /home/oracle/mail01.dbfdbf ONLINE
注意:此方法僅適用於能offline的表空間,僅適用於普通的表空間,系統表空間不行。
而sysaux表空間可以用此方法實現
SQL> select tablespace_name,file_name from dba_data_files where tablespace_name='SYSAUX';
TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
SYSAUX
/u01/app/oracle/oradata/orcl/sysaux01.dbf
SQL> alter tablespace sysaux offline;
表空間已更改。
SQL> host cp '/u01/app/oracle/oradata/orcl/sysaux01.dbf' '/home/oracle/test.dbf';
SQL> alter tablespace sysaux rename datafile '/u01/app/oracle/oradata/orcl/sysaux01.dbf' to '/home/oracle/test.dbf';
表空間已更改。
SQL> alter tablespace sysaux online;
表空間已更改。
SQL> select tablespace_name,file_name from dba_data_files where tablespace_name='SYSAUX';
TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
SYSAUX
/home/oracle/test.dbf
2.alter database 適用於系統表空間,system,temp,undo
(1)一致性關閉數據庫並啟動到mount狀態
SQL> shutdown immediate
SQL> startup mount
(2)復制數據文件
SQL> host cp '/u01/app/oracle/oradata/orcl/system01.dbf' '/home/oracle/test.dbf';
(3)修改控制文件。注意,只有在數據庫打開的情況下,才有tablespace的概念,所有此時操作database中的file。
SQL> alter database rename file '/u01/app/oracle/oradata/orcl/system01.dbf' to '/home/oracle/test.dbf';
數據庫已更改。
(4)打開數據庫
SQL> alter database open;
(5)查看system表空間數據文件狀態
SQL> select tablespace_name,file_name,online_status from dba_data_files where tablespace_name='SYSTEM';
TABLESPACE_NAME FILE_NAME ONLINE_STATUS
------------------------------ -------------------------------------------------------------------------------- -------------
SYSTEM /home/oracle/test.dbf SYSTEM