`

Oracle keep index

 
阅读更多

一个表的主键使用了唯一索引,我直接用

alter table xxx drop constraints pk_xxx;

删除主键,DB扫描时提示说删除约束时必须指定keep index保留索引。

百度了一下,看到了http://zhaolinjnu.i.sohu.com/blog/view/75962031.htm这篇文章。

下面是它的原文:

我们通常的操作是向表中的一列或几列添加一个唯一约束,但有些时候,因为应用方面的原因或者其它原因,我们又需要把约束删掉,但要保留索引.本篇文章就介绍了如何使用keep index的语法,请看下面的实验:

1.不使用keep index的语法来删除约束的情况:

SQL> create table t1(id number,nick varchar2(20));

 Table created.

SQL> alter table t1 add constraint uk_t1_id unique(id);

 Table altered.

 SQL> select table_name,index_name from user_indexes where table_name='T1';

 TABLE_NAME                     INDEX_NAME

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

T1                             UK_T1_ID

 SQL> alter table t1 drop constraint uk_t1_id;

 Table altered.

 SQL> select table_name,index_name from user_indexes where table_name='T1';

 no rows selected

 2.使用keep index的语法来删除约束的情况 

SQL> alter table t1 add constraint uk_t1_id unique(id);

 Table altered.

SQL> select table_name,index_name from user_indexes where table_name='T1';

 TABLE_NAME                     INDEX_NAME

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

T1                             UK_T1_ID

SQL> alter table t1 drop constraint uk_t1_id keep index;

 Table altered.

SQL> select table_name,index_name from user_indexes where table_name='T1';

 TABLE_NAME                     INDEX_NAME

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

T1                             UK_T1_ID

 

    如果在创建约束前,先创建了索引;那么在删除约束时默认都只删除约束,而不会删除索引.如果你想在删除约束时,保留索引,我建议还是最好明确使用keep index的语法,以避免意想不到的问题发生.

分享到:
评论

相关推荐

    Oracle期末试题

    ### Oracle期末试题知识点详解 #### 一、选择题解析 1. **服务器进程意外中止时,Oracle如何处理?** - **知识点**: Oracle后台进程的功能 - **解析**: 当一个服务器进程意外中止时,Oracle使用PMON(Process ...

    Expert.Oracle.Indexing.and.Access.Paths.2nd.epub

    Expert Oracle Indexing and Access Paths is about the one database structure at the heart of almost all performance concerns: the index. Database system performance is one of the top concerns in ...

    韩顺平Oracle教学笔记.docx

    索引可以使用create index语句来创建。 12. 存储过程: 存储过程是Oracle数据库中的一个程序单元,用于实现复杂的业务逻辑。存储过程可以使用create procedure语句来创建。 13. 触发器: 触发器是Oracle数据库中的...

    Oracle性能优化培训

    - 特别关注IOT(Index Organized Table)主键索引和域索引的性能。 #### 三、执行计划优化 执行计划的选择直接影响到查询的性能。Oracle根据多种因素来决定采用哪种执行策略。 - **连接算法** - **Nested Loop ...

    最全的oracle常用命令大全.txt

    ORACLE常用命令 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>startup ...

    ORACLE9i_优化设计与系统调整

    §3.4.2 在缓冲区驻留对象(BUFFER_POOL_KEEP) 71 §3.4.3 版本兼容(COMPATIBLE) 72 §3.4.4 控制文件路径(CONTROL_FILES) 72 §3.4.5 CPU个数(CPU_COUNT) 72 §3.4.6 数据缓冲区块数(DB_BLOCK_BUFFERS) 72...

    Oracle运维最佳实践-下.pdf 带书签

    - 使用`DBMS_SHARED_POOL.KEEP`将关键SQL语句保留在Shared Pool中。 - **2.1.25 Library Cache诊断:Lock, Pin以及Load Lock** - Library Cache是Shared Pool的一个重要组成部分。 - 本书详细介绍了如何诊断...

    《Oracle RAC最佳实践》精华总结

    - 使用Buffer Pools(如Keep/Recycle),特别是对于Index Organized Tables (IOT) 和 IOT溢出。 2. **避免小数据集争抢**: - 减少Latch Free和Buffer Busy Wait。 - 避免频繁的分析操作。 - 减少锁定使用。 - ...

    Oracle系统调优详解.docx

    Oracle 系统调优详解 Oracle 系统调优是指在 Oracle 数据库系统中,通过调整初始化参数以提高系统性能和稳定性。在 Oracle 8i 及以前的版本中,这些初始化参数记录在 INITsid.ora 文件中;而 Oracle 9i/10g/11g ...

    Oracle考试题1参考.docx

    - **索引创建**: 使用`CREATE INDEX`语句创建索引。索引的目的是提高数据检索速度。 - **索引类型**: Oracle索引主要分为B树索引、位图索引和函数索引等多种类型。 ### 14. Oracle服务器的组成部分 - **ORACLE实例...

    oracle优化------缓存对象与数据

    ### Oracle优化——缓存对象与数据 #### 一、引言 在Oracle数据库优化领域,缓存机制是一项关键的技术手段,旨在通过将频繁访问的数据和对象保留在内存中来提高系统的响应速度和整体性能。本篇文章将深入探讨Oracle...

    oracle优化资料.docx

    - 删除大量数据后,对应的索引也需要收缩,使用`ALTER INDEX idxname SHRINK SPACE;`可以实现。 6. **注意点** - `SHRINK TABLE`只适用于使用ASSM(自动段空间管理)的表,否则会报错`ORA-10635`。 以上方法有助...

    百亿级别海量数据删除方案(不停机维护)

    SELECT 'ALTER INDEX ' || INDEX_NAME || ' DEALLOCATE UNUSED KEEP 0M;' FROM SYS.USER_INDEXES U, UNIT_TABLES WHERE TABLE_OWNER = 'SAPSR3' AND LX = 'DEL' AND TABLE_NAME = TBNAME; ``` 9. **删除旧表**:...

    Oracle事例

    sql> alter index xay_id allocate extent(size 200k datafile \'c:/oracle/index.dbf\'); <8>.alter index xay_id deallocate unused; 、查看索引 SQL>select index_name,index_type,table_name from user...

    oracle数据库参数.pdf

    - buffer_pool_keep和buffer_pool_recycle:设置保持和回收缓冲池,以优化数据访问。 - cursor_space_for_time:控制游标空间的保持时间。 **4. 并行查询和执行** - hash_area_size:定义排序区域的大小,用于哈希...

    ORACLE DBA 手册

    2. 数据缓冲区:分为BUFFER_POOL_KEEP和BUFFER_POOL_RECYCLE,前者用于保存常用数据,后者用于缓存临时或不常用数据。 3. 共享缓冲区缓存和库缓冲区:优化这两部分可减少磁盘I/O,提高数据检索速度。 4. 日志缓冲区...

    Oracle9i的init.ora参数中文说明

    Oracle9i初始化参数中文说明 Blank_trimming: 说明: 如果值为TRUE, 即使源长度比目标长度 (SQL92 兼容) 更长, 也允许分配数据。 值范围: TRUE | FALSE 默认值: FALSE serializable: 说明: 确定查询是否获取表级...

Global site tag (gtag.js) - Google Analytics