a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 173|回复: 3

[考试辅导] Oracle技术:ORACLE临时表空间的清理

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
 --查看使用率   column TablespaceName format a40 heading 'Tablespace Name'! ~* y; a7 u, I( a+ E7 s9 g9 \
  column TotalUsedBytes format 9,999,999,999 heading 'File Sizes|(K)'
5 @$ M' N' G3 ?# n  c$ r; L  column TotalFreeBytes format 9,999,999,999 heading 'Free Bytes|(K)'6 V/ u' ~4 }4 `7 v6 R7 t9 ^
  column FreeRatio format 990.99 heading 'Free|(%)'
( @$ m  i* W' A  column TotalExtensibleBytes format 9,999,999,999 heading 'Extensible|Sizes (K)'
6 i4 l0 u- G- {- j: B  column TotalExtends format 9999 heading 'Ext'
1 `5 z* R% M" u' T3 ?2 m& E+ Y  compute sum label 'Total:' of TotalFreeBytes TotalUsedBytes TotalExtensibleBytes on report
2 h7 ^) A, W8 h  @+ i  break on report$ i7 ^, n; j0 O) U4 n
  select b.TablespaceName,
" I0 [9 m3 W4 g2 W* }1 t- D$ {  round(sum(b.UsedByte) / 1024) TotalUsedBytes,
, n5 v! B" x' T2 O  round(sum(a.FreeByte) / 1024) TotalFreeBytes,
0 s( e% }$ i# o. H. E9 b2 u  round(sum(b.ExtensibleByte) / 1024) TotalExtensibleBytes,
+ M2 G- B+ k( j7 o) @  round(sum(a.FreeByte + b.ExtensibleByte) * 100 / sum(b.UsedByte + b.ExtensibleByte), 2) FreeRatio,
3 M8 c3 y( d+ G+ Y* @  sum(a.Extend) TotalExtends
) N( b) f% a4 z$ B& p+ V/ m- [  from (select sum(bytes) FreeByte,( u) h4 \- O3 P- C) a8 m9 t
  count(*) Extend,
6 c+ Z5 Q/ }1 G  file_id FileID,+ j' U# i2 m1 O$ Z" ?
  tablespace_name TablespaceName* u, P# u" B" y' V4 v: F$ U
  from dba_free_space% p; R* Q0 i# K3 e; ]/ ^, B
  group by file_id,8 n, h! b6 I  K, T9 ?% Z
  tablespace_name
9 C6 z# \# i: `0 E8 u  union all
6 w# I5 y0 J  Z/ P: Z* t( a3 ~  select sum(bytes_free) FreeByte,+ I5 G/ I! J/ c- Q7 Y
  count(*) Extend,
' x9 V) s, f  ?# A8 V8 v
2 y# F$ C  _, ?# @4 K9 ]$ S$ X" f9 b  file_id FileID,
回复

使用道具 举报

 楼主| 发表于 2012-8-4 14:06:20 | 显示全部楼层

Oracle技术:ORACLE临时表空间的清理

</p>  tablespace_name TablespaceName9 e) o! {  c! v. L: C
  from v$temp_space_header
* g2 y( i4 V; Q* m  group by file_id,
) r. w% Q8 d0 {  tablespace_name) a,
# H* b2 g1 n4 n0 V2 L1 B: U  (select decode(autoextensible, 'YES', decode(sign(maxbytes - bytes), 1, maxbytes - bytes, 0), 0) ExtensibleByte,9 @0 ?" p$ I; E+ X7 q" e( }
  bytes UsedByte,' w# c, c* M( L; D
  file_id FileID,
; ?8 U" l# h1 F5 p+ X  tablespace_name TablespaceName
$ I/ H- r! J" v! n7 k( T4 X/ Y7 m* \# t  from dba_data_files& \0 B3 u/ ~8 n7 _8 y7 J
  union all2 t) f; u2 |& X, G( o: a/ m
  select decode(autoextensible, 'YES', decode(sign(maxbytes - bytes), 1, maxbytes - bytes, 0), 0) ExtensibleByte,
. a( `; T' c- Q  bytes UsedByte,1 F0 x! b% l$ n. I/ L, v# C7 n# A
  file_id FileID,
9 T+ W. [$ X$ m6 ^: `  tablespace_name TablespaceName
( Q  t6 e$ C& a% R! }  from dba_temp_files) b* d) J; ~3 d2 b2 d; }2 n" B
  where b.FileID = a.FileID(+) and
6 U$ l7 E+ x8 D  H0 n; p3 E  b.TablespaceName= a.TablespaceName(+)' \( h/ I' T' o  u1 e1 g
  group by b.TablespaceName;
, _9 ~7 m# E" n+ p4 R2 E% S  J  正常来说,在完成Select语句、create index等一些使用TEMP表空间的排序操作后,Oracle是会自动释放掉临时段a的。但有些有侯我们则会遇到临时段没有被释放,TEMP表空间几乎满的状况,甚至是我们重启了数据库仍没有解决问题。这个问题在论坛中也常被网友问到,下面总结一下,给出几种处理方法。
9 U% ?  a$ R: z- N6 q% F7 k  法一、重启库" x* O# y9 ]( p7 m8 [$ h
  库重启时,Smon进程会完成临时段释放,TEMP表空间的清理操作,不过很多的时侯我们的库是不允许down的,所以这种方法缺少了一点的应用机会,不过这种方法还是很好用的。
3 ]. d  K1 t( {' P. [  法二、Metalink给出的一个方法
7 I) s2 s& {* q+ L7 t1 A! C- {  修改一下TEMP表空间的storage参数,让Smon进程观注一下临时段,从而达到清理和TEMP表空间的目的。
: G; ?, B3 Y- F2 V, I  SQL>alter tablespace temp increase 1;* R* P1 q# W  e* A) k, f" _! M% e0 J
  SQL>alter tablespace temp increase 0;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 14:06:21 | 显示全部楼层

Oracle技术:ORACLE临时表空间的清理

法三、我常用的一个方法,具体内容如下:   1、 使用如下语句a查看一下认谁在用临时段) `- b# [9 M5 C" k2 B
  SELECT username,
, Y3 I7 c9 R5 o8 Q% a- J  sid,4 [" U# J* i0 y8 F) z
  serial#,
3 o! d5 c% m  s6 [8 U3 O  sql_address,
% Y  x7 S1 `7 k* [. A  machine,' A' \* o; m! X- }. `% l
  program,6 a- P: v' V0 s: e- V" |9 \; V( j
  tablespace,
  d; b8 D$ y3 w( S2 e, ]  segtype,
9 B/ T; O) _. g5 o" N  contents
4 x* N! }' @. A+ C! G( j( V  FROM v$session se,  z% D2 {: x' v* @  |
  v$sort_usage su
! e' L0 [1 D. I" O, l) `/ u  WHERE se.saddr=su.session_addr6 x  ^3 d; I. `- y: }1 l3 Q
  2、 那些正在使用临时段的进程
+ a  t# R; Y" n& f  Z6 p# e  SQL>Alter system kill session 'sid,serial#';6 ]1 w& J. m" @$ _  {5 l2 v
  3、把TEMP表空间回缩一下
) V# g1 t$ A# D8 y5 U9 V3 Z) f2 E  SQL>Alter tablespace TEMP coalesce;" V3 N5 a( h* i, V1 \% v2 v7 k7 ^
  法四、使用诊断事件的一种方法,也是被我认为是“杀手锏”的一种方法
6 T: U+ y4 M9 q  1、 确定TEMP表空间的ts## @6 E7 n& t8 h/ q1 r2 O
  SQL>select ts#, name from sys.ts$ ;
. R! N) I% D; f6 ?  A  TS# NAME6 `/ e3 |9 k: }# n6 q7 ^& U# K
  -----------------------
1 Q. w8 U# r1 N; i& ?8 e+ W  0 SYSYEM
% }! b1 b$ P, \6 n0 y  1 RBS
$ C- y1 b+ B4 Q1 e0 f  q4 }  2 USERS# Z' q2 {$ J& }4 U
  3* TEMP
* k2 a0 G& q: J. Q% i% p0 j  4 TOOLS: x; P1 T" W6 T1 X. m
  5 INDX8 y6 ^8 v, ^6 a$ C4 ^
8 {0 e' h0 u9 u; Z0 C* h
  6 DRSYS
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 14:06:22 | 显示全部楼层

Oracle技术:ORACLE临时表空间的清理

</p>  2、 执行清理操作
* n0 u3 g0 G+ q, |. \  SQL>alter session set events 'immediate trace name DROP_SEGMENTS level 4' ;  Q2 I! B1 C! ]
  说明:
2 J: I. W0 T; D/ P1 |7 _4 F  temp表空间的TS# 为 3*, So TS#+ 1= 4
/ _  A* E4 ~& v' O( v3 b  其它:" R% [: N2 N, V8 D0 S5 S8 u2 V8 R+ ?
  1、 出现如上问题的原因我认为可能是由于大的排序超出了TEMP表空间的空间允许范围引起的。也可能包含着其它的异常的因素。3 p% R# V% N8 h* ~
  2、 观注TEMP等这些空间的状态是Dba日常职责之一,我们可以通过Toad、Object Browser等这些工具办到,也可以用如下的语句:. S. G: F6 h: y, j& v9 J
  SELECT UPPER(F.TABLESPACE_NAME) "表空间名",3 B2 L2 j, q+ E6 H0 L
  D.TOT_GROOTTE_MB "表空间大小(M)",4 W3 B2 v" V1 ~% X, F6 j
  D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",( y1 {0 Z( X6 y6 a" z3 r
  TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,
: Z( B( f4 n7 _5 T9 y  2),
" H5 S5 @% n, p$ H4 r  '990.99') "使用比",
( \1 Z8 l4 I1 N, f4 K5 o  F.TOTAL_BYTES "空闲空间(M)",; o9 T$ J1 |6 _6 P0 V1 o( O2 R
  F.MAX_BYTES "最大块(M)"
3 Y- S/ ?3 D4 z& Z9 D4 l; B. s  FROM (SELECT TABLESPACE_NAME,
6 y- L: Q  z. P) b( w, c  ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
' p8 g7 ]2 W' f: {6 L4 i: Y  ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
4 j. y' Z) y) _( u7 d% c  FROM SYS.DBA_FREE_SPACE5 ]5 K: U7 {& r  ^& }  r+ b
  GROUP BY TABLESPACE_NAME) F,. c- X3 H  e, B( a3 C
  (SELECT DD.TABLESPACE_NAME,/ @( \. \& g6 z- R
  ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB9 P* W+ J4 s, y" F8 S& i0 Z
  FROM SYS.DBA_DATA_FILES DD7 }% p( i1 q# |3 x, m! k( p
  GROUP BY DD.TABLESPACE_NAME) D
& J4 u1 m8 e; w+ n) O  WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
& L1 d9 o0 e  ]  ORDER BY 4 DESC
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-4 17:55 , Processed in 0.205037 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表