笔记

1. 开发数据库应用,不能把数据库当黑盒。需要了解数据库的一下内容

  • 数据库的体系结构
  • 并发控制
  • 开发的时候就要调优你的代码
  • 数据库有哪些特性,不要在你的代码里重复实现
  • 深入的学习SQL

2. 我的方法

以数据库为中心的方法.如果能在数据库中实现,就不去自己实现. 原因是Oracle在各种平台上都可用,自己实现的话,移植性可能会不好.

一些最佳实践

  • 尽量使用一条SQL完成工作
  • 如果一条SQL没法完成工作,那么就是用PL/SQL
  • 尽量保持代码简单,要知道代码越多越容易出错
  • 如果PL/SQL不能完成工作,就试试JAVA存储过程
  • 如果Java不行,那么就试试C例程
  • 再不行,就要考虑这个工作的可行性了。

3. 一个bitmap index引起阻塞的问题

自治事务

自治事务就是在一个已有的会话中开始一个独立的子事务,父事务被阻塞。通常用在测试中。

举一个位图索引导致的阻塞问题

先看位图索引的结构

比如拿 gender作例子,values=M or F, 建立bitmap index

假设表里有5条记录,那么位图中的bit数就是5

John, M,25, L1

Diana, F, 20, L2

Mary, F, 21, L1

Peter, M, 26, L4

Kathy, F, 33,L3

那么M的位图就是10010, F的位图就是01101. 如果bitmap index在列上, 那么L1=10100, L2=01000

那么如果在下面会话中打开一个自治事务,就会发生死锁。

ops$tkyte%ORA11GR2>>> create table t

 ( processed_flag varchar2()

 );

Table created.

ops$tkyte%ORA11GR2> create bitmap index

 t_idx on t(processed_flag);

Index created.

ops$tkyte%ORA11GR2> insert into t values ( 'N' );

 row created.

ops$tkyte%ORA11GR2> declare

 pragma autonomous_transaction;

 begin

 insert into t values ( 'N' );

 commit;

 end;

 /

declare

*

ERROR at line :

ORA-: deadlock detected while waiting for resource

ORA-: at line 

如果打开一个新的会话,同样插入值=N的行,那么这个会话会被阻塞,因为会话1已经锁定了Value=N的位图索引。

解决办法就是删除这个bitmap index.

4. 开发数据库应用的正确方法

  • 了解数据库的体系结构, shared server or dedicate server
  • 使用绑定变量, JDBC PreparedStatement
  • hard code 参数会导致SQL 解析,重新编译查询计划
  • 理解并发控制,SELECT for update, upd_date列,防止丢失更新
  • 多版本控制,undo, 读一致性
  • 非阻塞读
  • 。。。

01 - 开发成功的Oracle应用的更多相关文章

  1. 【Todo】抽象渗漏法则 & 找到理想员工 & 软件开发成功 12 法则 & Joel on Software

    Joel应该是个软件专家,这是他文章汇总的中文版本: http://local.joelonsoftware.com/wiki/Chinese_%28Simplified%29 其中有几篇值得好好看看 ...

  2. linux 成功安装oracle后,为其创建一个登录账户

    成功安装oracle后,创建一个登录账户 1.切换到oracle用户下 su -l oracle 2.使用sysdba账户登录: sqlplus / as sysdba 3.创建用户 语法:CREAT ...

  3. HTML5学习总结-01 开发环境和历史

    1 搭建HTML5开发环境 1 安装一款支持HTML5的浏览器 FireFox, Chrome 2 开发工具 SublineText, Eclipse, HBuilder, WebStorm 注:使用 ...

  4. 『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南

    安装 Oracle 安装 Oracle11g 32位[Oracle 32位的话,OGG 也必须是 32位,否则会有0xc000007b无法正常启动 错误] 安装目录为 D:\oracle\produc ...

  5. 开发成功-cpu-mem监控动态折线图--dom esayui js java

    jsp ------------------------------------------------------------------------------------------- ---- ...

  6. VS2015下的Android开发系列01——开发环境配置及注意事项

    概述 VS自2015把Xamarin集成进去后搞Android开发就爽了,不过这安装VS2015完成的时候却是长了不知道多少.废话少说进正题,VS2015安装时注意把Android相关的组件勾选安装, ...

  7. Java学习笔记(十三)——通过Netbeans开发环境生成oracle数据库中表的对应hibernate映射文件

    [前面的话] 身体慢慢已经快好了,感觉真好,哈哈. 这篇文章要通过Hibernate对数据库进行操作,而Netbeans可以直接通过数据库逆向生成对应的映射文件.基础文章,选择性阅读. [步骤] 1. ...

  8. Vulkan Tutorial 01 开发环境搭建之Windows

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 相信很多人在开始学习Vulkan开发的起始阶段都会在开发环境的配置上下一些功夫,那么 ...

  9. Linux基础(01)开发环境的搭建

    内核源码下载 : https://blog.csdn.net/u011375704/article/details/81866427 1.在虚拟机安装Ubuntu 14.04版本 (安装时设置好用户名 ...

随机推荐

  1. python的内存管理

    1.在Python中,整数和短小的字符,Python都会缓存这些对象,以便重复使用.当我们创建多个等于1的引用时,实际上是让所有这些引用指向同一个对象. a = 1 b = 1 print hex(i ...

  2. iOS 开发者能用上的 10 个 Xcode 插件

    本文由 伯乐在线 - 邢敏 翻译,黄利民 校稿.未经许可,禁止转载! 英文出处:code.tutsplus.com.欢迎加入翻译小组. 1. XcodeColors:给 Xcode 控制台添加颜色 2 ...

  3. 通过WebBrowser取得AJAX后的网页

    通常情况下通过WebBrowser的文档加载完成事件DocumentCompleted中进行判断 if (_WebBrowder.ReadyState == WebBrowserReadyState. ...

  4. linux下操作

    一.没有正确安装GNOME电源管理器的默认配置 二.oracle启停 1. linux下启动oraclesu - oraclesqlplus /nologconn /as sysdbastartupe ...

  5. SharePoint 2010 设置宽度1024px

    在模板页中找到 s4-workspace,设置class=”s4-nosetwidth“,然后再设置宽度为1024px:如果要居中,设置style=“margin:0 auto” 这样也会有一个问题: ...

  6. 元音字母A的发音规则

    摘抄自百度文库 A/a的发音比较复杂,归纳起来有10种情况: 一.在重读开音节中读[ei]. 例如: plane [plein]  radio [ˈreidiəu] wake [weik]  pape ...

  7. wire与reg的区别?转载大神!

    本文转自:http://www.cnblogs.com/thymon/archive/2010/06/09/1754541.html //------------------------------- ...

  8. [uwp开发]数据绑定那些事(1)

    现在是msp候选人,是时候写点技术博客来加分了(实则是个人的心得体会). 注:以下都是个人理解,错误在所难免,欢迎批评指正 以前接触过WPF,只会简单的一些操作,现在在逐渐学习UWP(Universa ...

  9. 基于.net mvc的校友录(四、系统结构图)

    这是整个系统结构的预览,话不多说,给个图: 本网站努力为每个人提供一个有效的校友录系统,为参与者提供一个简单有效的交流互动的平台,操作上要求简单.高效,性能上要求稳定.可扩展.在对同类网站系统进行了调 ...

  10. Daily Scrum1--团队项目分工及估计时间

    团队项目分工及估计时间 PM(黄剑锟): 任务一:监督进度,将每一天完成的任务总结,在各个部分进行协调与帮助.(贯穿整个项目周期) 任务二:提高搜索反应时间,优化搜索算法.(估计时间8小时) 程序设计 ...