a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 110|回复: 1

[考试辅导] Oracle技巧和脚本

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
1. 如何查看ORACLE的隐含参数?  % \; b, Z! Z& I6 A( [/ B- b1 q/ z
ORACLE的显式参数,除了在INIT.ORA文件中定义的外,在svrmgrl中用"show parameter *",可以显示。但ORACLE还有一些参数是以“_”,开头的。如我们非常熟悉的“_offline_rollback_segments”等。  
4 ~$ F# `3 R" x  w# E4 r9 P6 p+ z+ L7 G$ G
这些参数可在sys.x$ksppi表中查出。  
5 n0 U1 H8 }! L' \" F- K8 R( |
0 P$ a- y& R% Q8 l# T2 {语句:“select ksppinm from x$ksppi where substr(ksppinm,1,1)=’_’; ”  
* j, T# @+ x3 N& N
: {! R& Q$ U4 ?6 _# P# d2. 如何查看安装了哪些ORACLE组件?  
  B( f* W3 ~& @' B) e
/ R/ ?; d$ T4 X! M1 D进入${ORACLE_HOME}/orainst/,运行./inspdver,显示安装组件和版本号。  
& n& m! N: y3 j. b: l6 C  C/ V6 B+ H/ L. G: {
3. 如何查看ORACLE所占用共享内存的大小?  . m/ A2 y/ [9 [% v8 ~, L
4 z3 k5 c; I) ~" c. f
可用UNIX命令“ipcs”查看共享内存的起始地址、信号量、消息队列。  . L/ M% c! w/ E: ?7 l6 ^
9 ~/ u& R1 O- @, B) {  h
在svrmgrl下,用“oradebug ipc”,可看出ORACLE占用共享内存的分段和大小。  ) U! f; s# F3 @& g6 v

2 |1 \5 G: ]1 ^# I& Pexample:  
1 S8 U, L) r7 ?0 c6 S% K2 [7 I3 t& y% V
SVRMGR> oradebug ipc  
2 e# B0 j+ ^8 k/ v/ p0 ~; S3 s3 A! C! N-------------- Shared memory --------------  
! U: H' o. x  }+ S$ T6 N: d1 E2 V: t* V3 V
Seg Id Address Size  
2 M# r& @$ f) i/ `1153 7fe000 784  
& s: F/ _# D5 g& C, Q1154 800000 419430400  
' a! W2 m2 R$ p) j+ v: J1155 19800000 67108864  / m% }& Y. R6 L$ _9 ^% S
* _/ K: H  ]1 Z5 z
4. 如何查看当前SQL*PLUS用户的sid和serial#?  
. `1 W) B  \2 O: u  h' Q) M% n- W
在SQL*PLUS下,运行:  
! i- s& C; V5 P3 V; S/ @9 M( H9 B4 R- J2 k9 x/ L7 M
“select sid, serial#, status from v$session  4 L4 b" ?8 I4 q8 m$ y# r0 l& v

4 v9 T  Y8 Q8 Q4 owhere audsid=userenv(’sessionid’);”  ; |1 n0 J# M% b/ y3 _- E
0 t, }6 j" O/ T) h5 G/ f
5. 如何查看当前数据库的字符集?  1 \* l" @. ^; X

0 d$ t, B+ U& A8 c8 l3 {1 E在SQL*PLUS下,运行:  
# m* {( {) y2 I+ i% I/ R) _
, H8 L+ U9 {$ R- ?; v# n; z2 O“select userenv(’language’) from dual;”  1 H+ Z! k) `: Y$ _5 q

$ `$ F4 T) K: z" V% ]* d* r" w或:  9 X. T! V) X7 w" h' U

9 F9 n/ Q& u8 z3 M9 R% d- q$ o“select userenv(’lang’) from dual;”
回复

使用道具 举报

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

Oracle技巧和脚本

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,... 并将该进程放在后台。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-8 08:38 , Processed in 0.459146 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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