ITPub博客

首页 > 数据库 > Oracle > [20231017]建立索引的问题.txt

[20231017]建立索引的问题.txt

原创 Oracle 作者:lfree 时间:2023-10-23 21:20:27 0 删除 编辑

[20231017]建立索引的问题.txt

--//工作需要要建立1个索引,对于生产系统我个人还是比较谨慎的,该表很大21G,记录自己操作遇到的问题。

1.环境:
SYS@192.168.100.235:1521/orcl> @ pr
==============================
PORT_STRING                   : x86_64/Linux 2.4.xx
VERSION                       : 19.0.0.0.0
BANNER                        : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
BANNER_FULL                   : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
BANNER_LEGACY                 : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
CON_ID                        : 0
PL/SQL procedure successfully completed.

--//我先在toad生成sql语句的执行模板:
CREATE INDEX LIS.i_LIS_TEST_VISIT_NO ON LIS.LIS_TEST
(VISIT_NO)
LOGGING
STORAGE    (
            BUFFER_POOL      DEFAULT
            FLASH_CACHE      DEFAULT
            CELL_FLASH_CACHE DEFAULT
           )
NOPARALLEL
COMPRESS 1
ONLINE
/

--//生成后我不会在toad下,我很害怕执行中间出现问题,比如网络断开或者windows死机之类的事情,我一般选择登陆服务器,进入
--//tmux界面,这样的好处是即使网络断开,会话一直保持着不会断开,我以后tmux att依旧可以连上。然后在sys用户下手工打入如下命
--//令执行:
create index i_LIS_TEST_VISIT_NO on lis.lis_test(visit_no) compress 1 online;

--//建立完成后检查:
SYS@192.168.100.235:1521/orcl> @ ind lis.i_LIS_TEST_VISIT_NO
Display indexes where table or index name matches %lis.i_LIS_TEST_VISIT_NO%...

--//居然没有发现.仔细检查才发现该索引建立在sys用户下,原来我前面少写owner!!

SYS@192.168.100.235:1521/orcl> @ ind LIS_TEST
Display indexes where table or index name matches %LIS_TEST%...
TABLE_OWNER TABLE_NAME INDEX_NAME          POS# COLUMN_NAME                    DSC
----------- ---------- ------------------- ---- ------------------------------ ----
LIS         LIS_TEST   I_LIS_TEST_VISIT_NO    1 VISIT_NO

INDEX_OWNER TABLE_NAME INDEX_NAME          IDXTYPE    UNIQ STATUS   PART TEMP  H     LFBLKS           NDK   NUM_ROWS       CLUF LAST_ANALYZED       DEGREE VISIBILIT
----------- ---------- ------------------- ---------- ---- -------- ---- ---- -- ---------- ------------- ---------- ---------- ------------------- ------ ---------
SYS         LIS_TEST   I_LIS_TEST_VISIT_NO NORMAL     NO   VALID    NO   N     3      20908       1267866   10870343   10398063 2023-10-17 08:55:42 1      VISIBLE

--//表建立在lis模式下,但是我建立的索引的owner是SYS,我看了一下,索引大小不到170M,主要原因是该字段存在大量空值,建立还是
--//很快的。安全起见,我决定重新建立,执行如下,

SYS@orcl> drop index i_LIS_TEST_VISIT_NO;
Index dropped.

SYS@orcl> create index lis.i_LIS_TEST_VISIT_NO on lis.lis_test(visit_no) compress 1 online;
Index created.

--//再次检查发现,现在建立正确。
SYS@192.168.100.235:1521/orcl> @ ind2 %.I_LIS_TEST_VISIT_NO
Display indexes where table or index name matches %.I_LIS_TEST_VISIT_NO...
TABLE_OWNER TABLE_NAME INDEX_NAME          POS# COLUMN_NAME                    DSC
----------- ---------- ------------------- ---- ------------------------------ ----
LIS         LIS_TEST   I_LIS_TEST_VISIT_NO    1 VISIT_NO

INDEX_OWNER TABLE_NAME INDEX_NAME          IDXTYPE    UNIQ STATUS   PART TEMP  H     LFBLKS           NDK   NUM_ROWS       CLUF LAST_ANALYZED       DEGREE VISIBILIT
----------- ---------- ------------------- ---------- ---- -------- ---- ---- -- ---------- ------------- ---------- ---------- ------------------- ------ ---------
LIS         LIS_TEST   I_LIS_TEST_VISIT_NO NORMAL     NO   VALID    NO   N     3      20909       1267894   10871215   10398814 2023-10-17 09:11:00 1      VISIBLE

--//实际上这是运维的一些细节问题,以后工作中要引起注意。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2990579/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7971366