[读书]10g/11g编程艺术深入体现结构学习笔记(持续更新...)
持续更新...)
第8章
1.在过程性循环中提交更新容易产生ora-01555:snapshot too old错误.P257
(这种情况我觉得应该是在高并发的情况下才会产生)
假设的一个场景是系统一边读取表,一边在修改这个表,就会同时生成查询所需要的undo信息.update生成了undo信息,你的查询可能会利用这些undo信息来得到待更新数据的读一致视图.如果提交了所做的更新,就会允许系统重用刚刚填写的undo段空间.如果系统确实重用了undo段空间,擦除了旧的undo数据(查询随后会用到这些undo信息),你就有大麻烦了.select会失败,update也会中途停止。
反过来讲,在过程性循环中如果提交不那么频繁也可能会造成undo表空间被占满的情况,发生ora-30036错误,不能扩展undo表空间段。 v$undostat
2.在JDBC连接中关闭自动提交。P261
Connection con = DriverManager.getConnection("jdbc:oracle:oci:@database","scott","tiger");
conn.setAutoCommit(false);
3.分布式事务2PC协议。P262
oracle为实现分布式事务的提交,使用了一个2pc协议(two-phase commit protocol,二段提交协议)来做到这一点。2pc是一个分布式协议,如果一个修改影响到多个不同过的数据库,2pc允许原子性的提交这个修改。它会在提交之前尽可能的关闭分布式失败窗口。在多个数据库之间的一个2pc事务中,其中一个数据库(通常是客户最初登录的那个数据库)会成为分布式事务的协调器。这个站点会询问其他站点是否已经准备好提交。实际上,这个站点会转向其他站点,问他们是否准备就绪。其他的每个站点会报告它的“就续状态”(Yes或NO),如果只要有一个站点投票No,整个事务就会回滚。如果所有站点都投票Yes,站点协调器会广播一条消息,使每个站点上的提交成为永久性的。
在2Pc投票之前,任何分布式错误都会导致所有站点回滚。
第9章
1.撤销操作是逻辑恢复到原来的样子 P271
通常来说对undo有一个误解,认为undo用于将数据库物理地恢复到执行语句或事物之前的样子,但实际上并非如此.数据库只是逻辑地恢复到原来的样子,所有修改都被逻辑地取消,但是数据结构以及数据库快本身在回滚后可能大不相同.原因在于:在所有多用户系统中,可能会有数十 数百甚至上千千个并发事务。数据库的主要功能之一就是协调对数据的并发访问。也许我们的事物在修改一些块,而一般来讲往往会有许多其他事务也在修改这些块。因此,不能简单地将一个块放回到事务开始前的样子,这样会撤销其他人(其他事务)的工作。
注意:直接路径操作会绕过表上的undo生成
2.11G新特性 延迟段创建 P272
11G下创建表,在没有插入数据之前表都是没有分配空间的。(deferred segment creating)
在执行create table 时不会分配任何存储空间,一个区段都不会分配。要延时到insert发生时才会真正创建段,回滚时,段将持久存储(段不会被删除)。
3.undo与redo 关系 P273
有意思的是,尽管undo信息存储在undo表空间或undo段中,但也会受到redo的保护。换句话来说,会把undo数据当成是表数据或索引数据一样,对undo的修改会生成一些redo,这些redo将记入日志。
4.回滚过程中从不涉及重做日志 P276
回滚过程中从不涉及重做日志。只有恢复和归档才会读取重做日志。这对于调优是一个很重要的概念:重做日志是用来写的(而不是用于读)。Oracle不会在正常的处理中读取重做日志。只要你有足够的设备,使得ARCH读取文件时,LGWR能够写到另一个不同的设备(也是redo文件放在不同位置盘),就不存在重做日志竞争。许多其他数据库(非Oracle)都把日志文件处理为“事务日志”,这些数据库没有把redo和undo分开,对于这些系统,回滚可能是灾难性的,回滚进程必须读取日志,而日志写入器正在试图写这个日志,这就像系统中最薄弱的环节引入了竞争。Oracle的目标是:可以顺序地写日志,而且在写日志时别人不会读日志。
5.必须非常谨慎地使用NOLOGGING模式 P287
必须非常谨慎地使用NOLOGGING模式,而且要与负责备份和恢复的人沟通之后才能使用。下面假设你创建了一个非日志模式的表,并作为应用的一部分(例如,升级脚本中使用了create table as select nologging)。用户白天修改了这个表。那天晚上,表所在的磁盘出了故障。"没关系,"DBA说,"数据库在用ARCHIVELOG模式运行,我们可以执行介质恢复。"不过问题是,现在无法从归档重做日志恢复最初的创建的表,因为根本没有生成日志。这个表将无法恢复。由此可以看出使用NOLOGGING操作最重要的一点是:必须与DBA和整个系统协调。如果你使用了NOLOGGING操作,而其他人不知道这一点,你可能就会拖DBA的后腿,使得出现介质失败后DBA无法全面恢复数据库。必须谨慎而且小心地使用这些NOLOGGING操作。
6.NOARCHIVELOG 模式下create index和rebuild index操作不会记录到操作日志中 P288
7.提交清除是怎么发生的 P291
在与我们的事务相关的提交列表中,Oracle会记录已修改的块列表。这些列表都有20个块,Oracle会根据需要分配多个这样的列表,直至达到某个临界点。如果我们修改iade块加起来超过了块缓冲区缓存大小的10%,Oracle会停止为我们分配新的列表。例如,如果缓冲区缓存设置为可以缓存3000个块,Oracle会为我们维护最多300个块(3000的10%).COMMIT作业时,Oracle会处理这些包含20个块指针的列表,如果块仍可用,它会执行一个很快的清理。所以,只要我们修改的块数没有超过缓存中总块数的10%,而且块仍在缓存中并且是可用的,Oracle就会在提交的时清理这些块。否则,它只会将其忽略(也就是说不清理)。
8.临时表也会生成redo P296 对于临时表只会为undo生成日志
第10章
1.表对应的段 P314
2.在手动段空间管理下freelists的设置 P319
3.pctfree/pctused
4.索引所占用的空间 P336
5.临时表的限制 P370
6.BTREE索引的扫描顺序
第11章 索引
1.索引的高度 P387
2.聚簇因子 P403
4.位图索引的一些缺点
[读书]10g/11g编程艺术深入体现结构学习笔记(持续更新...)的更多相关文章
- oracle database 9i/10g/11g 编程艺术 源代码下载
背景 在找这本书的源码,搜到提供的都是需要C币下载的.比较固执(其实是穷). 在这本书的前言中提到源代码可以在 www.appress.com 上下载. 下面是该书在该网站上的链接: https:// ...
- Oracle 9i & 10g编程艺术-深入数据库体系结构-学习笔记(持续更新中)
--20170322 --1.0 --更新表的统计信息begin dbms_stats.set_table_stats(user,'EMP',numrows => 10000);end; beg ...
- 《Linux命令、编辑器与shell编程》第三版 学习笔记---002
<Linux命令.编辑器与shell编程>第三版 学习笔记---001 Linux命令.编辑器与shell编程 Shell准备 1.识别Shell类型 echo $0 echo $BAS ...
- 安卓权威编程指南 - 第五章学习笔记(两个Activity)
学习安卓编程权威指南第五章的时候自己写了个简单的Demo来加深理解两个Activity互相传递数据的问题,然后将自己的学习笔记贴上来,如有错误还请指正. IntentActivityDemo学习笔记 ...
- 第2课第3节_Java面向对象编程_继承性_P【学习笔记】
摘要:韦东山android视频学习笔记 面向对象程序的三大特性之继承性:继承性的主要作用就是复用代码.继承性也有一定的限制,如图一 图一 1.我们在第2课第2节_Java面向对象编程_封装性_P 中 ...
- 《C++编程思想》部分章节学习笔记整理
简介 此笔记为<C++编程思想>中部分章节的学习笔记,主要是第15章--多态性和虚函数 的学习笔记,此外还有少量其他章节的内容. 目录 文档:<C++编程思想>
- MFC文档视图结构学习笔记
文档/视图概述 为了统一和简化数据处理方法,Microsoft公司在MFC中提出了文档/视图结构的概念,其产品Word就是典型的文档/视图结构应用程序 MFC通过其文档类和视图类提供了大量有关数据处理 ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(二)之Introduction to Objects
The genesis of the computer revolution was a machine. The genesis of out programming languages thus ...
- HIVE编程指南之HiveQL的学习笔记1
// HiveQLa) 数据定义语言1 数据库表的一个目录或命名空间,如果用户没有指定数据库的话,那么将会使用默认的数据库default-----创建数据库CREATE DATABASE guoyon ...
随机推荐
- 【java基础】面向过程~面向对象
相信大家都知道这两个东西,可是大家是如何知道的呢?我们又该如何区分这个东西到底是面向过程还是面向对象的呢? 那,我们首先就要知道什么是面向过程,什么是面向对象: 面向过程"(Procedur ...
- js循环添加事件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JAVA Day4
循 环 所有循环的流程 声明循环变量-->判断循环条件-->执行循环操作-->更新循环变量 不断执2 ...
- MATLAB plot函数的一些参数
直接从帮助文档中抓图,注意是颜色.线型什么的.
- no-jquery 03 Ajax
Ajax Requests GETting var xhr = new XMLHttpRequest(); xhr.open('GET', encodeURI('myservice/username? ...
- js:方法2. 字符串
String.charAt()/String.charCodeAt() string.charAt(n); n:The index of the character that should be re ...
- SPFA(建图) HDOJ 4725 The Shortest Path in Nya Graph
题目传送门 题意:有两种路径,每个点会分别在某一层,层相邻之间权值c.还有直接两点传送,花费w.问1到n的最短距离. 分析:1~n正常建边.然后n + a[i]表示i点在第a[i]层.然后再优化些就不 ...
- CSS background 属性
CSS 参考手册 实例 如何在一个声明中设置所有背景属性: body { background: #00FF00 url(bgimage.gif) no-repeat fixed top; } 亲自试 ...
- BZOJ3726 : PA2014Final Wykladzina
从上到下枚举下底边,维护$a[i]$表示$i$向上延伸多少距离里面没有坏点,$b[i]$表示$i$向上延伸多少距离里面最多只有1个坏点. 设$l0[i],r0[i]$表示以$a[i]$为最小值,往左往 ...
- BZOJ3607 : 数据网络
首先答案一定是包含直径某个端点的一个连通块里所有边权值之和,设直径为$AB$,以$A$和$B$分别为根进行处理. 首先按照最长路法则将这棵树进行树链剖分,那么每个叶子的贡献为它与它所在链顶端的点的距离 ...