分享

Oracle专家高级编程学习笔记

 wwwijhyt图书馆 2014-05-09
一.准备工作

  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>altersystem flush shared_pool;

  system@webdb>settiming 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.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.ora告诉实例控制文件 的位置

  控制文件则把数据库和联机重做日志文件的位置告诉实例

  控制文件也向Oracle提供其他信息,如检查点,数据库名称,数据库创建的时间戳,归档重做日志历史等

  5.重做日志文件

  数据的事务日志,仅在恢复时才使用

  1)联机重做日志

  2)归档重做日志

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多