oracle 延迟加载,延迟约束禁止直接路径插入
前两天测试的时候发现了这个现象,如果表中包含了延迟约束,则直接路径插入将转化为常规路径插入。
看一个简单的例子:
SQL> CREATE TABLE T (ID NUMBER, NAME VARCHAR2(30), AGE NUMBER(3));
表已创建。
SQL> INSERT /*+ APPEND */ INTO T
2 SELECT ROWNUM, TNAME, MOD(ROWNUM, 10)
3 FROM TAB;
已创建23行。
SQL> SELECT COUNT(*) FROM T;
SELECT COUNT(*) FROM T
*第1行出现错误:
ORA-12838:无法在并行模式下修改之后读/修改对象
使用APPEND方式的插入,Oracle会选择直接路径插入,而导致的结果就是插入完成后,当前会话无法访问这张表,而只能选择提交或回滚。
而如果在表上添加一个延迟约束:
SQL> COMMIT;
提交完成。
SQL> ALTER TABLE T ADD CONSTRAINT CK_T_AGE
2 CHECK (AGE < 120)
3 DEFERRABLE
4 INITIALLY DEFERRED;
表已更改。
SQL> INSERT /*+ APPEND */ INTO T
2 SELECT ROWNUM, TNAME, MOD(ROWNUM, 10)
3 FROM TAB;
已创建23行。
SQL> SELECT COUNT(*) FROM T;
COUNT(*)
----------
46
虽然是同样的插入语句,但是这次显然不是直接路径插入。因为插入执行后,T表仍然可以访问。
很明显,由于延迟约束的存在导致了APPEND提示没有生效,直接路径插入变成常规路径插入。
SQL> ALTER TABLE T DROP CONSTRAINT CK_T_AGE;
表已更改。
SQL> ALTER TABLE T ADD CONSTRAINT CK_T_AGE
2 CHECK (AGE < 120)
3 DEFERRABLE
4 INITIALLY IMMEDIATE;
表已更改。
SQL> INSERT /*+ APPEND */ INTO T
2 SELECT ROWNUM, TNAME, MOD(ROWNUM, 10)
3 FROM TAB;
已创建23行。
SQL> SELECT COUNT(*) FROM T;
COUNT(*)
----------
69
可以看到,只要约束是可延迟的,不管这个约束是否现在延迟生效,直接路径插入都会变成常规路径插入。
oracle 延迟加载,延迟约束禁止直接路径插入相关推荐
- oracle非延迟约束,Oracle可延迟约束Deferable的使用
标准规定,约束可以是deferrable或not deferrable(默认). not deferrable 约束在每一个DML语句后检查: deferrable 约束可以在每一个insert,de ...
- oracle延迟约束不起作用,Oracle可延迟约束Deferable的使用
3deferrable用途 3.1物化视图 物化视图(快照),这是它的主要用途.这些视图会使用延迟约束来进行视图刷新.在刷新物化视图的过程中,可能会破坏完整性,而且将不能逐句检验约束.但到执行COMM ...
- 小议Oracle外键约束修改行为
小议Oracle外键约束修改行为(一) Oracle的外键用来限制子表中参考的字段的值,必须在主表中存在.而且在主表的记录发生变化导致外键参考唯一约束值发生了变化时,定义了一系列的动作. 在SQL92 ...
- Oracle外键约束reference,oracle外键约束
-- 创建测试主表. ID 是主键. CREATE TABLE test_main ( id INT, value VARCHAR(10), PRIMARY KEY(id) ); -- ...
- oracle银行卡号检查约束,oracle约束学习(1)unique和check
有人说,没有索引, 拿什么来保证约束?姑且不论这话的对错,但约束的实现(除了not null),很多都是通过索引来快速定位约束的地方.unique约束会自动建立索引,pk也是.也因此,约束的很多问题总 ...
- 3.数据库操作相关术语,Oracle认证,insert into,批量插入,update tablename set,delete和truncate的区别,sql文件导入
1相关术语 语句 含义 操作 DML语句 (Data Manipulation Language) 数据库操作语言 insert update delete select DDL语言 (Date ...
- TIMING_06 VIVADO环境下的时序约束 之 输入延迟约束
由于该系列文章阅读有顺序性,所以请跳转至该系列文章第一篇从头开始阅读,并按照文章末尾指示按顺序阅读,否则会云里雾里,传送门在此: https://blog.csdn.net/qq_33486907/ ...
- Oracle外键约束修改行为(一)
Oracle的外键用来限制子表中参考的字段的值,必须在主表中存在.而且在主表的记录发生变化导致外键参考唯一约束值发生了变化时,定义了一系列的动作. 在SQL92标准中定义了几种外键改变后,如何处理子表 ...
- Oracle维护数据完整性——约束
Oracle维护数据完整性--约束 维护数据的完整性--约束 约束用于确保数据库数据满足特定的规则.在oracle和sql server等数据库中,not null(非空).unique(唯一).pr ...
最新文章
- CenterNet算法快速入门
- 关于 ORA-01033: ORACLE initialization or shutdown in progress
- 安卓 屏蔽子控件点击事件
- C# 调用C++写的dll的实现方法
- boost::fusion::as_list用法的测试程序
- nand ubi - 5 kernel和ubi
- c语言字符串中取最大字符串,使用C语言提取子字符串及判断对称子字符串最大长度...
- 从714里连续减去6减几次得0_数学干货 | 小学数学1—6年级基础知识整理 ,预习复习都能用...
- 百度网盘视频加速代码
- 【Henu ACM Round #13 A】 Hulk
- 高中生可发表论文的学术期刊涵盖TCR历史期刊
- 怎么安装redhat linux操作系统,Linux操作系统RedHat6.5安装
- 什么样的人适合做外贸?能做好外贸?(非外贸零售)
- 【Leetcode刷题】:Python:416. 分割等和子集
- 有空就来刷几道5G面试题系列 | 5G架构篇
- 云计算时代-虚拟云桌面,实现随时随地办公
- CAD字体大全 集合2458种字体
- springboot整合security(一)入门
- [工具设置]xp iis连接数破解
- 如何使用C#复制或移动Excel工作表?试试Aspose