6. 如何查看数据库中某用户,正在运行什么SQL语句?
7 t( q# s6 ]$ X0 \0 U7 a# d4 c7 \5 f! ?) z$ m3 V; m
根据MACHINE、USERNAME或SID、SERIAL#,连接表V$SESSION和V$SQLTEXT,可查出。
; [' Z7 Z7 ^# e
! e* N/ c0 B/ Y: ]; c) p0 t" |SQL*PLUS语句: - `) g z7 v8 s8 ^1 c# }3 e& K) Y
! L1 j' z' K2 l Y+ U* _1 [( I" p“SELECT SQL_TEXT FROM V$SQL_TEXT T, V$SESSION S WHERE T.ADDRESS=S.SQL_ADDRESS : l6 b( n) H% U7 J3 B ~% P
1 J- `% ^9 V( d. A i( o. lAND T.HASH_VALUE=S.SQL_HASH_VALUE - g5 l5 L* ^0 O4 B: f* }; p
9 D" M: e: v& d' \( F( c# k6 ^
AND S.MACHINE=’XXXXX’ OR USERNAME=’XXXXX’ -- 查看某主机名,或用户名 , s2 `& p- U& L/ |
y; X# e! K" E7 ]+ @2 _4 \/” . y9 x7 }2 F4 w
( g8 p) i1 o7 L1 l7 O, r7. 如何删除表中的重复记录? ) ]- H; t+ S# o+ H0 k: l
, R: x& {, L1 u( O# x/ `: S例句: ; T% S9 e. y$ l7 `# V: L
l. T8 @0 s5 }) x. N5 _DELETE
. F# L, p! R6 m* v% v, xFROM table_name a
7 E& J' k4 r! k9 F. P8 hWHERE rowid > ( SELECT min(rowid) 7 Y+ D& i! a+ t9 p
FROM table_name b 5 W7 N5 E2 U" E9 q k6 s
WHERE b.pk_column_1 = a.pk_column_1
; `# r2 T5 _8 w$ Q( Uand b.pk_column_2 = a.pk_column_2 );
9 H* B1 E, P7 A1 G6 y+ X) _' ] D: @) `, Z
8. 手工临时强制改变服务器字符集
! N. w$ ^; F# F9 g
; i5 E0 E8 S/ N' E以sys或system登录系统,sql*plus运行:“create database character set us7ascii;". 2 l) R3 ?) C2 N6 _1 u: W9 a% Q/ l
有以下错误提示: # e* ]: e; D0 c; ]$ F, Z
* create database character set US7ASCII
0 s4 Z9 P* x2 Q7 S1 ]7 h9 ?ERROR at line 1: 6 W: q. M2 L5 X& f( k
ORA-01031: insufficient privileges # `& y. U, G" K% [2 U9 x% r( T
实际上,看v$nls_parameters,字符集已更改成功。但重启数据库后,数据库字符集又变回原来的了。
$ y2 j# W1 g5 r% x- X! | e: Q该命令可用于临时的不同字符集服务器之间数据倒换之用。 + ^2 o5 ? B$ A, @9 m/ N! _
+ v' @" ~! j) L- E- P! Q
9. 怎样查询每个instance分配的PCM锁的数目 ( [7 H3 J& y. r9 C
U8 U6 e1 M8 H8 p. l* [用以下命令:
- ~9 x( u/ j. |- C
: o# r k9 A+ F8 A+ Bselect count(*) "Number of hashed PCM locks" from v$lock_element where bitand(flags,4)0
( f! ?' w, V7 f& W4 c/ a! z
2 m- s8 F( d4 L+ E/
" u: B+ E2 H- ]' X% U! J T# a, U+ j8 Q2 d" f
select count(*) "Number of fine grain PCM locks" from v$lock_element # \: h& g4 W1 `. G
4 n7 a# T M- ]' v4 Z1 A, Z( a( R
where bitand(flags,4)=0 : @+ l2 A1 y0 E6 ^% ~
9 [! F% a6 B2 }, {& |1 a
/ * M9 a3 T0 n* E% m$ A
0 o& K8 \& f) l; o9 r4 m, q0 M
10. 怎么判断当前正在使用何种SQL优化方式?
/ ?: w9 `- n" q3 [& d: Z, U% x0 L7 {$ M( @/ |, f* ^ ~" j j
用explain plan产生EXPLAIN PLAN,检查PLAN_TABLE中ID=0的POSITION列的值。
% q2 D9 q" k) [, V# j9 C$ T3 E
# A: r. v) H4 O h+ k, Y/ H( k+ xe.g. & Z! W( K1 {0 k. V# A$ P! w
2 x( d7 v$ w9 P ^ L2 q8 x5 Cselect decode(nvl(position,-1),-1,’RBO’,1,’CBO’) from plan_table where id=0 1 C3 Q/ ^% ^) k( R0 m- z1 y
4 x5 g1 \$ i, D/
: e8 O, O1 X C. k: P+ ]
3 j: f$ ^( N8 j, `: [$ [* C11. 做EXPORT时,能否将DUMP文件分成多个? ; F. l/ K7 \0 B
$ E8 A M# i2 J7 X+ o; Y7 t% s/ e
ORACLE8I中EXP增加了一个参数FILESIZE,可将一个文件分成多个: ' o2 Q# p- j6 g3 E, m8 x4 g
! ^8 H* j( ]! W* H! e: C3 E7 u
EXP SCOTT/TIGER FILE=(ORDER_1.DMP,ORDER_2.DMP,ORDER_3.DMP) FILESIZE=1G TABLES=ORDER;
" k- }' g5 z# y. g: W; M2 i: b$ L; ?7 `4 Q
其他版本的ORACLE在UNIX下可利用管道和split分割:
4 B9 ^6 D! y. X. i4 b. W( Y
# m7 F* S3 a' v5 F( m' r: imknod pipe p
) N. k, M6 J! Q" k
t. k6 ^1 f1 ?3 ]8 Z& dsplit -b 2048m pipe order & #将文件分割成,每个2GB大小的,以order为前缀的文件: 3 l; N. P; i- `, {* j
& E" F3 m& v* D; H! g8 d) Z
#orderaa,orderab,orderac,... 并将该进程放在后台。 |