第1章 Oracle关系数据库 1
1.1数据库简介 1
1.1.1数据库系统基本概念 1
1.1.2主流数据库 5
1.1.3 Oracle数据库的特点 5
1.1.4关系数据库 5
1.2关系数据库的范式理论 7
1.2.1第一范式(1NF) 7
1.2.2第二范式(2NF) 8
1.2.3第三范式(3NF) 8
1.3实体-关系模型 9
1.3.1实体-关系模型概念 9
1.3.2 E-R图的绘制 10
1.3.3 E-R模型到关系模型 11
1.4安装Oracle Database 11g 13
1.4.1在Windows环境下的安装过程 13
1.4.2 Oracle服务管理 16
1.5 Oracle默认用户 16
1.6使用OEM 17
1.7项目案例:创建数据库 20
1.8习题 23
1.9实践疑难解答 24
1.9.1Oracle l 1g安装时先决条件检查全部失败 24
1.9.2安装Oracle 11g后没有OracleDBConsoleorcl服务 26
1.9.3 SYSTEM用户以SYSDBA的身份登录到OEM问题 26
第2章 Oracle数据库体系结构 28
2.1物理存储结构 28
2.1.1数据文件 28
2.1.2控制文件 30
2.1.3日志文件 31
2.1.4其他文件 32
2.2逻辑存储结构 32
2.2.1表空间(Tablespace) 33
2.2.2段(Segment) 34
2.2.3区(Extent) 35
2.2.4数据块(Block) 35
2.3 Oracle进程结构 36
2.3.1 DBWn进程 36
2.3.2 LGWR进程 37
2.3.3 CKPT进程 38
2.3.4 SMON进程 39
2.3.5 PMON进程 39
2.3.6 ARCn进程 39
2.3.7 RECO进程 40
2.3.8 LCKn进程 40
2.3.9 SNPn进程 40
2.3.10 Dnnn进程 41
2.4 Oracle内存结构 41
2.4.1内存结构概述 41
2.4.2系统全局区(SGA) 42
2.4.3程序全局区(PGA) 43
2.4.4排序区 44
2.4.5大池 44
2.4.6 Java池 45
2.5数据字典 45
2.5.1 Oracle数据字典介绍 45
2.5.2 Oracle常用数据字典 46
2.6项目案例:查看视图DBA DATA FILE的结构 48
2.7习题 49
2.8实践疑难解答 51
2.8.1共享池(Shared Pool)的大小 51
2.8.2 Oracle中怎样设置share_pool_size参数的大小 51
第3章 使用SQL*Plus工具 52
3.1 SQL*Plus概述 52
3.1.1 SQL*Plus的主要功能 52
3.1.2 SQL*Plus连接与断开数据库 53
3.2使用SQL*Plus命令 55
3.2.1使用DESCRIBE命令查看表结构 55
3.2.2执行SQL脚本 56
3.2.3使用SAVE命令保存缓冲区内容到文件 58
3.2.4使用GET命令读取脚本文件到缓冲区 59
3.2.5使用EDIT命令编辑缓冲区内容或文件 60
3.2.6使用SPOOL命令复制输出结果到文件 61
3.3变量 62
3.3.1临时变量 62
3.3.2定义变量 65
3.4格式化查询结果 67
3.4.1格式化列 67
3.4.2设置每页显示的数据行 68
3.4.3设置每行显示的字符数 69
3.5创建简单报表 70
3.5.1报表的标题设计 70
3.5.2统计数据 73
3.6项目案例:统计各部门的工资总金额 75
3.7习题 76
3.8实践疑难解答 78
3.8.1 SQL*Plus连接数据库密码为什么可以是错误的 78
3.8.2 COLUMN命令中的FORMAT选项格式化问题 78
3.8.3格式化日期类型 79
3.8.4插入数据中包含&符号 80
第4章 表空间 81
4.1基本表空间 81
4.1.1表空间的管理类型 81
4.1.2创建基本表空间 83
4.1.3表空间的状态 86
4.1.4重命名表空间 87
4.1.5修改数据文件的大小 88
4.1.6为表空间增加新的数据文件 89
4.1.7修改数据文件的自动扩展性 89
4.1.8删除表空间的数据文件 90
4.1.9修改数据文件的状态 91
4.1.10移动数据文件 92
4.1.11删除表空间 93
4.2临时表空间 93
4.2.1创建临时表空间 93
4.2.2修改临时表空间 94
4.2.3临时表空间组 95
4.3大文件表空间 97
4.4非标准数据块表空间 98
4.5撤销表空间 99
4.5.1管理撤销表空间的方式 99
4.5.2创建和管理撤销表空间 101
4.6项目案例:创建基本表空间 104
4.7习题 106
4.8实践疑难解答 107
4.8.1 Oracle如何删除临时表空间 107
4.8.2 Oracle如何使用指定表空间 107
第5章 表 109
5.1数据库中的数据类型 109
5.2创建表 110
5.2.1创建表 111
5.2.2指定表空间 112
5.2.3指定存储参数 112
5.3修改表 113
5.3.1增加和删除列 114
5.3.2更新列 115
5.3.3重命名表 117
5.3.4更改表的存储表空间 117
5.3.5更改表的存储参数 118
5.3.6删除表定义 118
5.4表的完整性约束 119
5.4.1主键约束(PRIMARY KEY) 119
5.4.2外键约束(FOREIGN KEY) 122
5.4.3唯一性约束(UNIQUE) 126
5.4.4非空约束(NOT NULL) 127
5.4.5检查约束(CHECK) 128
5.4.6禁用和激活约束 130
5.5项目案例:设计医生与病人之间的关系表 131
5.6习题 133
5.7实践疑难解答 134
5.7.1添加主键约束出现操作错误 134
5.7.2如何删除NOT NULL约束 135
第6章 管理控制文件和日志文件 137
6.1管理控制文件 137
6.1.1控制文件概述 137
6.1.2创建控制文件 138
6.1.3控制文件的备份与恢复 141
6.1.4移动与删除控制文件 143
6.2管理日志文件 144
6.2.1日志文件概述 145
6.2.2创建日志文件组及其成员 145
6.2.3重新定义日志文件成员 147
6.2.4切换日志文件组 148
6.2.5清空日志文件组 149
6.2.6删除日志文件组及其成员 150
6.2.7查看日志文件信息 150
6.3管理归档日志 151
6.3.1归档日志概述 152
6.3.2设置数据库模式 153
6.3.3设置归档目标 154
6.3.4归档文件格式 156
6.3.5设置归档进程的跟踪级别 157
6.3.6查看归档日志信息 158
6.4项目案例:查看数据文件、控制文件和日志文件 160
6.5习题 161
6.6实践疑难解答 162
6.6.1数据文件丢了怎么办 162
6.6.2 Oracle数据库控制文件移动后无法打开数据库 163
第7章 SQL语言基础 164
7.1基本查询 164
7.1.1查询命令SELECT 164
7.1.2使用WHERE指定过滤条件 165
7.1.3使用DISTINCT关键字获取唯一记录 170
7.1.4使用GROUPBY子句分组 171
7.1.5使用HAVING子句过滤分组 172
7.1.6使用ORDER BY子句排序 173
7.1.7使用算术运算符 175
7.2 SQL更新数据 175
7.2.1插入数据——INSERT操作 175
7.2.2更新数据——UPDATE操作 177
7.2.3删除数据——DELETE操作 178
7.3基本函数 178
7.3.1字符函数 179
7.3.2数值函数 184
7.3.3日期时间函数 188
7.3.4聚合函数 189
7.4数据一致性与事务管理 192
7.4.1 Oracle中的数据一致性 192
7.4.2 Oracle中的事务 193
7.4.3 Oracle中的事务处理 193
7.4.4设置保存点 195
7.4.5事务处理原则 196
7.5项目案例:查看各个部门的员工工资详情 198
7.6习题 199
7.7实践疑难解答 201
7.7.1 Oracle中SELECT语句如何实现查询行数限制 201
7.7.2将列值为NULL的数据放在排序结果的最前面 201
7.7.3为何会报ORA-00979的错误信息 202
第8章 子查询与高级查询 204
8.1子查询 204
8.1.1在WHERE子句中使用子查询 204
8.1.2在HAVING子句中使用子查询 205
8.1.3在FROM子句中使用子查询 206
8.1.4使用IN操作符实现多行子查询 207
8.1.5使用ANY操作符实现多行子查询 208
8.1.6使用ALL操作符实现多行子查询 209
8.1.7实现多列子查询 209
8.1.8实现嵌套子查询 210
8.1.9在UPDATE语句中使用子查询 212
8.1.10在DELETE语句中使用子查询 213
8.2联合语句 213
8.2.1使用UNION操作符 213
8.2.2使用UNION ALL操作符 214
8.2.3使用INTERSECT操作符 215
8.2.4使用MINUS操作符 215
8.3连接查询 216
8.3.1使用等号(=)实现多个表的简单连接 216
8.3.2使用INNER JOIN实现多个表的内连接 217
8.3.3使用OUTER JOIN实现多个表的外连接 217
8.4项目案例:获取各个部门中工资最高的员工信息 220
8.5习题 221
8.6实践疑难解答 224
8.6.1出现ORA-01427的错误问题 224
8.6.2如果子查询返回多列怎么办 225
8.6.3IN和EXISTS之间的区别及用法 225
8.6.4嵌套、连接和简单查询分别适用于什么情况 227
第9章 PL/SQL基础 228
9.1 PL/SQL概述 228
9.1.1 PL/SQL语言特点 228
9.1.2 PL/SQL的基本语法 229
9.2 PL/SQL编程结构 231
9.2.1基本语言块 231
9.2.2 PL/SQL数据类型 232
9.2.3变量和常量 233
9.2.4复合数据类型 234
9.3条件分支语句 236
9.3.1 IF条件分支语句 236
9.3.2 CASE语句 240
9.4循环控制语句 243
9.4.1无条件循环 244
9.4.2 WHILE循环 245
9.4.3 FOR循环 246
9.5游标 248
9.5.1游标简介 248
9.5.2显式游标 250
9.5.3隐式游标 253
9.5.4动态游标 255
9.6异常处理 258
9.6.1异常处理概念 258
9.6.2预定义异常 259
9.6.3非预定义异常 260
9.6.4自定义异常 262
9.7项目案例:获取指定部门下的所有员工信息 264
9.8习题 265
9.9实践疑难解答 267
9.9.1 PL/SQL块与SQL*Plus命令的区别 267
9.9.2 PL/SQL中使用游标的问题 268
第10章 PL/SQL高级应用 270
10.1触发器 270
10.1.1语句触发器 271
10.1.2行触发器 273
10.1.3 INSTEAD OF触发器 277
10.1.4系统事件触发器 280
10.1.5用户事件触发器 282
10.1.6触发器的相关操作 283
10.2自定义函数 285
10.2.1函数的基本操作 285
10.2.2函数的参数 286
10.3存储过程 289
10.3.1创建与调用存储过程 289
10.3.2存储过程的参数 291
10.3.3存储过程的其他操作 294
10.4程序包 295
10.4.1程序包的规范 295
10.4.2程序包的主体 296
10.4.3调用程序包中的子程序 298
10.4.4程序包的其他操作 299
10.5项目案例:实现对员工的增加和删除功能 299
10.6习题 302
10.7实践疑难解答 303
10.7.1创建存储过程时出现语法错误 303
10.7.2 SQL、 T -SQL与PL/SQL的区别 304
第11章 用户权限与安全 306
11.1用户 306
11.1.1创建用户 306
11.1.2修改用户密码 308
11.1.3删除用户 310
11.1.4管理用户会话 310
11.2用户配置文件 311
11.2.1创建用户配置文件 311
11.2.2查看配置文件信息 313
11.2.3修改与删除配置文件 314
11.3权限 314
11.3.1系统权限 315
11.3.2对象权限 318
11.4角色 321
11.4.1系统预定义角色 321
11.4.2创建角色 322
11.4.3修改用户的默认角色 323
11.4.4管理角色 323
11.4.5与角色相关的数据字典 326
11.5项目案例:用户权限 327
11.6习题 329
11.7实践疑难解答 330
11.7.1 Oracle角色权限 330
11.7.2 Oracle里角色的密码怎么用呢 330
11.7.3 WITH ADMIN OPTION和WITH GRANT OPTION 331
第12章 SQL语句优化 332
12.1一般的SQL语句优化技巧 332
12.1.1 SELECT语句中避免使用“*” 332
12.1.2 WHERE条件的合理使用 334
12.1.3使用TRUNCATE替代DELETE 335
12.1.4在确保完整性的情况下多用COMMIT语句 335
12.1.5减少表的查询次数 336
12.1.6使用EXISTS替代IN 337
12.1.7用表连接替代EXISTS 338
12.2合理连接表 339
12.2.1 FROM子句中表的顺序 340
12.2.2 WHERE子句的条件顺序 341
12.3有效使用索引 341
12.3.1使用索引的基本原则 341
12.3.2避免对索引列使用NOT关键字 342
12.3.3总是使用索引的第一个列 344
12.3.4避免在索引列上使用IS NULL和IS NOT NULL 344
12.3.5监视索引是否被使用 345
12.4习题 346
12.5实践疑难解答 348
12.5.1多次查询数据库的效率问题 348
12.5.2如何使用NOT EXISTS替代NOT IN 349
12.5.3为什么Oracle语句不走索引 349
第13章 其他模式对象 350
13.1索引 350
13.1.1索引类型 350
13.1.2创建索引 354
13.1.3创建B树索引 355
13.1.4创建位图索引 357
13.1.5创建函数索引 358
13.1.6管理索引 359
13.2临时表 362
13.2.1临时表概述 362
13.2.2临时表的创建与使用 363
13.3视图 365
13.3.1创建视图 366
13.3.2更新视图中的数据 368
13.4序列 372
13.4.1序列的创建与使用 373
13.4.2修改序列 375
13.4.3删除序列 376
13.5同义词 376
13.5.1管理公有同义词 376
13.5.2管理私有同义词 378
13.6项目案例:使用序列实现批量插入数据的功能 380
13.7习题 382
13.8实践疑难解答 383
13.8.1查询视图数据引起临时表空间暴涨 383
13.8.2创建索引出现ORA-01452的错误 384
第14章 数据加载与传输 385
14.1 Data Pump工具的概述 385
14.2使用Data Pump工具前的准备 386
14.3使用Data Pump Export导出数据 387
14.3.1Data Pump Export导出选项 387
14.3.2实现数据导出 390
14.4使用Data Pump Import导入数据 394
14.4.1Data Pump Import选项 394
14.4.2实现数据导入 397
14.5使用EXPDP和IMPDP工具传输表空间 400
14.6 SQL*Loader 403
14.6.1 SQL*Loader概述 403
14.6.2数据加载实例 405
14.7项目案例:导出和导入books表 407
14.8习题 409
14.9实践疑难解答 410
14.9.1 IMPDP导入数据问题 410
14.9.2 Oracle导入DMP出错 411
第15章 使用RMAN工具 413
15.1 RMAN简介 413
15.1.1 RMAN的特点 413
15.1.2 RMAN体系结构 415
15.2 RMAN操作 417
15.2.1 RMAN命令 417
15.2.2创建恢复目录 418
15.2.3连接目标数据库 419
15.2.4取消目标数据库的注册 420
15.3 RMAN备份 421
15.3.1 RMAN备份策略 421
15.3.2 BACKUP命令 422
15.3.3备份数据库 423
15.3.4增量备份 428
15.3.5镜像复制 429
15.4 RMAN恢复 431
15.4.1 RMAN恢复机制 431
15.4.2对数据库进行完全介质恢复 432
15.4.3恢复表空间和数据文件 433
15.4.4恢复归档日志文件 435
15.5项目案例:实现数据库的完全备份和恢复 436
15.6习题 438
15.7实践疑难解答 439
15.7.1无法按NOARCHIVELOG模式备份数据库 439
15.7.2如何避免数据库的备份文件损坏而导致数据库崩溃 441
第16章 权限管理系统 442
16.1系统分析与设计 442
16.1.1需求分析 442
16.1.2系统设计 443
16.2数据库设计 443
16.3公共模块设计 447
16.3.1数据模型公共类 447
16.3.2通用数据库连接类 448
16.4 DAO实现 451
16.4.1UserDao 451
16.4.2 RoleDaoIm 454
16.5系统模块的实现 456
16.5.1登录 456
16.5.2角色管理模块 461