持续更新...)

第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编程艺术深入体现结构学习笔记(持续更新...)的更多相关文章

  1. oracle database 9i/10g/11g 编程艺术 源代码下载

    背景 在找这本书的源码,搜到提供的都是需要C币下载的.比较固执(其实是穷). 在这本书的前言中提到源代码可以在 www.appress.com 上下载. 下面是该书在该网站上的链接: https:// ...

  2. Oracle 9i & 10g编程艺术-深入数据库体系结构-学习笔记(持续更新中)

    --20170322 --1.0 --更新表的统计信息begin dbms_stats.set_table_stats(user,'EMP',numrows => 10000);end; beg ...

  3. 《Linux命令、编辑器与shell编程》第三版 学习笔记---002

    <Linux命令.编辑器与shell编程>第三版 学习笔记---001 Linux命令.编辑器与shell编程 Shell准备 1.识别Shell类型 echo  $0 echo $BAS ...

  4. 安卓权威编程指南 - 第五章学习笔记(两个Activity)

    学习安卓编程权威指南第五章的时候自己写了个简单的Demo来加深理解两个Activity互相传递数据的问题,然后将自己的学习笔记贴上来,如有错误还请指正. IntentActivityDemo学习笔记 ...

  5. 第2课第3节_Java面向对象编程_继承性_P【学习笔记】

    摘要:韦东山android视频学习笔记  面向对象程序的三大特性之继承性:继承性的主要作用就是复用代码.继承性也有一定的限制,如图一 图一 1.我们在第2课第2节_Java面向对象编程_封装性_P 中 ...

  6. 《C++编程思想》部分章节学习笔记整理

    简介 此笔记为<C++编程思想>中部分章节的学习笔记,主要是第15章--多态性和虚函数 的学习笔记,此外还有少量其他章节的内容. 目录 文档:<C++编程思想>

  7. MFC文档视图结构学习笔记

    文档/视图概述 为了统一和简化数据处理方法,Microsoft公司在MFC中提出了文档/视图结构的概念,其产品Word就是典型的文档/视图结构应用程序 MFC通过其文档类和视图类提供了大量有关数据处理 ...

  8. 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 ...

  9. HIVE编程指南之HiveQL的学习笔记1

    // HiveQLa) 数据定义语言1 数据库表的一个目录或命名空间,如果用户没有指定数据库的话,那么将会使用默认的数据库default-----创建数据库CREATE DATABASE guoyon ...

随机推荐

  1. 三层+MVC导出Excel(2)

    背景: 出门在外,一切以健康为主,学习为辅,健康搞好了,学习也不能拉下,在外工作期间,我们在做数据导出的时候,自己封了一个类,利用NPOI进行数据导出Excel,自我感觉良好,特给大家分享一下,希望对 ...

  2. WebAPI接口调用身份验证

    Common public interface ICacheWriter { void AddCache(string key, object value, DateTime expDate); vo ...

  3. SpringHttpInvoker解析2-服务端实现

    主要的配置文件 <!-- 在Spring的httpInvoker服务 --> <bean id="httpInvokerUserService" class=&q ...

  4. express-17 持久化

    简介 所有网站和Web应用程序(除了最简单的)都需要某种持久化方式,即某种比易失性内存更持久的数据存储方式,这样当遇到服务器宕机.断电.升级和迁移等情况时数据才能保存下来. 文件系统持久化 实现持久化 ...

  5. Editthiscookie

    Editthiscookie,联调,.s环境加cookie才能访问.laravel

  6. spring 架构学习

    学习目的用于抽象业务逻辑,因spring本身就是抽象业务逻辑的框架,如做业务架构网面的工作 spring为不二之选. 一些好的网址 http://www.ibm.com/developerworks/ ...

  7. 转载:Robotium之Android控件定位实践和建议(Appium/UIAutomator姊妹篇)

    来源于:http://blog.csdn.net/zhubaitian/article/details/39803857 1. 背景 为保持这个系列的一致性,我们继续用SDK自带的NotePad实例应 ...

  8. android项目 在签名打包遇到的问题

    我在签名打包前,build success  ,可以把程序安装在手机上 然后签名打包的时候,build fail  ,原因采用了release 版本,因此这个时候在gradule build 添加下面 ...

  9. sqlmap使用手册

    转自:http://hi.baidu.com/xkill001/item/e6c8cd2f6e5b0a91b7326386 SQLMAP 注射工具用法 1 . 介绍1.1 要求 1.2 网应用情节 1 ...

  10. 来自于2016.2.23的flag

    正是中午,百废待兴,写点什么调节一会儿心情吧.正巧有许多的想法. 机房来了许多小朋友,多么像一年之前的我啊,想写题,心又纷乱,但不同的是他们比我强太多了. 停课是什么感觉?停课在机房与寒暑假.双休日在 ...