undo&temp表空间的重建
数据库undo和temp已经扩展到30多G,空间无法释放,计划重建undo表空间和temp表空间
创建新的undo表空间和temp表空间,创建前先查询原表空间名字和数据文件位置:
SQL> show parameter undo
SQL> SELECT TABLESPACE_NAME FROM DBA_TABLESPACES WHERE CONTENTS='TEMPORARY';
SQL> SELECT FILE#,NAME FROM V$TEMPFILE;
SQL> select tablespace_name from dba_tablespaces;
创建新的undo和temp表空间。
创建temp:
SQL> create temporary tablespace temp2
2 tempfile 'E:\XXXXXX\XXXXX\XXXX.dbf' size 100m autoextend on;
创建undo:
SQL> create undo tablespace undotbs2 datafile 'E:\XXXXXX\XXXXX\XXXX.dbf' size 100m autoextend on;
替换temp:
确认原temp是否空闲:
SQL> SELECT USERNAME,USER FROM V$SORT_USAGE WHERE TABLESPACE='TEMP'
SQL> alter database default temporary tablespace TEMP1
SQL> drop tablespace TEMP including contents and datafiles
查看是否正确删除temp表空间。
替换undo:
确认undo表空间中无事务存在:
SQL> select count(*) from v$transaction;
SQL> select segment_name,owner from dba_rollback_segs where tablespace_name='UNDOTBS1';
确认数据库能否重启,如果能重启,则重启主机,如果不能重启,则查到对应的进程号并杀掉进程:
select p.SPID from v$session s,v$process p where s.PADDR=p.ADDR and s.SID in (select s.sid From v$transaction t,v$session s where t.addr=s.taddr);
查询对应的事务的sid
select s.sid From v$transaction t,v$session s where t.addr=s.taddr;
从对应的sid查找spid:
select p.spid from v$session s,v$process p where s.paddr=p.addr and sid=XX
进而杀掉操作系统进程:
kill -9 。。。
修改undo参数:
alter system set undo_tablespace='UNDOTBS2' SCOPE=BOTH;
SQL> ALTER TABLESPACE UNDOTBS1 OFFLINE;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23732248/viewspace-709748/
,如需转载,请注明出处,否则将追究法律责任。