Bonjour à la communauté,

Voilà, je dois reprendre la gestion d'une base oracle, mais je me trouve à utiliser notamment deux scripts. Pouvez-vous m'expliquer le fonctionnement de ces deux scripts. Je pense que cela est fait pour faire de la réorganisation. La base tourne sous oracle 9.0.2.1.0.

Merci pour vos explications.

Le premier pour la réorganisation des index.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
--
-- Rebuild des index de l'utilisateur VITA
--
set serveroutput on
set head off 
set feedback off
alter session set nls_date_format='dd/mm/yyyy hh24:mi:ss';
whenever sqlerror exit 1
column date_fmt noprint new_value x_date_fmt
select to_char(sysdate,'YYYY_MM_DD') date_fmt from dual
/
spool C:\ComptesRendus\rebuild_idx_&&x_date_fmt..log
select 'Début de traitement de réorganisation des index ',sysdate from dual;
DECLARE
CURSOR cur_sel_idx IS
SELECT index_name FROM all_indexes where owner='VITA' and index_type='NORMAL';
var_stmt VARCHAR2(2000);
BEGIN
FOR rec_idx IN cur_sel_idx LOOP
   BEGIN
      var_stmt := 'ALTER INDEX VITA.'||rec_idx.index_name||' rebuild tablespace VITAINDX ';
      EXECUTE IMMEDIATE (var_stmt);
   exception
   WHEN OTHERS THEN 
   dbms_output.put_line (' ERREUR :'||rec_idx.index_name||'  '||sqlerrm);
   END;
END LOOP;
END;
/
select index_name,status,owner from all_indexes where owner = 'VITA';
select 'Fin de traitement de réorganisation des index  ',sysdate from dual;
exit 0
L'autre pour les tables
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
set serveroutput on
set head off 
set feedback off
ALTER SESSION SET NLS_DATE_FORMAT='dd/mm/yyyy hh24:mi:ss';
 
-- On sort du script avec le code retour -1 si on rencontre une erreur.
whenever sqlerror exit -1 
-- Formatage de la date pour le nom du fichier LOG
column date_fmt noprint new_value x_date_fmt
select to_char(sysdate,'YYYY_MM_DD') date_fmt from dual
/
spool C:\ComptesRendus\rebuild_tab_&&x_date_fmt..log
select 'Début du traitement de réorganisation des tables ',sysdate from dual;
DECLARE
CURSOR cur_sel_tab IS
SELECT table_name,
       tablespace_name
FROM   all_tables 
WHERE  owner='VITA'
and tablespace_name is not null
and not exists (select 1 from all_tab_columns 
	where all_tables.table_name = all_tab_columns.table_name
          and  all_tables.owner = all_tab_columns.owner
	and data_type like 'LONG%' );
var_stmt VARCHAR2(2000);
cpt      NUMBER:= 0;
BEGIN
FOR rec_tab IN cur_sel_tab LOOP
   BEGIN
      var_stmt := 'ALTER TABLE VITA.'||rec_tab.table_name||' MOVE TABLESPACE '||rec_tab.tablespace_name;
      EXECUTE IMMEDIATE (var_stmt);
      cpt := cpt + 1;
   exception
   WHEN OTHERS THEN 
   DBMS_OUTPUT.PUT_LINE (' ERREUR :'||rec_tab.table_name||'  '||sqlerrm);
   END;
END LOOP;
DBMS_OUTPUT.PUT_LINE (' Nombre de table reconstruite :'||cpt);
END;
/
select 'Fin du traitement de réorganisation des tables ',sysdate from dual;
exit
Y a-t-il un script sql qui pourrait me permettre de vérifier la fragmentation des tables et des indexes ?

Merci pour vos conseils.

Cordialement.