6. 如何查看数据库中某用户,正在运行什么SQL语句? X& ]' V# N& }: |& {
- S* I. Y0 W& I- d1 V! i
根据MACHINE、USERNAME或SID、SERIAL#,连接表V$SESSION和V$SQLTEXT,可查出。
% Y* j, b+ l- R' I- t# Y6 s8 s! E2 `; \ `9 \
SQL*PLUS语句:
1 A/ }* ]; l: q) m) S, r4 X* \3 \7 _4 K3 W
“SELECT SQL_TEXT FROM V$SQL_TEXT T, V$SESSION S WHERE T.ADDRESS=S.SQL_ADDRESS
2 C, O$ Y0 }, a# H/ w) U8 e8 j1 W6 V8 V' v2 m+ f/ Z
AND T.HASH_VALUE=S.SQL_HASH_VALUE 1 M2 ~! e% t5 U2 [& v/ F7 U3 W
3 M" h, L1 `5 Q5 T& l* LAND S.MACHINE=’XXXXX’ OR USERNAME=’XXXXX’ -- 查看某主机名,或用户名 # z. X5 j2 S/ }" B9 M7 z2 f/ V
5 M K' i, I7 C/ t8 o& n: U! ^+ V& B
/”
2 g) E' s7 J# t8 l0 ?) y
. b6 ^6 p2 R: L! A* ?+ r7. 如何删除表中的重复记录? : t7 k* d' C' }' c
. U3 A$ `8 J2 F6 F7 ?% }' _5 u+ c4 v例句: ( g+ _0 I9 q: K/ U* q6 m
% s) Z. w) e, J! f) l6 ?
DELETE
# C+ a6 L" ^2 r2 f- Q4 MFROM table_name a * C/ x; V+ v$ B) T: E4 ^
WHERE rowid > ( SELECT min(rowid)
/ p! \$ Q$ D0 Z* HFROM table_name b . {, _+ T% ]5 j: {
WHERE b.pk_column_1 = a.pk_column_1 : g! J( P" C# a
and b.pk_column_2 = a.pk_column_2 );
% F3 y4 ^5 V" H, o: K2 D. G) r; {2 R! c. [( W
8. 手工临时强制改变服务器字符集
& j& R+ D. M' ~7 M) R1 a) q% D5 F1 O0 ?
以sys或system登录系统,sql*plus运行:“create database character set us7ascii;". " y+ W7 p; P, n4 i" O
有以下错误提示: 8 Q- H- Z8 q2 u* P' `
* create database character set US7ASCII 7 R! B8 i3 p+ @" X& C4 q
ERROR at line 1:
; G# j, t9 I6 ?1 @6 h, z: HORA-01031: insufficient privileges
0 x0 Z" @2 r" ~$ S w7 k7 \9 _" Q实际上,看v$nls_parameters,字符集已更改成功。但重启数据库后,数据库字符集又变回原来的了。 , B+ {5 L* ?% L/ `- o$ S% z- S8 S' g, t
该命令可用于临时的不同字符集服务器之间数据倒换之用。 4 }: @( m, c. t
9 J. k% o9 v) S8 ^4 g
9. 怎样查询每个instance分配的PCM锁的数目 ! y9 ~* P" E3 }4 Y- R
8 E, ~; y1 x2 V) p4 p- |. c
用以下命令:
8 y b- u& C1 G& E" F# o6 c- e5 M; L, s- ~7 d( c* g; a; y
select count(*) "Number of hashed PCM locks" from v$lock_element where bitand(flags,4)0
- a5 k- I% w9 t1 G+ I6 g$ ?- s4 C0 C2 j% C, a' y7 A6 e
/
8 S$ y( l: z3 e R! Q9 p
' ?4 j2 ]! |3 D R. B. Y: H# ]* Lselect count(*) "Number of fine grain PCM locks" from v$lock_element
5 C. M% ?& \0 j8 ]4 D" o: T
* z& J4 [4 P: m5 q# mwhere bitand(flags,4)=0 1 G7 o7 C0 P0 n( y$ q- K0 ?/ U1 V$ O
/ z. ]9 E. D7 f8 M& G
/
5 p9 k5 y/ t* ~2 c/ ]3 a; P% s4 i& a
7 A% }' B$ ^ J* G10. 怎么判断当前正在使用何种SQL优化方式?
' Q/ e; M9 Z6 b2 m& B; y& g/ \9 U7 k* r$ b# j
用explain plan产生EXPLAIN PLAN,检查PLAN_TABLE中ID=0的POSITION列的值。
6 I" ]! D8 |3 b# o" g- h, W) i6 X+ j7 m+ |. j( p
e.g.
4 b2 \# W3 E+ l$ n b( U9 U7 n3 @; x$ Q
select decode(nvl(position,-1),-1,’RBO’,1,’CBO’) from plan_table where id=0 $ `4 `& r3 p& t7 h( ]
5 f* x! G. S" j7 j |: j/ 2 H8 w; ?! M% p3 e1 J4 H0 `0 s% J2 j
! K3 q6 f- j( @' f$ B) q% k6 [
11. 做EXPORT时,能否将DUMP文件分成多个?
! S9 Q. H/ X9 Z& y, O: y
* k1 \' P+ t! J2 q6 D( N; VORACLE8I中EXP增加了一个参数FILESIZE,可将一个文件分成多个:
5 M9 b$ m$ A" }& S2 c* L
1 H1 E2 U7 u9 }% y% S8 y! wEXP SCOTT/TIGER FILE=(ORDER_1.DMP,ORDER_2.DMP,ORDER_3.DMP) FILESIZE=1G TABLES=ORDER;
# A, P3 {! y0 U! ~3 w
( w, I' T4 k) Q+ a* z其他版本的ORACLE在UNIX下可利用管道和split分割: 1 \0 i& `+ m' V4 k' S. W$ }
- j+ w- b3 {0 Q# o; wmknod pipe p 0 i% p5 _3 j' W2 Y
. _1 g& Z b7 Q) n! V! V/ Asplit -b 2048m pipe order & #将文件分割成,每个2GB大小的,以order为前缀的文件: $ N* J0 v- G/ s, a) V
% S. B& [1 `# u' N#orderaa,orderab,orderac,... 并将该进程放在后台。 |