基础篇 2
ORACLE RAC数据库安装 2
1 虚拟机安装 2
2 创建虚拟设备 5
3 安装Linux系统 7
3.1 光盘挂载 7
3.2 安装操作系统 9
3.3 系统设置 14
4 安装设置Linux操作系统 18
4.1 增加网卡以及共享存储 18
4.2 登录系统 21
4.3 网络配置 22
4.4 Linux安装Oracle RAC补丁包 23
4.5 共享存储配置 23
4.6 修改主机名 26
4.7 修改/etc/hosts 26
4.8 偶数机配置 26
5 安装Oracle集群软件 27
5.1 建安装目录 27
5.2 上传软件 27
5.3 ssh配置 27
5.4 环境变量设置 27
5.5 xmanager设置 28
5.6 集群安装 28
6 数据库安装 34
6.1 软件安装 34
6.2 Netca网络配置 36
6.3 Dbca建数据存储Asm 37
6.4 安装数据库实例 38
6.5 实例启动 41
7 启动和停止RAC数据库 41
7.1 停止数据库 41
7.2 启动数据库 41
7.3 停止CRS 41
7.4 启动CRS 42
ORACLE GRID CONTROL安装 43
1 Grid Control功能 43
1.1 概述 43
1.2 GC功能实现 43
1.3 对数据库实例维护 44
1.4 使用GC创建表空间 46
2 数据库安装 48
2.1 单实例数据库软件安装 48
2.2 建库 50
2.3 监听配置 52
3 GC Server安装 54
3.1 系统修改 54
3.2 GC软件安装 54
3.3 GC安装完成 59
4 GC Agent安装 60
4.1 客户端修改dbsnmp用户状态及口令 60
4.2 修改server端hosts 60
4.3 获取agent安装文件 61
4.4 agent端配置jar文件执行路径 61
4.5 修改agent端dbsnmp用户状态及口令 61
4.6 安装agent端软件 61
5 GC使用 62
5.1 连接地址 62
5.2 添加被监控数据 62
5.3 相同方式RAC2安装GC agent 63
ORACLE RMAN备份恢复 64
1 数据库备份概念 64
1.1 数据备份意义 64
1.2 数据库备份方式 64
1.3 备份策略 64
2 数据库备份的实施 65
2.1 冷备份实施 65
2.2 热备份实施 65
3 文件丢失后的数据库恢复 77
3.1 SPFILE丢失 77
3.2 控制文件丢失 78
3.3 Redolog file丢失 83
3.4 数据文件丢失 84
3.5 表空间丢失 86
4 数据库不完全恢复 86
4.1 基于SCN的恢复 86
4.2 基于日志序列的恢复 87
4.3 基于时间点的恢复 87
ORACLE DATAGUARD部署 89
1 ORACLE DATAGUARD概述 89
1.1 Oracle数据库故障切换与高可用特点 89
1.2 Data Guard系统架构图 89
1.3 Data Guard的资源需求 89
2 命令行配置方法与技术特点 90
2.1 Data Guard的配置步骤 90
3 DataGuard OEM配置 97
3.1 基于RMAN的DataGuard的实施 98
3.2 使用DGBROKER维护DataGuard 103
3.3 使用OEM对数据库维护DataGuard 108
ORACLE数据库管理 116
1 Oracle 10G数据泵EXPDP和IMPDP 116
1.1 expdp使用 116
1.2 调用IMPDP 117
2 传输表空间 117
3 Flashback闪回技术 119
4 Oracle网络配置 121
5 表空间管理 123
5.1 UNDO空间管理 123
5.2 用户表空间管理 123
5.3 日志管理 123
5.4 控制文件管理 124
6 Oracle JOB使用 124
6.1 设置初始化参数job_queue_processes 124
6.2 dbms_job package用法介绍 124
6.3 查看相关job信息 125
6.4 相关注意事项 126
7 分区表的使用 126
7.1 分区表介绍 126
7.2 分区表类型 126
7.3 维护分区表 128
8 分区索引 132
8.1 全局索引 132
8.2 全局分区索引 133
8.3 本地分区索引 133
9 带有LOB字段的表 134
9.1 LOB字段类型特征 134
9.2 LOB类型 134
9.3 Internal LOBs-External LOBs 134
9.4 LOB字段属性 134
9.5 创建带有LOB字段的表 135
9.6 LOB字段在SQL环境操作 135
9.7 LOB字段表空间迁移 135
10 ORACLE SQL*LOADER 135
10.1 SQL*LOADER概念 135
10.2 SQL*LOADER控制文件 137
10.3 SQL*LOADER举例 137
优化篇 140
SQL优化器概述 140
1 SQL优化器介绍 140
2 SQL优化器发展 140
2.1 基于规则的优化方式RBO 140
2.2 基于代价优化器CBO 141
2.3 RBO与CBO对比 146
2.4 SQL优化器模式 148
2.5 修改优化器 149
解读执行计划 150
1 如何获取执行计划 150
1.1 V$SQL_PLAN 150
1.2 EXPLAIN PLAN 151
1.3 AUTOTRACE 151
1.4 DBMS_XPLAN 152
1.5 AWR SQL REPORT 156
1.6 访问路径 157
1.7 连接方式 160
1.8 星型转换(star transformation) 161
1.9 排序合并和HASH连接参数 162
1.10 连接顺序 163
1.11 数据库统计信息 163
1.12 解读执行计划 169
1.13 CBO执行成本评估 180
1.14 使用HINT改变SQL执行 181
调优工具 186
1 SQL相关动态性能视图 186
1.1 v$sql 186
1.2 v$sqlarea 187
1.3 v$sqltext 187
1.4 v$sqlstats 187
1.5 v$sql_plan 187
1.6 10046,tkprof 188
1.7 10053 196
1.8 AWR 204
1.9 ASH 206
1.10 ADDM 207
优化案例 210
1 SQL调优的目标 210
2 缺少索引 211
3 索引设计不合理 212
4 组合索引的使用 213
5 绑定变量造成的执行计划异常 214
6 使用提示固定执行计划 217
7 优化存储过程(dbms_profiler/dbms_trace) 219
8 改写SQL语句 221
SQL优化实践 223
1 SQL优化类型 223
2 SQL语句详情 224
2.1 SQL#1 224
2.2 SQL#2 226
2.3 SQL#3 228
2.4 SQL#4 230
2.5 SQL#5 231
2.6 SQL#6 232
2.7 SQL#7 234
2.8 SQL#8 235
2.9 SQL#9 236
2.10 SQL#10 237
2.11 SQL#11 238
2.12 SQL#12 239
2.13 SQL#13 239
2.14 SQL#14 240
2.15 SQL#15 241
2.16 SQL#16 243
2.17 SQL#18 244
2.18 SQL#20 246
2.19 SQL#21 246
2.20 SQL#22 248
2.21 SQL#23 249
2.22 SQL#24 250
2.23 SQL#25 251
2.24 SQL#26 252
2.25 SQL#27 253
2.26 SQL#30 254
2.27 SQL#32 256
2.28 SQL#37 258
2.29 SQL#38 259
2.30 SQL#39 260
2.31 SQL#40 261
2.32 SQL#41 262
2.33 SQL#42 263
3 SQL语句详情 264
3.1 BSYZDB_SQL_001 264
3.2 BSYZDB_SQL_002 266
3.3 BSYZDB_SQL_003 268
3.4 BSYZDB_SQL_004 271
3.5 BSYZDB_SQL_005 273
3.6 BSYZDB_SQL_006 275
3.7 BSYZDB_SQL_007 277
3.8 BSYZDB_SQL_008 281
3.9 BSYZDB_SQL_009 283
3.10 BSYZDB_SQL_010 284
3.11 BSYZDB_SQL_011 286
3.12 BSYZDB_SQL_012 287
3.13 BSYZDB_SQL_013 288
3.14 BSYZDB_SQL_014 290
3.15 BSYZDB_SQL_015 291
3.16 BSYZDB_SQL_016 292
3.17 BSYZDB_SQL_017 293
3.18 BSYZDB_SQL_018 295
3.19 BSYZDB_SQL_019 297
3.20 BSYZDB_SQL_020 299
3.21 BSYZDB_SQL_021* 300
3.22 BSYZDB_SQL_022* 301
3.23 BSYZDB_SQL_023* 303
3.24 BSYZDB_SQL_024* 304
3.25 CRMDB_SQL_001 305
3.26 CRMDB_SQL_002 306
3.27 CRMDB_SQL_003 308
3.28 CRMDB_SQL_004 310
3.29 CRMDB_SQL_005 312
3.30 CRMDB_SQL_006 313
3.31 CRMDB_SQL_007 315
3.32 CRMDB_SQL_008 316
3.33 CRMDB_SQL_009 317
3.34 CRMDB_SQL_010 318
3.35 CRMDB_SQL_011 320
3.36 CRMDB_SQL_012 321
3.37 CRMDB_SQL_013 322
3.38 CRMDB_SQL_014 324
3.39 CRMDB_SQL_015 325
3.40 CRMDB_SQL_016 326
3.41 CRMDB_SQL_017 328
3.42 CRMDB_SQL_018 330
3.43 CRMDB_SQL_019 331
3.44 CRMDB_SQL_020 333
3.45 CRMDB_SQL_021 334
3.46 CRMDB_SQL_022 335
3.47 CRMDB_SQL_023 336
3.48 CRMDB_SQL_024 337
3.49 CRMDB_SQL_025 338
3.50 CRMDB_SQL_026 339
3.51 CRMDB_SQL_027 340
运维篇 344
ORACLE最佳实践要求和注意事项 344
1 实践要求 344
1.1 应用设计 344
1.2 部署 344
1.3 SQL语句编写 345
1.4 操作系统和主机 347
2 注意事项 347
2.1 一般设计注意事项 347
2.2 网络注意事项 348
2.3 存储注意事项(包括ASM) 348
2.4 虚拟化注意事项 349
2.5 安装注意事项 349
2.6 补丁安装注意事项 349
2.7 升级注意事项 349
2.8 RAC的数据库配置注意事项 349
2.9 性能优化注意事项 350
2.10 数据库网络注意事项 350
2.11 一般数据库注意事项 351
2.12 诊断和故障排除 351
ORACLE体系架构 359
1 ORACLE单实例体系架构 359
1.1 ORACLE体系结构 359
1.2 ORACLE内存结构 359
1.3 ORACLE逻辑结构 361
2 ORACLE RAC体系架构 365
2.1 Oracle RAC/Clusterware的结构和组件 367
2.2 第三方集群 368
2.3 Oracle支持的RAC环境 369
2.4 Oracle Clusterware的心跳 369
2.5 Clusterware的私有网络 370
2.6 Oracle实例的私有网络 370
2.7 常见安装、管理错误 372
ORACLE维护守则 375
1 DBA chechlist 375
2 数据生命周期管理 376
2.1 概要说明 376
2.2 数据生命周期管理建议 376
2.3 数据库数据生命周期管理 376
2.4 实施计划及步骤说明 380
ORACLE ERROR和参数 385
1 ORACLE ERROR概述 385
2 用Oracle表查看报警日志错误 385
3 ORA_ERROR分析 387
4 ORACLE参数设置 387
4.1 PROFILE参数 387
4.2 ORACLE系统参数 391
4.3 ORACLE隐含参数 410
ORACLE中常见等待事件 411
1 等待事件的相关知识 411
1.1 等待事件分类 411
1.2 查看v$event_name视图的字段结构 411
1.3 查看等待事件总数 411
1.4 查看等待事件分类情况 411
1.5 相关的几个视图 412
2 常见的等待事件 412
ORACLE内存管理 423
1 Oracle的内存架构组成 423
1.1 SGA(System Global Area) 423
1.2 PGA(The Process Global Area) 447
1.3 UGA(The User Global Area) 453
1.4 CGA (The Call Global Area) 454
1.5 软件代码区(Software Code Area) 454
2 Oracle的内存管理 454
2.1 Oracle内存管理基础 454
2.2 Oracle的内存的分配、回收 458
2.3 Oracle在UNIX下的内存管理 460
3 内存错误处理 462
3.1 分析定位ORA-4030 462
3.2 分析定位ORA-4031 464
4 SHARED POOL配置 471
4.1 共享SQL语句 471
4.2 shared pool的设置优化 479
4.3 shared pool的统计信息 480
4.4 shared pool的等待事件 480
5 Latch原理 483
6 Mutex原理 489
6.1 Mutex的用途 490
6.2 Mutex替代library cache pin来保护cursor heap 490
6.3 Mutex的统计信息 491
6.5 Mutex的Get和Sleep 492
6.6 理解Mutex相关的等待 493
6.7 Mutex相关的等待事件 493
6.8 Mutex的相关统计视图 494
7 cursor pin S wait on X模拟 494
7.1 场景模拟 494
7.2 解决方法 497
8 Cache buffer chain模拟 498
8.1 实验一 498
8.2 实验二 501
8.3 实验三 502
9 Library Cache Lock/Pin模拟 504
9.1 概念 504
9.2 实验 505
9.3 原因 507
10 buffer busy waits模拟 509
11 绑定变量使用 513
11.1 为什么使用绑定变量 513
11.2 怎样使用绑定变量 514
11.3 怎样知道正在使用绑定变量的方法 516
11.4 绑定变量使用限制条件 517
11.5 查询系统未使用绑定变量 518
12 ORACLE HIT RATIO 518
13 生产系统Latch问题 523
13.1 问题描述 523
13.2 原因分析 523
13.3 解决方法 526
14 ORACLE稳定SQL执行计划 526
14.1 DBMS_SQLTUNE详解---sql_profile 526
14.2 使用SQL Profile固定执行计划示例 528
14.3 生产系统使用SQL Profile固定执行计划实践 530
ORACLE IO使用机制 535
1 Oracle IO使用 535
1.1 Oracle中IO的产生 535
1.2 逻辑读 539
2 db file sequential read产生 574
3 TEMP表空间满的问题 577
4 ORA-1652:unable to extend temp segment诊断以及解决 580
5 Archive log归档日志文件已满情况的处理 582
6 ORA-00313 ORA-00312联机日志文件丢失或损坏的处理方法 586
7 10g LOGMINER使用方法 588
ORACLE RAC GC问题 591
1 Oracle rac架构 591
2 模拟gc buffer busy等待事件 592
3 GC问题分析 593
3.1 原因 593
3.2 解决方法 594
4 引用案例分享 594
4.1 gcbufferbusy acquire案例 594
5 生产系统gc buffer busy案例 595
5.1 问题分析 595
5.2 解决建议 599
6 RAC gc buffer busy热点块查找 600
6.1 通过ASH方法查找热点块 600
6.2 通过AWR方法查找热点块 602
6.3 减少GC应用分类方法 604
7 RAC GC性能监控 606
7.1 监控GC事件级别的变化 606
7.2 监控GC的性能 609
7.3 监控GC处理时间 612
8 DRM案例与分析 615
8.1 DRM原理 615
8.2 DRM参数 616
8.3 UNDO AFFINITY 617
ORACLE RAC FAILOVER配置 619
1 ORACLE Failover原理 619
1.1 Client-Side Connect Time Failover 619
1 2 TAF(Transparent Application Failover) 619
1.3 Service-Side TAF 620
1.4 srvctl命令测试实例 622
2 生产系统ORACLE Failover配置实践 624
2.1 Service配置步骤 624
2.2 Service启动停止操作 624
2.3 注意事项 625
2.4 测试场景 625
ORACLE RAC修改IP/VIP及VIP漂移 626
1 修改IP 626
2 Oracle rac vip漂移处理 627
3 Oracle RAC更改VIP/IP地址2节点的实验 628
ORACLE RAC OCR/VOTING DISK管理 630
1 10g RAC下OCR和Voting disk的管理 630
2 11g RAC中OCR及Voting Disk管理 631
3 10g RAC更换共享磁盘(ocr,voting disk)的方法 633
4 10g OCR及Voting disk的备份 635
ORACLE的锁机制与问题 638
1 锁的概念 638
1.1 作用 638
1.2 分类 638
1.3 表级锁(TM锁) 639
1.4 行级锁(TX锁) 641
1.5 锁阻塞模拟 643
1.6 监控系统中的锁 645
1.7 死锁的产生与避免 646
2 Enqueue概念 647
3 Enqueue TX模拟 651
3.1 模拟enq:TX-contention 651
3.2 模拟enq:TX-index contention wait 653
3.3 模拟enq:TX-row lock contention 654
3.4 模拟enq:TX-allocate ITL entry 657
4 生产系统enq:CF-contention问题 662
4.1 问题描述 662
4.2 原因分析 662
4.3 解决方法 664
5 生产系统enqueue问题及解决方法 664
5.1 ORACLE内部锁 664
5.2 enq:TX-row lock contention处理方法 665
5.3 enq:TX-allocate ITL entry处理方法 668
5.4 enq:SQ-contention处理 668
ORACLE UNDO机制与使用 670
1 Oracle undo机制 670
1.1 undo原理 670
1.2 undo作用 672
2 Oracle undo管理 674
2.1 Undo的方式 674
2.2 管理undo tablespace 675
2.3 管理回滚段 676
3 Oracle undo监控 678
3.1 监控UNDO I/O性能 678
3.2 优化undo segment 679
3.3 典型错误:ORA-01555 SNAPSHOT TOO OLD 679
4 Oracle undo过度使用案例 681
4.1 问题描述 681
4.2 解决步骤 681
4.3 UNDO表空间100% 682
4.4 Undo tablespace使用率100%原因 683
4.5 enq:US-contention 684
5 Oracle undo IMU机制 684
6 大事务回滚 686
6.1 大事务回滚监控 686
6.2 大事务回滚案例 688
6.3 Oracle前滚/后滚 688
ORACLE表碎片查看及处理 691
1 ORACLE表碎片 691
1.1 水位线 691
1.2 行链接(Row Chaining)与行迁移(Row Migration) 699
2 ORACLE索引碎片 704
2.1 查看系统表中的用户索引 704
2.2 索引的存储情况检查 704
2.3 索引的选择性 705
2.4 确定索引的实际碎片 706
3 生产系统ORACLE对象碎片处理方法 706
3.1 空间管理 706
3.2 生产数据库表情况 708
3.3 数据库表消除碎片 710
ORACLE数据块损坏的处理 714
1 数据库数据坏块常用处理方法 714
1.1 坏块产生的原因 714
1.2 坏块的预防 714
1.3 坏块故障的识别 715
1.4 Oracle数据块损坏恢复总结 715
1.5 如何查找坏块所含的数据表名称和数据的rowid 716
1.6 如何模拟坏块 716
1.7 用dbms_repair来处理 717
1.8 设置内部事件使exp跳过坏块 719
2 BBED工具 720
2.1 BBED工具介绍 720
2.2 BBED工具实验 721
3 生产系统数据库数据坏块处理实践 728
3.1 故障描述 728
3.2 原因分析 728
3.3 解决方法 729
ORACLE维护常用的脚本 731
1 检查补丁冲突 731
2 ORA600-7445 TRACE分析 731
3 隐含参数 731
4 session_cache_cursor,open_cursor 732
5 检查SHARED_POOL 732
6 检查PGA 736
7 日志信息 738
8 检查大事务 739
9 检查latch 740
10 检查enqueue 742
11 SESSION INFO 749
12 Wait info 751
13 段信息 753
14 表空间信息 753
15 排序信息 757
16 library cache 757
17 统计数据变化量 761
18 管理schedule 761
19 ASH 762
20 统计信息 768
21 RMAN 768
22 案例总结 769
23 HPUX内核参数监控 782