第Ⅰ部分 SQL、PL/SQL和良好数据模型的重要性 3
第1章SQL和PL/SQL 3
1.1 SQL和PL/SQL介绍 3
1.2 SQL 4
1.3 PL/SQL 7
1.4本章小结 9
第2章 专家级的数据建模和实施业务逻辑 11
2.1实施业务逻辑 11
2.1.1数据库对象中的业务逻辑 12
2.1.2代码中的业务逻辑 12
2.2数据库设计和数据建模 13
2.2.1设计过程 13
2.2.2 Oracle SQL Developer Data Modeler介绍 17
2.3本章小结 22
第Ⅱ部分 未充分利用的SQL高级功能 25
第3章 处理高级且复杂的数据集 25
3.1设计数据库的一些工具 26
3.1.1表 26
3.1.2表簇 31
3.1.3视图和物化视图 32
3.1.4数据类型简介 35
3.1.5不可见列 44
3.1.6虚拟列 46
3.1.7属性聚类 47
3.1.8分区 49
3.1.9约束 51
3.2 SQL和PL/SQL实现需求的工具 51
3.2.1游标 52
3.2.2记录 54
3.2.3集合 56
3.2.4并行查询 67
3.2.5表函数和管道化表函数 68
3.3本章小结 69
第4章 正则表达式 71
4.1基本搜索和escape方法 72
4.2 regexp函数 74
4.3字符类 79
4.3.1贪心性和否定表达式 80
4.3.2向后引用 81
4.3.3检查约束 82
4.4真实案例 82
4.4.1打破限定字符串 83
4.4.2以字符串数字部分排序 85
4.5模式匹配:MATCH RECOGNIZE 88
4.6本章小结 92
第5章 基于版本的重定义 93
5.1计划停机 93
5.2术语 94
5.3概念 94
5.4准备:版本生效 96
5.4.1非版本和版本之间的限制 96
5.4.2创建新版本 98
5.5复杂级别 99
5.5.1替换PL/SQL代码 99
5.5.2改变表结构 102
5.5.3版本之间的数据同步 106
5.5.4丢失更新 114
5.6旧版本下线 115
5.6.1删除还是不删除 116
5.6.2改变默认版本 117
5.7 SQL Developer和基于版本的重定义 118
5.8 EBR和DBMS REDACT 120
5.9本章小结 122
第Ⅲ部分 重要的日常使用的高级PL/SQL 125
第6章从SQL中运行PL/SQL 125
6.1 SQL和PL/SQL函数 126
6.1.1 STANDARD包和DBMS STANDARD包 127
6.1.2使用PL/SQL简化嵌套的SQL函数 130
6.2 PL/SQL函数的注意事项 135
6.2.1参数、“纯度”等级和确定性 135
6.2.2上下文切换的开销 140
6.2.3“时间点视图”的遗失 156
6.2.4 PL/SQL结果高速缓存 158
6.2.5 DISP NAME函数的正确实现 167
6.3本章小结 168
第7章 PL/SQL的性能测量和剖析 169
7.1 SQL和RDBMS的性能测量 171
7.2性能测量带来的系统开销 171
7.3性能测量由开发人员执行,有时只有DBA能执行 172
7.4调试过程中的性能测量 172
7.5性能测量、剖析和调试的区别 172
7.5.1性能测量 173
7.5.2剖析 173
7.5.3调试 174
7.6 PL/SQL的性能测量 174
7.6.1 DBMS OUTPUT包 174
7.6.2日志表 185
7.6.3 SQL*Plus的命令SET APPINFO和SYS CONTEXT 201
7.6.4性能测量选项概览 202
7.6.5 性能测量包 202
7.7剖析 203
7.7.1用DBMS OUTPUT剖析生产环境代码的缺陷 203
7.7.2使用PLSQL LOG表 204
7.7.3性能测量强大威力的真实案例 207
7.7.4剖析和调试包 207
7.7.5剖析选项概览 236
7.8本章小结 236
第8章 动态SQL 239
8.1使用本地动态SQL 240
8.2使用DBMS_SQL包 243
8.2.1将结果集返回给客户端 243
8.2.2从PL/SQL调用一个隐式结果集 245
8.2.3 dbms_sql.to_refcursor函数 246
8.2.4 dbms-sql.to-cursor_number函数 248
8.3本章小结 250
第9章 PL/SQL用于自动化和管理 251
9.1 PL/SQL和DBA 252
9.2简单的特定任务PL/SQL脚本 252
9.2.1用PL/SQL探究LONG字段类型 252
9.2.2复杂SQL或简单PL/SQL:通过相同的执行计划识别SQL 254
9.2.3收集和保存会话状态的轻量级工具 256
9.2.4处理快速变陈旧的数据库统计信息 258
9.2.5一个灵活的PL/SQL编写的紧急备份脚本 258
9.3用PL/SQL控制管理类和批处理类任务 260
9.3.1主-明细控制表的核心 261
9.3.2日志表和错误表 269
9.3.3进程特定表 286
9.4对数据库开发人员和管理人员有帮助的PL/SQL包 286
9.4.1本书涉及的其他内置PL/SQL包 287
9.4.2 DBMS_WORKLOAD_REPOSITORY包 287
9.4.3 DBMS_METADATA包 293
9.4.4 UTL_FILE包 301
9.4.5 DBMS_UTILITY包 302
9.5本章小结 311
第Ⅳ部分 高级分析 315
第10章 使用Oracle Data Mining 工具进行库内数据挖掘 315
10.1 Oracle高级分析选项概览 316
10.2 Oracle Data Miner GUI工具 317
10.2.1安装Oracle Data Miner和演示数据集 318
10.2.2创建Oracle Data Miner工作流 319
10.3使用SQL和PL/SQL进行Oracle数据挖掘 319
10.3.1 Oracle数据挖掘PL/SQL API 320
10.3.2 Oracle数据挖掘SQL函数 322
10.4使用Oracle数据挖掘进行归类 322
10.4.1数据准备 322
10.4.2建立归类模型 332
10.4.3评估归类模型 337
10.4.4将归类模型应用到新数据 341
10.5 Oracle数据挖掘:其他技术 345
10.6 本章小结 345
第11章 Oracle R Enterprise 347
11.1 ORE透明层 348
11.2安装Oracle REnterprise 348
11.2.1安装条件 349
11.2.2服务器安装 349
11.2.3客户端安装 351
11.2.4使用Oracle示例环境 353
11.3连接Oracle数据库 354
11.4使用ORE浏览数据 357
11.5利用ORE构建数据挖掘模型 361
11.5.1关联规则分析 362
11.5.2构建决策树模型并对新数据评分 364
11.5.3构建神经网络模型并对新数据评分 365
11.6嵌入式R执行 366
11.6.1使用rqEval调用函数并返回一个数据集 366
11.6.2使用rqTableEval将数据挖掘模型应用于数据 368
11.6.3在仪表板中创建和使用ORE图形 371
11.7本章小结 372
第12章 Oracle Database 12c中的预测查询 373
12.1什么是预测查询和为什么需要它 374
12.1.1 Oracle分析函数 374
12.1.2分区子句的奥秘 375
12.2创建预测查询 376
12.2.1在SQL Developer中创建预测查询 376
12.2.2在Oracle Data Miner中创建预测查询 377
12.3使用SQL创建预测查询 380
12.3.1使用预测查询进行分类 380
12.3.2使用预测查询进行回归 381
12.3.3使用预测查询进行异常探测 383
12.3.4使用预测查询进行聚类 385
12.4用预测查询进行工作 387
12.5本章小结 387
第Ⅴ部分 数据库安全 391
第13章 数据编 写和掩蔽 391
13.1进行数据编写的原因 392
13.2进行数据编写时仅用PL/SQL的解决方案 393
13.2.1随机化 394
13.2.2为数据编写而准备的视图 397
13.2.3清理 400
13.3数据编写和掩蔽包 400
13.3.1固定值 402
13.3.2其他类型的数据编写 403
13.3.3使用SQL Developer访问 410
13.3.4策略管理 412
13.3.5清理 413
13.4本章小结 413
第14章 加密和哈希 415
14.1加密的定义 416
14.2加密介绍 416
14.2.1加密组件 417
14.2.2密钥长度的效力 417
14.2.3对称加密和不对称加密 418
14.2.4加密算法 419
14.2.5填充和链接 420
14.2.6加密包 420
14.2.7解密数据 426
14.2.8初始化向量或盐值 428
14.2.9密钥管理 430
14.2.10从防范DBA的角度保护数据 434
14.2.11加密RAW数据 435
14.3一套完整的加密解决方案 435
14.3.1选项1:修改表 436
14.3.2选项2:加密列本身并用视图显示解密数据 436
14.3.3密钥和表分开存储 436
14.3.4密钥存储 437
14.4透明数据加密(TDE) 437
14.4.1设置TDE 438
14.4.2向己存在的表中添加TDE 439
14.4.3表空间TDE 439
14.4.4进行TDE密钥和密码管理 440
14.4.5添加盐值 441
14.5密码学哈希 441
14.5.1“可疑的三明治”案例 441
14.5.2使用PL/SQL进行哈希操作 442
14.5.3哈希的其他用途 445
14.6消息验证代码 445
14.7综合训练:一个项目 447
14.7.1选项1 447
14.7.2选项2 448
14.8快捷参考 454
14.8.1 GETRANDOMBYTES 454
14.8.2 ENCRYPT 454
14.8.3 DECRYPT 455
14.8.4 HASH 455
14.8.5 MAC 456
14.9本章小结 457
第15章SQL注入和代码安全性 459
15.1执行模型 460
15.2程序安全性 466
15.2.1传统做法 467
15.2.2基于角色的程序安全性 469
15.3代码白名单 470
15.4限制继承权限 473
15.5 PL/SQL注入攻击 476
15.5.1输入字符串的清洁 479
15.5.2减少SQL注入的可能性 490
15.6本章小结 491
第16章 细粒度访问控制和应用上下文 493
16.1细粒度访问控制介绍 493
16.2虚拟专用数据库(VPD) 496
16.3需要了解VPD的原因 497
16.4一个简单的示例 498
16.5中级VPD 501
16.5.1执行更新检查 501
16.5.2静态策略与动态策略 502
16.6提升性能 512
16.6.1控制表访问的类型 514
16.6.2列敏感VPD 518
16.7其他动态类型 521
16.7.1共享静态策略 521
16.7.2上下文敏感策略 522
16.7.3共享上下文敏感策略 523
16.8排除故障 523
16.8.1 ORA-28110:策略函数或包存在错误 523
16.8.2 ORA-28112:无法执行策略函数 524
16.8.3 ORA-28113:策略谓词存在错误 524
16.8.4直接路径操作 524
16.8.5检查查询重写 525
16.9与其他Oracle功能交互 526
16.9.1引用完整性约束 526
16.9.2复制 527
16.9.3物化视图 527
16.10应用上下文 527
16.10.1一个简单的示例 528
16.10.2应用上下文中的安全性 529
16.10.3 VPD中作为谓词的上下文 530
16.10.4识别非数据库用户 533
16.11清理 535
16.12快捷参考 535
16.12.1 DBMS RLS包 536
16.12.2数据字典视图 537
16.13本章小结 538