我说的oracle是oracle数据库。最早接触oracle应该是2006年中的某个月,项目中需要用oracle。
之前项目里用的是aix上的db2和oracle的rdb,花了1年多的时间学习了db2和rdb的基本知识,比如怎么安装啊,怎么查询数据,怎么杀进程(工作中时常遇到进程被锁的问题,比如有人修改了数据却没有提交,当时工作的乐趣之一就是帮人杀进程)。也要改改程序,当时主要是通过c或者fortran来访问数据库,还有一些存储过程。
后来项目要改用oracle了,首先就是从网上下载了oracle,照着安装说明书把oracle装到了aix上,然后发现不会用。从同事那里了解了sqlplus这个神奇的工具,可以连oracle,执行一些语句。在另外一个同事的帮助下,将项目的oracle dump文件import到数据库,因此知道了有imp/exp这个工具。后来这个工具帮了我很大的忙:硬盘坏了,数据库没了,这时候我已经知道可以用imp将数据导回去了,因此虽然硬盘后来坏过好几次,甚至连安装好的oracle软件都没了,我也不担心。安装软件,然后imp,又是一个可以用的数据库。
后来找到了SQL Developer这个工具,用来写存储过程比较方便。当时已经有1年多的db2存储过程经验,所以oracle的pl/sql也很容易上手,看了一些《oracle pl/sql programing》,可以写一些简单的存储过程,还向同事们介绍怎么用pl/sql写存储过程。
当时对数据库的理解很简单:可以执行sql,可以写存储过程,可以通过数据库提供的接口用C或其它语言访问数据库,有时候数据库被锁了,就想办法找到锁的进程并kill之。而sql在学校里就学过的,虽然忘了很多,重新学起来还是比较容易的。
当时我有一个习惯:下载各种电子书。由于要用oracle,所以偶尔有一次下了2本标题带oracle的书,一本是thomas kyte的expert oracle database architecture,一个是jonathan lewis的cost based oracle。当时只是下载,没有看。后来有一次看了expert oracle database architecture的前言,发现作者被说的很牛x,于是想好好把这本书看一遍,当时也只是想想。后来有一次看了这本书的讲table的那一章的前几页,原来table也是这么有意思的,感觉到这真是一本好书,但是看电子书太累了。就到网上搜thomas kyte,发现国内有他的2本书的中文版,然后学校图书馆还正好有这些书。
最先借过来看的是《oracle高效设计》这本书,看起来非常爽。当初从图书馆拿到这本书的时候还是很新的,我借了好几次又还了好几次(因为借书是有时间限制的),最后发现这本书已经翻的很旧了,有点过意不去。这本书给我的工作带来了很多帮助,解决了当时系统中的一些性能问题,比如大量硬解析的问题,语句执行慢的问题。书里有一章专门讲各种优化工具,什么statspack啊,10046啊,tkprof啊,pl/sql profiler啊,我都尝试着用,现在看来很明显的一个问题,当初解决起来可是颇费周折。书里面讲了很多执行计划啊,sql语句的解析之类的知识,写的非常好,我看了至少不下3次。后来我还专门自己买了一本,不过买过来之后再也没怎么看。
自看了《oracle高效设计》之后,引起了我对oracle严重的兴趣,当时学校图书馆能借到的讲oracle的书,我都借过来看了。从《expert one on one oracle》这本书里,我学到了用dbms_sql实现解析一次,执行n次的编程技巧,学到了用v$lock查看数据库中的锁。从《oracle performance tuning tips and techniques》这本书里,第一次学到了查询可以通过索引来满足而不用回表,学到了v$视图是怎么建起来的,学到了很多的hint,这本书很厚,但是看起来很快,很容易看懂,浙图有9i和10g版本的。《Oracle安全性高效设计》讲了权限管理和安全这一块,学到了存储过程里默认是看不到通过role授予的权限的,也学了一些如和将一个没有dba权限的账号变成有dba权限的账号的方法。
除了图书馆里的,还从网上找了一些电子书来看,《oracle internels》是一本很薄的书,内容却很深厚,我把它打印了出来,看了好几遍,每次都能发现一些之前漏掉的一些东西。《optimizing oracle performance》写的很好,详细解释了10046 trace文件了每一行的内容是什么意思,讲了oracle等待事件是怎么实现的,作者的网站hotsos.com里也有很多不错的文章,比如为什么99%的命中率不一定是好事,还有介绍OFA的文章,目录结构应该怎么安排,数据文件应该放在哪里之类的。《cost based oracle》也很好看,想知道oracle是怎么生成执行计划,怎么计算成本的话,可以看看这本书。《scaling oracle 8i》是另外一本写的很好的书,讲硬件,讲操作系统,也讲oracle,从这里我知道了v$session和其它几个v$视图应该用什么字段来关联,oracle的内存结构和物理结构是怎样的,软解析和更软的软解析是什么意思。
另外我自己也买了一些,如《oracle wait interface》详细介绍了各个等待事件及其产生的原因和可能的解决方法,《oracle performance tuning 101》也是一本很有意思的书。
比较遗憾的是,很多大师推荐的Oracle官方文档,从来都没有好好的去看,或许是因为从里面我找不到阅读的乐趣吧。