《Oracle DBA突击帮你赢得一份DBA职位》笔记

mac2022-06-30  72

作者:张晓明  本书分基础篇、中级篇、高级篇 三个级别,粗略的看了本书,主要还是看基础篇和中级篇,下面是我随手记录的一些知识点,不够全面,还望包涵; truncate和delete的区别:     truncate是ddl语句,delete是dml语句     truncate速度快,delete速度慢     truncate不可以rollback,delete 可以rollback(truncate有风险)     truncate回收高水位线(high watermark),delete不回收高水位 delete需要把每个有数据的块读出来,写上delete标记,另外还要把delete的内容拷贝一份到undo,并且把它的动作记录到redo; truncate就是把系统表(或者tablespace bitmap)里面把相关的extent的标记为未使用,另外把dba_objects(obj$)里的data_object_id换一下。     相当于,truncate的操作就是先drop掉表,并且重建一张新表   OSI模型把网络交互分成7层,从下向上一次为:     物理层:这一层定义了物理、电气规范,用于在两个物理主机间建立、维持、释放连接;Hub属于典型的物理层设备;     数据链路层:这一层完成同一子网的两个设备间的通信,交换机属于典型的链路层设备;     网络层:这一层提供网络间的路由功能,如果通信跨越多个子网络,这一层负责选择一条最优路线,路由器属于典型的网络层设备,有一种设备叫做“三层交换机”,实际就是交换机中添加路由的功能,这一层的典型协议是IP协议;     传输层:完成两个节点间数据的可靠传输,这一层的典型协议是TCP、UDP协议。     会话层     表示层     应用层   数据块结构: 4部分:数据块头(Block header)、Row Directory、Free Space、Used Space (1)、块头中储存着数据块地址、数据块类型(索引块、UNDO块等)、事务表(ITL)         ITL是数据块头最为重要的内容,它是Oracle “行级锁”和“读一致性”的实现基础,也是Oracle优于其他数据库的“锁机制”体现,ITL相当于一个表格,每个表项都指向在本数据块中参与到某个事物的一条记录,包括内有有UBA(Undo Block Address)、事物号(Transaction ID)、SCN号。 (2)、Row Directory这部分信息记录了数据块中每条记录的相对于数据块头偏移量。可以把它想象成数据块内部的一个指针表,有了这个指针后,Oracle寻找某条记录时,就不必遍历整个数据块才能获取一条记录了。 (3)、Free Space这部分空间是数据块的空闲空间,每当插入新纪录、更新记录需要更大的空间就会使用这部分空间,这个空间的大小受PCTFREE参数的控制。 (4)、Used Space数据记录占用的空间,这部分空间同样受着PCTFREE和PCTUSED两个参数的限制。   Extent空间管理: 本地管理比字典管理有4个优势: 不再需要在UET$、FET$两个数据字典上的递归SQL调用; 减少了数据字典的竞争(ST Enqueue); 改变位图不会产生UNDO记录; 不再需要周期性的合并操作(Coalescing)。   Oracle主要后台进程 进程 缩写 描述 Database WriterDBWn负责把脏数据写回磁盘Log WriterLGWR负责把日志数据写到联机日志文件CheckpointCKPT负责检查点操作Process MonitorPMON负责维护用户进程System MonitorSMON负责实例恢复AchieverARCn负责归档操作,生成归档日志Manageability MonitorMMON和AWR有关Manageability Monitor LightMMML和AWR有关Memory ManagerMMAN和自动SGA管理有关Job Queue Coordination ProcessCJQO定时任务进程Recovery WriteRVWR和Flashback Database 功能有关Change Tracking WriteCTWR跟踪数据块变化,支持快速增量备份   Redo记录包含以下内容: 事务号; 被修改数据的位置,数据块号; 修改后的值。   完整的SQL语句的执行过程: (1) Synatic:语法分析,这一步检查SQL语句的语法是否正确,有没有拼写错误,比如把SELECT写成SELET。 (2) Semantic:语义分析,这一步检查要查询的对象是否存在,以及用户是否具有操作该对象的权利。 (3) Parent Cursor:在Library Cache中检查语句的Cursor是否存在,如果存在可以重用的Cursor(包括Parent Cursor和Child Cursor),则把PGA的Private SQL Area和其做关联,然后直接跳到第(8)步。这种解析也叫做软解析(Soft Parse)。如果没有就申请一个Parent Cursor,Parent Cursor就是用来保存SQL语句的,然后继续第(4)步。 (4) View Merge:如果用户的语句中用到了试图(View),把试图语句合并到用户语句中。 (5) Statement Transformation:把Complex SQL转化成simple SQL,比如展开子查询。           某些资料也把(4)和(5)这两步操作叫做逻辑优化(Logical Optimization)。 (6) Optimization:确定最佳的访问路径。如果是RBO,根据一些预定义的规则来决定访问路径;如果是CBO,则根据对象的统计信息确定访问路径。有些资料将这一步操作叫做物理优化(Physical Optimization)。 (7) QEP Generation:生成执行计划(Query Execution Plan);也就是产生Child Cursor。执行计划会保存在Child Cursor中,并和Parent Cursor相关联。在Child Cursor中保存的是执行计划和执行环境信息(比如优化器模式)。 和软解析(Soft Parse)相对应,如果一个语句完整的经历了第(1)~(7)步,这个解析过程叫做硬解析(Hard Parse)。 (8) QEP Execution:执行语句,生成结果。 性能微调-与Cursor有关的参数: OPNE_CURSORS :每个Session最多能够打开的Cursor数量,超过就会报ORA-1000错误; SESSION_CACHED_CURSORS:代表被缓存的SQL Cursors(减少解析); CURSOR_SHARING:定义Cursor共享的模式,包括:EXACT(精确).FORCE(强制).SIMILAR(类似)。 CURSOR_SPACE_FOR_TIME:缺省值为false,对于PARSE比较繁琐,SQL执行很频繁,共享池碎片较为严重的情况,建议不要使用。   聚簇因子: 高聚簇因子意味着索引访问效果不好,而低聚簇因子意味着访问效果好。 dba_indexes中的clustering_factor列反应了索引列的聚簇因子。   连接: NEST LOOP:两表地位不同,一个驱动表(driving table),一个为被驱动表(drived table),工作方式是以驱动表每遍历一行就对整个被驱动表遍历一次,最终驱动表遍历一次,被驱动表被遍历N次(N为驱动表的行数)。 SORT MERGE:两表地位相等,每个表都先行排序,排序后两表都需要遍历一次,主要开销在两表的排序上。(Oracle实现排序的算法是二叉树算法(Binary Insertion Tree))。 HASH JOIN:两表也有驱动表和被驱动表的关系,算法执行过程:准备阶段:对驱动表的连接字段进行哈希操作,产生一系列的Hash Bucket(哈希桶)。探测阶段:依次读取被驱动表的每条记录,并对记录的连接字段执行相同的哈希函数,根据结果到上一步产生的哈希桶中检查匹配的记录。   STATSPACK解决问题的流程: 在利用STATSPACK时期,DBA (1)首先,要有证据表明系统确实有问题,可能是用户抱怨等待时间变长,或者监控到CPU、IO突然负载增大。 (2)收集数据,诊断分析,初步估计发生问题的部分,性能通常会涉及很多组件(如CPU、IO、内存),每个部分都有可能是问题的瓶颈所在。 (3)针对不同的问题原因,确定相应的解决方案。 (4)尝试解决方案,通常一次尝试只针对一个组件,并观察调整后的效果。 (5)如果调整后没有效果,则说明原因定位错误,继续考虑其他问题和解决方案。 (6)如果调整后效果明显,就说明原因定位准确,根据原因进一步制定长期的解决方案。 (7)通常这个流程需要反复循环。 后续会继续添加;   点评:作者张晓明还有一本《大话Oracle RAC》的经典书籍,本人现在也在拜读,本书很适合一些平时没有注重细节知识点的求职朋友来突击一下Oracle基础知识。本书结构简单明了,知识点明细,需要慢慢品读,也有大量实验与理论相结合。

--------------------------------------------------------------------------------------------

版权所有,转载请注明作者及原文链接,否则追究法律责任!

QQ:      584307876

作者:    Seven

原文链接:  http://blog.csdn.net/sunjiapeng/article/details/8963713

邮箱:     seven_ginna@foxmail.com

转载于:https://www.cnblogs.com/seven-dba/archive/2013/05/23/4354915.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)