我们的系统是一个OLTP系统,用的是Oracle RAC,没有名义上的DBA,但最近一年左右的时间,不知不觉干了DBA事。之前的数据库基础仅限于学生水平,在此做个阶段性小结,记录下学习轨迹,按学习顺序排序,其实就是工作中遇到的顺序。
一、从备份恢复开始
因为会写shell,就被拉去做Oracle的备份恢复。拿了隔壁项目的现成资料,移植到了我们的系统。这里的知识点在于Oracle的redo log原理,了解存储的大致结构。我们用的是RMAN的备份,稍微看点RMAN的资料。资料网上一大堆,就不推荐了。顺带通过这一阶段工作,熟悉了sqlplus工具,不过后面用的更多的是pl sql developer
二、Oracle安装、配置与存储规划
又是拿了隔壁项目组的现成资料,但存储做了完全不同的设计。要懂磁盘阵列、Lunix LVM,还有懂得oracle的表空间和数据文件。如果是项目初期,oracle的各参数还是自动的比较好。
三、数据库表设计
这里已经涉及到了业务逻辑,也需要有一些数据库的理论知识了。可以拿大学里的数据库教材,好好再学习一遍,各种范式还是要知道的。另外,就要对字段类型、索引、约束有比较清楚认识,还要懂得表分区。对于oracle,不得不推荐Tom大神的《oracle9i&10g编程艺术》
四、数据库性能调优
性能调优牵扯到了上面所有,oracle怎么调优,网上的资料也是一大堆,但都是治标不治本,关键还是要对oracle的内部原理清楚。要知道下面一些东西
- 数据库理论、SQL、oracle各种原理、存储理论,这是基础,不然做优化是抓不到重点的
- 各种报告和工具,比如AWR报表、autotrace、tkprof,至于各种性能视图,实在太麻烦,针对实际问题边用边学。AWR报表没有理论知识是看不懂的!
- Oracle体系结构,SGA、PGA什么的要搞清楚,各种文件是做什么的,懂了这些,参数才能配置好,也才知道哪些能删哪些不能删
- oracle的事务,以及redo和undo,知道这些上层应用并发执行才不会有差错
- 索引、分区,这是性能优化的重点,索引要懂原理,B树生成、查询、节点插入和删除,这些要很明白。分区还与表空间、数据文件、段等概念关系紧密
- RAC还有cache fusion,就是集群间的内存同步,这家伙相当麻烦,实在搞不定、项目进度又有压力,那就做应用隔离吧
五、后续
尝试横向扩展,还有ETL、OLAP、读写分离(复制、stream)、data guard。。。。。。
后来听说oracle配置很简单、功能太强大,生产环境基本不用管,这到底是好事还是坏事呢?