01 - 开发成功的Oracle应用
笔记
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应用的更多相关文章
- 【Todo】抽象渗漏法则 & 找到理想员工 & 软件开发成功 12 法则 & Joel on Software
Joel应该是个软件专家,这是他文章汇总的中文版本: http://local.joelonsoftware.com/wiki/Chinese_%28Simplified%29 其中有几篇值得好好看看 ...
- linux 成功安装oracle后,为其创建一个登录账户
成功安装oracle后,创建一个登录账户 1.切换到oracle用户下 su -l oracle 2.使用sysdba账户登录: sqlplus / as sysdba 3.创建用户 语法:CREAT ...
- HTML5学习总结-01 开发环境和历史
1 搭建HTML5开发环境 1 安装一款支持HTML5的浏览器 FireFox, Chrome 2 开发工具 SublineText, Eclipse, HBuilder, WebStorm 注:使用 ...
- 『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南
安装 Oracle 安装 Oracle11g 32位[Oracle 32位的话,OGG 也必须是 32位,否则会有0xc000007b无法正常启动 错误] 安装目录为 D:\oracle\produc ...
- 开发成功-cpu-mem监控动态折线图--dom esayui js java
jsp ------------------------------------------------------------------------------------------- ---- ...
- VS2015下的Android开发系列01——开发环境配置及注意事项
概述 VS自2015把Xamarin集成进去后搞Android开发就爽了,不过这安装VS2015完成的时候却是长了不知道多少.废话少说进正题,VS2015安装时注意把Android相关的组件勾选安装, ...
- Java学习笔记(十三)——通过Netbeans开发环境生成oracle数据库中表的对应hibernate映射文件
[前面的话] 身体慢慢已经快好了,感觉真好,哈哈. 这篇文章要通过Hibernate对数据库进行操作,而Netbeans可以直接通过数据库逆向生成对应的映射文件.基础文章,选择性阅读. [步骤] 1. ...
- Vulkan Tutorial 01 开发环境搭建之Windows
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 相信很多人在开始学习Vulkan开发的起始阶段都会在开发环境的配置上下一些功夫,那么 ...
- Linux基础(01)开发环境的搭建
内核源码下载 : https://blog.csdn.net/u011375704/article/details/81866427 1.在虚拟机安装Ubuntu 14.04版本 (安装时设置好用户名 ...
随机推荐
- 基于Elasticsearch的自定义评分算法扩展
实现思路: 重写评分方法,调整计算文档得分的过程,然后根据function_score或script_sort进行排序检索. 实现步骤: 1.新建java项目TestProject,引入Elast ...
- win10里安装.net3.5
在CMD窗口里面输入这样一段,来安装Microsoft.MET Framework 3.5 Dism /online /enable-feature /featurename:NetFX3 /All ...
- 自定义Drawable
本文由 伯乐在线 - treesouth 翻译,toolate 校稿.未经许可,禁止转载! 英文出处:ryanharter.com.欢迎加入翻译小组. 我们看过一些博客文章,讲述了为什么要适时地使用自 ...
- 时隔3年半Spring.NET 2.0终于正式Release了
一直很喜欢Spring.NET,不过2011年8月2日1.3.2正式release之后,再没有正式版本的release了. 直到4天前,Spring.NET 2.0 GA终于Release. http ...
- PB中获取datawindow提交的sql语句
PB的群里边,有人问的到这个问题,查了一下,综合了两条回答,得到了答案 1.DW 控件的SQLpreview 事件里的sqlsyntax 参数即是 2.pb一般使用占位符优化SQL语句,也就是你看到的 ...
- Spring事务总结
事务是什么? 事务就是用来解决类似问题,事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败,那么事务就会回滚到最开始的状态,仿佛什么都没有发生过.在企业级应 ...
- C#加密解密算法汇总(转)
方法一: //须添加对System.Web的引用 using System.Web.Security; ... /// <summary& ...
- The finnacial statements,taxes and cash flow
This chapter-2 we learn about the the financial statements(财务报表),taxes and cash flow.We must pay par ...
- Spring Mvc 输出Json(iwantmoon.com出品)
原文:http://iwantmoon.com/Post/f94e49caf9b6455db7158474bab4c4dd 因为工作需要,现在要去做开放平台,考虑了多种方案之后,基本确定 下来,Htt ...
- 【转载】Oracle实例和Oracle数据库(Oracle体系结构)
免责声明: 本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除. 原文作者:Leshami 原文地址:http://blog.csdn.net/ ...