首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入解析:Oracle由11g而始的数据库一致读行为的改变

但从Oracle 11g开始,Oracle更改了在某些特定条件一致读的行为,这使得一些看起来不合常理的行为在Oracle 11g以及后续的版本中得以出现,即在Oracle 11g以及后续的版本中,当满足一定的条件时...RowCR Optimization通过隐含参数“_row_cr”来控制,但遗憾的是,Oracle在11g及其后续的版本中将这个参数的默认值改成了TRUE,这意味着上述这种“在满足特定的条件时,Oracle...就不做一致读”的行为在Oracle 11g及其后续的版本中在默认情况下就已经被开启了,这也许有些激进。...Oracle选择做了RowCR Optimization。...最后,我们来总结一下,从上述测试过程我们可以得到如下结论: 在Oracle 11g以及后续的版本中,默认情况下(即隐含参数“_row_cr”的值为TRUE的情况下),如果是通过唯一性索引去访问数据,则我们就可以马上读到

894100

Oracle导入导出的常见错误

' 组件   ORA-06550: 第 1 行, 第 15 列:   PL/SQL: Statement ignored   EXP-00000: 导出终止失败   Oracle不同版本导入导出存在一些问题...,比如从Oracle 9i中exp出来的dmp文件(在安装有oracle 9i的机器上使用exp命令),可以imp到Oracle 11g中去(装有Oracle 11g的机器),但是反过来确实不行。...,存在违反约束的数据,此时就是需要创建约束,可以采用novalidate子句,或者找出不规则的数据,清除之后再重新创建约束,可以参考《Oracle违反约束数据的workaround》和《表中已存重复数据的情况...方案3,没有授予DBA角色,但一些环境下,可能不会允许随意授予角色,例如建荣曾举了一个案例,《对IMP-00013问题的思考(r3笔记第71天)》。...因此可以说没有最佳方案,只有最合适方案,针对不同的场景,选择最适合的,这才是最重要的。

2.7K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    一次由查询转换引起的性能问题的分析

    在10g和11g里面,Oracle的处理方式有哪些不同? 问题分析 ? 为了解答以上问题,首先需要对SQL的基本语法与查询转换(QueryTransformation)的概念与原理有一定了解。...之后,分别对3个表创建第一个字段C1列的单列索引。最后,收集统计信息。 ? 案列1:GROUP BY 与 Join Predicate Pushing ?...下面我们看下在Oracle 11g的情况。 ? 可以看到,执行计划完全改变: ID:6,可以看到VIEW PUSHED PREDICAT,说明优化器进行视图合并(View Merge)失败。...可以看到,Oracle 11g里比Oracle 10g 使用了更多的查询转换。Oracle每次的版本更新都会带来查询转换领域的不断更新。...与FIRST_ROWS提示不同,FIRST_ROWS(N)提示是基于成本的,而非基于规则,即计算N行成本以后选择执行计划。所以,与FIRST_ROWS相比更灵活,但也更不好预测其执行计划的结果。

    1.1K50

    一个执行计划异常变更的案例 - 外传之绑定变量窥探

    ; 在Oracle看来,是两条完全不同的SQL,即对应SQL文本哈希值不同,因为where条件中一个id是1,一个是2,1和2的ASCII是不同的,可实际上这两条SQL除了查询条件不同,其他的文本字符均一致...,尽管如此,这种情况下,Oracle还是会重复执行解析的操作,生成各自的游标。...两条记录,说明Oracle认为这两条SQL是不同。...如果使用绑定变量, select * from t1 where id = :1; 每次将不同的参数值带入:1中,语义和上面两条相同,但对应哈希值可是1个,换句话说,解析树和执行计划是可以重用的。...简而言之,数据分布不均匀的列使用绑定变量,尤其在11g之前,受绑定变量窥探的影响,可能会造成一些特殊值作为检索条件选择错误的执行计划。

    66330

    【DB笔试面试570】在Oracle中,SQL优化在写法上有哪些常用的方法?

    如果进行比较的两个值的数据类型不同,那么Oracle必须将其中一个值进行类型转换使其能够比较。这就是所谓的隐式类型转换。通常当开发人员将数字存储在字符列时会导致这种问题的产生。...需要注意的是,在Oracle 11g之前,若NOT IN的列没有指定非空的话(注意:是主表和子表的列未同时有NOT NULL约束,或都未加IS NOT NULL限制),则NOT IN选择的是filter...操作(如果指定了非空,那么会选择ANTI的反连接),但是从Oracle 11g开始有新的ANTI NA(NULL AWARE)优化,可以对子查询进行UNNEST,NOT IN和NOT EXISTS都选择的是...有NULL存在,那么整个查询都不会有结果,在Oracle 11g之前,如果主表和子表的DEPTNO未同时有NOT NULL约束,或都未加IS NOT NULL限制,那么Oracle会选择filter。...(29)选择合适的索引。Oracle在进行一次查询时,一般对一个表只会使用一个索引。

    3.6K30

    书接上文:薛定谔的猫是如何诞生的?

    检查表的定义,发现一个特别之处,TYPE列的默认值本身就是NULL,是不是这个导致了Oracle的数据问题呢: SQL> CREATE TABLE T_TEST (ID NUMBER, NAME VARCHAR2...SQL> INSERT INTO T_TEST (ID) VALUES (1); INSERT INTO T_TEST (ID) VALUES (1) * 第 1 行出现错误: ORA-01400: 无法将...显然不太可能是常规问题导致的bug,Oracle经过这么多年这么多版本的磨练,应该不会在11g还出现这种问题,而且这个问题还是第一次碰到。综上所述,推断问题可能是11g新特性所引入的bug。...分析到这里,问题的答案也呼之欲出了,没错,导致问题的就是11g新增的快速添加非空默认值的功能,这个诡异的问题可以通过下面的三步简单的重新: SQL> create table t_def (id number...------------- -------- 1 a Oracle确实允许NOT NULL列的默认值为NULL,如果不指定默认值那么就相当于默认值为NULL,但是对于11g新增的新特性而言

    960100

    执行计划:Oracle的Profile特性与SQL执行计划的稳定性

    SQL Profiles 是 Oracle 10g 引入的一项新特性,并且在11g中被广泛的使用,其核心功能可以说是 Outlines 的进化。...这里的问题在于执行计划 ID=1 的那一行,Oracle 优化器评估 T1 like '%T1%' 返回的结果行数为 2500 行,即 T1 表总行数的 5%,如果 2 个表采用 index range...所以这里可以看出来,由于 Oracle 优化器过高地估计了 T1 表经过 like 操作过滤返回的行数,也就过高地估计了nest loop 的成本,最终也就选择了不是最优的执行计划。...一些复杂的 SQL,我经常会先通过 SQL Tuning Advisor 来分析一下,看能不能让 Oracle自已找出一个更好的执行计划。...将 T1 表的统计信息中的表行数改为 500 万,Oracle 就会评估为返回 5000000*5%*0.01161091426=2903 行。

    1.6K90

    【云和恩墨大讲堂】谈Oracle表新增字段的影响

    作者简介 刘晨,网名bisal,Oracle 10g/11g OCM,并国内首批Oracle YEP成员,博客:blog.itpub.net/bisal 很多人在做一些表设计时会留出几个reverse的字段...上面我们了解到了新增字段的SQL语句背后,Oracle大致做了什么操作。接着,我们通过实验来看下不同方式新增字段的效率。...的官方文档也介绍了,Oracle增加了这种新特性,对新增字段操作做了上面这些优化, 如果新增一个含有默认值的字段,那么会立即更新每一行,在更新过程中,会有一个EXCLUSIVE级别的锁在该表上。...这样一来,如何选择11g上新增字段的方式,看来是有一个比较清晰的方向了。...原因就是前面介绍过的11g新特性,新增一个有默认值的NOT NULL约束的字段,默认值不会像以前一样,插入每条记录中,而是会存储于数据字典表,Oracle允许NOT NULL列默认值为NULL,因此对于

    2.5K70

    【性能优化】一个执行计划异常变更的案例(上)

    作者简介: 刘晨,网名bisal,Oracle 10g/11g OCM,并国内首批Oracle YEP成员, 博客:blog.itpub.net/bisal 案例介绍 今天快下班的时候,几位兄弟来聊一个问题...这个场景可以看出,Oracle的CBO模式会根据字段的取值比重调整对应的执行计划,无论如何,都会选择成本值最低的一个执行计划,这也是CBO优于以前RBO的地方,这里仅用于实验,因为一般OLTP的应用会使用绑定变量的写法...在Oracle看来,是两条完全不同的SQL,即对应SQL文本哈希值不同,因为where条件中一个id是1,一个是2,1和2的ASCII是不同的,可实际上这两条SQL除了查询条件不同,其他的文本字符均一致...,尽管如此,这种情况下,Oracle还是会重复执行解析的操作,生成各自的游标。...两条记录,说明Oracle认为这两条SQL是不同。

    1.2K100

    Oracle部署就是这么简单

    20G 2.7 下一步,即已完成准备创建虚拟机的准备 2.8 编辑虚拟机相关配置 内存建议1G及以上(不建议少于512M): 选择系统路径 网络适配器选择桥接模式(各模式区别可自行学习、比较) 其他参数可按需调整...unzip,解压后会新增一个/sharedisk/11G/database目录,里面是解压后的所有oracle安装文件。...创建操作系统组和用户 [root@ORACLE1 11G]# id oracle //确认是否存在oracle用户 [root@ORACLE1 11G]# groupadd oinstall [root...修改OS内核参数 [root@ORACLE1 11G]# vi /etc/sysctl.conf //在文件最后增加 fs.aio-max-nr = 1048576 fs.file-max = 6553600...11G]# vi /etc/profile //在文件最后增加 if [ $USER = "oracle" ]; then if [ $SHELL = "/bin/ksh" ]; then

    1.4K30

    Oracle性能优化-子查询到特殊问题

    精通包括Oracle、MySQL、informix等多种关系型数据库,有丰富的数据库架构设计开发经验。就职于宜信。...1、空值问题 首先值得关注的问题是,在NOT IN子查询中,如果子查询列有空值存在,则整个查询都不会有结果。这可能是跟主观逻辑上感觉不同,但数据库就是这样处理的。因此,在开发过程中,需要注意这一点。...第二个值得关注的是,在11g之前,如果主表和子表的对应列未同时有NOT NULL约束,或都未加IS NOT NULL限制,则Oracle会走FILTER。...11g有新的ANTI NA(NULL AWARE)优化,可以正常对子查询进行UNNEST。 ? 注意此时的关联字段OBJECT_ID,是可为空的。...示例模拟了11g以前的情况,此时走了最原始的FILTER ? 在确定子查询列object_id不会有NULL存在的情况下,又不想通过增加NOT NULL约束来优化,可以通过上面方式进行改写 ?

    1.9K70

    产品体验官:Tapdata Cloud && Oracle 数据库实时同步(详细版)

    、选择同步表 4、启动任务 5、运行监控 6、报错处理 7、同步测试 写在最后 前言 最近新接触了一个数据同步的产品:Tapdata Cloud 。...如上图所示,在两个数据存储节点中,Tapdata Agent 作为处理的桥梁,在用户简单设置后即可全自动的将数据从一个节点中读取(源端),并写入至另一个节点(目标端)。...接入、同步、异构: 在数据同步功能中,Tapdata 中台支持多种数据存储的接入,其不仅支持同类型数据存储(如 MySQL 到MySQL,Oracle 到Oracle)之间的数据同步,同时也支持不同类型数据存储...1、创建任务 配置源端和目标端连接,选择上一步中新建的连接: 2、配置任务 设置任务,本次选择 全量+增量 类型,全量写入模式: 3、选择同步表 这里选择需要同步的表,添加到目标端:...from lucifer; select * from tapdata; 查看监控页面,可以发现源端的操作记录均已同步: ❤️ 至此,Oracle 不同版本间的实时数据同步测试已经完成。

    96430

    alter table新增字段操作究竟有何影响?(下篇)

    EXCLUSIVE允许锁定表的查询操作,但禁止其他session对该表的任何操作 我觉得这里Oracle的介绍是有些问题的,不够严谨,至少没有说清楚到底限制有何不同,接下来,我们还是通过实验的方式进行说明...(3) 如果两个session同时对一行记录做DML操作,则第一个session会报ORA-60死锁错误,直接被Oracle检测退出,第二个session继续处于hang。...最后,引述一篇博客的总结(http://blog.itpub.net/9252210/viewspace-626388/) 2级锁Row-S 行共享(RS):共享表锁,sub share,锁有:Select...从官方文档的介绍看,其实从11g之后,对于新增字段,Oracle进行了优化, Adding Table Columns If a new column is added to a table, the...如何选择11g上新增字段的方式,看来是有一个比较清晰的方向了。

    73020

    Oracle优化05-执行计划

    一个行源可能是一个表、一个索引、也可能是一个子查询。 比如: ? ---- 当CBO无法准确的获取到Cardinality时,将会发生什么?...创建一个数据分布非常不均匀的表T Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 Connected as...生成SQL的执行计划时Oracle在对SQL做硬分析时的一个非常重要的步骤,它制定出一个方案告诉Oracle在执行这条SQL时以什么样的方式访问数据: 索引扫描? 全表扫描?...大致意思是: 从T2表读取第一行数据 是否符合条件 如果符合就拿出一行来,然后到索引IND_T1 中找到对应的值,然后重复,直到把整个T2表全表扫描完,这个过程就叫NESTED LOOPS ....(疑惑待思考) 最后将结果返回: Operation SELECT STATEMENT ---- 执行计划中的值说明 ID列: 是一个序号,注意,它的大小并不是执行的先后顺序。

    79010

    重新格式化部门表(Oracle Pivot 行转列函数)

    重新格式化部门表 ❤️ 原题 ❤️ ☀️ 解题思路 ☀️ Pivot 函数简介 创建测试表 Department 插入测试数据 执行 Pivot 行转列函数 ❄️ 写在最后 ❤️ 原题 ❤️ 部门表...编写一个 SQL 查询来重新格式化表,使得新的表中有一个部门 id 列和一些对应 每个月 的收入(revenue)列。...Oracle 11G 中出现的新特性 Pivot 行转列函数正好可以解此题。 下面先了解一下 Pivot 函数,主要用于进行行转列操作。 基本语法如下: SELECT ... FROM ......执行 Pivot 行转列函数 根据题意:已确定需要查出的列为 ID 和 12个月份,月份列对应的 REVENUE 的值需要进行汇总 (SUM) 显示。...❄️ 写在最后 关于 Pivot 行转列函数,还有 UNPivot 函数,感兴趣的朋友可以翻阅官方文档,或者参考以下文章: PIVOT and UNPIVOT Operators in Oracle Database

    59110

    Oracle 12C打补丁的简单尝试(r10笔记第55天)

    之前整合过几个测试环境,是整合到11g中,发现有几个钉子户实在没法迁移了,因为几个数据库中的用户名有重复的,同义词也有重复的,处理起来就很纠结。...所以最后就暂且放下,现在12c也有些年头了,咱也得充分利用它的亮点特性不是。...从以上的信息可以看出,这个模拟测试的环境,数据库软件是裸奔状态,没有任何的补丁。来到MOS上下载即可,快捷方式是图里显示的方式了。 ? 搜索过滤后得到的结果很清晰,就两行记录,选择的是第一条。...这个补丁是比较新的了。7月份的。 ? 顺着链接进来,就是一个标准的下载界面,简单确认一下,就开始下载吧,这个补丁大概有200多M。...这个步骤可以参考MOS的文档说明 How To Download And Install The Latest OPatch(6880880) Version (Doc ID 274526.1) 所以需要下载一个新版本的

    1.4K80

    Oracle面试题集锦

    如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。...简言之数据库五大范式: 第一范式:对于表中的每一行,必须且仅仅有唯一的行值.在一行中的每一列仅有唯一的值并且具有原子性....一般情况,Oracle 以循环的方式写入Online redo log 文件,当填满第一个redo log文件后写第二个,直至最后一个,最后一个被填满后,后台进程LGWR就覆盖第一个,在Archivelog...其实SID 就是Oracle 实例的标识,不同的SID 对应不同的内存缓冲(SGA)和不同的后台进程。...一个rowid唯一的表示一行数据,该行对应的数据块是通过一次i/o得到的,在此情况下该次i/o只会读取一个数据库块。 在索引中,除了存储每个索引的值外,索引还存储具有此值的行对应的ROWID值。

    2.7K21
    领券