ITPub博客

首页 > 数据库 > Oracle > [20230808]建立修改索引统计信息modind.sql脚本.txt

[20230808]建立修改索引统计信息modind.sql脚本.txt

原创 Oracle 作者:lfree 时间:2023-08-23 20:55:16 0 删除 编辑

[20230808]建立修改索引统计信息modind.sql脚本.txt

--//以前建立过修改表统计信息以及字段统计信息的脚本,参考链接:
--//[20221219]建立修改表字段统计信息modcol.sql脚本.txt => http://blog.itpub.net/267265/viewspace-2932710/
--//[20221219]建立修改表统计信息modtab.sql脚本.txt => http://blog.itpub.net/267265/viewspace-2932708/

SCOTT@test01p> @ desc_proc sys dbms_stats set_index_stats
INPUT OWNER PACKAGE_NAME OBJECT_NAME
sample : @desc_proc sys dbms_stats gather_%_stats

OWNER PACKAGE_NAME OBJECT_NAME     SEQUENCE ARGUMENT_NAME   DATA_TYPE       IN_OUT DEFAULTED
----- ------------ --------------- -------- --------------- --------------- ------ ---------
SYS   DBMS_STATS   SET_INDEX_STATS        1 OWNNAME         VARCHAR2        IN     N
                                          2 INDNAME         VARCHAR2        IN     N
                                          3 PARTNAME        VARCHAR2        IN     Y
                                          4 STATTAB         VARCHAR2        IN     Y
                                          5 STATID          VARCHAR2        IN     Y
                                          6 NUMROWS         NUMBER          IN     Y
                                          7 NUMLBLKS        NUMBER          IN     Y
                                          8 NUMDIST         NUMBER          IN     Y
                                          9 AVGLBLK         NUMBER          IN     Y
                                         10 AVGDBLK         NUMBER          IN     Y
                                         11 CLSTFCT         NUMBER          IN     Y
                                         12 INDLEVEL        NUMBER          IN     Y
                                         13 FLAGS           NUMBER          IN     Y
                                         14 STATOWN         VARCHAR2        IN     Y
                                         15 NO_INVALIDATE   PL/SQL BOOLEAN  IN     Y
                                         16 GUESSQ          NUMBER          IN     Y
                                         17 CACHEDBLK       NUMBER          IN     Y
                                         18 CACHEHIT        NUMBER          IN     Y
                                         19 FORCE           PL/SQL BOOLEAN  IN     Y
                                          1 OWNNAME         VARCHAR2        IN     N
                                          2 INDNAME         VARCHAR2        IN     N
                                          3 PARTNAME        VARCHAR2        IN     Y
                                          4 STATTAB         VARCHAR2        IN     Y
                                          5 STATID          VARCHAR2        IN     Y
                                          6 EXT_STATS       RAW             IN     N
                                          7 STATTYPOWN      VARCHAR2        IN     Y
                                          8 STATTYPNAME     VARCHAR2        IN     Y
                                          9 STATOWN         VARCHAR2        IN     Y
                                         10 NO_INVALIDATE   PL/SQL BOOLEAN  IN     Y
                                         11 FORCE           PL/SQL BOOLEAN  IN     Y
30 rows selected.


--//忘记建立1个修改索引统计信息的脚本,建立如下:

$ cat modind.sql
set verify off
set termout off

column v_owner new_value v_owner
column v_index new_value v_index
select
 upper(CASE
                    WHEN INSTR('&1','.') > 0 THEN
                        SUBSTR('&1',INSTR('&1','.')+1)
                    ELSE
                        '&1'
                    END
                     )  v_index,
 nvl(upper(CASE WHEN INSTR('&1','.') > 0 THEN
            UPPER(SUBSTR('&1',1,INSTR('&1','.')-1))
        ELSE
            user
        END),user) v_owner
from dual;

set termout on

prompt
prompt input argument list : owner.index_name index_stat_attribute value
prompt
prompt index_stat_attribute = numrows numlblks numdist avglblk avgdblk clstfct indlevel
prompt
prompt @desc_proc sys dbms_stats set_index_stats
prompt
prompt exec dbms_stats.set_index_stats('&v_owner','&v_index',&2=>&3,NO_INVALIDATE=>false,force=>true);;
prompt
pause press enter to continue ...
exec dbms_stats.set_index_stats('&v_owner','&v_index',&2=>&3,NO_INVALIDATE=>false,force=>true);
prompt

1.测试环境:
SCOTT@test01p> @ ver1
PORT_STRING                    VERSION        BANNER                                                                               CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0           12.2.0.1.0     Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production              0

2.测试:
SCOTT@test01p> create table empx as select * from emp;
Table created.

SCOTT@test01p> @ pk empx empno
create unique index pk_empx on t1 (empno);
alter table empx add constraint pk_empx primary key (empno);

-- alter table empx modify constraint pk_empx disable;
-- alter table empx drop constraint PK_empx;
-- drop index pk_empx;
Index created.
Table altered.

SCOTT@test01p> @ ind pk_empx
Display indexes where table or index name matches %pk_empx%...
TABLE_OWNER TABLE_NAME INDEX_NAME POS# COLUMN_NAME DSC
----------- ---------- ---------- ---- ----------- ----
SCOTT       EMPX       PK_EMPX       1 EMPNO

INDEX_OWNER TABLE_NAME INDEX_NAME IDXTYPE    UNIQ STATUS PART TEMP  H LFBLKS NDK   NUM_ROWS  CLUF LAST_ANALYZED       DEGREE VISIBILIT
----------- ---------- ---------- ---------- ---- ------ ---- ---- -- ------ --- ---------- ----- ------------------- ------ ---------
SCOTT       EMPX       PK_EMPX    NORMAL     YES  VALID  NO   N     1      1  14         14     1 2023-08-18 21:09:29 1      VISIBLE

SCOTT@test01p> @ modind pk_empx indlevel 1
input argument list : owner.index_name index_stat_attribute value
index_stat_attribute = numrows numlblks numdist avglblk avgdblk clstfct indlevel
@desc_proc sys dbms_stats set_index_stats
exec dbms_stats.set_index_stats('SCOTT','PK_EMPX',indlevel=>2,NO_INVALIDATE=>false,force=>true);
press enter to continue ...
PL/SQL procedure successfully completed.

SCOTT@test01p> @ ind pk_empx
Display indexes where table or index name matches %pk_empx%...
TABLE_OWNER TABLE_NAME INDEX_NAME POS# COLUMN_NAME DSC
----------- ---------- ---------- ---- ----------- ----
SCOTT       EMPX       PK_EMPX       1 EMPNO

INDEX_OWNER TABLE_NAME INDEX_NAME IDXTYPE    UNIQ STATUS PART TEMP  H LFBLKS NDK   NUM_ROWS CLUF LAST_ANALYZED       DEGREE VISIBILIT
----------- ---------- ---------- ---------- ---- ------ ---- ---- -- ------ --- ---------- ---- ------------------- ------ ---------
SCOTT       EMPX       PK_EMPX    NORMAL     YES  VALID  NO   N     2      1  14         14    1 2023-08-18 21:12:32 1      VISIBLE
--//High=2. 索引高度比indlevel大1。

SCOTT@test01p> @ modind pk_empx numrows 100
input argument list : owner.index_name index_stat_attribute value
index_stat_attribute = numrows numlblks numdist avglblk avgdblk clstfct indlevel
@desc_proc sys dbms_stats set_index_stats
exec dbms_stats.set_index_stats('SCOTT','PK_EMPX',numrows=>100,NO_INVALIDATE=>false,force=>true);
press enter to continue ...
PL/SQL procedure successfully completed.


SCOTT@test01p> @ ind pk_empx
Display indexes where table or index name matches %pk_empx%...
TABLE_OWNER TABLE_NAME INDEX_NAME POS# COLUMN_NAME DSC
----------- ---------- ---------- ---- ----------- ----
SCOTT       EMPX       PK_EMPX       1 EMPNO

INDEX_OWNER TABLE_NAME INDEX_NAME IDXTYPE    UNIQ STATUS PART TEMP  H LFBLKS NDK   NUM_ROWS       CLUF LAST_ANALYZED       DEGREE VISIBILIT
----------- ---------- ---------- ---------- ---- ------ ---- ---- -- ------ --- ---------- ---------- ------------------- ------ ---------
SCOTT       EMPX       PK_EMPX    NORMAL     YES  VALID  NO   N     2      1  14        100          1 2023-08-18 21:18:07 1      VISIBLE

--//NUM_ROWS=100.
--//当然我估计修改索引统计信息的机会很少,我估计最大的可能用来修改调整群集因子clstfct。


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

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

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7970508