金融其它

关于load数据时目标表的一致性检查的一个问题

在牛新庄的书上看到讲解load时有一个地方不大明白:如果导入的数据一部分不满足目标表某列的一个约束,那么导入完成之后,该表会处于set integrity pending state必须执行set integrity语句将表的状态改回正常状态,但是不符合约束的数据仍会保留。如果不符合约束的数据仍会保留...显示全部
在牛新庄的书上看到讲解load时有一个地方不大明白:
如果导入的数据一部分不满足目标表某列的一个约束,那么导入完成之后,该表会处于set integrity pending state
必须执行set integrity语句将表的状态改回正常状态,但是不符合约束的数据仍会保留。
如果不符合约束的数据仍会保留的话那设置这个挂起状态有什么意义?这里面的数据一直仍留在目标表里??收起
参与19

查看其它 17 个回答shicarl的回答

shicarlshicarl系统工程师
补充下吧,load过程总体是分了4步:
1)装载,数据页级别的,这个时候会检查文件内容是否符合表定义,不符合的会被删除,或者导出到MODIFIED BY DUMPFILE=XXX 目录下;
2)构建索引;
3)删除重复值,只检查唯一性约束的地方,不检查CHECK和参考完整性约束。这里可以创建EXCEPTION TABLE存储被删除的行。如果不指定,则默认就删除掉。
4)索引复制。如果LOAD指定了ALLOW READ ACCESS和USE TABLESPACE,此阶段会将索引数据从系统临时表空间中复制到索引表空间。
而表上是否有check之类的约束,编目表中有记录,LOAD知道有约束就会把其置为SET INTEGRITY PENDING 状态,不需要检查约束本身。

另外关于不符合约束的数据存在于表里的影响,就CHECK而言,视CHECK定义时是否指定用于查询优化(ENABLE  QUERY  OPTIMIZATION)。如果用在查询优化中(默认情况),那违反CHECK的数据在查询时基本会被忽视掉。反之则需更多考虑其影响。
IT分销/经销 · 2012-03-30
浏览904

回答者

shicarl
系统工程师

shicarl 最近回答过的问题

回答状态

  • 发布时间:2012-03-30
  • 关注会员:1 人
  • 回答浏览:904
  • X社区推广