Oracle按用户批量重建索引

按用户批量重建索引:

按用户将此用户下面非临时表上面的索引全部重建,此过程建议在SYS用户下面执行:
Sql代码 复制代码 收藏代码
  1. CREATE OR REPLACE PROCEDURE BATCH_REBUILD_INDEX(USER_NAME IN VARCHAR2) IS
  2. S_SQL VARCHAR2(500);
  3. ACCOUNT NUMBER := 0;
  4. BEGIN
  5. FOR LINE2 IN (SELECT T.OWNER, T.INDEX_NAME
  6. FROM ALL_INDEXES T
  7. WHERE T.OWNER = UPPER(USER_NAME)
  8. AND T.TABLE_TYPE = 'TABLE'
  9. AND T.TEMPORARY = 'N'
  10. AND T.INDEX_TYPE = 'NORMAL') LOOP
  11. S_SQL := 'alter index ' || LINE2.OWNER || '.' || LINE2.INDEX_NAME ||
  12. ' rebuild';
  13. ACCOUNT := ACCOUNT + 1;
  14. EXECUTE IMMEDIATE S_SQL;
  15. END LOOP;
  16. DBMS_OUTPUT.PUT_LINE(ACCOUNT);
  17. EXCEPTION
  18. WHEN OTHERS THEN
  19. DBMS_OUTPUT.PUT_LINE(SQLERRM);
  20. END BATCH_REBUILD_INDEX;
CREATE OR REPLACE PROCEDURE BATCH_REBUILD_INDEX(USER_NAME IN VARCHAR2) IS
  S_SQL   VARCHAR2(500);
  ACCOUNT NUMBER := 0;
BEGIN

  FOR LINE2 IN (SELECT T.OWNER, T.INDEX_NAME
                  FROM ALL_INDEXES T
                 WHERE T.OWNER = UPPER(USER_NAME)
                   AND T.TABLE_TYPE = 'TABLE'
                   AND T.TEMPORARY = 'N'

                   AND T.INDEX_TYPE = 'NORMAL') LOOP
    S_SQL   := 'alter index ' || LINE2.OWNER || '.' || LINE2.INDEX_NAME ||
               ' rebuild';
    ACCOUNT := ACCOUNT + 1;
    EXECUTE IMMEDIATE S_SQL;
  END LOOP;
  DBMS_OUTPUT.PUT_LINE(ACCOUNT);
EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SQLERRM);
END BATCH_REBUILD_INDEX;


过程在SYS用户下面创建完成后,用下面的代码调整创建好的存储过程:
Sql代码 复制代码 收藏代码
  1. begin
  2. -- Call the procedure
  3. batch_rebuild_index(user_name => 'hs_user'); --输入用户名
  4. end;
begin

  -- Call the procedure

  batch_rebuild_index(user_name => 'hs_user'); --输入用户名

end;
 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值