上週五花了多個小時,專門來明白了下ORACLE表空間轉移的知識,因爲測試站點ORACLE所在的硬盤只剩下十幾M的空間了。因而我將表空間轉移到另一個硬盤,流程以下: sql
操做環境: 數據庫
數據庫:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 oracle
表空間:USERS 測試
轉移前運用的數據庫文件:C:\oracle\product\10.2.0\oradata\orcl\USERS01.DBF spa
轉移後運用的數據庫文件:D:\DB Data\Oracle\orcl\USERS01.DBF it
扼要操做步驟: io
第一步:登錄數據庫 table
第二步:停止數據庫 file
第三步:在open方式下啓動數據庫 select
第四步:將表空間(USERS)脫機
第五步:手工將表空間所運用的數據庫文件(C:\oracle\product\10.2.0\oradata\orcl\USERS01.DBF),
複製到你要轉移的目錄(D:\DB Data\Oracle\orcl\USERS01.DBF),
第六步:將表空間與新目錄下的數據庫文件關聯
第七步:將表空間聯機,提交,OK,完成。
細緻SQL:
第一步:
C:\>sqlplus /nolog
SQL> conn / as sysdba
第二步:
SQL> shutdown immediate
第三步:
SQL> startup open
第四步:
SQL> alter tablespace eucrmspace offline;
第五步:
手工拷貝數據庫文件到你想抵達的目錄下。
第六步:【操做先後可以用SQL來查詢表空間所運用的數據庫文件的改變狀況:select name from v$datafile;】
SQL> alter tablespace eucrmspace rename datafile
'C:\oracle\product\10.2.0\oradata\orcl\USERS01.DBF' to ' D:\DB Data\Oracle\orcl\USERS01.DBF';
第七步:
SQL> alter tablespace eucrmspace online;
SQL>commit;
SQL>exit;
留意:
1. 轉移表空間時,請確保不要對該表空間執行任何寫操做(如項目順序仍在運轉),不然可以後面報錯
我測試了下,邊轉移邊對該表空間執行寫操做,結果在執行第六步時,報錯了:
ERROR 位於第 1 行:
ORA-01113: 文件 11 需要介質恢復
ORA-01110: 數據文件 11: 'D:\DB Data\Oracle\orcl\USERS01.DBF '
2.第五步(複製文件操做),必需是在第四步以後,不然第六步可以會報錯,錯誤信息同上差很少
3.假設第六步報錯了,只好這樣恢復:將現在運用的數據庫文件(D:\DB Data\Oracle\orcl\USERS01.DBF),從新復原成以前所運用的數據庫文件(C:\oracle\product\10.2.0\oradata\orcl\USERS01.DBF),即從新執行第5、6、七步,只不過第五步的SQL稍微改下。
…….
SQL>rollback;
SQL> alter tablespace eucrmspace rename datafile
' D:\DB Data\Oracle\orcl\USERS01.DBF' to 'C:\oracle\product\10.2.0\oradata\orcl\USERS01.DBF';
……
下面是完壁的操做命令:
C:\Documents and Settings\XXX>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 11月 15 16:29:14 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn / as sysdba
已銜接。
SQL> shutdown immediate
數據庫之前關閉。
之前卸載數據庫。
ORACLE 例程之前關閉。
SQL> startup open
ORACLE 例程之前啓動。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 83889028 bytes
Database Buffers 520093696 bytes
Redo Buffers 7135232 bytes
數據庫裝載終了。
數據庫之前翻開。
SQL> alter tablespace users offline;
表空間已修改。
SQL> select name from v$datafile;
NAME
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBFC:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
SQL> alter tablespace USERS rename datafile 'C:\oracle\product\10.2.0\oradata\orcl\USERS01.DBF' to 'D:\DB Data\Oracle\orcl\USERS01.DBF';
表空間已修改。
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
D:\DB DATA\ORACLE\ORCL\USERS01.DBF
SQL> alter tablespace users online;
表空間已修改。
SQL> commit;
提交完成。