找工作笔试面试那些事儿(11)---数据库知识总结(2)范式

 一、相关概念和知识点

       1.数据依赖:反映一个关系内部属性与属性之间的约束关系,是现实世界属性间相互联系的抽象,属于数据内在的性质和语义的体现。
       2. 规范化理论:是用来设计良好的关系模式的基本理论。它通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。
       3. 函数依赖:简单地说,对于关系模式的两个属性子集X和Y,若X的任一取值能唯一确定Y的值,则称Y函数依赖于X,记作XY。
       4. 非平凡函数依赖:对于关系模式的两个属性子集X和Y,如果X→Y,但Y!⊆X,则称X→Y为非平凡函数依赖;如果X→Y,但Y⊆X,则称X→Y为非平凡函数依赖。
       5. 完全函数依赖:对于关系模式的两个属性子集X和Y,如果X→Y,并且对于X的任何一个真子集X',都没有X'→Y,则称Y对X完全函数依赖。
       6. 范式:指符合某一种级别的关系模式的集合。在设计关系数据库时,根据满足依赖关系要求的不同定义为不同的范式。
       7. 规范化:指将一个低一级范式的关系模式,通过模式分解转换为若干个高一级范式的关系模式的集合的过程。
       8. 1NF:若关系模式的所有属性都是不可分的基本数据项,则该关系模式属于1NF。
       9. 2NF:1NF关系模式如果同时满足每一个非主属性完全函数依赖于码,则该关系模式属于2NF。
       10. 3NF:若关系模式的每一个非主属性既不部分依赖于码也不传递依赖于码,则该关系模式属于3NF。
       11. BCNF:若一个关系模式的每一个决定因素都包含码,则该关系模式属于BCNF。
       12. 数据库设计:是指对于一个给定的应用环境,构造优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据操作要求。
       13. 数据库设计的6个基本步骤:需求分析,概念结构设计,逻辑结构设计,物理结构设计,数据库实施,数据库运行和维护
       14. 概念结构设计:指将需求分析得到的用户需求抽象为信息结构即概念模型的过程。也就是通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。
       15. 逻辑结构设计:将概念结构模型(基本E-R图)转换为某个DBMS产品所支持的数据模型相符合的逻辑结构,并对其进行优化。
       16. 物理结构设计:指为一个给定的逻辑数据模型选取一个最适合应用环境的物理结构的过程。包括设计数据库的存储结构与存取方法。
       17. 抽象:指对实际的人、物、事和概念进行人为处理,抽取所关心的共同特性,忽略非本质的细节,并把这些特性用各种概念精确地加以描述,这些概念组成了某种模型。

       18. 数据库设计必须遵循结构设计和行为设计相结合的原则。

       19. 数据字典主要包括数据项、数据结构、数据流、数据存储和处理过程五个部分。
       20. 三种常用抽象方法是分类、聚集和概括
       21. 局部 E-R 图之间的冲突主要表现在属性冲突、命名冲突和结构冲突三个方面。

       22. 数据库常用的存取方法包括索引方法、聚簇方法和 HASH方法三种。
       23. 确定数据存放位置和存储结构需要考虑的因素主要有: 存取时间、 存储空间利用率和维护代价等。

二、细说数据库三范式

2.1 第一范式(1NF)无重复的列

       第一范式(1NF)中数据库表的每一列都是不可分割的基本数据项
       同一列中不能有多个值
       即实体中的某个属性不能有多个值或者不能有重复的属性。
       简而言之,第一范式就是无重复的列。

       在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。

2.2 第二范式(2NF)属性完全依赖于主键[消除部分子函数依赖]

      满足第二范式(2NF)必须先满足第一范式(1NF)。

      第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。

      为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。 
      第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是属性完全依赖于主键。
2.3 第三范式(3NF)属性不依赖于其它非主属性[消除传递依赖]

      满足第三范式(3NF)必须先满足第二范式(2NF)。

      简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

      例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。

2.4 具体实例剖析

      下面列举一个学校的学生系统的实例,以示几个范式的应用。

       在设计数据库表结构之前,我们先确定一下要设计的内容包括那些。学号、学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话等信息。为了简单我们暂时只考虑这些字段信息。我们对于这些信息,说关心的问题有如下几个方面。

       1)学生有那些基本信息 
       2)学生选了那些课,成绩是什么 
       3)每个课的学分是多少 
       4)学生属于那个系,系的基本信息是什么。

       首先第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。在当前的任何关系数据库管理系统(DBMS)中,不允许你把数据库表的一列再分成二列或多列,因此做出的都是符合第一范式的数据库。 

       我们再考虑第二范式,把所有这些信息放到一个表中(学号,学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话)下面存在如下的依赖关系。 
       1)(学号)→ (姓名, 年龄,性别,系别,系办地址、系办电话) 
       2) (课程名称) → (学分) 
       3)(学号,课程)→ (学科成绩)

根据依赖关系我们可以把选课关系表SelectCourse改为如下三个表: 

       学生:Student(学号,姓名, 年龄,性别,系别,系办地址、系办电话); 
       课程:Course(课程名称, 学分); 
       选课关系:SelectCourse(学号, 课程名称, 成绩)。

       事实上,对照第二范式的要求,这就是满足第二范式的数据库表,若不满足第二范式,会产生如下问题 
数据冗余: 同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。

更新异常: 1)若调整了某门课程的学分,数据表中所有行的"学分"值都要更新,否则会出现同一门课程学分不同的情况。 
                 2)假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有"学号"关键字,课程名称和学分也无法记录入数据库。

删除异常 : 假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。

       我们再考虑如何将其改成满足第三范式的数据库表,接着看上面的学生表Student(学号,姓名, 年龄,性别,系别,系办地址、系办电话),关键字为单一关键字"学号",因为存在如下决定关系:

      (学号)→ (姓名, 年龄,性别,系别,系办地址、系办电话) 
但是还存在下面的决定关系 
       (学号) → (所在学院)→(学院地点, 学院电话) 
        即存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递函数依赖。 
       它也会存在数据冗余、更新异常、插入异常和删除异常的情况(这里就不具体分析了,参照第二范式中的分析)。根据第三范式把学生关系表分为如下两个表就可以满足第三范式了:

       学生:(学号, 姓名, 年龄, 性别,系别); 
       系别:(系别, 系办地址、系办电话)。





已标记关键词 清除标记
CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 Oracle DBA突击:帮你赢得一份DBA职位 基本信息 作者: 张晓明 丛书名: IT名人堂 出版社:人民邮电出版社 ISBN:9787115215253 上架时间:2009-11-19 出版日期:2009 年11月 开本:16开 页码:504 版次:1-1 编辑推荐    10年从业生涯中无数次被面试面试他人的经验总结    告诉你哪些技术是重要的,是面试官最看重的    获取稳定的DBA职位的必读宝典 内容简介    本书以oracle 10g为基础,由浅入深、从易到难,详细介绍了dba职位所要求的知识结构和实战技能。第1章至第4章是基础篇,包括数据库建模、oracle体系结构、网络结构、备份恢复和使用oem,这些对于刚刚从事dba或者试图转做dba的朋友都是必备知识。第5章至第9章是中级篇,专门讨论性能调整,包括性能优化原理、oracle性能调整发展历程、awr、ash、addm、auto sql tunning等最新的助手工具,并通过大量实例展示技术的综合应用。第10章至第13章是高级篇,主要面向高级读者,高级dba通常要解决架构层面的问题,因此对于这部分读者来说,最重要的是要扩展眼界,能够掌握如何选择最合适的工具而不是最贵的工具。为了跳出单一产品的限制,本书选择了异构互联和安全这两个主题来帮助读者扩展思路。.    本书作者是oracle资深dba,本书不仅融入了作者十年的实战心得和工作经验,还提供了来自于工作现场的大量实例,具有很强的可操作性。..    本书可以作为数据库开发人员、数据库管理员、数据库初学者及其他数据库从业人员的工作参考手册,也可以作为各大中专院校相关专业师生的参考用书和相关培训机构的培训教材。 作译者   张晓明,Oracle OCP,现用网名“石头狗”,名称来自于《和佛陀赏花去》中的故事;狗会因为人随手丢出的一个东西而追逐,可能是一个骨头、一块肉、一个眼神,甚至是一个石头,警示一定要看清自己在追逐的东西。 目录 封面 -17 扉页 -16 版权 -15 序 -14 前言 -12 自我测试 -7 目录 -4 第一部分 基础篇 1 第1章 数据建模 2 1.1 数据建模 3 1.1.1 创建逻辑模型 3 1.1.2 创建物理模型 7 1.2 规范化 12 1.2.1 1NF 13 1.2.2 2NF 14 1.2.3 3NF 15 1.3 如何表示树形结构 16 1.3.1 什么是树形结构 16 1.3.2 邻接模型 19 1.3.3 物化路径模型 26 1.3.4 嵌套集合模型 28 1.4 小结 34 第2章 Oracle体系架构 35 2.1 Oracle的网络配置 35 2.1.1 Oracle的网络架构 36 2.1.2 客户端安装 38 2.1.3 服务器端监听器配置 39 2.1.4 客户端配置 44 2.2 Oracle 10g架构 47 2.3 数据库 49 2.3.1 物理结构 49 2.3.2 OMF 55 2.3.3 逻辑结构 59 2.4 空间管理 70 2.4.1 段空间管理 71 2.4.2 Extent空间管理 74 2.5 实例 74 2.5.1 进程 75 2.5.2 后台进程 77 2.5.3 内存结构 83 2.5.4 PGA 87 2.6 未尽话题 88 第3章 备份恢复 89 3.1 归档模式和非归档模式 90 3.1.1 归档模式的优缺点 90 3.1.2 非归档模式的优缺点 91 3.1.3 非归档模式转换成归档模式 91 3.2 备份概述 92 3.3 物理备份 92 3.3.1 冷备份 92 3.3.2 热备份 93 3.3.3 RMAN备份 95 3.4 备份前的环境配置 98 3.4.1 连接到数据库 98 3.4.2 查看现有配置 99 3.4.3 配置控制文件自动备份 101 3.4.4 配置备份文件格式 101 3.4.5 配置备份保留策略 102 3.4.6 与保留策略相关的其他操作 104 3.4.7 删除配置 106 3.5 完全备份和增量备份 106 3.5.1 完全备份 106 3.5.2 增量备份 108 3.6 恢复 111 3.7 日志 112 3.7.1 改动向量(Change Vector) 112 3.7.2 Redo记录 112 3.7.3 检查点 115 3.7.4 SCN号 116 3.7.5 数据库恢复 118 3.7.6 恢复过程 120 3.8 Oracle MAA介绍 123 3.9 小结 125 第4章 OEM 126 4.1 Database Control 127 4.1.1 配置Database Control 127 4.1.2 Database Control的目录结构 129 4.1.3 手工配置Database Control 130 4.1.4 用Database Controle管理多个数据库 133 4.2 Grid Control架构 134 4.2.1 Grid Control Console 135 4.2.2 Oracle Management Agent 136 4.2.3 Oracle Management Service 136 4.2.4 Management Repository 137 4.2.5 OEM的原理和工作方式 137 4.2.6 Agent的工作方式 137 4.3 部署OEM Grid Control 138 4.3.1 部署OEM 139 4.3.2 OracleAS、OMS、OC4J的关系 145 4.3.3 OEM的目录结构 147 4.4 部署Agent 148 4.4.1 全新安装(Fresh安装) 148 4.4.2 使用命令行克隆方法部署Agent 152 4.4.3 部署Agent后DBCA的变化 157 4.4.4 emwd脚本 159 4.4.5 磁盘空间限制 159 4.5 OEM的维护工具 159 4.5.1 维护OMS 160 4.5.2 维护Agent 165 4.6 修改配置 166 4.6.1 修改Agent的监听端口 166 4.6.2 配置Agent使用新的OMS 166 4.6.3 修改OMS的监听端口 167 4.6.4 一次Trouble Shooting 167 4.7 小结 173 第二部分 中级篇 175 第5章 SQL优化原理 176 5.1 PGA 176 5.1.1 Session Area 177 5.1.2 Private SQL Area 177 5.2 SQL语句的执行过程 179 5.2.1 Parent Cursor和Child Cursor 180 5.2.2 V$SQL和V$SQLAREA的区别 182 5.2.3 与Cursor有关的参数 182 5.3 执行计划 185 5.3.1 Explain Plan For ... 185 5.3.2 SQL Trace和10046事件 186 5.3.3 从Library Cache中获取 190 5.4 如何阅读执行计划 198 5.4.1 SQL概要信息 199 5.4.2 执行计划 199 5.4.3 Query Block 200 5.4.4 数据过滤 208 5.4.5 列投影 209 5.5 小结 209 第6章 访问路径和连接 210 6.1 QUBE模型 210 6.2 单表访问——全表扫描还是索引 212 6.2.1 谓词(Predicate) 212 6.2.2 Selectivity和Cardinality 213 6.2.3 全表扫描 213 6.2.4 两种方式访问的成本比较 214 6.2.5 聚簇因子 215 6.3 连接 216 6.3.1 NEST LOOP 216 6.3.2 SORT MERGE 217 6.3.3 HASH JOIN 219 6.3.4 几种算法的比较 220 6.4 半连接 221 6.4.1 测试环境 221 6.4.2 合并与展开 222 6.4.3 (NOT)IN和(NOT)EXISTS的哲学思想 224 6.4.4 Exists和In 224 6.4.5 Not Exists 228 6.4.6 Not In 229 6.5 小结 234 第7章 并行操作 235 7.1 并行架构 235 7.1.1 进程 236 7.1.2 相关参数 239 7.2 启用并行处理 244 7.2.1 对象级 244 7.2.2 语句级 245 7.2.3 会话级 246 7.3 解读执行计划 246 7.4 等待事件 250 7.5 小结 250 第8章 自动管理和性能指标 252 8.1 Oracle系统调整技术发展史 252 8.1.1 为什么要系统调整 253 8.1.2 方法论——从命中率到等待事件 253 8.1.3 工具:从STATSPACK到AWR 255 8.2 Oracle 10g的自动管理框架 257 8.2.1 AWR概述 258 8.2.2 ADDM概述 258 8.3 负载数据自动收集(AWR) 260 8.3.1 STATISTICS_LEVEL参数 261 8.3.2 AWR的收集机制 262 8.3.3 配置AWR 262 8.3.4 生成AWR报告 264 8.3.5 AWR的补充——ASH 267 8.4 对象信息的自动收集 272 8.4.1 对象信息的收集机制 275 8.4.2 Table Monitoring机制 278 8.4.3 动态收集对象信息 280 8.4.4 统计信息历史 281 8.4.5 导入导出统计信息 283 8.4.6 锁定统计信息 285 8.5 操作系统统计数据收集 287 8.5.1 无负载模式 289 8.5.2 负载模式数据 289 8.6 学会阅读原始数据 291 8.7 性能统计数据(Performance Statistics) 292 8.8 Oracle等待事件接口(OWI) 296 8.8.1 什么是等待事件 296 8.8.2 常见事件 297 8.8.3 OWI视图 298 8.9 Metric 305 8.10 Time Model 311 8.11 小结 318 第9章 自动诊断和顾问 319 9.1 ADDM 319 9.2 Auto SQL Tunning 323 9.2.1 ATO 323 9.2.2 Auto SQL Tunning架构 324 9.2.3 如何使用Automatic SQL Tunning 327 9.2.4 解读Auto SQL Tunning报告内容 330 9.3 其他自动管理特性 333 9.3.1 ASSM 333 9.3.2 顾问功能 337 9.3.3 Resumable Space Allocation 352 9.4 小结 354 第三部分 高级篇 355 第10章 Oracle的异构服务 356 10.1 异构服务的架构 356 10.2 Agent的分类 357 10.2.1 什么是ODBC 358 10.2.2 ODBC的组件 358 10.3 配置到MySQL的普通连接 359 10.3.1 环境介绍 360 10.3.2 MySQL服务器的配置 360 10.3.3 Oracle服务器的配置 371 10.4 配置到SQL Server 2000的普通连接 373 10.4.1 Windows服务器的配置 373 10.4.2 Linux服务器上的配置 374 10.5 配置到SQL Server 2000的透明网管连接 375 10.5.1 SQL Server服务器的配置 375 10.5.2 Linux服务器的配置 377 10.6 透明网关和普通连接的对比 377 10.6.1 普通连接不支持分布式事务 378 10.6.2 透明网关支持分布式事务 378 10.7 小结 379 第11章 数据安全 380 11.1 安全问题概述 382 11.2 Oracle的网络加密:SSL和PKI 383 11.2.1 加密算法:保证数据机密性 384 11.2.2 数字签名:保证数据完整性 385 11.2.3 证书保证数据不可抵赖性 386 11.2.4 可信CA和证书注销表 388 11.2.5 SSL 388 11.2.6 配置SSL 389 11.2.7 Secure External Password Store 405 11.3 透明数据加密 407 11.3.1 配置TDE 408 11.3.2 验证TDE 412 11.3.3 TDE的性能 417 11.4 小结 421 第12章 限制用户行为 423 12.1 IP地址限制 423 12.2 用户验证 424 12.3 利用登录触发器 425 12.4 数据访问控制 426 12.5 粗粒度数据访问控制:权限和角色 426 12.5.1 对象权限 427 12.5.2 系统权限 427 12.5.3 WITH ADMIN和WITH GRANT的比较 428 12.5.4 角色 430 12.5.5 判断权限来源 431 12.5.6 PRODUCT_USER_PROFILE 435 12.6 细粒度访问控制(FGAC) 436 12.6.1 背景知识 436 12.6.2 自主访问控制 437 12.6.3 强制访问控制 437 12.6.4 现实问题 438 12.7 视图 439 12.8 VPD 439 12.8.1 快速体验 440 12.8.2 深入RLS 442 12.8.3 敏感列的VPD 456 12.9 Oracle标签安全(OLS) 462 12.9.1 安装OLS 464 12.9.2 OLS的标签 466 12.9.3 实施OLS 467 12.10 小结 480 第13章 审计 483 13.1 审计的作用 483 13.2 Oracle的审计功能 484 13.2.1 标准审计 484 13.2.2 细粒度审计 495 13.2.3 FGA与标准审计 504 13.3 小结 504 前言   Oracle DBA炙手可热.   近年来,Oracle DBA职位在IT行业越来越炙手可热,造成这种状况的原因有多方面。在这里仅列举两个最主要的原因,一方面,随着近年来企业信息化进程的深入,企业里各种系统的数据量持续上升,这一切给数据的管理、维护和安全带来了机会和挑战,另一方面,企业间同质化竞争的加剧,也迫使企业加强对于数据的深加工,带动了数据挖掘和商业智能应用的蓬勃发展。数据已经成为企业仅次于人员的最重要资产。下图是2007年、2008年对企业数据量的调查结果(数据来源ITPUB)。这个调查结果显示,2008年年底,超过百万级数据量的企业已经占到65.4%,超过千万级的超过37.1%,而仅仅一年中,超过亿级数据量的企业比2007年增长了5个百分点。   从另一项“每个DBA管理的数据库数量”调查结果(如下图)也可以看到DBA对于企业的重要性(数据来源于ITPUB),约有75%的DBA需要管理5个以上的数据库,其中28.7%的DBA需要管理超过30个数据库。读者可能对这个数字表示惊讶,但事实确实如此。以我本人所在公司为例,我公司从事全国的短信业务,以每省至少两个数据库计算,仅处于生产线的数据库数量就已将近70个,再加上开发数据库、测试数据库,我所领导的DBA团队总共管理的数据库将近80个。这个数量还仅仅是Oracle数据库的数量,还需要加上等量的MySQL数据库,而团队平均DBA数量只有两三个人。   企业数据量的激增有两个结果出现,首先是数据库管理员作为一个专业职位开始受到重视,而在早年间,企业通常不会设置专门的数据库管理员职位,即使有也多是由开发人员或者网管人员兼职管理。   其次,DBA引起人们注意的原因也和目前就业难有关。时至今日,I丁行业仍然是最为吸引毕业生的一个重要行业。虽然IT行业本身也在迅速扩张,对人才需求很旺盛,但是,IT也是中国市场化最充分的行业之一,绝大部分IT企业都要在残酷市场竞争中生存,市场逼着企业将养“闲人”的可能性降至最低。由于每年有大量的毕业生涌入职场,粥少僧多,加上从2008年开始席卷全球的经济危机对就业形势更是雪上加霜。   一方面人才越来越多,另一方面企业对于人才的需求也变得越来越“务实”。企业希望同时拥有扎实的专业理论知识、较强的动手能力、行业经验以及对新知识、新技术新产品的开发能力的综合人才。所以,许多用人单位更喜欢“用熟不用生”,宁可花较多的薪水招一个熟练工,也不愿给初出茅庐的新手机会,双方的博弈就这么持续着……   而在众多IT职位中,OracleDBA以其相对稳定、高薪的职业特点越来越受到IT技术人员的青睐,吸引了越来越多的人员开始进入或者正尝试进入这个领域。按照目前的市场行情(根据2009年北京、上海、杭州等大城市的大致数据),在Oracle数据库从业领域中,初级者的薪水可能在3000元/月左右,中级的DBA薪水可能在5000~7000元/月,而高级DBA的薪水范围可能在8000—20000元/月,至为出色的或者占有重要位置的薪水可能在30000—50000元/月左右(当然很多优秀的公司还会有可观的期权收益和其他奖励),以上数据仅供参考。   DBA市场的繁荣虽然带来了大量的就业机会,但挑战也如影随形。直接结果就是技术门槛越来越高,再加上DBA职位本身对经验要求很高,很多有志青年在初试就被斩落马下,虽然不至于抱憾终身,但也让人感到惋惜。本书试图从面试的角度,对Oracle最重要的内容加以提炼,并综合数年来在这个领域的经验,帮助读者在最短的时间内跨越面试门槛,早日进入DBA行业。   现在市场上、网上随处可见各种各样的Oracle学习资源,从菜鸟级的入门读物到骨灰级I的专题研究应有尽有,和作者当年学习Oracle时的“艰苦贫瘠”环境有天壤之别。从技术来,看,这些书籍内容不可谓不翔实,而且还融合了很多真知灼见和宝贵经验,实属不易。但是Oracle数据库并不能简单地当作一门学科来对待,它包涵了很多人的因素。   读者到底需要什么?当然从书籍中获取知识,能够解决工作中的实际问题是一方面,但这种需要的前提是读者已经有一份稳定的DBA工作,不再为温饱问题揪心。而更多读者是希望通过阅读能够进入这个领域,获得一个职位或者实现职位的升迁。对于这部分读者,更关注的是如何通过学习实现这个目标,或者缩短实现目标的时间。所谓学无止境,一个Oracle数据库已足够研究一生了。但是机会有限,面对心仪的职位,如果确实能力达不到还则罢了,如果有实力却在短短十几分钟的面试中折戟,就实在让人蹉叹了。   学习无捷径,面试有技巧。这是作者在10年的从业生涯中无数次被面试面试别人经历总结。本书试图以这些经验为基础,告诉读者哪些技术是最重要的,是面试官最看重的。如果套用2/8原则,本书的内容基本覆盖了OracleDBA工作的80%内容,而剩下的20%就要靠读者在工作中的经验积累和技巧提炼。   本书内容与结构   本书的内容分为3个部分:基础篇、中级篇和高级篇。   基础篇。   首先介绍了范式设计和SQL,作为有志于从事Oracle DBA的读者来说,关系数据库理论是必备知识,本书也假设读者具备了这个基础。和其他编程语言(比如C、Java)比起来,SQL语言是非常简单的,因为简单所以最容易被忽视。这一章并不会详细介绍关系数据库的基础理论:相反,这一章会重点介绍几个最经典的SQL问题,也是面试时最容易栽跟头的问题。   接下来介绍了Oracle体系结构、备份恢复、OEM的配置和使用。   Oracle体系结构是Oracle最基础的知识,也是面试时考官最关注的问题。如果不了解Oracle体系结构就说管理数据库纯属妄谈,尤其对于初次接触Oracle的读者,建议反复阅读这部分内容。   备份恢复是OracleDBA工作的重中之重,就像血压计、听诊器对于医生,属于最基本的技能。OracleDBA需要两大技能,备份恢复和性能优化,但二者的重要程度不可同日而语。比较起来,一个性能再差的数据库毕竟也还是可以使用和提供服务的,从某种程度来说,企业还是能够忍受的。解决性能问题的时间相对来说也是比较充裕的,如果实在不会解决,最起码还可以申请硬件升级。但一旦数据库因为故障宕掉,无法提供服务,这是企业不能承受之重。   OEM是Oracle提供的一个管理平台,其好处是通过鼠标点击就可以完成所有的管理工作,不再需要记忆大量的命令。并且Oracle 10g的OEM确实是一个“脱胎换骨”的产品,这一点从Oracle书籍中可见一斑,Oracle 10g以前OEM是一个基于Java的工具,丑陋的界面和缓慢的性能使其饱受责备,也很少会有文档、资料会介绍Oracle 9 OEM。但是Oraclelog重新开发了OEM,放弃了Java界面,转而使用Web界面,其用户亲和力大大增强,因此在Oraclelog的文档和资料中会经常提及。但是OEM的部署伸缩性很强,本书把OEM单独作为一章,详细介绍了各种部署方式。对于初学者来说,这是一个很好的辅助工具,可以大大降低日常工作难度。..   中级篇。 .  中级篇主要针对性能调整。这是一个“望而生畏”的主题,我本人在从事DBA之初也是“高山仰止,心向往之”。细心的读者可以发现,本书甚至没有讲解如何安装Oracle软件和创建数据库,因为就个人感觉,安装部署是最没有技术含量的工作(包括RAC环境部署),虽然在Linux、UNIX上部署Oracle貌似“很强很神秘”,只要做过一次就会发现其实很简单。因为在什么时候该做什么事,Oracle已经规定了详尽的流程,DBA只需也只能照着文档按部就班地操作,即便发挥也无非是安装个RPM包之类补缺拾漏的工作。   性能调整需要的知识面很广,从操作系统到应用程序再到数据库,从网络到存储到主机。从广度到深度可说是随意搭配、丰俭由人。而且性能问题通常在大数据量、高并发环境下才会偶尔出现,仅靠单机很难模拟出来,即便读者无法获得实战环境,基础知识还是要知道的。其实在面试的时候,考官并不看重聘者有什么技巧,反而更看重的是方法,是否有一个清晰的思路每步该干什么,而不是碰运气似的乱撞。方法无所谓好坏,只要能够解决问题就好,最怕的是没有方法。因此对于初学者来说,重要的任务是形成自己的方法论,不要过度关注技巧。   这一部分按照“性能理论十收集数据今定位问题十解决问题”的思路组织了内容, 自动管理着重介绍了Oracle 10g在智能管理方面的增强。Oracle内核从8就基本稳定下来了,比如事务管理、并发控制机制这些最核心的机制在9、10版本中就没有变化,变化的只是外围部分,比如维护工具的丰富、自我管理的增强。其实这也是很好理解的,Oracle数据库只是基于关系数据库理论的一个商业产品,并没有超越关系理论之外。   自从1969年IBM的E.F.Codd博士首次提出关系数据库理论至今,40年间,关系理论发展并没有出现质的变化,我们又期待Oracle做些什么呢?其实不仅Oracle,包括DB2、SQLServer都开始在产品智能管理、降低企业成本等方面动脑筋。Oracle 10g的智能管理基础设施包括四大套件:自动工作负载信息库(AWR)、自动诊断任务基础框架、服务器告警机制、顾问框架。Oracle的智能管理大大降低了管理成本,作为DBA,只有了解其运行机制,才有可能比Oracle自己做得更好。   Oracle 10g的自动管理功能相当强大,基本上能实现全部自动化了,比如SGA、PGA,DBA手动调整各种参数的时代已经过去,剩下能让DBA发挥的,通常也是最容易见效的就剩SQL调整了。Oracle的自动管理基础设施收集了足够多的数据,“矿山已经炸开,就看你能不能发现金子”,善用这些工具和指标就可以快速追踪到问题SQL语句。这——篇就专门介绍了SQL执行的各种细节以及调整之道。   高级篇。   这里的所谓高级并不是指技术上如何艰深,而是指一个高级DBA或者架构师要能够从更高的视角来认识企业环境,要能跳出产品本身的束缚,不被厂商牵着鼻子走,要知道在不同需求下的取舍。因此高级篇选择了最具有代表性的两个问题——安全和审计、异构互联服务,这几章虽然着眼于Oracle的某个功能选项,但却试图能够跳出Oracle产品的局限,帮助读者扩展视野,能够从架构层面来对待技术。   比如对于安全,所有的系统都会有安全需求,并且这些需求也完全相同,无非就是用户验证、权限控制,再加上数据三性:机密性、完整性和不可抵赖性。早在Oracle出现之前,这些问题就已经存在了,并且早有“业内标准”的解决方案。因此在遇到Oracle的安全选项时,千万不要把它当“私房菜”看待,要认识到这不过是Oracle把“业界标准”方案包装在自己的产品中而已。如果能够认识到这个层次,你就会发现许多技术都是相通的,学习起来也会非常轻松,否则书越读越厚,知识永远都是新的,学习就是痛苦的过程。比如针对安全的PKI技术在Windows中有、在Linux中有、在Java中有,在Oracle中同样也有。你只要学过一次,就可以在所有产品中重复应用。   再比如,很多大型的电子商务网站架构中会有多种数据库同时存在,典型的就是Oracle+MySQL,Oracle用来支持电子交易的事务需要,而MySQL用来支持Web页面的展示。这种框架综合考虑了成本和收益,综合了两种产品的优点、规避了缺点。如果没有足够的认识,是没有办法理解这种框架的。   本书声明   (1)除了特别声明外,本书实例中使用的操作系统是RedHatAS4.0Update4,使用的数据库是Oracle 10 R2版。   (2)部分工具软件的下载地址。   Oracle Database   http://www.oracle.com/technology/global/cn/software/index.html   Red Hat Advanced Server   https://www.redhat.com/apps/download   (3)作者在编写本书过程中,以“够用就好”为原则,尽量覆盖到所有最重要的知识点。但所有观点都出自作者的个人见解,疏漏、错误之处在所难免,欢迎大家指正。读者如果有好的建议或者学习本书过程中遇到问题,欢迎到作者的博客(http://space.itpub.net/75321)留言进行探讨,或者发送邮件到mingyan926@hotmail.com,希望能够与大家一起交流和进步。   感谢   本书在出版的过程中得到了人民邮电出版社的大力支持,在此致以深深的谢意!感谢刘斌先生多年宋的扶携,感谢芮玉奎先生的帮助,感谢挚友焦亚明、北京大学刘铠维、Oracle公司的rebeca和bryanxu的支持,感谢爱康网的cindy和清华大学的焦丽静给了我许多内容上的建议,还要感谢许多朋友对我的帮助和鼓励,比如sunadmin、oolalal985、xiong_qiang、zgywyq、zigmer、sjq88881,你们是我进步的源泉。最后,把这本书献给我挚爱的家人。   在看得见的地方学习知识,在看不到的地方学习智慧。同时也祝愿大家在Oracle DBA的道路上顺风顺水。...   编者   2009年10月    序言   本书的作者晓明,是一位年轻人。我见过不少年轻人,有亲戚朋友家的孩子,有公司单位里的下属,更多的还是萍水相逢的点头之交。他们中,有许多都具备我们一般人眼里定义的“优秀”:凭借过硬的专业素质干着一个不错的工作,拿着一份不低的收入,是白领,是主管,是项目经理……跟这些年轻人打交道,看着他们衣着光鲜,说话左右逢源,有着我们这一代年轻时不多的“老练”。事儿来了,他们叔叔伯伯的叫着怪亲热,事儿走了,他们也跟着走了。所以对于很多年轻人,我印象不深,然而本书的作者晓明,却是一位我能记得住的年轻人。说来寻常,与他见面,本是碍着朋友的情面,帮他觅一份工作,朋友说他勤奋、踏实、能干。印象中晓明话不多,但喝酒很实在。只可惜由于机缘巧合,晓明的工作我虽然上心,到底也没帮上忙,还是凭他自己的本事挣下了一份工作。直到现在,我看见晓明仍觉的欠他点什么。.   后来几年,每逢节假日,晓明总来看看我,来了兴致,我就把他留下陪我喝几盅。照例是我说的多,他喝的多。喝的到位了,他也接过话茬儿。寥寥的几句,却能品出他的性情,觉出他的踏实。现在有太多年轻人,想去折射一个既有的耀眼光环,而非花一点点时间研磨自己淡淡的韵彩了。   最近一次见面,晓明已成了部门的主管,带领着一个团队,开始独当一面,开始从Interviewee变成Interviewer。我问起他今年就业的形势,他说竞争很激烈。有一些简历很漂亮,笔试很优秀的应试者往往在面试中难以脱颖而出,遗憾离去。他说,能看得出来,这些,年轻人肚里有货,有真本事,可就是缺乏些面试技巧经验,到头来,也成了茶壶里煮饺子。他说,有个想法,把他这个领域的专业知识面试应用的角度加以梳理,出本书,告诉年轻人应该怎么做,看着年轻人走弯路,他心里着急。..   我知道,这是晓明的善良在作祟,他大概有了不能已于言的冲动。当时他偶然的一句,我还并未在意,只是表示支持,鼓励他做下去。不想今年九月,初稿已成。他高高兴兴地拿来请我指教。我是个地地道道的计算机门外汉,专业术语一概不知,却也从中读出了晓明的真诚。他是在把自己几年摸爬滚打里跌出来的经验拿来与人分享。我知道这对一个技术人员来说意味着什么。我想告诉读到这本书的年轻人,这本书其实更像一张地图,拿着它,我不敢保证你就到了捷径,但最起码,你少走了很多弯路。   书稿最终付梓之前,晓明央我给他写序。我建议他个本专业领域里的专家,这样有分量,书的销路也会好些。他说:“卖的是自己的书,不是专家的签名。”听他这样讲,我也就不再推辞。晓明用心,写了本书,我就用笔,写写他这个人吧。算是还当年欠他的那一顿饭。   是为序。...   2009年9月26日灯下   
相关推荐
<p> <span style="color:#337FE5;"><strong>【为什么还需要学习C++?】</strong></span> </p> <p style="margin-left:0cm;"> 你是否接触很多语言,但从来没有了解过编程语言的本质? </p> <p style="margin-left:0cm;text-align:start;"> 你是否想成为一名资深开发人员,想开发别人做不了的高性能程序? </p> <p style="margin-left:0cm;text-align:start;"> 你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹? </p> <p style="margin-left:0cm;text-align:start;">   </p> <p style="margin-left:0cm;text-align:start;"> 那么C++就是你个人能力提升,职业之路进阶的不二之选。 </p> <p style="margin-left:0cm;text-align:start;"> <br /> </p> <p style="margin-left:0cm;text-align:start;"> <br /> </p> <p style="margin-left:0cm;"> <strong><span style="color:#337FE5;">【课程特色】</span></strong> </p> <p style="margin-left:0cm;text-align:start;"> 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准库全部知识体系。 </p> <p style="margin-left:0cm;text-align:start;"> 2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。 </p> <p style="margin-left:0cm;text-align:start;"> 3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。 </p> <p style="margin-left:0cm;text-align:start;"> <br /> </p> <p class="ql-long-24357476"> <span style="color:#337FE5;"><strong>【学完后我将达到什么水平?】</strong></span> </p> <p class="ql-long-24357476"> 1.对C++的各个知识能够熟练配置、开发、部署; </p> <p class="ql-long-24357476"> 2.吊打一切关于C++的笔试面试题; </p> <p class="ql-long-24357476"> 3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。 </p> <p class="MsoNoSpacing" style="margin-left:18pt;"> <br /> </p> <div> <br /> </div> <p> <br /> </p> <p style="margin-left:0cm;text-align:start;"> <span style="color:#337FE5;"><strong>【面向人群】</strong></span> </p> <p style="margin-left:0cm;text-align:start;"> <span style="color:#222226;font-family:PingFangSC-Regular, "font-size:14px;background-color:#FFFFFF;">1.希望一站式快速入门的C++初学者;</span> </p> <p style="margin-left:0cm;text-align:start;"> <span style="color:#222226;font-family:PingFangSC-Regular, "font-size:14px;background-color:#FFFFFF;">2.希望快速学习 C++、掌握编程要义、修炼内功的开发者;</span> </p> <p style="margin-left:0cm;text-align:start;"> <span style="color:#222226;font-family:PingFangSC-Regular, "font-size:14px;background-color:#FFFFFF;">3.有志于挑战更高级的开发项目,成为资深开发的工程师。</span> </p> <p style="margin-left:0cm;text-align:start;"> <br /> </p> <p> <br /> </p> <p> <span style="color:#337FE5;"><strong>【课程设计】</strong></span> </p> <p> 本课程包含3大模块 </p> <p> <strong>基础篇</strong><br /> 本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。 </p> <p> <br /> <strong>进阶篇</strong><br /> 本篇主要讲解编程中常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。 </p> <p> <br /> <strong>提升篇:</strong><br /> 本篇可以帮助学员更加高效的进行c++开发,其中包含类型转换、文件操作、异常处理、代码重用等内容。 </p> <p> <img src="https://img-bss.csdnimg.cn/202007091130239667.png" alt="" /> </p>
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页