由于环境维护或者性能测试需要,经常需要对表空间进行重建操作。重建表空间操作主要分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、操作完成