Oracle管理约束(四)Oracle修正约束数据

使用 ENABLE VALIDATE 选项激活约束时,如果已存在数据不满足约束规则,则会提示错误信息,并且激活约束会失败。此时必须对已存在 数据进行修正,已确保这些数据全部满嘴约束规则。具体方法如下:

(1)建立EXCEPTIONS 表

05:02:44 SQL> @$ORACLE_HOME/rdbms/admin/utlexcpt;

Table created.

05:05:33 SQL> alter table t1

05:06:26   2   add constraint pk_id primary key(deptno);

Table altered.

05:07:04 SQL> select constraint_name,constraint_type,status,table_name from user_constraints

05:07:14   2    where table_name='T1';

CONSTRAINT_NAME                C STATUS   TABLE_NAME

------------------------------ - -------- ------------------------------

PK_ID                          P ENABLED  T1

U_NAME                         U ENABLED  T1

05:07:17 SQL> alter table t1

05:07:29   2    disable novalidate primary key;

Table altered.

05:07:53 SQL> select constraint_name,constraint_type,status,table_name from user_constraints

05:07:57   2    where table_name='T1';

CONSTRAINT_NAME                C STATUS   TABLE_NAME

------------------------------ - -------- ------------------------------

PK_ID                          P DISABLED T1

U_NAME                         U ENABLED  T1

05:08:24 SQL> insert into t1 values (10,'Oracle','BeiJing');

1 row created.

05:09:00 SQL> insert into t1 values (20,'Cuug','BeiJing');

1 row created.

05:09:15 SQL> select * from t1;

DEPTNO NAME                 LOC

---------- -------------------- --------------------

10 Cisco                BeiJing

20 C%ommd               ShangHai

30 Commd                ShangHai

40 Microsoft            ShangHai

10 Oracle               BeiJing

20 Cuug                 BeiJing

6 rows selected.

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

(2)激活约束

05:09:52 SQL> alter table t1

05:09:54   2    enable validate primary key exceptions into exceptions;

alter table t1

*

ERROR at line 1:

ORA-02437: cannot validate (SCOTT.PK_ID) - primary key violated

(3)确定不满足约束规则的行

05:12:19 SQL> select deptno ,rowid from t1

05:12:21   2    where rowid in (select row_id from exceptions) for update;

DEPTNO ROWID

---------- ------------------

10 AAANQPAAEAAAAHEAAA

20 AAANQPAAEAAAAHFAAA

10 AAANQPAAEAAAAHHAAB

20 AAANQPAAEAAAAHHAAC

(4)修正数据

05:13:49 SQL> select deptno from t1;

DEPTNO

----------

10

20

30

40

10

20

6 rows selected.

05:13:51 SQL> update t1 set deptno=50 where rowid='AAANQPAAEAAAAHHAAB';

1 row updated.

05:14:27 SQL> update t1 set deptno=60 where rowid='AAANQPAAEAAAAHHAAC';

1 row updated.

05:14:43 SQL> select deptno from t1;

DEPTNO

----------

10

20

30

40

50

60

6 rows selected.

(5)激活约束

05:15:44 SQL> alter table t1

05:15:45   2   enable validate primary key ;

Table altered.

时间: 2024-07-31 08:57:16

Oracle管理约束(四)Oracle修正约束数据的相关文章

提升用户体验和交付应用程序 Oracle管理云获得多行业用户认可

2月23日,甲骨文宣布Oracle管理云(Oracle Management Cloud)业务实现大幅增长,在其上市后一年内即在全球赢得近950家新客户和合作伙伴,包括FORS.IDEA Cellular和Safexpress,它们均选择Oracle管理云来提高IT资源利用率,提升开发运维生产力,确保关键应用程序持续保持运行. Oracle管理云是Oracle云平台(Oracle Cloud Platform)的一部分,集成了一整套的新一代监测.管理和分析云服务,利用机器学习和大数据技术处理客户

Oracle 11g系列—6—Oracle中表的约束

完整性约束指的是数据库中数据的正确性和相容性.主要指下面的: primary key 主键 foreign key 外键 unique 唯一 not null 非空 check 检查约束 在Oracle中,使用constraint(英文的意思就是约束)关键字 为约束命名.如果用户没有命名,那么系统会自动会用户创建 的约束命名. OK,那我们接着就详细讲讲这些. 一.Not null 约束 从字面很好理解,就是非空约束,表 示某些列的值不可缺少的,在插入数据的时候,如果没有为它赋值,那么会提示错误

Oracle 9i基于视图(view)的约束声名

从Oracle 9i开始,Oracle允许对于视图(view)进行主键.唯一键.外键约束的声名.NOT NULL约束可以从基表继承,所以不允许显示声明. 由于视图约束仅仅是声明而已,所以其状态只能是DISABLE NOVALIDATE. 以下是一个简单范例说明: 更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/ 由于此约束仅仅为"约束声明",所以不具有实际约束力: 作者:51cto博客 Oracle

利用Oracle管理服务器将数据导入导出

在Oracle 9i中可以方便的把数据导出为文件,或者从文件导入.通过Oracle的管理服务器(Oracle Management Server,OMS)可以方便的实现,整个操作过程中有很多地方需要解释说明,但是完整的指导资料不多.各大论坛上很多所谓的高手,对该主题的回答往往是,高手是不用OMS的,用exp/impl吧.如果你执意追问,他多半会告诉你,其实我也不知道.如果有一份文档可以傻瓜式的指导他们如何来做,大多数人会欣喜若狂且若无其事的下载保存,回去慢慢研究. 使用EntERPrise Ma

oracle-初学ORACLE数据库,关于非空约束问题请教大家。

问题描述 初学ORACLE数据库,关于非空约束问题请教大家. 建表的时候有些字段设置了not null,但是插入记录时并没有哪一行插入记录,为什么会报错了?01400, 比如所有A/B/C三个字段,A设置类not null 但是我要插入记录时并不需要给A插入记录,只想给B/C插入记录.insert int table_name(b,c) values(value1,values2); 这样,报错了,无法将null插入A这个很不理解,请求大神,帮助一下. 解决方案 你已经把A设置为非空了,当插入这

Oracle管理索引(二)Oracle管理索引基本概念

1.索引的概念 索引是用于加速数据存取的数据库对象.合理地使用索引可以大大降低I/O次数. 2.索引的功能:对记录进行排序,加快表的查询速度. 3.索引的分类: (1)单列索引和复合索引 单列索引是基于单个列所建立的索引:复合索引时基于两列或多列所建立的索引. SQL>CREATE    INDEX    emp_idx1   on  emp( ename, job); SQL>CREATE    INDEX    emp_idx2   on   emp (job  , ename); 可以在

Oracle内存结构详解(三) Oracle管理Share Pool

SGA中的共享池由库缓存(Library Cache).字典缓存(Dictionary Cache).用于并行执行消息的缓冲以及控制结构组成. Shared Pool的大小由参数SHARED_POOL_SIZE决定.9i中,在32位系统下,这个参数的默认值是8M,而64位系统下的默认值位64M.最大为4G. 10g 以后可以通过SGA_TARGET 参数来自动调整. 对于Shared Pool的内存管理,是通过修正过的LRU算法表来实现的. 1.库缓存(Library Cache) Librar

为什么Oracle有时会用索引来查找数据?

当你运用SQL语言,向数据库发布一条查询语句时,ORACLE将伴随产生一个"执行计划",也就是该语句将通过何种数据搜索方案执行,是通过全表扫描.还是通过索引搜寻等其它方式.搜索方案的选用与ORACLE的优化器息息相关. SQL语句的执行步骤 一条SQL语句的处理过程要经过以下几个步骤. 1 语法分析 分析语句的语法是否符合规范,衡量语句中各表达式的意义. 2 语义分析 检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限. 3 视图转换 将涉及视图的查询语句转换为相应的对基表查询

Oracle内存结构详解(二) Oracle管理Buffer Cache

Buffer Cache是SGA区中专门用于存放从数据文件中读取的的数据块拷贝的区域.Oracle进程如果发现需要访问的数据块已经在buffer cache中,就直接读写内存中的相应区域,而无需读取数据文件,从而大大提高性能(内存的读取效率是磁盘读取效率的14000倍).Buffer cache对于所有oracle进程都是共享的,即能被所有oracle进程访问. 和Shared Pool一样,buffer cache被分为多个集合,这样能够大大降低多CPU系统中的争用问题. 1.Buffer c

100个GB的数据,放在ORACLE数据库中,然后基于大数据平台处理

问题描述 100个GB的数据,放在ORACLE数据库中,然后基于大数据平台处理,求助 解决方案 解决方案二:你确定你的是大数据?解决方案三:引用1楼War_Craft_World的回复: 你确定你的是大数据? 100G数据第一相比普通数据够大第二是数据简称大数据解决方案四:直接上阿里云就是了,有数据处理,要不就是自己搭建环境,