首页 > 数据库 >Oracle重建索引

Oracle重建索引

时间:2022-11-18 10:12:26浏览次数:42  
标签:index name dba 索引 student Oracle n1 重建

创建表

 create table student(
 student_id number,
 name       varchar2(240)
 ) tablespace school_data;

创建索引

create index student_n1 on studen(name);

查看索引具体内容

 SELECT * FROM dba_indexes dbi WHERE dbi.index_name = 'STUDENT_N1';
 --查看具体的列,可以发现tablespace_name,PCTFREE等属性,说明索引也是存储与数据块中的一个具体文件
 
 --插入数据后,段也创建了(因为延迟段)
INSERT INTO student VALUES(101,'ALEX');
COMMIT;
select * from dba_segments dbs where dbs.segment_name = 'STUDENT_N1';

索引的状态

alter index student_n1 unusable;
--再次查看
 SELECT dbi.index_name,
        dbi.status
   FROM dba_indexes dbi
  WHERE dbi.index_name = 'STUDENT_N1';
--索引的状态变为UNUSABLE了
--再次查看段,会发现段已经没有了
 select * from dba_segments dbs where dbs.segment_name = 'STUDENT_N1';
 select * from dba_extents dbe where dbe.segment_name = 'STUDENT_N1';
 --查看区,也发现区也没有了

结论:使索引变为不可以不仅是改变状态而已。

参考资料:当索引不可用(unusable)时,Oracle 内部会把该索引元数据(即创建语句包含的基本信息)与真
是物理数据之间的对应关系断裂,相关数据块可被重用(经过实验,ORACLE 会把索引段删
除,但是 sys 用户索引除外)。索引段是否已创建(dba_indexe_segment_created)这一属性,
会变为 no(正常情况向,应为 yes)。Unusable 索引,想要被重新使用,只有一种方法:rebuild。
当然还可以 drop 再 create

重建索引

alter index student_n1 rebuild;
--重建后可以再次在数据字典中看到了
 select * from dba_segments dbs where dbs.segment_name = 'STUDENT_N1';
 select * from dba_extents dbe where dbe.segment_name = 'STUDENT_N1';

删除索引

drop index student_n1;

除此之外还有两种修改索引状态的语句:

alter index student_n1 disable;
alter index student_n1 enable;

然而我们执行以上语句会报错

SQL> alter index student_n1 disable;
alter index student_n1 disable
*
ERROR at line 1:
ORA-02243: invalid ALTER INDEX or ALTER MATERIALIZED VIEW option

因为该语句只能用于函数索引上

-- 创建函数索引
create index student_name_n1 on student(upper(name));
alter index student_name_n1 disable;

标签:index,name,dba,索引,student,Oracle,n1,重建
From: https://www.cnblogs.com/su1999/p/16902260.html

相关文章

  • MongoDB - 索引知识
    索引简介什么是索引索引最常用的比喻就是书籍的目录,查询索引就像查询一本书的目录。索引支持MongoDB查询的高效执行。如果没有索引,MongoDB必须扫描集合中每一个文档,......
  • Oracle的Pctfree
    1、创建一张表createtablestudent(student_idnumber);但是在pl/sql中查看却是以下的建表语句:--CreatetablecreatetableSTUDENT(student_idNUMBER)tab......
  • Oracle rman veeam plugin
     Veeambackupandreplication备份oracle数据库,通过调用rmanapi接口,简化了oracle数据库备份与恢复,这里主要介绍oracleforlinuxx64平台。   首先,在目标服......
  • Oracle 练习题 20131021 for 循环练习
    --Oracle练习题20131021for循环练习--1、用for循环实现一个倒置的乘法表。begin foriinreverse1..9loop  forjinrever......
  • Oracle plsql 计算日期间工作日天数
    declare v_fdatedate:=to_date('2013-10-4','yyyy-mm-dd'); v_ldatedate:=to_date('2013-10-22','yyyy-mm-dd'); v_interval_anumber;......
  • Oracle 练习P297 131026 PL/SQL块程序
    --1、编写一个PL/SQL块,输出所有员工的员工姓名,员工号、工资和部门号。begin forv_empin(select*fromemp)loop  dbms_output.put('员工......
  • Oracle plsqlI 练习 传值
    --根据人名查个人薪水和本部门平均薪水--select语句实现selecta.deptno "部门编号",    a.dname "部门名称",    a.......
  • Oracle plsql 月历
    declare v_yearnumber:=2013; v_monthnumber:=&input_month; v_daynumber; v_lastdaynumber;begin dbms_outp......
  • Oracle 练习题P256
    --根据Oracle数据库scott模式下的emp表和dept表,完成下列操作。--(1)查询20号部门的所有员工信息select*fromempwheredeptno=20;--(2)查询所......
  • Oracle 创建表 练习题
     a)      建立下列教学管理用的数据表。注意,表名和字段名都是英文。学生表(student)字段名称数据类型约束学号S_NOCHAR(6)主键姓名......