a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 174|回复: 3

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

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
 --查看使用率   column TablespaceName format a40 heading 'Tablespace Name'
, E) ~; c5 X# s: Y, o  column TotalUsedBytes format 9,999,999,999 heading 'File Sizes|(K)'+ C# ^6 i8 M% M4 M" g7 E; t' Y/ F. d% z
  column TotalFreeBytes format 9,999,999,999 heading 'Free Bytes|(K)'0 \. a8 j" t9 b  Z% q, U
  column FreeRatio format 990.99 heading 'Free|(%)'3 m* x8 c) p5 O0 B% K- l
  column TotalExtensibleBytes format 9,999,999,999 heading 'Extensible|Sizes (K)'2 Y5 s8 K/ H! J3 \8 \: J  c' ?
  column TotalExtends format 9999 heading 'Ext'
' L7 G7 |; j! L6 ]) T8 m  compute sum label 'Total:' of TotalFreeBytes TotalUsedBytes TotalExtensibleBytes on report7 K, }5 F# I; v. w' G
  break on report/ }' \) d7 H* W& W
  select b.TablespaceName,/ w2 s9 }% y) M. [- G# |. ~, v+ m
  round(sum(b.UsedByte) / 1024) TotalUsedBytes,
: K& a! |: B) y+ g0 ~  round(sum(a.FreeByte) / 1024) TotalFreeBytes,
4 T) K# v* ^* U# [  round(sum(b.ExtensibleByte) / 1024) TotalExtensibleBytes,) @, d5 K7 W# f7 B( o% f, U
  round(sum(a.FreeByte + b.ExtensibleByte) * 100 / sum(b.UsedByte + b.ExtensibleByte), 2) FreeRatio,
( \6 m, Z* W# u3 d5 p. x$ f4 @  sum(a.Extend) TotalExtends1 {# V) A) x7 x8 o
  from (select sum(bytes) FreeByte,
) A3 g8 `7 ^$ K) o& z  count(*) Extend,2 C. O/ ]& T: e
  file_id FileID,
' ^" t" M) v! A5 C8 x$ k4 Q6 Y  tablespace_name TablespaceName& s. x+ Z- ?5 L+ C* C% P1 l/ J
  from dba_free_space- O  M( k$ Y0 v0 y8 b6 ~
  group by file_id,% Y+ R% K* E: c' j, }5 u
  tablespace_name
* r) T9 o8 c; U8 Z" n6 X( u0 N4 J  union all2 [& \/ K+ n' f$ g, q5 f
  select sum(bytes_free) FreeByte,2 U5 z7 [$ |" G8 v
  count(*) Extend,
3 f: `/ z- _/ {7 v3 S1 C! Y2 K. g! d% h- T
  file_id FileID,
回复

使用道具 举报

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

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

</p>  tablespace_name TablespaceName
# h1 l: E1 a3 ?" ]& W8 v  from v$temp_space_header9 H, w* j# z) b- V
  group by file_id,# L: n8 X- {; n% [6 ^( [1 w
  tablespace_name) a,
% {3 N4 F, w$ d5 I  (select decode(autoextensible, 'YES', decode(sign(maxbytes - bytes), 1, maxbytes - bytes, 0), 0) ExtensibleByte,: r9 o7 b: e. ^" F- f1 R
  bytes UsedByte,1 k8 ]/ h2 }  a0 j0 B
  file_id FileID,4 Z2 L. g0 Y5 b' f$ j7 _1 t0 Y$ k
  tablespace_name TablespaceName
' g* u, g' i. x. |6 V$ m  from dba_data_files
& J; p& u) m& ^7 V3 f" N% _  union all
  N0 p# I) U; M7 I$ ~1 w  select decode(autoextensible, 'YES', decode(sign(maxbytes - bytes), 1, maxbytes - bytes, 0), 0) ExtensibleByte,
$ y! Q5 H' I! {* R* Q& o  bytes UsedByte,
$ P* D  f) g2 \, e  file_id FileID,3 x3 N! T% z1 d3 G$ `* q
  tablespace_name TablespaceName
0 q$ Y: p1 t& |, o6 Z( {  K& S  from dba_temp_files) b* C' L( [+ \5 G
  where b.FileID = a.FileID(+) and
. Y9 h5 N& R1 s: u" E9 ^# n  b.TablespaceName= a.TablespaceName(+)% r, X8 I* j% K" F# D2 Q7 B! M
  group by b.TablespaceName;
9 e. @. i6 w. R1 s1 B' B) |  正常来说,在完成Select语句、create index等一些使用TEMP表空间的排序操作后,Oracle是会自动释放掉临时段a的。但有些有侯我们则会遇到临时段没有被释放,TEMP表空间几乎满的状况,甚至是我们重启了数据库仍没有解决问题。这个问题在论坛中也常被网友问到,下面总结一下,给出几种处理方法。
  M. C7 p% R9 k6 ?5 F8 I( k  法一、重启库
4 C' ~0 a" J; B  库重启时,Smon进程会完成临时段释放,TEMP表空间的清理操作,不过很多的时侯我们的库是不允许down的,所以这种方法缺少了一点的应用机会,不过这种方法还是很好用的。5 h5 e! V+ C/ O: N
  法二、Metalink给出的一个方法
  c( Y' C# T2 @* l  ~  K! u  修改一下TEMP表空间的storage参数,让Smon进程观注一下临时段,从而达到清理和TEMP表空间的目的。1 O6 A) o( a% x4 v
  SQL>alter tablespace temp increase 1;! j) n% l" W+ v. s
  SQL>alter tablespace temp increase 0;
回复 支持 反对

使用道具 举报

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

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

法三、我常用的一个方法,具体内容如下:   1、 使用如下语句a查看一下认谁在用临时段( L# G4 g, @& |% [
  SELECT username,
4 V3 R4 n9 H! z6 t- Q  _: @( q  sid,8 |3 ?  E) x1 `* T7 g
  serial#,
6 e6 a: `8 O/ b$ L$ M, r+ |! x  sql_address,
, \# K( a) L1 i  machine,
' f5 \* G  z8 N" F8 m  program,- E; E( t) |' F6 O5 C
  tablespace,+ P7 ~4 z& Y& z0 ]+ r* c
  segtype,
$ z4 C) x/ n! H1 j# q8 G6 w  contents% [: E  C9 ], w5 M, y: R# y
  FROM v$session se,
( O6 ~+ h1 V; [: M  `  v$sort_usage su9 }1 Q: q! K+ @1 j$ T
  WHERE se.saddr=su.session_addr/ t4 W1 h. X3 W- J7 A; G
  2、 那些正在使用临时段的进程
9 `; k( w( ~/ i4 R1 }; g* d  SQL>Alter system kill session 'sid,serial#';, R, i' ^# u9 u' `) D7 L& H" Z. ^$ V
  3、把TEMP表空间回缩一下
, T* K6 Q9 L4 X2 b  SQL>Alter tablespace TEMP coalesce;& y5 G1 z* [( b: f
  法四、使用诊断事件的一种方法,也是被我认为是“杀手锏”的一种方法
1 R2 C! D5 b6 R- e, `( ]  1、 确定TEMP表空间的ts#
1 {! x# t- N) o( b/ t& b: N  SQL>select ts#, name from sys.ts$ ;
( U. H! N. j0 R1 R. V  TS# NAME4 s6 k# Q5 R- W5 J
  -----------------------3 W4 M3 f! C3 r4 L2 ?1 x
  0 SYSYEM: q2 W7 W! z+ v: h  \# j) |
  1 RBS; f- Y" q% h/ x% P" {
  2 USERS
+ p5 A& V5 S- ^. N3 N  3* TEMP' d3 d0 A  R! @
  4 TOOLS
! K! Q" G. w. x/ E! q  i  U+ q  5 INDX$ k+ ^9 x$ O! b/ o

9 {, `( U1 }4 l# Z8 J, b  6 DRSYS
回复 支持 反对

使用道具 举报

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

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

</p>  2、 执行清理操作
; N7 |8 Y) L0 q5 D) U# R  SQL>alter session set events 'immediate trace name DROP_SEGMENTS level 4' ;
6 j4 y5 Y, W, D1 c; i% U  说明:( E3 v3 w- }+ y
  temp表空间的TS# 为 3*, So TS#+ 1= 4: T$ R2 g7 k+ y3 e2 `+ B9 e. e( B
  其它:8 e  ]1 \$ Y' M; @' v- Z; M
  1、 出现如上问题的原因我认为可能是由于大的排序超出了TEMP表空间的空间允许范围引起的。也可能包含着其它的异常的因素。
; |+ ^6 t  D7 z" K, \5 ^5 J  2、 观注TEMP等这些空间的状态是Dba日常职责之一,我们可以通过Toad、Object Browser等这些工具办到,也可以用如下的语句:
  z8 p0 Z8 D1 A5 i" P  SELECT UPPER(F.TABLESPACE_NAME) "表空间名",8 [; u; B* F% E1 t) \! W
  D.TOT_GROOTTE_MB "表空间大小(M)",
2 u! w; R9 ~! Y  D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
# ^9 Z7 S. b9 Q5 A# h( h  TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,
; b9 Q6 ]" G+ q7 t" s, S  2),  \& e- v  F) Y7 _- H
  '990.99') "使用比"," j* }, S5 ]% s. W6 R+ c) Q: {
  F.TOTAL_BYTES "空闲空间(M)",' x6 o: |5 X+ e& p  P
  F.MAX_BYTES "最大块(M)"6 R/ L" i$ g/ G/ s
  FROM (SELECT TABLESPACE_NAME,, ^* [0 f, u# e, N
  ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,- F5 I: u( A' ~5 I! M6 T- h1 z
  ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES4 H/ O5 o# F+ k5 ?3 U8 u& A0 Z' y
  FROM SYS.DBA_FREE_SPACE- J, Y+ q$ E( T# N# ^
  GROUP BY TABLESPACE_NAME) F,
& c% l# q7 V" j' j# U7 `  (SELECT DD.TABLESPACE_NAME,4 h9 f( @# A& o
  ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
* Q  N, l. m) o; j3 H  FROM SYS.DBA_DATA_FILES DD3 c3 }1 h. m$ f' k! U& k- ^
  GROUP BY DD.TABLESPACE_NAME) D/ W- M; `! R9 M8 i% ?/ [: X
  WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME! p, K0 V- ]$ _
  ORDER BY 4 DESC
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-2 11:58 , Processed in 0.207898 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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