精华内容
下载资源
问答
  • 有一次Oracle插入数据冲突,需要删除旧数据再重新插入,但是在想要根据主键删除旧的行数据时发现找不到主键索引所包含的列名。 select column_name from dba_ind_columns where index_name = 'SYS_C0079903' and ...

    问题描述:

    有一次Oracle插入数据冲突,需要删除旧数据再重新插入。

    现在根据索引名称(index_name)和用户名(index_owner)即可找到主键包含的列。

    但是在想要根据主键删除旧的行数据时发现查不到主键索引所包含的列名

    select column_name from dba_ind_columns where index_name = 'SYS_C0083355' and index_owner = 'CESHI'

    就上面这一条语句正常来说应该显示主键所包含的列,如下图

    但是我的查询结果却是Null,这就导致想要找到主键包含的列不成功。

    但是在执行下面这条语句时约束名SYS_C0083355是确实存在的,而且这个约束确实属于这个表。

    select * from sys.DBA_CONSTRAINTS where table_name='AC'

    结果中有SYS_C0083355,也就是说这个此索引存在但是没有包含任何列或者约束存在但是约束对应的这个索引不存在

    目前的解决方案是:

    删除原有的主键所含列的索引和主键,重新为这个表建立主键,此时就会恢复正常。

    语句如下:

    ALTER TABLE 用户名.表名 DROP CONSTRAINT SYS_C0083355(约束名);
    
    drop index 索引名;
    
    alter table 用户名.表名 add  primary key(字段1,字段2);
    

    经过测试发现,如果先为某一个字段建立索引,然后再把它设置为主键,就会出现这种情况。但是先设置主键再去给这个字段设置索引则会报错:ORA-01408: 此列列表已索引,说明一个列组合应该只允许有一个索引。

     

    分析如下:

    唯一索引不允许出现重复值,主键索引不仅不允许重复值而且不允许出现Null。

    图中可以看到把ID列约束成了主键,而主键是唯一的,所以这个约束也应该是唯一的,建立唯一约束的同时会自动建立唯一索引。所以猜测上文的错误是因为手动设置索引在前,设置主键在后,导致因设置主键而默认生成的这个约束发现该字段已经有了索引,于是这个约束就不能再去新建索引。而我代码中的index_name只是刚好和约束名同名而已,约束存在,索引不存在。

     

    错误复现步骤:

    1.建表,不要设置主键。

    2.为表中某一字段创建索引。

    3.把上一步的字段设为主键。

    4.执行  

    select * from sys.DBA_CONSTRAINTS where table_name='AC(表名)'

    可以看到CONSTRAINT_NAME字段,即索引的名字。

    5.执行

    select * from dba_ind_columns where index_owner = 'CESHI(用户名)'
    AND  index_name='SYS_C0083355(索引名)'

    6.看到结果中表名为AC的行中COLUMN_NAME这一列为空

     

    如果哪位同学清楚其中原因,请评论在下方或者私信我,一起学习下。

    展开全文
  • oracle数据库 主键索引重建 alter table table_name drop primary key; alter table table_name add constraint pk_index_name primary key(row_name);

    oracle 数据库 主键索引重建

    alter table table_name drop primary key;

    alter table table_name add constraint pk_index_name primary key(row_name);

    展开全文
  • oracle 数据库 主键索引重建

    千次阅读 2019-03-27 18:03:45
    oracle数据库 主键索引重建 alter table table_name drop primary key; alter table table_name add constraint pk_index_name primary key(row_name);

    oracle 数据库 主键索引重建

    alter table table_name drop primary key;

    alter table table_name add constraint pk_index_name primary key(row_name);
     

    展开全文
  • 主键索引和普通索引的最大差别是:主键索引不能有空值和重复值;一个表里只能有一个主键索引,普通索引可以有多个。 #Oracle创建普通索引 CREATE INDEX index_emp_...#Oracle创建主键索引 ALTER TABLE emp_test A...

    主键索引和普通索引的最大差别是:主键索引不能有空值和重复值;一个表里只能有一个主键索引,普通索引可以有多个。

    #Oracle创建普通索引
    CREATE INDEX index_emp_deptno ON emp_test(deptno);
    #Oracle删除普通索引
    drop INDEX index_emp_deptno ;
    #Oracle创建主键索引
    ALTER TABLE emp_test ADD CONSTRAINT pk_emp_deptno PRIMARY KEY (deptno);
    #Oracle删除主键索引
    ALTER TABLE emp_test DROP CONSTRAINT pk_emp_deptno;
    
    #查看当前用户的索引详细信息
    SELECT * FROM user_indexes
    

    与MySQL的创建语法有所不同

    mysql> alter table account add primary key (account_number);
    
    展开全文
  • 重建主键索引为非压缩索引 删除约束的同时删除该约束对应的索引 数据库:Oracle 11.2.0.4 因为项目需要,需要将一个主键索引由压缩索引改为非压缩索引 这里的index_name代表了主键名称,也代表主键索引名称,两个...
  • oracle按照主键索引查询不到数据

    千次阅读 2015-09-16 22:49:29
    oracle奇怪问题,按照主键查询不到数据,ora-08102:未找到索引关键字
  • ORACLE:主键索引更换表空间

    千次阅读 2010-03-18 20:09:00
    Oracle 中,对于已经建好的主键,是自动创建索引的,并且索引是创建到当前的表空间中的,如果要将索引更换到其它表空间,可以使用如下的方法,超简单: alter index index_aaa rebuild tablespace newtablespace...
  • 所以,本文的目的是总结创建主键约束时,采用不同的方法创建索引后,主键与该索引之间的关系及相互影响。为配合本文的描述和测试,首先创建如下测试表:create table test (id number,c1 varcha...
  • ORACLE重建索引总结

    2011-12-13 10:32:28
    1、索引重建是否有必要,一般看索引是否倾斜的严重,是否浪费了空间, 那应该如何才可以判断索引是否倾斜的严重,是否浪费了空间, 对索引进行结构分析(如下): SQL>Analyze index index_name validate ...
  • --删除表主键 ALTER TABLE jw_jxrw_wxlsrwkcb DROP CONSTRAINT PK_JW_...--删除索引 drop index PK_JW_JXRW_WXLSRWKCB;--添加主键 -- Create/Recreate primary alter table jw_jxrw_wxlsrwkcb add constraint PK_JW_
  • 最近因为要对现有的表结构进行更改,并重建一套与重改之前一模一样的一套表,所以整理了一些SQL,以后备用。(至于为什么要这样做,是因为需要将源表清空,但数据量过大,时间比较紧,所以就不再备份了,索性直接...
  • 在使用数据泵导入数据时,有时需要禁用掉主键约束。...禁用约束,删除索引Oracle? Database Administrator's Guide 11g Release 2 (11.2)--》Managing Integrity ConstraintsYou can use the ALTER TABLE st...
  • oracle 重建分区索引

    千次阅读 2019-10-07 17:56:30
    分区表的所有分区相当于一个单独的表。 创建在分区表上的索引,就相当于在所有分区上单独创建的索引(主键索引除外)。 重建分区表的索引回报:  ORA-14086:不能将分区索引...当然,主键索引可以直接重建。 不...
  • Oracle重建索引 约束

    2014-04-28 17:01:46
    rebuild索引 alter index indexname rebuild online;   同时删除oracle中有主外键关系的两张表select constraint_name from user_constraints WHERE table_name ='表名';--得到约束名字----先删除约束,然后...
  • ORA-01578: ORACLE 数据块损坏 (文件号 7, 块号 170643) ORA-01110: 数据文件 7: 'F:\JHEMR\JHEMRV63.DBF' ORA-06512: 在 line 23 数据库没有可用的rman备份可用来修复坏块。 解决 查询该坏块所属对象 SQL> ...
  • 1.分析表与索引(analyze 不会重建索引) analyze table tablename compute statistics  等同于 analyze table tablename compute statistics for table for all indexes for all columns for table ...
  • yangtingkun的"如何判断索引是系统产生还是用户创建的"http://yangtingkun.itpub.net/post/468/160390中说到:对于主键和唯一约束,如果没有事先建立索引的话,Oracle在创建的过...
  • 索引命名规范:普通索引最好i_...2.查询索引oracle中表的索引信息存在 user_indexes 和 user_ind_columns 两张表里面,其中:user_indexes 系统视图存放的是索引的名称以及该索引是否是唯一索引等信息,user_ind_co...
  • 索引什么时候需要重建重建的方法 一提到索引,大家都知道,但是怎样建索引,什么时候重建索引重建索引用什么方法,可能有的就不太清楚了,我根据一些资料简单的整理一点,如果哪里不对或是不妥请大家指点,希望...
  • 所有执行的结果是脚本命令集合,可以用来创建索引;  a)在plsql中使用execute  immediate 'alter table J3_nsrxx NOLOGGING';  b)sql窗口中,复制出来可直接执行; 1)查询指定表的索引...
  • 最近在做某些分区操作的时候,老是出现一些分区表的全局索引失效的情况,所以将有关的操作进行一下详细的测试,下面是我的测试结果总结:ADD分区,DROP分区,MERGE分区,SPLIT分区,TRUNCATE分区以上五种分区操作...
  • Oracle 分区索引

    千次阅读 2014-07-08 12:12:06
    分区索引(或索引分区)主要是针对分区表而言的。随着数据量的不断增长,普通的堆表需要转换到分区表,其索引呢,则对应的转换到分区索引。分区索引的好处是显而易见的。就是简单地把一个索引分成多个片断,在获取所需...
  • oracle创建索引语句

    千次阅读 2020-06-30 21:46:51
    oracle : 单索引 create index 索引名称 on table(column) 删除索引 drop index 索引名称 复合索引 create index WBSINDEX ON project_info(wbs,is_delete) 查询某张表中所有索引 select * from ALL_INDEXS ...
  • oracle索引

    2018-01-06 21:46:16
    索引是为了满足用户特定的查询,给数据行中的特定列上加一个查询映射! 索引是一张按你索引列值排序的表 ...我们要求用户对每个表都应该建有主键约束,只要有主键约束,就自动建有主键索引! 2、

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,541
精华内容 5,816
关键字:

oracle主键索引重建