Expert one-on-one oracle是Oracle专家Thomas Kyte的大作,洋洋大观,总共有1329页,啃起来颇费力气.故作此笔记,记录精华所在.
一.准备工作
1.建立基本调试环境
Create demo schema(建立演示模式)
sqlplus>start $ORACLE_HOME/sqlplus/demo/demobld.sql 2.建立login.sql
define_editor=vi set serveroutput on size 1000000 set trimspool on set long 500 set linesize 100 set pagesize 9999
column plan_plus_exp format a80 column global_name new_value gname
select lower(user)||'@'||decode(global_name,'WEBDB.FANYAMIN.NET','webdb',global_name) global_name from global_name;
set sqlprompt '&gname>' set termout on
3.在sqlplus中配置AutoTrace
1)cd $ORACLE_HOME/rdbms/admin
log into sqlplus as system(connect system/manager@webdb) run @utlxplan run create public synonym plan_table for plan_table; run grant all on plan_table to public;
2)
cd $ORACLE_HOME/sqlplus/admin log into sqlplus as sys(connect sys/change_on_install@webdb) run @plustrce run grant plustrace to public;
二.内容
1.开发成功的Oracle应用程序
一条简单秘诀
if(possible) 就用单条SQL语句完成 else if(possible) 用plsql程序 else if(possible) 用java存储过程 else if(possible) 用C外部过程 else 考虑是否真有必要这样做
两个指导方针
1)不要在MTS下运行长事务<45s 2)使用绑定变量
system@webdb>alter system flush shared_pool; system@webdb>set timing on 执行这两个sql文件,一比较,发现使用绑定变量后,速度快多了
--bindtest1.sql, did not use bind variable declare type rc is ref cursor; l_rc rc; l_dummy all_objects.object_name%type; l_start number default dbms_utility.get_time; begin for i in 1..1000 loop open l_rc for 'select object_name from all_objects where object_id='||i; fetch l_rc into l_dummy; close l_rc; end loop; dbms_output.put_line(round((dbms_utility.get_time-l_start)/100,2)||'seconds...'); end; / --bindtest2.sql, use bind variable declare type rc is ref cursor; l_rc rc; l_dummy all_objects.object_name%type; l_start number default dbms_utility.get_time; begin for i in 1..1000 loop open l_rc for 'select object_name from all_objects where object_id=:x' using i; fetch l_rc into l_dummy; close l_rc; end loop; dbms_output.put_line(round((dbms_utility.get_time-l_start)/100,2)||'seconds...'); end; / Oracle封锁策略
Oracle体系结构的3个主要组件:
1.文件:组成数据库实例的5个文件(参数文件,控制文件,数据文件,临时数据文件,重做日志文件) 2.系统全局区域SGA( System Global Area): Java池,共享池等 3.物理进程与线程: 在数据库上运行3种不同类型的进程(服务器server进程,后台backgroud进程,从属slave进程) 术语解释:
数据库: 物理操作系统文件的集合 实例: 一组oracle进程和SGA 二者关系: 一个数据库可以被多个实例装载mount和打开open 实例可以及时地装载并打开一个单独的数据库,被实例打开并装载的数据库在启动时不必相同
文件:
1.参数文件:
TNSNAMES.ORA, LISTENER.ORA,SQLNET.ORA, PROTOCOL.ORA,NAMES.ORA, SMAN.ORA, LDAP.ORA (refer to "Oracle Net administrator Guide") $ORACLE_HOME/DBS/int<ORACLE_SID>.ora: 内容为一系列的变量名和值对 such as: db_name="wmdb" db_block_size=8192 control_files=("c:\oradata\control01.ctl","c:\oradata\control02.ctl") ... 其中有一些在Oracle文档中没 [1] [2] 下一页 |