oracle 9i 日常维护之切换临时表空间操作
由于oracle数据文件所在的磁盘空间紧张,为了避免突然的磁盘空间不足,
其原因还是temp临时表空间太大造成的。
今天决定将临时表空间切换到另外一个分区中,这样空间节省出来了,
磁盘读取压力也分散开来,提高了性能
切换过程:
首先创建一个临时表空间
使用 sysdba 登录系统
create temporary tablespace tempt tempfile '/usr/oracle/oradata/prod/tempt.dbf'
size 2048M autoextend on;
创建完新的临时表空间之后,准备切换,在切换之前先查看一下系统用户现在使用的临时表空间文件
select username, temporary_tablespace from dba_users;
确认后,没有问题切换开始:
alter database default temporary tablespace tempt;
OK 没问题,下一步:
在此确认是否切换成功?
select username, temporary_tablespace from dba_users;
下面删除不再使用的临时表空间:
注意在这里出现了问题:
drop tablesoace temp including contents and datafile;
由于数据文件比较大,光标这这闪了好长时间,觉得不对劲,在大的文件也该删掉了,
怎么还是一直在进行呢?
执行了 ctrl+c 取消了该操作(注意:这种操作不能轻易取消,否则会有意想不到的后果!)
ORA-1013 signalled during: drop tablespace tempts... (警告日志中的ORA错误)
推出sqlp*plus 回到ROOT用户 使用lsof | grep oracle 结果有进程在访问 tempts 的数据文件
在此登录sql*plus
执行 alter database tempfile '/usr/oracle/oradata/prod/tempts.dbf' offline ;
OK 没问题!
再次执行 drop tablesoace temp;
这次保险点儿,只将数据字典的tempts 删除然后再手工删除物理的数据文件
临时表空间切换��成.
在之前做了测试 直接删除是没有问题的,可是在生产库上直接删除就不行,
应该是原来的进程在访问那个临时表空间,所以先将其脱机是比较好的方式。