|

楼主 |
发表于 2006-11-7 14:03:48
|
显示全部楼层
来自: 中国陕西西安
3. Stored Procedure Editor4 x ?, P5 Q+ a- x+ N" B7 A% I
a) 打开存储过程编写器的几个途径:
1 C, J0 a/ `/ I. M5 I3 Ol 单击总菜单栏上的第三个按钮:
/ {/ g" Z5 r. |( Ql 点击Database - > Procedure Editor ,
7 Y- F- D" ~3 w) sl 可以通过Schema browser来调用
) ^ _% E5 D( U: b3 x6 V6 `b) 一些特点和优点:
; K o# ~% S9 ?# C1. 强大的自定义设置:从保留字的显示方式,到自动替换,到各种快捷键的定义等等,用得越熟越顺手。& @6 E( d: S: x9 ~8 l8 k
2. - {- H; e3 T$ i$ ?
3. 自动用不同颜色显示SQL和PL/SQL关键字,语法清晰明了,可根据自己的习惯来具体定制各类关键字的具体显示方式。可以自定义存储过程得模板,在新建存储过程的时候,自动生成程序的框架可以方便的调用Schema Browser,把鼠标定位于某个对象上,F4,Schema Browser打开该对象的详细描述,帮助顺利快速开发程序。支持代码自动更正,如输入ndf,自动替换成NO_DATA_FOUND,输入the自动替换成the,类似的自动替换还可以自己修改和添加。& { q3 z2 }0 X0 {6 t
7. 方便的左边行号显示,单击左边行号就可以实现调试断点的增加/删除; g g, J6 J) [) J+ d9 }/ d& f
8. 对各种快捷键的支持,不但包括常见的编辑操作,还可以有自己定义的PLSQL块的支持(自己定义快捷方式)。如可以定义CTRL+SHIFT+D:弹出所有PLSQL Block的类型,可以自己选择。
% m' k4 ^% p) I7 A9. 可以在一个集成开发环境里面,一边编码,一边调试,不用多处切换
+ ` r0 [- S) n2 O6 d9 l10. 方便的同时打开多个存储过程,通过页面快速切换
$ e; M' C- a6 h- M$ ?% X$ z7 c11. 快速编译存储过程,快速定位错误所在,自己选择是否同时编译依赖的存储过程
, Z" g: a3 S4 N. T+ }2 l0 L4 y+ @" P12. 内置对PL/Formatter,可以用PL/Formatter对存储过程进行格式化,并且可以提供存储过程的概要分析和修改建议
3 ^& i' a. h# G( @PL/Formatter可以对现有的存储过程进行高速的格式化,使所有的存储过程都符合同样的编写标准,这样既有利于提高程序的可读性,避免不同人写的模块的风格上的很差异。
7 b! U, a* b0 g' A; G( TPL/Formatter 还有助于提高程序的模块化,增强程序的结构清晰度,增强SQL的共用性。0 P* N+ ?/ l$ o( c# G
PL/Formatter 还可以帮助完成PL/SQL和Oracle版本之间的管理。+ Z9 ]; w5 i$ G2 Z; I
13. 内置RevealNet Knowledge Base,单击鼠标右键就可以打开,快速得到技术上的支持,解决技术难题6 f( s+ }3 H1 F
nPL/SQL:
! _3 h( G. N K- c9 gn包含整个开发过程中可能遇到问题的答案2 {4 K& x# V' z Q# }! O. j
nCode Library:大量的严谨的PL/SQL代码例子和现成过程,完全源代码提供' x' l3 ^- v0 T! V
n各种错误处理模块可供参考,各类字符日期函数3 x1 }$ T0 H' g; z1 Y' L
n包含1400多个主题+ K$ l1 P* P: s* E/ N
nAdmin:
K( a { R" L) t- wn解答DBA日常工作中80%的常见问题,覆盖2400多个主题
/ s) f$ c: ?* s7 u1 j( A" Nn从网络到性能优化,从备份恢复到Error message,一应俱全
4 M. Q- r+ q* q8 \5 X4 K2 V例子:遇到失效的存储过程怎么办?, g! D' `" f2 l. s1 d
4. 如何对存储过程进行Debug?
1 \' o: u) G, P) _& h5 Ku 需要Toad单独的Debug Option(Standard Version 没有这个选项)
9 k6 T4 |5 H" E( H4 t4 ju 要用Toad对存储过程进行debug,必须安装Oracle的系统包:dbms_debug,而且必须安装Oracle Probe API v2.0 或者更高的版本。8 @3 a0 `) f+ P6 V
u 集成在Stored Precedure Editor里面,可以一边编写一边调试,大大提高开发效率# E+ n% {: K/ h9 o) f5 g& V
u 打开Procedure Editor后,Debug菜单激活,可以开始进行Debug工作。( L, ^5 N6 O; J0 _4 d2 @
u 允许对存储过程进行逐行调试、断点调试,也支持对触发器进行调试。6 V0 W$ s& R/ S4 c( ?( J
u 可以有断点支持,支持Watch变量,允许运行时改变变量的值
+ g% H' Z4 E; Wu 允许对多层调用的Debug支持
6 u/ M+ `5 T$ ?9 P9 S调试步骤具体举例:' T4 e1 t9 G( Q3 Y$ e; M
1. 点击菜单栏的第三个按钮: ,打开Procedure Editor
7 b9 X. p5 Z* A+ v2. 点击Procedure Editor的菜单栏的 按钮,调出需要调试的存储过程9 X* U. h, O0 h1 d7 C
3. 单击工具栏上的按钮 ,输入需要传入的参数,如果不需要传入参数,可以直接单击工具栏上的按钮: ,直接开始调试,如下图输入传入参数:8 d6 c! }/ s) E; l5 u3 `/ O/ D
, G- N, O& j# w+ K7 ]7 T
4. 单击菜单栏的按钮: ,可以单步跟踪,也可以定义一个断点,直接运行到断点在单步执行,在存储过程运行的过程中,当前语句会高亮度显示,并且把鼠标指针定位到变量上,Toad自动显示该变量的当前值。; {6 S+ x0 _& s# @% s. h2 _
5 m' \4 e; u4 \3 N
5. 可以随时中止程序的执行,只要点Debug ->Halt Execution,或者菜单栏上的按钮 ,就可以中止程序的执行8 e8 p) x6 |- U2 @; ~5 [
6. 当碰到一个存储过程调用另外一个存储过程的时候,可以选择跳过(Step Over) ,这样就直接运行那个被调用的存储过程,返回调用结果,继续这个存储过程的调试,也可以选择Trace Into ,这样就打开被调用的存储过程,进一步深入调试那个被调用的子存储过程。如果需要保持Debug信息,在编译的时候应该选择Compile Dependencies with Debug Information,就是Procedure Editor工具栏最右边的那个按钮 。
( o$ r2 f: ?' S# d7. 支持对变量实时追踪:使用Watch:; _, \8 B0 k. _5 @/ h& ^
可以在运行前,或者运行过程中对某个变量进行实时跟踪:Add Watch,把鼠标定位到该变量上,然后点击Debug ->Add Watch At Cursor,该变量就会出现在Debug状态窗口上,而且实时反应该变量的当前值。如上图中的变量v_empname。可以运行时刻修改# d* W$ N5 b* d' r/ T
8. 断点支持:3 ~0 p" b+ {3 X, P8 @
单击存储过程需要加断点的地方的行号,该行颜色变红,输入参数,单击执行按钮 ,可以直接运行到断点处,可以不必逐行追踪,更加高效率的进行调试。
' d0 Z. B' O0 m9 X& U- NDebug Option还支持条件断点,只有当满足条件的时候才会在那个地方停止,否则就好像不存在这个断点一样继续运行。1 `& s% f# t. ]% L# V, D
?? 注意DBMS_OUTPUT.PUT_LINE的结果只有当程序执行完成以后才会出现,在程序执行过程中是没有结果的。
2 K8 @8 j% l4 }5 z* }! S3 K
. j% u9 L+ ]; D: C6 L/ b1 y( [" ^4 S, N& C# K3 c( w
4. 如何用SQLab Xpert对存储过程进行调优?- R: `) J) `& j! }% L# n
我们知道,Oralce数据库的优化,最主要的步骤就在于SQL的优化。而在没有专门的工具(如Toad)的帮助下,进行SQL优化是一件非常困难和乏味的事情,并且需要对Oracle的深入理解和高超的Oracle调优技巧。使用Toad的SQLab Xpert Tuning模块,可以使我们普通开发人员也能够非常快速,精确的对SQL进行专家级的分析- f$ S/ h, [! l' q
在SQL Editor和Procedure Editor里面,选中需要调试的SQL语句(SQLab Xpert只能调试Select,Insert, Update,Delete语句),复制到SQL Editor里面,然后点击工具栏上的调优按钮 ,Toad会自动打开SQLab xpert 窗口,捕获当前的SQL语句,并且把它转化为符合explain plan格式的语句。
: n& o4 d" |7 I5 V6 e- h; a第一次打开Xpert的时候,Toad会提示你,需要安装一些Server端的表、视图和包等对象,可以把表存储到某个指定的表空间(如Tools)里面。可以简单的按照提示一步一步做就可以了。如果系统设定不允许Job的话(Job_queue_process=0),Toad提示有些部件不会现在安装,可以忽略。安装完成以后,可以选择让某些非DBA用户也可以使用Toad的SQLab Xpert调优功能。) O V, ^1 L+ H; O) x- E% _
安装完成以后,Toad会提示你一些关于优化目标方面的问题,你可以选择每次优化都可以重新设定,或者一次设定,以后一直使用这个设定。当然如果需要,还是可以更改的,在SQLab Option xpert的窗口的Administration和Preference下面重新设定。$ U$ i* R" v" D5 m* @4 W$ r
例子:/ c; \0 K$ a T, E8 j
下面这个SQL语句涉及到多表之间的关联,有一定的复杂性,我们可以借助Toad的SQLab Xpert Option来帮助分析:0 ?( _+ G* \ S& Y( N
select a.name. b.name, c.emp_name
% ^; Q9 E! c' J; x/ @9 Yfrom dep a, manager b,emp c' K. ^- t! I& V( a, _ w1 y* v4 L( \1 k
where a.dep_no=c.DEP_NO
7 o, p r5 V; Q* m/ \, s# Aand b.manag_id=c.manag_id
& p3 _4 Z5 M7 G5 s4 u1 _and c.emp_no=3' k" a- @: R& C) x0 i
我们把这个SQL复制到SQL Editor里面,单击上面的调优按钮,Toad打开SQLab Xpert Option窗口。
+ G' }) _3 u' i! l2 q6 Q: u* R: E如下图:
% P4 H/ x# e# h: e s% _, F0 W- H" i7 l. @" p. g
从上面的图中我们可以方面的看到:在各种优化模式下,该SQL语句的执行计划分别是什么样的,Toad给出了每一种执行计划的具体每一个步骤,每个步骤的成本,该表涉及的相关的数据等,如果SQL存取的表还没有经过分析,Toad会以红色警告显示,并且很方便的帮助你对该表进行分析,收集统计数据,重建索引等,以有助于优化器作出最好的选择。可以把当前的分析结果保存到它的资料库里边,以备以后再次调用之需。( w& m, s: w7 K
我们还可以求助与SQLab 的自动优化功能:点击Original SQL下面的auto tune按钮,Toad会对执行结果按照tkprof进行分析(当然,这需要你在initsid.ora里面设置好utl_file_dir,如果服务器是在Unix机器上的话,还需要通过FTP方式得到Trace文件,有一些小小的设置)。
# n1 B# K0 i% W 自动优化非常高效的对所有执行计划进行实际运行比较,并且给出实际执行的时间的对比,如下图:3 t2 x k! P6 {" y
1 L6 {, i# B, v+ W/ L- q' O
我们还可以让Toad给出实际的优化建议:点击Original SQL,单击下面的Advice按钮,Toad根据对SQL的分析和执行结果给出合理的建议:5 Z3 Z5 `) J9 E7 d! j1 u
如:+ E% L' U, E5 R) s2 G4 I9 U3 D2 y6 y
1. 把表和索引分别放到两个不同的表空间,因为我们在创建表,加上约束的时候没有指定USING INDEX子句,所以表和索引都建立在了用户的默认表空间上了。
- C. A; Z9 w: V: T8 I1 b2. 对表EMP,DEP和MANAGER进行分析,收集最新的统计数据,有利于CBO得到最优的执行计划- r9 ]/ D% I, z3 }
3. 在合适的列上创建索引:EMP的manag_id和dep_no。当表中存在大量的数据的时候,这样可以大大减少由于全表扫描带来的成本。: F) U, H; D0 a* \! o; o
9 b: C. A) o- v) ~* |1 @" c8 G% e1 j, c7 k
5. SQL Modeler:& F: n3 G/ y+ W, B* o: f: G" U
SQL Modeler可以帮助开发人员很容易的写出各种复杂的SQL语句,只需通过简单的拖动鼠标,就能够写出复杂的SQL语句来。
& n* q1 V) N8 s4 f/ t4 F打开SQL Modeler的几个途径:
" z4 {1 t2 A) ]$ ~i. 菜单栏 Database -> SQL Modeler ,打开窗口
/ X/ n1 ~" L2 `( l2 x( y- fii. 单击工具栏第四个按钮 ,打开SQL Modeler窗口
, |. a) s4 d& D: c( ]* n. P- ^* U窗口由三个主要部分组成:
8 s: Z1 w0 ^; n6 G- b% Hn 表选择区域:最右边的那个部分,用来选择From子句中用到的表。拖动到左边的区域或者双击就选择了该表。
7 `( ]* L. ]- b: a' Q2 a1 z8 Kn 表模型区域:用来图形化的显示选择的表和表之间的关联关系。. S$ s" u& D) |
n 生成SQL区域:这里显示用图形化方式创建的查询对应的SQL语句,# R& ]* G% [/ `7 m& L# o
& ]1 A( e" S3 b7 h/ W0 ]/ j
在SQL Modeler里面,还支持对生成的SQL进行Explain Plan,调试SQL的性能,运行SQL,看是否得到了希望的结果,保存生成的语句,或者把语句粘贴到SQL Editor里面。8 f# W* A( E u- s
9 _/ d6 n* E, e$ p9 \- V 有了SQL Modeler的帮助,即使是初级的程序员也能编写出复杂而又高效的SQL查询来。" D/ n, |7 |6 g
比如下面的例子; |
|