oracle的姑且表空间写满磁盘空间,解决改问题的具体轨范,以下的操作是用数据库的sys超级用户操作: Q( _! x. |8 F& {% A/ F* s$ i0 J
刚起头筹算把姑且表空间的数据文件从头缩小就好了
2 j) V6 U! C* e$ n& L5 L C" k 执行:- W: e9 E. ]) J3 f" W0 V, @
SQL> alter database tempfile& A+ B8 K9 Y1 G7 t
2 '/oracle/oms/oradata/temp/temp01.dbf' resize 10240M;
) A( D5 `9 u/ k { W7 l 数据库报错,从头设置的空间巨细不能知足需要。
' g/ j8 J- Y3 d! r 看来需要从头成立新的姑且表空间替代当前的表空间了7 s5 H/ f5 |8 z& A M/ S" g; z# f/ f) H
1、首先查看当前的数据库默认表空间:
( a% V' E8 P( u" z6 y SQL>select * from database_properties
: F$ d) _4 I3 `7 ~# s where property_name='DEFAULT_TEMP_TABLESPACE';& Z) X% Y0 x/ \ f1 m& t
确认当前的姑且表空间为TEMP
5 O/ o# ^ R8 }: }& o# x 2、查看今朝姑且表空间的巨细:; m/ ~* f8 t3 _$ L4 L
SQL>select file_name,tablespace_name,bytes/1024/1024 "MB",autoextensible from dba_temp_files;: h! g4 z8 y1 `3 w2 H2 ^: j. @, M C
3、建树新的姑且表空间:(先在其他的磁盘空间借用一下空间)
0 L1 E) J9 x) g7 T5 E SQL> create temporary tablespace temp02
, z% F: ^% U z6 T7 p* S0 u* ]/ V( | 2 tempfile '/oracle/oms/oradata/undo/temp02.dbf': P8 L6 v$ I# S) ^% }
3 size 512M;
# i; ?& J1 Q4 \" q, s 4、把新建的姑且表空间却换成数据库的默认姑且表空间
! C/ i( e( D3 V |9 v SQL> alter database default temporary tablespace temp02;0 z6 y: `8 M: k' x9 P
5、确认今朝数据库的默认姑且表空间
+ K$ h1 L {+ l- J4 L" R v8 v SQL>select * from database_properties
( Y; p0 q9 w3 Q2 b; k& r4 { where property_name='DEFAULT_TEMP_TABLESPACE';
- q0 r: F. u! J0 A, D9 Q 确认temp02为当前的数据库默认表空间
6 r/ s1 }5 G. T2 ~3 S, s 6、在删除temp姑且表空间之前,先把运行在temp姑且表空间的sql语句kill失踪,这样的sql语句多为排序的语句
7 {' R) k# o* ^, g, ]7 Y! R! ] SQL>Select se.username,se.sid,se.serial#,su.extents,su.blocks*to_number(rtrim(p.value))as Space,
0 y$ ]1 i7 s. R2 w* N2 U: p2 F! { tablespace,segtype,sql_text
$ o5 p% }, s* D- S& L$ m6 ] from v$sort_usage su,v$parameter p,v$session se,v$sql s6 l) V4 F4 _0 L6 p( o
where p.name='db_block_size' and su.session_addr=se.saddr and s.hashvalue=su.sqlhash, G3 [' ?, j2 Z, S& `, W6 ?
and s.address=su.sqladdr$ P% p8 X/ a; d( D; R: x; }9 t5 l
order by se.username,se.sid;, j- O, S; s+ L4 [' Q
发芽出来之后,kill失踪这些sql语句:
4 d$ A7 a2 P' ]4 J! L" O% h+ D SQL>alter system kill session '524,778'; (假如某一条运行的sql语句的SID为524,serial#为778), q C$ {4 ~' |" R2 z$ s6 a" o+ J
确认在temp姑且表空间中没有运行的sql语句之后,则可以删除temp姑且表空间数据文件了
- K& C5 J8 R: X0 P 7、删除temp姑且表空间$ K% r% o* k) X! F: N" d$ q2 U
SQL> drop tablespace temp including contents and datafiles;; l) N2 d2 m3 s( W% Y
这样很快就可以删除了姑且表空间的数据文件
$ L+ @: s' C# v, O: }% x 8、此刻temp02姑且表空寄占有了别人的磁盘空间,需要从头把姑且表空间成立在原本的位置,从头成立temp姑且表空间
9 z8 i- O8 s; [* |8 B0 C SQL> create temporary tablespace temp
# g8 g. ~8 s1 H/ A, X4 l 2 tempfile '/oracle/oms/oradata/temp/temp01.dbf'
0 t: O7 h4 F/ _6 Y 3 size 512M autoextend class=Apple-style-span> |