由於環境維護或者性能測試需要,經常需要對表空間進行重建操作。重建表空間操作主要分3中情況介紹,分別是業務表空間、臨時表空間和回滾段表空間的重建。
重建業務表空間
由於業務規划要求,重建后的業務表空間名需要與原有的一致。操作上和重建臨時表空間和重建回滾段表空間有不同。
1、備份當前需要使用的數據庫,可以使用Oracle自帶的expdp或者exp命令。
2、刪除業務數據庫。
3、停掉ORACLE監聽,重啟ORACLE實例,確保斷開已有的連接和新連接的建立。
4、刪除業務表空間
5、新建業務表空間
6、使用impdp/imp命令導入備份的數據庫,還原業務數據庫。
重建undo表空間
1、查看當前使用undo表空間和對應數據文件路徑
SQL> show parameter undo
SQL> select file_name,tablespace_name from dba_data_files where tablespace_name='UNDOTBS1';
2、創建新的undo表空間
SQL> create undo tablespace undotbs2 datafile '/home/oracle/oradata/undotbs2.dbf' size 1024M;
3、修改使用新建的回滾表空間
SQL> alter system set undo_tablespace='undotbs2' scope=both;
4、查看所有在UNDOTBS1的undo segment都已offline。
SQL> select SEGMENT_NAME ,STATUS ,TABLESPACE_NAME from dba_rollback_segs where TABLESPACE_NAME='UNDOTBS1' and STATUS='OFFLINE';
5、步驟4中的狀態全部offline后,將舊的回滾表空間udotbs1狀態修改為offline。
SQL> alter tablespace undotbs1 offline;
6、刪除舊的undo表空間
SQL> drop tablespace undotbs1 including contents and datafiles;
7、操作完成。
重建temp表空間
1、查看當前使用的temp表空間相關信息
SQL> select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_files; SQL> select name,bytes/1024/1024 file_size,status,enabled from v$tempfile;
2、查看用戶使用的默認臨時表空間
SQL> select username,temporary_tablespace from dba_users;
3、創建新的temp表空間
CREATE TEMPOARY TABLESPACE TEMP1 TEMPFILE '/home/oracle/oradata/TEMP1.dbf' SIZE 1024M;
4、修改默認表空間為新創建的臨時表空間temp2
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP1;
5、offline舊的臨時表空間temp
ALTER DATABASE TEMPFILE '/home/oracle/oradata/TEMP.dbf' OFFLINE;
6、刪除舊的臨時表空間temp
DROP TABLESPACE TEMP INCLUDING CONTENTS AND DATAFILES;
7、操作完成