Oracle编程高手箴言:位图索引(Bitmap Index)的故事
您如果熟悉Oracle数据库,我想您对Thomas Kyte的大名一定不会陌生。Tomas主持的asktom.oracle.com网站享誉Oracle界数十年,绝非幸致。最近在图书馆借到这位Oracle绝顶高手编著的《Expert Oracle Database Architecture-9i and 10g programming Techniques and Solutions》,翻阅之下,果然盛名无虚,虽然说不上字字珠玑,但作者对Oracle架构的理解和实践确实已达到出神入化的境界。如果您有时间和兴趣,强烈建议您阅读这本书。这本书最大的特点是语言生动活泼,说理清楚,几乎每讲解一个原理,作者都给出了具体实例,让人读起来毫不气闷。
另外,Thomas谦逊的态度让我非常佩服,Thomas在Oracle数据库方面工作了16年,并且参与了早期Oracle版本的开发,但他仍然谦虚地说,他每天都能从Oracle文档里学到新的东西。
下面从这本书里摘录了一些精彩片段,供您欣赏,虽然不免有断章取义之嫌。
位图索引(Bitmap Index)的故事
一日,一群Java开发者找到Tom先生,说他们新开发的系统已经上线,但性能及其低下,他们问Tom先生能不能替他们看看问题到底出在什么地方。他们告诉Tom,他们的系统采用JSP+EJB+Oracle的典型三层架构,其中EJB中的SQL是由第三方工具产生的。Tom同志一听到EJB,就知道这个系统是不能采用SQL代码跟踪的方法来进行性能调优了。于是,Tom同志告诉这些心急火燎的Java开发者,你们系统的问题肯定在浏览器到数据库之间,但具体问题出在什么地方,我需要看看你们的数据库。
于是,Tom同志远程连接到他们的测试数据库(注意不是生产数据库),查看了几个动态性能视图(V$LOCK和V$SQL),最后终于发现了问题的所在。Tom同志发现他们的数据库中有一个位图索引(Bitmap Index)最为可疑,这个索引是建立在一个PROCESS_FLAG的字段上。PROCESS_FLAG字段表示该记录是否被处理了,可能值只有两个,一个是未处理(N),一个是已经处理(Y)。当记录初次插入数据库时,该字段的值为N,但其它进程读取并处理那些未处理的记录(值为N的记录)后,这个字段的值就更新为Y。
Tom就问这些Java开发者,你们为什么要在这个PROCESS_FLAG字段上建立位图索引呢?
其中有一个开发者振振有词的说,这是为了提高查找速度,一旦建立了位图索引,我们的程序就能快速找到那些数值为N的记录,然后处理。随后,他又拿出一本大部头的Oracle数据库参考手册,对Tom同志说,这书上都是这么说的,对那些数值非常少的字段,比如,我们的PROCESS_FLAG字段只有两个值,就应该建立位图索引
相关文档:
oracle认证方式分为操作系统认证和口令文件认证2种方式,操作系统认证有时候也叫本地认证。
--操作系统认证:即oracle认为操作系统用户是可靠的,即既然能登陆到操作系统那么oracle数据库你也能登陆
--口令文件认证:oracle认证认为操作系统用户是不可信任的,如果要访问数据库,必须进行再次认证。
具体实现如下:
......
@echo off
REM ###########################################################
REM # Windows Server 2003下Oracle数据库自动备份批处理脚本
REM ###########################################################
REM 取当前系统时间,可能因操作系统不同而取值不一样
set CURDATE=%date:~0,4%%date:~5,2%%date:~8,2%
se ......
列出配置的所有数据库
[root@node1 ~]# srvctl config database
NOVADB
所有实例和服务的状态
[root@node1 ~]# srvctl status database -d NOVADB
Instance NOVADB1 is running on node node1
Instance NOVADB2 is running on node node2
单个实例的状态
[root@node1 ~]# srvctl status instance -d NOVADB -i NOVA ......
Oracle数据库字符集问题解析(本文系整理他人帖子形成)
经常看到一些朋友问ORACLE字符集方面的问题,我想以迭代的方式来介绍一下。
第一次迭代:掌握字符集方面的基本概念
有些朋友可能会认为这是多此一举,但实际上正是由于对相关基本概念把握不清,才导致了诸多问题和疑问。
首先是字符集的概念。
我们知道, ......
在进行数据库管理的时候,忽然一下记不起命令和语法,特别是给客户做演示,或者是现场实施,有没有办法查手册,没有办法,实在是尴尬,我们使用linux的时候,也是通过大量的命令行命令来进行系统的维护,如此多的命令,难免会对一些命令遗忘,不过linux里的man命令,可以帮我们找到相应命令的大部分的用法描述,根据这个man ......