亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

Oracle重建索引Shell腳本、SQL腳本分享

2024-08-29 13:58:13
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Oracle重建索引Shell腳本、SQL腳本分享,索引是提高數據庫查詢性能的有力武器,定期重建索引是很有必要的事情,需要的朋友可以參考下
索引是提高數據庫查詢性能的有力武器。沒有索引,就好比圖書館沒有圖書標簽一樣,找一本書自己想要的書比登天還難。然而索引在使用的過程中,尤其是在批量的DML的情形下會產生相應的碎片,以及B樹高度會發生相應變化,因此可以對這些變化較大的索引進行重構以提高性能。N久以前Oracle建議我們定期重建那些高度為4,已刪除的索引條目至少占有現有索引條目總數的20%的這些表上的索引。但Oracle現在強烈建議不要定期重建索引。具體可以參考文章:Oracle 重建索引的必要性。盡管如此重建索引還是有必要的,只是不建議定期。本文給出了重建索引的腳本供大家參考。
1、重建索引shell腳本

robin@SZDB:~/dba_scripts/custom/bin> more rebuild_unbalanced_indices.sh
# +-------------------------------------------------------+
# +  Rebulid unblanced indices             |
# +  Author : Leshami                  |
# +  Parameter : No                   |
# +-------------------------------------------------------+

#!/bin/bash
# --------------------
# Define variable
# --------------------

if [ -f ~/.bash_profile ]; then
. ~/.bash_profile
fi

DT=`date +%Y%m%d`;       export DT
RETENTION=1
LOG_DIR=/tmp
LOG=${LOG_DIR}/rebuild_unbalanced_indices_${DT}.log
DBA=Leshami@12306.cn

# ------------------------------------
# Loop all instance in current server
# -------------------------------------
echo "Current date and time is : `/bin/date`">>${LOG}

for db in `ps -ef | grep pmon | grep -v grep |grep -v asm |awk '{print $8}'|cut -c 10-`
do
  echo "$db"
  export ORACLE_SID=$db
  echo "Current DB is $db" >>${LOG}
  echo "===============================================">>${LOG}
  $ORACLE_HOME/bin/sqlplus -S /nolog @/users/robin/dba_scripts/custom/sql/rebuild_unbalanced_indices.sql>>${LOG}
done;

echo "End of rebuilding index for all instance at : `/bin/date`">>${LOG}
# -------------------------------------
# Check log file
# -------------------------------------
status=`grep "ORA-" ${LOG}`
if [ -z $status ];then
  mail -s "Succeeded rebuilding indices on `hostname` !!!" ${DBA} <${LOG}
else
  mail -s "Failed rebuilding indices on `hostname` !!!" ${DBA} <${LOG}
fi

# ------------------------------------------------
# Removing files older than $RETENTION parameter
# ------------------------------------------------

find ${LOG_DIR} -name "rebuild_unb*" -mtime +$RETENTION -exec rm {} /;

exit
2、重建索引調用的SQL腳本

robin@SZDB:~/dba_scripts/custom/sql> more rebuild_unbalanced_indices.sql
conn / as sysdba
set serveroutput on;
DECLARE
  resource_busy        EXCEPTION;
  PRAGMA EXCEPTION_INIT (resource_busy, -54);
  c_max_trial    CONSTANT PLS_INTEGER := 10;
  c_trial_interval  CONSTANT PLS_INTEGER := 1;
  pmaxheight     CONSTANT INTEGER := 3;
  pmaxleafsdeleted  CONSTANT INTEGER := 20;

  CURSOR csrindexstats
  IS
   SELECT NAME,
       height,
       lf_rows AS leafrows,
       del_lf_rows AS leafrowsdeleted
    FROM index_stats;

  vindexstats         csrindexstats%ROWTYPE;

  CURSOR csrglobalindexes
  IS
   SELECT owner,index_name, tablespace_name
    FROM dba_indexes
    WHERE partitioned = 'NO'
    AND owner IN ('GX_ADMIN');

  CURSOR csrlocalindexes
  IS
   SELECT index_owner,index_name, partition_name, tablespace_name
    FROM dba_ind_partitions
    WHERE status = 'USABLE'
    AND index_owner IN ('GX_ADMIN');

  trial            PLS_INTEGER;
  vcount           INTEGER := 0;
BEGIN
  trial := 0;

  /* Global indexes */
  FOR vindexrec IN csrglobalindexes
  LOOP
   EXECUTE IMMEDIATE
     'analyze index ' || vindexrec.owner ||'.'|| vindexrec.index_name || ' validate structure';

   OPEN csrindexstats;

   FETCH csrindexstats INTO vindexstats;

   IF csrindexstats%FOUND
   THEN
     IF  (vindexstats.height > pmaxheight)
      OR (  vindexstats.leafrows > 0
        AND vindexstats.leafrowsdeleted > 0
        AND (vindexstats.leafrowsdeleted * 100 / vindexstats.leafrows) >
            pmaxleafsdeleted)
     THEN
      vcount := vcount + 1;
      DBMS_OUTPUT.PUT_LINE (
        'Rebuilding index ' || vindexrec.owner ||'.'|| vindexrec.index_name || '...');

      <<alter_index>>
      BEGIN
        EXECUTE IMMEDIATE
           'alter index '
         || vindexrec.owner ||'.'
         || vindexrec.index_name
         || ' rebuild'
         || ' parallel nologging compute statistics'
         || ' tablespace '
         || vindexrec.tablespace_name;
      EXCEPTION
        WHEN resource_busy OR TIMEOUT_ON_RESOURCE
        THEN
         DBMS_OUTPUT.PUT_LINE (
           'alter index - busy and wait for 1 sec');
         DBMS_LOCK.sleep (c_trial_interval);

         IF trial <= c_max_trial
         THEN
           GOTO alter_index;
         ELSE
           DBMS_OUTPUT.PUT_LINE (
              'alter index busy and waited - quit after '
            || TO_CHAR (c_max_trial)
            || ' trials');
           RAISE;
         END IF;
        WHEN OTHERS
        THEN
         DBMS_OUTPUT.PUT_LINE ('alter index err ' || SQLERRM);
         RAISE;
      END;
     END IF;
   END IF;

   CLOSE csrindexstats;
  END LOOP;

  DBMS_OUTPUT.PUT_LINE ('Global indices rebuilt: ' || TO_CHAR (vcount));
  vcount := 0;
  trial := 0;

  /* Local indexes */
  FOR vindexrec IN csrlocalindexes
  LOOP
   EXECUTE IMMEDIATE
      'analyze index '
     || vindexrec.index_owner||'.'
     || vindexrec.index_name
     || ' partition ('
     || vindexrec.partition_name
     || ') validate structure';

   OPEN csrindexstats;

   FETCH csrindexstats INTO vindexstats;

   IF csrindexstats%FOUND
   THEN
     IF  (vindexstats.height > pmaxheight)
      OR (  vindexstats.leafrows > 0
        AND vindexstats.leafrowsdeleted > 0
        AND (vindexstats.leafrowsdeleted * 100 / vindexstats.leafrows) >
            pmaxleafsdeleted)
     THEN
      vcount := vcount + 1;
      DBMS_OUTPUT.PUT_LINE (
        'Rebuilding index ' || vindexrec.index_owner||'.'|| vindexrec.index_name || '...');

      <<alter_partitioned_index>>
      BEGIN
        EXECUTE IMMEDIATE
           'alter index '
         || vindexrec.index_owner||'.'
         || vindexrec.index_name
         || ' rebuild'
         || ' partition '
         || vindexrec.partition_name
         || ' parallel nologging compute statistics'
         || ' tablespace '
         || vindexrec.tablespace_name;
      EXCEPTION
        WHEN resource_busy OR TIMEOUT_ON_RESOURCE
        THEN
         DBMS_OUTPUT.PUT_LINE (
           'alter partitioned index - busy and wait for 1 sec');
         DBMS_LOCK.sleep (c_trial_interval);

         IF trial <= c_max_trial
         THEN
           GOTO alter_partitioned_index;
         ELSE
           DBMS_OUTPUT.PUT_LINE (
              'alter partitioned index busy and waited - quit after '
            || TO_CHAR (c_max_trial)
            || ' trials');
           RAISE;
         END IF;
        WHEN OTHERS
        THEN
         DBMS_OUTPUT.PUT_LINE (
           'alter partitioned index err ' || SQLERRM);
         RAISE;
      END;
     END IF;
   END IF;

   CLOSE csrindexstats;
  END LOOP;

  DBMS_OUTPUT.PUT_LINE ('Local indices rebuilt: ' || TO_CHAR (vcount));
END;
/
exit;
3、輸入日志樣本

Current date and time is : Sun Apr 20 02:00:02 HKT 2014
Current DB is SYBO2 ===============================================
Rebuilding index GX_ADMIN.SYN_OUT_DATA_TBL_PK...
Rebuilding index GX_ADMIN.IDX_TDBK_SPLNK_PARENT_REF...
Rebuilding index GX_ADMIN.IDX_TDBK_SPLNK_CHILD_REF...
Rebuilding index GX_ADMIN.PK_TRADE_BROKER_TBL...
Rebuilding index GX_ADMIN.IDX_TDBK_INPUT_DATE...
  ................
4、后記
a、如果同一臺服務器上有多個實例,且每個實例有相同的schema,此腳本會輪巡所有實例并根據analyze結果來rebuild。
a、大家應根據需要作相應調整,如腳本的路徑信息等。
b、需要修改相應的schema name。
d、可根據系統環境調整相應的并行度。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品在线私人| 日韩中文字幕亚洲| 色综合视频一区中文字幕| 亚洲欧美日韩精品久久奇米色影视| 亚洲欧美在线第一页| 美女扒开尿口让男人操亚洲视频网站| 国产一区二区丝袜高跟鞋图片| 成人国产精品一区二区| 亚洲石原莉奈一区二区在线观看| 亚洲性69xxxbbb| 91在线视频成人| 亚洲自拍偷拍福利| 成人av色在线观看| 精品视频偷偷看在线观看| 久久手机免费视频| 岛国av午夜精品| 色噜噜久久综合伊人一本| 性欧美xxxx视频在线观看| 欧美黄色www| 国产不卡精品视男人的天堂| 国产99久久精品一区二区永久免费| 日韩欧美在线字幕| 国产一区二区丝袜| 国产精品久久久久久超碰| 亚洲三级黄色在线观看| 最新中文字幕亚洲| 91精品国产99| 夜夜狂射影院欧美极品| 这里只有精品丝袜| 国产91精品网站| 亚洲国产另类久久精品| 日韩美女视频中文字幕| 欧美中文字幕在线观看| 国产丝袜高跟一区| 欧美整片在线观看| 欧美一级电影在线| 国内精品400部情侣激情| 久久免费视频网站| 狠狠色狠狠色综合日日小说| 91亚洲国产成人久久精品网站| 久久的精品视频| 色诱女教师一区二区三区| 国产一区二中文字幕在线看| 欧美丰满片xxx777| 欧美大肥婆大肥bbbbb| 欧美性猛交xxxxx免费看| 欧美激情小视频| 亚洲日本成人女熟在线观看| 91久久精品视频| 日韩在线观看网站| 精品亚洲国产成av人片传媒| 中文字幕视频一区二区在线有码| 国产精品综合久久久| 国产精品高潮呻吟久久av野狼| 欧美黄色片视频| 亚洲第一色在线| 久久久久久亚洲精品中文字幕| 久久精品国产亚洲| 亚洲成人久久久| 亚洲自拍偷拍第一页| 亚洲一区二区在线播放| 97在线观看免费| 日韩中文在线不卡| 黑人与娇小精品av专区| 久久人人爽人人| 久久99精品视频一区97| 亚洲国产精品久久久久秋霞不卡| 久久国内精品一国内精品| 久久久久久久久网站| 色偷偷91综合久久噜噜| 国产va免费精品高清在线| 色狠狠av一区二区三区香蕉蜜桃| 久久精品中文字幕免费mv| 国产精品video| 国产在线观看一区二区三区| 欧美精品久久久久久久| 欧美精品videos性欧美| 日韩中文字幕第一页| 91福利视频在线观看| 久久久久久久久久久免费精品| 国内成人精品一区| 精品毛片网大全| 亚洲护士老师的毛茸茸最新章节| 亚洲欧美一区二区三区四区| 欧亚精品在线观看| 欧美极品少妇xxxxⅹ免费视频| 精品国产成人av| 色综合色综合网色综合| 精品久久久精品| 亚洲а∨天堂久久精品喷水| 国产精品视频白浆免费视频| 91精品国产色综合久久不卡98口| 97在线视频免费看| 国产成人综合av| 美日韩在线视频| 少妇久久久久久| 91网站在线免费观看| 国产精品一久久香蕉国产线看观看| 2023亚洲男人天堂| 中文字幕av一区中文字幕天堂| 久久精品电影网站| 国产在线视频一区| 国产精品久久99久久| 欧美精品在线网站| 国产91精品青草社区| 欧美老肥婆性猛交视频| 精品亚洲男同gayvideo网站| 亚洲第一在线视频| 亚洲老头老太hd| 国产伊人精品在线| 欧美成人精品影院| 欧美最猛黑人xxxx黑人猛叫黄| 欧美激情亚洲另类| 亚洲欧美在线一区二区| 一本色道久久88综合日韩精品| 亚洲一区二区在线播放| 亚洲国产欧美在线成人app| 亚洲欧洲日本专区| 国产激情综合五月久久| 亚洲网在线观看| 国产成人+综合亚洲+天堂| 成人免费网站在线看| 欧美成人午夜激情在线| 91久久综合亚洲鲁鲁五月天| 亚洲高清av在线| 成人免费在线视频网址| 欧美午夜丰满在线18影院| 精品久久久国产精品999| 国产日韩在线看| 欧美激情欧美激情| 欧美极品少妇与黑人| 欧美日韩一区二区精品| 久久免费福利视频| 久久久999国产精品| 91po在线观看91精品国产性色| 青草热久免费精品视频| 成人免费自拍视频| 亚洲va欧美va国产综合久久| 亚洲一区二区三区四区在线播放| 国产精品视频导航| 久久久久国产精品免费网站| 国产97在线|亚洲| 国产精品久久久久久五月尺| 国内免费久久久久久久久久久| 欧美一级电影在线| 国产999精品久久久影片官网| 日韩欧美成人精品| 亚洲欧美中文字幕| 日本精品视频在线播放| 成人日韩在线电影| 日韩高清免费在线| 78色国产精品| 亚洲国产欧美一区二区三区同亚洲| 美女精品视频一区| 中文字幕久精品免费视频| 中文字幕不卡av| 欧美性videos高清精品| 国产精品av免费在线观看| 欧美激情第一页xxx| 日本精品一区二区三区在线| 欧美激情二区三区| 日韩欧美国产一区二区| 亚洲а∨天堂久久精品喷水| 国产日韩欧美在线观看|