第1章 你真正学会数据库了吗 1
1.1 学习数据库的必要性 1
1.2 学习数据库的境界 2
1.3 Oracle霸主地位之——为什么要选择学习Oracle 2
1.4 数据库(Database) 2
1.4.1 何为数据库 2
1.4.2 何为关系数据库(RDB) 2
1.4.3 何为数据库管理系统(DBMS) 3
1.4.4 何为E-R图(Entity-Relationship Model) 3
1.4.5 何谓表(Table) 4
1.5 数据库在软件架构中的地位 5
1.6 数据库中的数据库——数据字典 5
1.6.1 数据字典的结构 5
1.6.2 数据字典的使用 6
本章总结 6
第2章 数据库安装不求人之——自个安装Oracle数据库 7
2.1 Oracle服务器软件安装之——Linux平台 7
2.1.1 准备操作系统 7
2.1.2 启动Oracle安装 15
2.2 Oracle服务器软件安装之——Windows平台 16
2.2.1 Oracle服务器软件安装 16
2.2.2 Oracle服务器软件安装之——故障排查 21
2.2.3 创建Oracle 11g数据库(Windows平台) 22
2.2.4 Oracle安装后期——测试安装是否成功 32
2.3 Oracle客户端安装 33
本章总结 34
第3章 初学者最麻烦的问题之——不能干净地卸载Oracle 35
3.1 Oracle不能完全卸载的烦恼 35
3.2 干干净净地卸载Oracle数据库 35
3.2.1 用DBCA删除数据库 36
3.2.2 删除ASM 37
3.2.3 停止Oracle所有的服务(Oracle Services) 38
3.2.4 用Oracle Universal Installer自动删除Oracle的组件 38
3.2.5 手动删除Oracle的其余组件 38
本章总结 39
第4章 轻松搞定Oracle网络 40
4.1 轻松搞定Oracle网络之——数据库服务器端网络配置 40
4.1.1 监听器的配置 41
4.1.2 监听器的启动 44
4.1.3 监听器的关闭 46
4.1.4 监听器的状态 47
4.2 轻松搞定Oracle网络之——Oracle客户端网络配置 48
4.2.1 客户端配置 48
4.2.2 测试客户端到服务器的连接 56
4.2.3 登录远程数据库 56
4.3 轻松搞定Oracle网络之——Oracle网络故障攻略 57
本章总结 59
第5章 访问远程数据库之——工具介绍 60
5.1 字符界面管理工具之——SQL*Plus 60
5.1.1 启动SQL*Plus 60
5.1.2 在SQL*Plus中执行代码 61
5.1.3 关闭SQL*Plus 63
5.1.4 最有用的SQL*Plus命令(SQL*Plus Commands) 63
5.1.5 SQL*Plus使用技巧 66
5.2 Web版的企业管理器(Oracle Enterprise Manager,OEM) 73
5.2.1 使用OEM 74
5.2.2 启动dbconsole 75
5.2.3 关闭dbconsole 76
5.3 其他数据库访问工具 76
5.3.1 DbVisualizer 76
5.3.2 TOAD 77
5.3.3 Embarcadero SQL Tuner 77
5.3.4 PL/SQL Developer 77
本章总结 79
第6章 Oracle数据库启动/关闭——原理剖析 80
6.1 数据库的启动 80
6.1.1 启动一个关闭的数据库(常规启动) 80
6.1.2 数据库启动原理 82
6.1.3 初始化参数(Initialization Parameter) 83
6.1.4 只启动实例——把数据库启动到非装载状态(NOMOUNT) 89
6.1.5 把数据库启动到装载状态(MOUNT) 90
6.1.6 打开数据库 90
6.1.7 重启你的数据库(Reset) 92
6.1.8 把数据库启动到只读模式 92
6.1.9 把数据库设置成自动启动/关闭之——Windows篇 92
6.1.10 把数据库设置成自动启动/关闭之——UNIX/Linux篇 94
6.2 数据库启动故障排查攻略 97
6.3 数据库的关闭 100
6.3.1 使用频率最高的数据库关闭方式 100
6.3.2 数据库关闭最快的方式 101
6.3.3 数据库关闭最慢的方式 101
6.3.4 以TRANSACTIONAL方式关闭数据库 102
本章总结 102
第7章 数据之家——Oracle存储管理 103
7.1 常规表空间管理 103
7.1.1 创建表空间(Create Tablespace) 103
7.1.2 扩展表空间 108
7.1.3 使表空间离线/在线(Taking Tablespaces Offline/Online) 108
7.1.4 重命名表空间(Renaming Tablespaces) 109
7.1.5 使表空间只读(Read Only) 109
7.1.6 删除表空间(Drop Tablespace) 110
7.1.7 大文件表空间(Bigfile Tablespaces) 110
7.1.8 表空间的加密(Encrypted Tablespaces) 111
7.1.9 表和表空间的关系 111
7.1.10 必须清楚的几个概念 113
7.2 数据文件管理 115
7.2.1 使数据文件离线 115
7.2.2 移动数据文件 116
7.2.3 删除数据文件 117
7.2.4 列出数据库中的数据文件 118
7.3 临时表空间管理 118
7.4 回滚表空间管理 122
7.4.1 回滚数据(Undo Data) 122
7.4.2 读一致性(Read Consistency) 122
7.4.3 数据库恢复(Database Recovery) 123
7.4.4 闪回查询(Flashback Query) 123
7.4.5 事务和回滚数据(Transactions and Undo Data) 123
7.4.6 回滚段(Undo Segment) 123
7.4.7 回滚表空间(Undo Tablespace) 125
7.4.8 回滚表空间的操作 126
本章总结 128
第8章 简化存储管理之——自动存储管理(ASM) 129
8.1 ASM实例(ASM Instances) 129
8.2 ASM磁盘组(ASM Disk Groups) 129
8.3 ASM文件(ASM Files) 130
8.4 区(Extents) 131
8.5 镜像和失败组(Mirroring and Failure Groups) 131
8.6 ASM使用全程 132
8.6.1 配置ASM实例 132
8.6.2 ASM实例的连接 140
8.6.3 ASM的启动 140
8.6.4 ASM的关闭 140
8.6.5 创建磁盘组 141
8.6.6 在磁盘组上创建表空间 142
8.7 ASM磁盘组的维护 143
本章总结 144
第9章 为数据库优化打基础之——Oracle内存管理 145
9.1 Oracle内存介绍 145
9.1.1 系统全局区(SGA) 145
9.1.2 程序全局区(PGA) 148
9.1.3 软件代码区(Software Code Areas) 150
9.2 Oracle内存管理方法 150
9.2.1 启用自动内存管理(Automatic Memory Management) 151
9.2.2 启用自动SGA管理(Automatic Shared Memory Management) 153
9.2.3 启用自动PGA管理(Automatic PGA Memory Management) 154
9.2.4 SGA手动管理 155
9.2.5 PGA手动管理 156
9.3 内存信息查询 156
9.3.1 从命令行查看Oracle的内存信息 156
9.3.2 用Oracle企业管理器查看Oracle内存的分配情况 160
本章总结 161
第10章 Oracle的发动机——进程 162
10.1 进程简介 162
10.2 Oracle后台进程(Background Process) 165
10.3 进程管理与维护 169
10.3.1 查看Oracle的后台进程 169
10.3.2 查看数据库中的会话 170
10.3.3 最热门的话题——提高数据库最大会话数 170
10.3.4 终止会话(Terminating Sessions) 171
10.3.5 修改归档进程(ARCn)的数量 172
10.3.6 修改数据库书写进程(DBWn)的数量 174
10.3.7 修改作业队列进程(Job Queue Process)的数量 174
10.3.8 查看每个进程占用的系统资源 174
本章总结 176
第11章 数据库物理结构信息的仓库——Oracle控制文件 177
11.1 控制文件(Control Files)简介 177
11.2 查看数据库中的控制文件 178
11.3 DBA必做的事情——镜像控制文件(Multiplex Control Files) 179
11.4 查看控制文件的内容 180
11.5 得到创建控制文件的脚本 180
11.6 移动控制文件 181
11.7 删除控制文件 182
本章总结 182
第12章 服务器掉电亦无忧之——Oracle重做日志(Redo Log)管理 183
12.1 重做日志文件的工作原理 183
12.1.1 重做日志(Redo Log) 183
12.1.2 重做日志条目(Redo Entry) 183
12.1.3 重做日志(Redo Log)的构成 183
12.1.4 重做日志(Redo Log)的工作原理 184
12.1.5 重做日志文件(Redo Log Files)的四种状态 185
12.1.6 同一日志组中成员的分布 185
12.1.7 重做日志(Redo Log)与实例恢复 185
12.2 查询数据库中的重做日志组 186
12.3 查询数据库中的重做日志文件 186
12.4 创建重做日志组(Creating Redo Log Groups) 187
12.5 添加重做日志文件(Creating Redo Log Members) 187
12.6 删除重做日志组(Dropping Redo Log Groups) 187
12.7 删除重做日志成员(Dropping Redo Log Members) 188
12.8 改变重做日志组的状态 188
12.9 查看重做日志组是否已经归档 189
本章总结 189
第13章 总揽全局——Oracle体系结构综述 190
13.1 物理数据库结构(Physical Database Structures) 191
13.2 逻辑数据库结构(Logical Database Structures) 191
13.3 实例(Database Instance) 191
13.3.1 SGA 192
13.3.2 后台进程(Background Processes) 192
13.3.3 最容易混淆的两个概念——数据库和实例 192
13.4 阅读参考 194
本章总结 194
第14章 成为数据库的王者之——权限管理 195
14.1 用户管理 195
14.1.1 创建用户账号 195
14.1.2 预定义账户(Predefined User Accounts) 197
14.1.3 修改用户账号属性 197
14.1.4 锁定爱捣蛋的用户 198
14.1.5 查看数据库账户属性 198
14.1.6 让一个用户从数据库中永远消失 200
14.1.7 查看当前登录数据库的用户 200
14.2 限制用户对资源的消耗——概要文件(User Profiles) 201
14.2.1 创建概要文件 201
14.2.2 修改用户的概要文件(把概要文件赋予用户) 202
14.2.3 删除概要文件 202
14.3 数据库管理员的验证方式(Authentication Method for Database Administrators) 203
14.3.1 管理员的验证之——数据字典验证(Data Dictionary Authentication) 203
14.3.2 管理员的验证之——使用操作系统验证(Using Operating System Authentication) 203
14.3.3 管理员的验证之——使用口令文件验证(Using Password File Authentication) 204
14.3.4 管理员的验证之——基于网络的验证 207
14.4 权限管理 207
14.4.1 力量的象征——权限 207
14.4.2 搞不清楚的问题——角色与权限 213
14.4.3 创建角色 214
14.4.4 授予角色权限 214
14.4.5 删除角色 214
14.4.6 权力演绎 214
本章总结 217
第15章 Oracle数据泵(Oracle Data Pump) 218
15.1 Oracle数据泵的组件 218
15.2 数据泵移动数据的方式 219
15.3 数据泵的工作原理 219
15.4 目录问题 220
15.5 导入导出过程的监控 220
15.6 数据泵导出工具(Data Pump Export) 221
15.6.1 Data Pump Export的调用接口 221
15.6.2 导出模式(Data Pump Export Modes) 221
15.6.3 导出参数说明 224
15.7 数据泵导出工具(Data Pump Import) 231
本章总结 234
第16章 学习任何数据库必学之——SQL语句 235
16.1 SQL简述 235
16.2 事务(Transaction) 237
16.2.1 提交(COMMIT) 237
16.2.2 回滚(ROLLBACK) 238
16.2.3 事务命名(SET TRANSACTION NAME) 238
16.2.4 事务读一致性(Transaction-level Read Consistency) 239
16.2.5 回滚点(SAVEPOINT) 240
16.2.6 自治事务(Autonomous Transactions) 241
16.3 数据类型(Oracle Data Type) 241
16.4 数据库的核心——表结构管理 242
16.4.1 Oracle的表类型 242
16.4.2 建表——创建存储数据的“容器” 244
16.4.3 修改表——修改“容器”的属性 249
16.4.4 表管理小技巧 251
16.4.5 删除表——让整个表从数据库中彻底消失 256
16.5 数据库的核心——表数据管理 257
16.5.1 往“容器”中装入数据(INSERT语句演示) 257
16.5.2 修改“容器”中的数据(UPDATE语句演示) 263
16.5.3 查询“容器”中的数据(SELECT语句演示) 265
16.5.4 删除“容器”中的数据(DELETE语句) 303
16.6 数据库的核心——约束管理 306
16.6.1 五大约束 306
16.6.2 约束管理 307
16.7 数据库的核心——LOB管理 312
16.7.1 BFILE 313
16.7.2 BLOB 313
16.7.3 CLOB 313
16.7.4 NCLOB 314
16.7.5 BFILE应用实战 314
16.7.6 CLOB应用实战 315
16.8 用户自定义数据类型(User-defined Data Type) 317
16.8.1 对象类型(Object Type) 317
16.8.2 可变数组类型(Variable-size Arrays Type) 319
16.8.3 嵌套表类型(Nested Table Type) 322
16.9 分布式应用 325
16.9.1 数据库链接分类 325
16.9.2 创建数据库链接 326
16.9.3 数据库链接的应用 326
16.9.4 删除数据库链接 326
16.10 分区表管理 327
本章总结 331
第17章 构筑高速运行的SQL语句 332
17.1 数据库性能调整简介 332
17.2 实例调整 332
17.2.1 自动工作负载库(Automatic Workload Repository,AWR) 333
17.2.2 性能监测器(Automatic Database Diagnostic Monitor,ADDM) 334
17.3 SQL语句调整 336
17.3.1 数据查询的加速器——索引 337
17.3.2 优化器(Optimizer) 340
17.3.3 SQL语句执行的大致过程 340
17.3.4 SQL语句的优化过程 341
17.3.5 提示(Hint) 352
本章总结 355
第18章 模式对象管理 356
18.1 数据的封藏——视图 357
18.1.1 视图创建 357
18.1.2 在存储过程中创建视图 358
18.1.3 视图的使用 358
18.1.4 得到创建视图的SQL语句 359
18.1.5 视图的删除 359
18.2 产生唯一值——序列(Sequence) 360
18.2.1 创建序列 360
18.2.2 序列的使用 361
18.2.3 序列值丢失(不连续)的问题 362
18.2.4 把序列的值重新置成1 362
18.2.5 删除序列 362
18.3 隐藏数据库对象的名字——同义词(SYNONYM) 363
18.3.1 同义词的优点 363
18.3.2 同义词的分类 364
18.3.3 创建同义词 364
18.3.4 使用同义词 364
18.3.5 删除同义词 364
本章总结 365
第19章 开发基础的沉淀——PL/SQL程序设计 366
19.1 PL/SQL介绍 366
19.1.1 PL/SQL基本要素 367
19.1.2 PL/SQL块(PL/SQL Block) 368
19.1.3 变量和常量 369
19.1.4 数据类型 372
19.1.5 PL/SQL表达式和运算符 375
19.1.6 PL/SQL语句 376
19.1.7 在PL/SQL中使用SELECT语句 376
19.1.8 在PL/SQL中使用DML 376
19.1.9 控制结构 377
19.1.10 GOTO语句 380
19.1.11 异常(Exception) 380
19.2 数据批处理——游标(Cursor) 384
19.2.1 游标的分类 384
19.2.2 游标FOR循环 386
19.2.3 向游标中传递参数 387
19.2.4 游标变量 388
19.3 一触即发——触发器介绍 390
19.3.1 触发器的功能 390
19.3.2 触发器的组成 391
19.3.3 触发器的种类 391
19.3.4 触发动作(Trigger Action)的编码 394
19.3.5 触发器的维护 396
19.3.6 在触发器中,如何利用学生表1的值去更新学生表2的值 399
19.3.7 阻止触发语句的执行 401
19.4 DDL语句的救星——动态SQL(Dynamic SQL) 402
19.4.1 静态SQL(Static SQL) 403
19.4.2 动态SQL(Dynamic SQL) 403
19.4.3 动态SQL和静态SQL的比较 404
19.4.4 动态SQL的书写 404
本章总结 414
第20章 存放在数据库服务器中的代码 415
20.1 存储PL/SQL单元 415
20.2 子程序的参数 415
20.3 存储过程(Procedure) 416
20.3.1 存储过程的创建 417
20.3.2 存储过程的调用 418
20.3.3 存储过程的编译 418
20.3.4 存储过程的删除 418
20.3.5 存储过程使用技巧 419
20.4 函数(Function) 425
20.4.1 函数的创建 425
20.4.2 函数的调用 426
20.4.3 函数的编译 427
20.4.4 函数的删除 427
20.4.5 函数使用技巧 427
20.4.6 常用函数 430
20.5 包(Package) 432
20.5.1 包的优点 432
20.5.2 包的组成 433
20.5.3 包中对象的私有属性和公有属性 433
20.5.4 包的创建 433
20.5.5 引用包的对象(元素) 435
20.5.6 让其他用户使用你的包 436
20.5.7 包的编译 436
20.5.8 包的删除 436
20.5.9 包中存储过程和函数的重载 437
20.5.10 Oracle内置包 439
20.5.11 查看包中的存储过程或者函数 440
20.6 存储过程和函数的调试(Debug) 440
本章总结 441
第21章 Oracle即时客户端(Instant Client) 442
21.1 即时客户端简介 442
21.2 使用即时客户端部署应用程序 443
本章总结 444
第22章 数据库的备份 445
22.1 数据库故障的种类 445
22.1.1 实例失败 445
22.1.2 介质失败 446
22.1.3 用户错误 446
22.2 冷备份(Cold Backup) 446
22.2.1 一致性冷备份(Consistent Backup) 446
22.2.2 不一致冷备份(Inconsistent Backup) 446
22.3 热备份(Hot Backup) 446
22.4 备份、恢复工具 447
22.4.1 用户管理的备份和恢复 447
22.4.2 RMAN 447
22.5 冷备份的实施 450
22.6 热备份的实施 451
22.6.1 热备份的前提——归档管理 451
22.6.2 备份整个数据库 453
22.6.3 备份单个表空间 454
22.6.4 备份单个数据文件 454
22.6.5 备份归档日志文件 454
22.6.6 备份控制文件 455
22.6.7 备份SPFILE 455
本章总结 456
第23章 数据库的恢复 457
23.1 数据冲突的修复 457
23.2 冷备份的恢复 458
23.3 热备份的恢复 459
23.3.1 恢复整个数据库 459
23.3.2 恢复单个表空间 460
23.3.3 恢复单个数据文件 460
23.3.4 修复数据块 461
本章总结 461
第24章 项目实战之——网银子系统 462
24.1 软件生命周期(System Development Life Cycle) 462
24.2 业务需求分析——前期工作 463
24.2.1 业务需求 463
24.2.2 系统效果展示 463
24.3 架构设计——架起业务与软件的桥梁 464
24.3.1 软件系统框架设计 464
24.3.2 数据库模型设计 465
24.4 编码 467
24.5 测试 467
24.6 把理想变成现实 467
24.6.1 安装JDK 467
24.6.2 安装Tomcat 470
24.6.3 网银子系统配置 474
24.7 代码解释 476
24.7.1 安装Eclipse 476
24.7.2 Eclipse导入项目 476
24.7.3 MVC框架 477
24.7.4 重要代码讲解 478
本章总结 484