一.准备工作
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文档中没有说明的参数以下划线开始
除了在开发环境中设置_trace_files_public=true这个参数外,其他没有说明的参数最好不要改动
2.数据文件:
数据库database-->表空间tablespace-->segment段-->extent扩展区-->block块
1)数据库由一个或多个表空间组成
2)表空间由一个或多个数据文件组成,一个表空间有一个或多个段
3)一个段(表,索引等)由多个扩展区组成,段存在于表空间中,但在表空间中可有多个数据文件中的数据
4)一个扩展区是在磁盘上一些连续分配的块,一个扩展区在一个表空间中,而且总是表空间中单一的文件
5)块是数据库中最小的分配单元和i/o单元,它的大小在数据库创建时就固定下来了
3.临时文件
当内存不足以保存一个大规模排序操作的中间结果(集),oracle用临时文件来存储它们,永久数据,如表或索引是不会存储到临时文件中的,但临时表或临时索引的内容则可能存储到临时文件 中
推荐用本地管理临时表空间来配置数据库???,例
create temporary tablespace temp
tempfile ’c:\oracle\oradata\walter\temp.dbf’
size 5m
extent management local
uniform size 64k
4.控制文件
一个相当小的文件,至多为64m,包含oracle需要的其他文件的目录
数据文件init<sid>.ora告诉实例控制文件 的位置
控制文件则把数据库和联机重做日志文件的位置告诉实例
控制文件也向oracle提供其他信息,如检查点,数据库名称,数据库创建的时间戳,归档重做日志历史等
5.重做日志文件
数据的事务日志,仅在恢复时才使用
1)联机重做日志
2)归档重做日志
内存结构
1.sga(system global area)
2.pga(process global area)
3.uga(user global area)