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

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

但从Oracle 11g开始,Oracle更改了在某些特定条件一致读的行为,这使得一些看起来不合常理的行为在Oracle 11g以及后续的版本中得以出现,即在Oracle 11g以及后续的版本中,当满足一定的条件时...60秒缓冲时间内将表EMP中empno=7369的记录所对应的ename列的值从“SMITH”改为“CUIHUA”并commit,这样通过观察Session 1中存储过程p_demo_cr_read_change...我们现在去Session 2中把表EMP中empno=7369的记录所对应的ename列的值恢复成原先的“SMITH”并且在列empno上创建一个名为idx_emp_empno的非唯一性索引: Session...我们现在去Session 2中把表EMP中empno=7369的记录所对应的ename列的值恢复成原先的“SMITH”并且在列empno上创建一个名为idx_uk_emp_empno的唯一性索引: Session...——————– ——————– _row_cr TRUE 从如下查询结果中我们可以看到,表EMP的13条记录全部在datafile 4,block 151这个数据块中: SQL> select empno

894100

PostgreSQL技术大讲堂 - 第24讲:TOAST技术

PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注...建表时自动创建Toast表 --创建表 create table toast_t(id int,vname varchar(48),remark text); --其中remak数据类型是text,列值长度超过...bytes · Toast表的计算案例(五) --查看各列的数据变化,说明在列尺寸超过2k的时候就会把数据存放到toast表中: testdb=# select pg_column_size(id),...数据没有被更新时,不用去更新Toast表 Toast表的缺点 1.对大字段的索引创建是一个问题,有可能会失败,通常不建议在大字段上创建,全文检索是一个解决方案 2.大字段的更新会有点慢,其它DB也存在相同问题...Oracle大对象段存储特点 11g版本中推出了针对 LOB字段处理的新技术:SecureFiles 该技术在性能、可管理性、易用性等方面,具有如下具体特点和优势: · 提供数据去重、压缩和透明加密功能

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

    Oracle 分区表的 FOR 语句,你这样用过吗?

    在11g以后,Oracle简化了指定分区的方式,不再需要明确指定分区名称,而是可以通过指定分区键值列数据的方式来指向对应的分区。 指定一个分区除了使用分区名称外,很多时候还可以使用FOR语句。...从11g开始,对分区进行操作的时候,不仅可以使用分区名称,还可以使用FOR语句。 在10g中,MERGE RANGE分区的语句如下: 表已创建。...而在11g中,除了使用分区名称外,还可以使用FOR语句来代替,比如: 表已创建。 这种语法的优势对于范围分区还不是很明显,而对于INTERVAL分区就十分有意义了。...最终发现了问题所在,FOR语句中指定的并不是分区定义时使用的值,而是存储在当前分区中的值: 表已更改。...因此Oracle并非根据分区定义来判断分区,而是根据用户给出的值,来判断所属分区,所以,P1分区和SYS_P78分区的合并完全可以写成: 表已更改。

    67320

    【DB笔试面试560】在Oracle中,虚拟列索引(Virtual Column Indexes)的作用是什么?

    ♣ 答案部分 在Oracle 11g之前的版本中,如果需要使用表达式或者一些计算公式,那么需要创建数据库视图;如果需要在这个视图上使用索引,那么会在表上创建基于函数的索引。...虚拟列是Oracle 11g新引入的一项技术,虚拟列是一个表达式,在运行时计算,不存储在数据库中,不能更新虚拟列的值。...⑤ 由于虚拟列的值由Oracle根据表达式自动计算得出,所以,虚拟列可以用在SELECT,UPDATE,DELETE语句的WHERE条件中,但是不能用于DML语句。 ⑥ 可以基于虚拟列来做分区。...⑨ 虚拟列值只能是标量,不能是其它类型(例如集合、LOB、RAW等类型)。 ⑩ 可以把虚拟列当做分区关键字建立分区表,这是Oracle 11g的另一新特性称为虚拟列分区。...⑫ 表达式中的所有列必须在同一张表。 ⑬ 虚拟列表达式不能使用其它虚拟列。

    1.3K20

    新增字段的一点一滴技巧

    在Oracle中给表新增字段的需求,已经写了不少文章了,太多的经历告诉我们,一个简单的需求,如果不了解背后的原理,就很可能出现性能问题。...测试记录如下,200万记录的表,未设NOT NULL,新增字段,不使用默认值和使用默认值是null,执行时间上,是等价的, SQL> select count(*) from t; COUNT(*)...约束包含默认值的情况下,是将默认值存储于数据字典中,不用更新表, ?...p=1560)发表了篇文章,在Oracle 12c版本中,论证了对不存在非空约束的列添加默认值时,采用同样的方式,只会更新数据字典,之后新数据才会更新,不会update之前现有列数据,效率非常高, ?...利用这个特性,在特殊场景下,是可以作为一种优化的手段,例如《千万级表数据更新的需求》这个案例中,通过这个特性,更新一张千万级表的数据,从原来方案需要几个小时,缩短到了1分钟,神不神奇?

    1.1K20

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

    目前掌握的信息如下: (1) 应用已经很久未做过更新上线了。 (2) 据开发人员反馈,从之前的应用日志看,未出现处理时间逐步变长的现象。...如下是测试表: 其中name列是非唯一索引,NAME是A的有100000条记录,NAME是B的有1条记录,值分布是不均匀的,上一篇文章中我们使用如下两条SQL做实验, select* from t1...但若绑定变量列分布不均匀,则绑定变量窥探的副作用会很明显,第二次以后的每次执行,无论绑定变量列值是什么,都会仅使用第一次硬解析窥探的参数值,这就有可能选择错误的执行计划,就像上面这个实验中说明的,第二次使用...简而言之,数据分布不均匀的列使用绑定变量,尤其在11g之前,受绑定变量窥探的影响,可能会造成一些特殊值作为检索条件选择错误的执行计划。11g的时候则推出了ACS(自适应游标),缓解了这个问题。...虽然OLTP系统,建议高并发的SQL使用绑定变量,避免硬解析,可不是使用绑定变量就一定都好,尤其是11g之前,要充分了解绑定变量窥探副作用的原因,根据绑定变量列值真实分布情况,才能综合判断绑定变量的使用正确

    1.2K100

    【DB笔试面试666】在Oracle中,高并发高负载情况下,如何给表添加字段、设置DEFAULT值

    因为Oracle在执行上述操作过程中,不仅要更新数据字典,还会刷新全部的记录,并且会使得Undo表空间暴涨,所以,正确的做法是将更新数据字典和更新字段值分开。...,从Oracle 11g开始,当添加一个带有默认值的非空列时(注意2个条件,NOT NULL和默认值),Oracle不会使用这个默认值来物理更新现有存在的行,Oracle只会存储这个新列元数据(NOT...从Oracle 12c开始,支持具有默认值的空列的添加列的DDL语句优化,即如下2条SQL语句的效率是一样的,也不存在锁表的现象了: 1ALTER TABLE LKILL.T_KILL ADD A_LHR...11g中,加了NOT NULL约束的SQL语句,可以在瞬间完成添加列的操作,而只设置了默认值的SQL语句使用了25秒的时间。...,在Oracle 12c中,添加具有默认值的DDL优化已扩展到包括默认值的空列。

    3.6K30

    Oracle 数据库创建导入的方法

    对于Oracle 11g/12c,使用如下命令: SQL> CONNECT ot@orcl 输入口令: 已连接。...创建数据库表 要为示例数据库创建表,需要从SQL plus执行ot_schema.sql文件中的语句, 在SQL plus的文件中执行SQL语句,可以使用下面的命令(语法): SQL> @path_to_sql_file...SQL> 在这个语句中,我们从user_tables表中选择了table_name列中的值,并按字母顺序排列了表名。如上结果中所见,有12个表名按预期方式返回。...通过用另一个表替换表名(联系人),可以检查所有表中的数据。如果这是您第一次使用数据库系统,这对您来说是一个很好的练习。...要删除上面模式中的表,请执行: SQL>@F:\website\oraok\ot\11g\ot_drop.sql

    1.3K00

    基于同一主机配置Oracle 11g Data Guard(logical standby)

    针对下面的情形在写redo的时候会附加列值唯一信息              表存在主键,则主键值会随同被更新列一起做为update语句的一部分              表无主键,存在非空的唯一索引/...约束时,则最短的非空的唯一索引/约束会随同被更新列做为update语句的一部分              表无主键,无唯一索引/约束,所有可定长度的列(除long,lob,long raw,object...type,collection类型列)连同被更新列作为update语句的一部分              注,存在函数唯一索引的表能够被实现SQL Apply,只要修改的行能够被唯一鉴别,但该索引函数不能用作唯一性去鉴别更新的行...       对于那些可由应用程序确保表上的行记录唯一的,又不希望创建主键的情形,可以通过创建RELY约束,以避免维护主键所带来的额外开销 --可使用下面的方式为表添加RELY约束 SQL> ALTER...a、首先创建物理备库 创建物理备库的方法很多,对于Oracle 11g而言,可以直接从active database来创建,也可以基于10g 的RMAN使用duplicate方式来创建。

    92010

    针对Oracle的审计方案

    主题:针对Oracle的审计方案 数据库环境:Oracle 11g 1.需要对连接数据库的行为进行审计 需要对连接数据库的行为进行审计,其中包含例如审计那些错误密码登录等失败的登录行为。...比如查询最近一天使用错误密码登录的行为; --aud$ select sessionid, userid, userhost, comment$text, spare1, ntimestamp# from...查询审计结果(列较多,建议图形化工具查看): SQL> select * from dba_audit_trail order by timestamp; 可以从结果看到所有DML操作都会对应一条action_name...为“SESSION REC”的值。...3.需要迁移审计数据到指定表空间 创建新的表空间,比如TBS_AUDIT,然后迁移审计数据从默认的SYSTEM到TBS_AUDIT表空间; 核心步骤如下: --查看当前AUD$对象所在的表空间 SELECT

    71420

    Oracle 11g 分区表创建(自动按年、月、日分区)

    Oracle 11g 支持自动分区,不过得在创建表时就设置好分区。   如果已经存在的表需要改分区表,就需要将当前表 rename后,再创建新表,然后复制数据到新表,然后删除旧表就可以了。...一、为什么要分区(Partition)   1、一般一张表超过2G的大小,ORACLE是推荐使用分区表的。   ...4、便于维护,可扩展:11g 中的分区表新特性:Partition(分区)一直是 Oracle 数据库引以为傲的一项技术,正是分区的存在让 Oracle 高效的处理海量数据成为可能,在 Oracle 11g...二、oracle 11g 如何按天、周、月、年自动分区 2.1 按年创建 numtoyminterval(1, 'year') --按年创建分区表 create table test_part (  ...-- 当某一行更新时,如果更新的是分区列,并且更新后的列植不属于原来的这个分区, -- 如果开启了这个选项,就会把这行从这个分区中 delete 掉,并加到更新后所属的分区,此时就会发生 rowid 的改变

    3.5K10

    Oracle压缩黑科技(三):OLTP压缩

    但是,您可能还记得,我开始写这篇文章的时候使用了freelist管理,而不是ASSM,当我使用ASSM重复简单的“插入50,000行数据”时,结果表的大小从227块跳到了250块。...在我的表的第一个块中,我有十九个标记覆盖了11个连续的列,这意味着“真实”行中的一个字节表示11列数据 。 如果只是更新这些列中的一个,Oracle会将一个字节扩展为全11列!...当然,通过为pctfree设置一个合适的值,可以最大限度地减少行迁移。但是,Oracle使用了一些巧妙的技巧来最大化压缩,除非你非常了解数据和业务操作,否则很难决定一个好的值。...也很可能会进入多列标记,因此即使“真实”数据更改针对的是不期望被压缩的列,也会发生大量扩展。(当然,与基本压缩一样,如果列更新没有完成,则不会发生标记的扩展。)...如果您要使用OLTP压缩,则需要针对每个表找出合适的pctfree值,从而将行迁移保持在可接受的水平。

    2.4K70

    Oracle优化02-锁和阻塞

    锁的产生是因为并发,并发的产生是因为系统需要,系统需要是因为用户需要……. ---- 由唯一性约束引起的阻塞 场景模拟 Oracle Database 11g Enterprise Edition Release...我们创建T表的时候,x字段设置为主键,以确保这个列值的唯一性,然后我们在session1中更新x=1的数据, 并没有提交,此时session2 中 也同样的对x=1的数据进行了update ....session1没有提交,此时数据库会认为你还没有决定是否将这条数据更新到库表中,数据库会等待你做决定(提交or回滚)。为了确保数据不重复,数据库只能让session2等待,直到你做出决定。...AE锁在11g中引入,是一个版本锁. ---- 这里我们分析一下上述的统计结果: 通过select sid from v$mystat; 查到当前session对应的sid ....通过这个视图,我们很快发现了问题的所在, session2卡住是因为session1上有个事物没有提交,而在这张表上有要求列值唯一性的约束(表建有主键)。

    43430

    Oracle面试题集锦

    所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。...简言之数据库五大范式: 第一范式:对于表中的每一行,必须且仅仅有唯一的行值.在一行中的每一列仅有唯一的值并且具有原子性....虽然emp数据行有很多,ORACLE缺省认定表中列的值是在所有数据行均匀分布的,也就是说每种deptno值各有25万数据行与之对应。...pctfree:空闲百分比,用来为一个块保留的空间百分比,以防止在今后的更新操作中增加一列或多列值的长度。 freelist:可用列表是表中的一组可插入数据的可用块。...表中表示的统计信息的译码统计名VSYSSTAT 表VSESSETA中当前每个统计的全面的系统值VSESSETA中当前每个统计的全面的系统值 VSESSETA中当前每个统计的全面的系统值VTHREAD 从控制文件中得到线索信息

    2.7K21

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

    为了证明增加字段的操作究竟做了什么,有什么影响,打算使用10046事件来看看,一个11g的库,创建测试表T,执行10046事件。...我们直接看关闭10046事件之前的最后一句: 执行的是col$表的更新语句。从表名看,col$是列的数据字典表,使用了绑定变量,那这些值是什么,就成了问题的关键。 5....像上面第一次增加列的操作时,会同时更新sys.ecol$和sys.col$数据字典表,若以后再修改这个默认值,则只是会修改sys.col$的值,且以后每次查询也是从sys.col$的default$列获取默认值...$已经变为了1, 11g的官方文档也介绍了,Oracle增加了这种新特性,对新增字段操作做了上面这些优化, 如果新增一个含有默认值的字段,那么会立即更新每一行,在更新过程中,会有一个EXCLUSIVE级别的锁在该表上...原因就是前面介绍过的11g新特性,新增一个有默认值的NOT NULL约束的字段,默认值不会像以前一样,插入每条记录中,而是会存储于数据字典表,Oracle允许NOT NULL列默认值为NULL,因此对于

    2.5K70

    Oracle统计信息的那点事儿

    引言 在Oracle的11g版本中,统计信息为自动收集功能,在部署安装11g Oracle软件过程中,其中有一个步骤便是提示是否启动这个功能(默认是启用这个功能);且有时候在生产环境中,还会对一些对象做手动统计信息的搜集...CBO是一种比RBO更加合理、可靠的优化器,它是从ORACLE 8中开始引入,但到ORACLE 9i中才逐渐成熟,在ORACLE 10g中完全取代RBO,CBO是计算各种可能“执行计划”的“代价”,即COST...好了,这里改说下优化器依赖哪些统计信息,优化器统计范围: 表统计: --行数,块数,行平均长度;all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN; 列统计: --列中唯一值的数量...自动收集统计信息的情况: 自动统计收集在夜间进行,对所有更改活动中等的对象自动统计应该足够; 使用如下命令查看; SELECT WINDOW_NAME, REPEAT_INTERVAL,...在创建了基于索引的统计后,应该在表上收集新的列统计,这可以通过调用过程设置METHOD_OPT的FOR ALL HIDDEN COLUMNS; 3.

    1.8K20

    12C 新特性 | 标量子查询自动转换

    11g 数据库中,对于 CUSTOMERS 表中 CUST_CREDIT_LIMIT 大于 50000 的每一行,在SALES 表上的标量子查询都必须被执行。...(图: Oracle 11g 数据库的计划显示,对于 customers 表返回的每一行,标量子查询都必须被取值) 将标量子查询展开并且将其转换为一个连接,就免除了为外层查询的每一行都进行求值的必要性。...trace 文件中,我们可以看出 Oracle 无法转换的原因是有空值,优化器在此步不能转换。...4、12C 标量子查询案例 下面是来自某银行系统的真实案例模拟,数据库 SQL 代码是从 11g 中直接拿来在 12C 中使用,运行出现报错。...5、总结 ① 12C 标量子查询优化器可以实现自动改成一个外连接,仅仅出现在一些聚集函数; ② 并不是所有的聚集函数都会出现,比如 count; ③ 如果连接列中中出现一些空值,优化器是不会自动改写转换的

    97730

    【DB笔试面试553】在Oracle中,什么是不可见索引?

    ♣ 题目部分 在Oracle中,什么是不可见索引? ♣ 答案部分 索引维护是DBA的一项重要工作。...在Oracle 11g里,Oracle提供了一个新的特性来降低直接删除索引或者禁用索引的风险,那就是不可见索引(Invisible Indexes)。 从Oracle 11g开始,可以创建不可见索引。...还可以创建最初不可见索引,执行测试,然后确定是否使该索引可见。可以查询DBA_INDEXES数据字典视图的VISIBILITY列来确定该索引是VISIBLE还是INVISIBLE。...不可见索引是从Oracle 11g开始出现的,所以,在Oracle 11g之前的版本中索引没有INVISIBLE的功能,那么应该如何处理呢?...这样的话,索引的定义并未删除,只是索引不能再被使用,也不会随着表数据的更新而更新。当需要重新使用该索引时,需要用REBUILD语句重建、然后更新统计信息。对于一些大表来说,这个时间可能就非常长。

    66220

    12C 新特性 | 标量子查询自动转换

    11g 数据库中,对于 CUSTOMERS 表中 CUST_CREDIT_LIMIT 大于 50000 的每一行,在 SALES 表上的标量子查询都必须被执行。...可以发现 11g 查询标量子查询成本还是蛮高的,要全表扫描 TAB1 两次,而 TAB1 刚好是大表,导致的逻辑读也刚好是 12C 中的差不多两倍,可见性能肯定相差很多。...trace 文件中,我们可以看出 Oracle 无法转换的原因是有空值,优化器在此步不能转换。...4 12C 标量子查询案例 下面是来自某银行系统的真实案例模拟,数据库 SQL 代码是从 11g 中直接拿来在 12C 中使用,运行出现报错。...5 总结 ① 12C 标量子查询优化器可以实现自动改成一个外连接,仅仅出现在一些聚集函数; ② 并不是所有的聚集函数都会出现,比如 count; ③ 如果连接列中中出现一些空值,优化器是不会自动改写转换的

    1.5K70
    领券