篇 数据库运维篇 第1章 数据库安装配置 1.1 安装前的准备 1 1.2 安装数据库软件 5 1.2.1方法1:OUI安装 6 1.2.2方法2:静默安装 8 1.2.3方法3:克隆安装 11 1.2.4诊断案例:克隆安装后无法登录的问题 13 1.3 创建/删除数据库 16 1.3.1方法1:DBCA图形建库 16 1.3.2方法2:手工建库 18 1.3.3方法3:DBCA静默建库 22 1.3.4方法4:OMF建库 22 1.3.5诊断案例:create database语句在10g、11g中的不同 23 1.3.6创建数据库后的补充工作 26 1.3.7删除数据库的步骤 29 1.4 关于SYSDBA、SYSOPER、DBA的区别和联系 29 第2章 常用工具和问题分析 2.1SQL*Plus使用及常见问题 34 2.1.1SQL*Plus使用细则 34 2.1.2SQL*Plus无法启动的常见原因 41 特殊问题:乱码导致的SQL*Plus无法启动的问题 43 特殊问题:使用strace诊断奇怪的SQL*Plus登录问题 44 2.2 解析exp/imp及常见问题 47 2.2.1exp/imp使用场景及示例 47 2.2.2exp/imp使用常见问题 50 诊断案例:生产系统exp无法使用的紧急诊断和修复 55 诊断案例:外部表的导入导出问题 57 诊断案例:IMP-00013 问题及解决方法 58 诊断案例:使用strace分析exp中buffer设置的奇怪问题 60 经验分享:你可能不了解的dump文件 63 2.3 解析Datapump及常见问题 66 2.3.1Datapump使用场景及示例 66 2.3.3只言片语分析Datapump的工作原理 68 诊断案例:impdp异常中断导致的问题 70 诊断案例:使用impdp选项不当导致的数据丢失 73 第3章 服务连接配置 3.1 配置与客户端配置简介76 3.2 网络服务配置 78 3.2.1网络配置细则与实践 78 诊断案例:Session跟踪失效的问题和原因 82 3.2.2配置文件格式探究——一个空格的威力 84 3.2.3RAC中的TAF的配置 88 3.2.4RAC中的SCAN的配置 90 3.2.5通过单例模式模拟RAC连接 93 3.3 器无法启动的几个原因94 诊断案例:使用strace分析TNS-12543的案例 96 第4章 数据库启/停和宕机问题 4.1 数据库启停的问题分析 99 4.2 数据库无法启动案例 100 诊断案例:数据库参数设置不当导致无法启动的问题100 诊断案例:服务器增加内存后无法重启数据库的问题及解决方案 102 诊断案例:数据库shutdown之后无法启动的问题 103 诊断案例:RAC节点无法启动的ORA-29702问题及分析 105 诊断案例:连续出现的RAC节点问题 108 4.3 数据库无法登录问题分析110 4.4 数据库无法登录案例 111 诊断案例:归档空间不足导致的数据库无法登录问题 111 诊断案例:Session Leak导致的数据库无法登录问题 115 诊断案例:undo缺失导致的数据库无法登录问题 118 4.5 数据库宕机问题和原因分析119 4.6 数据库宕机问题案例 119 诊断案例:一条SQL语句导致的数据库宕机问题及分析 119 诊断案例:存储导致的数据库宕机问题及分析 121 诊断案例:I/O问题导致的数据库突然宕机的问题及分析 124 诊断案例:数据库导致突然宕机的问题及解决 126 第5章 容灾与备份恢复 5.1 备份恢复应用及实践 132 5.1.1归档模式下的四种完全恢复场景 132 5.1.2RMAN中三个不完全恢复场景 137 实验1:使用句柄实现特定场景的无备份恢复 141 实验2:关于DUAL表的破坏性测试 145 5.2 闪回应用及实践 149 5.2.1关于delete、drop、truncate异同和无备份恢复场景 149 5.2.2使用闪回查询备份数据 152 5.2.3使用Flashback Query巧妙抽取指定数据 154 实战案例:巧用Flashback Database实现灵活的数据回滚 155 实战案例:巧用Flashback Database实现灵活的数据切换 156 5.3Data Guard搭建与应用 160 5.3.1 常见的Data Guard隐患 161 5.3.211g Data Guard搭建实践 163 5.3.3论Oracle备库的设计方案 169 5.3.4实用至上的 Snapshot Standby特性 171 实践案例:Data Guard备库中的几个数据文件问题 175 实践案例:Data Guard备库的数据文件的迁移实战 179 诊断案例:由Drop Datafile导致的Oracle Bug 182 诊断案例:一个Oracle bug的手工修复 185 诊断案例:11g备库无法开启ADG的原因分析 188 第6章 监控管理和故障处理 6.1Zabbix、Orabbix简介 191 6.2Zabbix Agent部署 191 6.3Orabbix的部署 194 6.4 浅谈Zabbix和Grid Control的优劣 197 6.5Orabbix定制监控Oracle的简单配置 198 实践案例:Orabbix结合Python发送图形报表 200 实践案例:Zabbix中配置Data Guard的监控 205 6.6 两条腿走路更稳当——硬件监控很有必要 207 6.7 运维平台的建设思考——元数据管理 209 6.8 监控盲点与诊断案例 210 监控盲点:由DUAL导致的一个潜在的监控问题 210 诊断案例:备库CPU使用异常优化 213 诊断案例:两条报警信息结合分析DG问题 216 诊断案例:监控反被监控误——一则Orabbix报警的分析 222 诊断案例:自定义监控项快速定位问题 224 诊断案例:CPU报警信息的分析 226 第2篇 数据迁移篇 第7章 数据库升级 7.1 数据库升级常用方法与准备工作 230 7.2Oracle10g升级至11g完整呈现 231 7.2.1准备流程图 231 7.2.210g升级至11g需要考虑的参数优化 232 7.2.3Oracle10g升级至11g准备工作详细步骤 233 7.2.4升级流程示意图 236 7.2.5升级后需要考虑的补充工作 237 7.2.6实战汇总:Oracle 10g 升级 11g过程中常见问题及解决方案 238 7.3 升级后常见问题与解决方案243 7.3.1问题分析:关于Oracle Invalid Components问题的解决 243 7.3.2问题分析:10g升级至11g后数据库无法启动的问题 246 7.3.3问题分析:10g升级至11g后exp启用consistent=y的问题 248 7.3.4问题分析:查询user_synonyms超时的问题 254 7.3.5问题分析:impdp 10g/11g问题解决 255 7.3.6问题分析:升级后数据库日志里的外部表错误 257 第8章 数据迁移及问题处理 8.1 数据迁移工具和使用场景分析261 8.2 利用SQL*Loader进行数据迁移 263 8.2.1关于SQL*Loader-805问题的解决 263 8.2.2SQL*Loader加载性能问题的排查 265 8.2.3Excel文件内容导入数据库的问题及解决 267 诊断案例:生产环境SQL*Loader加载性能问题及分析 269 8.3 传输表空间 275 8.4 分区表迁移相关 277 8.4.1分区表的水平、垂直切分 278 8.4.2关于分区表的move操作 279 8.4.3批量转换分区表为普通表 281 8.5 外部表 282 8.5.1外部表简单总结 282 诊断案例:巧用外部表避免大量的insert 284 诊断案例:巧用外部表备份历史数据 286 诊断案例:通过外部表改进一个烦琐的大查询 289 8.6 其他迁移方式 292 8.6.1数据库文件的迁移 292 8.6.2Data Guard环境中的数据文件迁移方式对比 295 8.6.3关于move tablespace的问题总结 298 第9章 数据迁移之外部表实战 9.1 失败的经验总结:数据迁移问题汇总 300 9.1.1非空约束导致的数据加载失败 301 9.1.2外键数据差异导致的约束无法启用 301 9.1.3网络问题导致数据加载中断 301 9.1.4约束问题导致Datapump加载回滚 302 9.1.5undo不足的困扰 302 9.1.6冲突数据不易展现 302 9.1.7sequence冲突检查 303 9.1.8加载LOB数据的假并行 303 9.1.9数据乱码的影响 303 9.1.10数据转储文件不可读/不易读 303 9.1.11大分区表的加载性能问题 304 9.2 外部表方案的产生 304 9.2.1SQL*Loader和ORACLE_DATAPUMP性能大比拼 304 9.2.2海量数据迁移之通过shell脚本估算数据量 305 9.2.3数据迁移前的数据库检查和建议 308 9.2.4数据迁移前的系统检查 313 小技巧:怎样突破表名30个字符的限制 315 小技巧:使用shell生成状态报表 317 9.3 数据抽取 318 9.3.1外部表切分原理 319 9.3.2抽取方式1:使用utl_file做选择性数据导出 321 9.3.3抽取方式2:海量数据迁移之外部表并行抽取 324 9.3.4抽取方式3:海量数据迁移之分区并行抽取 327 9.3.5抽取方式4:海量数据迁移之分区并行切分 331 9.3.6抽取方式5:海量数据迁移之通过rowid切分大表 332 小技巧:海量数据迁移之使用shell启用多个动态并行 336 9.4 数据预检查 338 9.4.1海量数据迁移之冲突数据筛查 339 9.4.2数据迁移判断非空约束 340 小技巧:使用shell进行日志分析 342 小技巧:使用shell脚本巧妙统计文件 344 9.5 数据加载 345 9.5.1海量数据迁移之外部表加载 345 9.5.2巧用Parallel极速提升数据加载速度 348 9.5.3海量数据迁移之使用分区并行切分导入 350 9.5.4海量数据迁移之分区表批量insert性能改进 352 9.6 可能碰到的数据修复问题352 9.6.1使用错误日志修复数据的利弊 353 诊断案例:数据紧急修复之启用错误日志 355 9.6.2人为操作失误的分析和应对 356 9.7 数据迁移经验总结 358 9.7.1海量数据迁移之误操作和防范建议 358 9.7.2数据迁移需要考虑的问题 360 第3篇 数据库优化篇 0章 优化工具简介和定制 10.1AWR简介 362 10.1.1AWR的常用功能 363 10.1.2解析AWR中的CPU信息 367 10.1.3使用shell定制AWR脚本 370 10.1.4强大的AWR Format 373 小技巧:使用AWR来分析Session Leak问题 375 实例分析:一份AWR报告分析的思路 376 10.2ASH 380 10.2.1ASH中的数据字典基表 380 10.2.2通过shell定制ASH脚本 383 10.3ADDM 385 10.3.1使用shell定制ADDM脚本 385 诊断案例 通过ADDM明确I/O问题 387 10.4SQL Profile简介 389 10.4.1SQL Profile的使用功能 389 10.4.2使用SQLT手工创建SQL Profile 393 10.4.4性能下降的不定时——过旧的SQL Profile 400 10.5SQL Monitor的功劳 401 10.5.1SQL Monitor的使用功能 401 10.5.2OSM的改进点和简单定制 403 10.6数据字典 405 10.6.1数据字典管理 405 实例诊断:数据字典中的细节问题 406 诊断案例:关于dba_data_files无法访问一个小问题 409 10.7自定义脚本 410 10.7.1关于Session Leak的问题分析 410 诊断案例:关于ORA-00020问题的反思 413 10.7.2高级开发语言定制,量力而行 414 1章 数据库实例调优 11.1调整数据库参数 417 诊断案例:关于修改数据库参数的测试 417 11.2内存组件调整 421 诊断案例:关于纠结的RECYCLE Pool的设置 426 诊断案例:分区表放入KEEP Pool、RECYCLE Pool的问题及解析 427 11.3等待事件分析 430 诊断案例:关于等待事件“read by other session” 431 诊断案例:关于enq:TX - allocate ITL entry的问题分析 434 11.4日志分析调优 437 诊断案例:由一条日志警告所做的调优分析 437 诊断案例:ORA-17500 ODM err的问题排查 440 诊断案例:alert日志中一条ORA警告信息的分析 441 11.5分区表优化 443 诊断案例:通过分区键值发现性能问题 443 经验分享:修改分区表的问题总结 445 11.6需要重视的并发 447 2章 系统调优 12.1I/O问题诊断 451 12.1.1Orion的简单部署和测试 452 诊断案例:启用ODM极速调优I/O 455 诊断案例:一次数据库响应缓慢的问题排查 459 12.2通过Linux命令诊断性能问题 460 12.2.1那些极度危险的Linux命令 461 12.2.2一些“简单”的Linux命令 464 诊断案例:Crontab导致CPU异常的问题分析及处理 471 诊断案例:服务器进程异常的原因分析 474 12.3内核参数优化诊断 477 诊断案例:Linux Kernel引发的数据库连接问题 478 诊断案例:Linux Kernel引发的Data Guard问题 481 3章 SQL优化前奏和SQL审核 13.1SQL优化前奏 487 13.1.1SQL的查询转换 487 13.1.2通过错误的SQL来测试推理SQL的解析过程 494 诊断 |