6. 如何查看数据库中某用户,正在运行什么SQL语句?
; K" v& D) F! L* X; C9 b
) T+ Q# X( o/ O! \7 s根据MACHINE、USERNAME或SID、SERIAL#,连接表V$SESSION和V$SQLTEXT,可查出。 w& b+ x4 A/ `* O0 r @* B
0 Z) }0 D; i b( e# S# q3 d- R
SQL*PLUS语句:
+ x6 P6 p# j, h+ z3 v6 I. c4 p& i! Z" D$ O0 F
“SELECT SQL_TEXT FROM V$SQL_TEXT T, V$SESSION S WHERE T.ADDRESS=S.SQL_ADDRESS
) h8 K1 t7 Z# m# y( `
, p5 l1 M8 x! k( P6 l7 aAND T.HASH_VALUE=S.SQL_HASH_VALUE 5 S ?2 d) z: g
. C6 ]* M. a+ A% SAND S.MACHINE=’XXXXX’ OR USERNAME=’XXXXX’ -- 查看某主机名,或用户名 2 g5 X: d" M/ N& I8 g9 ~, u; B
1 }; f6 U4 O0 c/”
6 r% l. F! [$ T" a) C( L* Y4 l, p
7. 如何删除表中的重复记录? : Z+ z/ i! v' _) J" U+ K" x+ N
3 j b4 U* I( j1 y$ x$ s
例句:
$ R% C) g& T4 W/ X" S& m# d1 r' Y
/ I: s7 b( I, ~3 H( k9 v, B! K, JDELETE * B6 }1 s6 D/ p8 r5 j- ^
FROM table_name a s4 E3 }$ {/ m: O7 _! k0 X$ l0 c
WHERE rowid > ( SELECT min(rowid)
6 Z8 T) Q& L. A. L& Y6 \( Y1 DFROM table_name b
, T: @: w* n1 F. I0 W) r' IWHERE b.pk_column_1 = a.pk_column_1
/ ]9 d* p& J) z/ J$ tand b.pk_column_2 = a.pk_column_2 );
4 n( y) w" Q X% b( g; O+ \+ `
- d6 ]8 Q9 h$ N' `* R9 V2 l# r8. 手工临时强制改变服务器字符集 " }) i! W* z7 I9 F1 s# l& y
6 E1 ^/ ^$ G4 g! ^
以sys或system登录系统,sql*plus运行:“create database character set us7ascii;".
. D9 A V. P: G0 Q& S有以下错误提示:
" z; U6 V" W9 p; g0 S$ {: }! Z* create database character set US7ASCII
5 T p# r1 [3 pERROR at line 1:
) Y/ N+ u+ K5 YORA-01031: insufficient privileges / P$ s& [1 {; b, u, S- N
实际上,看v$nls_parameters,字符集已更改成功。但重启数据库后,数据库字符集又变回原来的了。 ' R4 x; ^# }: s6 ~
该命令可用于临时的不同字符集服务器之间数据倒换之用。 0 ~: G7 e9 e [8 |# F
8 I9 s- e. C# D/ i
9. 怎样查询每个instance分配的PCM锁的数目
2 M) z! i3 f2 P0 n( z/ u$ _! a4 v. b+ ~( x, {1 f# U; V8 W1 o
用以下命令:
3 i7 P$ Y0 @5 b' f( m& {6 k6 b' j1 t1 l) ?+ N! R/ | y
select count(*) "Number of hashed PCM locks" from v$lock_element where bitand(flags,4)0 ) L2 D) H, M- g! ?$ B* u
; \* T2 u1 ^# \1 u( R/ h% k/
! I2 K/ K2 w$ `( d. V5 h- Y8 T
" W* y# O$ S' l1 nselect count(*) "Number of fine grain PCM locks" from v$lock_element
" a2 U; V8 Y/ G. N8 Y2 x5 {) j8 ^5 ~9 b, N: G9 I% b
where bitand(flags,4)=0
. g$ s5 |4 v* R; u0 ~- p J
9 ]9 z9 S" {) l2 `1 _- _ O/ 4 D; `' `8 K6 L& J$ L; z
3 c8 `% { f6 ]" k3 K% V1 A10. 怎么判断当前正在使用何种SQL优化方式? 2 n v% b$ X B* _; F
$ }6 b+ l- R/ K L1 H* m
用explain plan产生EXPLAIN PLAN,检查PLAN_TABLE中ID=0的POSITION列的值。
$ N* K5 S+ X. c6 s/ S$ `9 V
. L8 v- P/ z( u4 ue.g. , D, `& |8 G+ i$ T8 h' U C! Y0 x
- |, L! f$ {* Q$ b) c4 t! Xselect decode(nvl(position,-1),-1,’RBO’,1,’CBO’) from plan_table where id=0
3 X3 l m( E# Z6 d; \, g$ o6 M
* \+ J! b- X2 R7 U; c# b/ , |' R, h; r. [ p4 u+ o
. a7 }$ ]* ]2 F' X* E8 m! W
11. 做EXPORT时,能否将DUMP文件分成多个?
/ W. s/ E' S$ ?; d9 a
( c8 R7 x" Q6 q3 BORACLE8I中EXP增加了一个参数FILESIZE,可将一个文件分成多个:
2 [# {. P5 `; Y: Y+ g2 p6 N1 x* i; W
EXP SCOTT/TIGER FILE=(ORDER_1.DMP,ORDER_2.DMP,ORDER_3.DMP) FILESIZE=1G TABLES=ORDER;
8 [; _+ @5 u _
# i1 L6 k! z; a0 e$ Y% C8 r其他版本的ORACLE在UNIX下可利用管道和split分割: + A8 u o9 u7 V" T. f& E
+ ]; a8 @# p/ E- W, Q
mknod pipe p $ g- x' B; O: q( {% h0 N* s' b- x. y
. |2 R0 A1 ^/ l; [
split -b 2048m pipe order & #将文件分割成,每个2GB大小的,以order为前缀的文件:
4 p+ ~& V" c+ |7 `- F/ }0 M9 I* @$ W1 f, R2 E' }# ]
#orderaa,orderab,orderac,... 并将该进程放在后台。 |