Bonjour,
en10G R2 quand j'utilise DBMS_REPAIR
je reçois:
Comment je peux installer SYS.DBMS_REPAIR ?Citation:
ORA-24123: feature IOT support is not yet implemented
ORA-06512: at "SYS.DBMS_REPAIR", line 293
D'avance merci.
Version imprimable
Bonjour,
en10G R2 quand j'utilise DBMS_REPAIR
je reçois:
Comment je peux installer SYS.DBMS_REPAIR ?Citation:
ORA-24123: feature IOT support is not yet implemented
ORA-06512: at "SYS.DBMS_REPAIR", line 293
D'avance merci.
bonjour,
est-ce que le package existe dans ta base ?
... te répond t-il quelquechose ?Code:
1
2sql> desc dbms_repair
Ce message s'apparente plus à une fonctionnalité non implémentée sur les IOTs.
Peux tu nous envoyer le code exact utilisé (avec la procédure/fonction du package utilisé).
Merci
Laurent.
Bonjour,
tu trouveras dbmsrpr.sql dans $ORACLE_HOME/rdbms/admin
pour installer le package.
salutations.Code:SQL> @dbmsrpr.sql
merci à tous.
Laurent :
Et voici l'utilisation :Code:
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 SQL> DESC dbms_repair PROCEDURE ADMIN_TABLES Nom d'argument Type E/S par dÚfaut ? ------------------------------ ----------------------- ------ -------- TABLE_NAME VARCHAR2 IN DEFAULT TABLE_TYPE BINARY_INTEGER IN ACTION BINARY_INTEGER IN TABLESPACE VARCHAR2 IN DEFAULT PROCEDURE CHECK_OBJECT Nom d'argument Type E/S par dÚfaut ? ------------------------------ ----------------------- ------ -------- SCHEMA_NAME VARCHAR2 IN OBJECT_NAME VARCHAR2 IN PARTITION_NAME VARCHAR2 IN DEFAULT OBJECT_TYPE BINARY_INTEGER IN DEFAULT REPAIR_TABLE_NAME VARCHAR2 IN DEFAULT FLAGS BINARY_INTEGER IN DEFAULT RELATIVE_FNO BINARY_INTEGER IN DEFAULT BLOCK_START BINARY_INTEGER IN DEFAULT BLOCK_END BINARY_INTEGER IN DEFAULT CORRUPT_COUNT BINARY_INTEGER OUT PROCEDURE DUMP_ORPHAN_KEYS Nom d'argument Type E/S par dÚfaut ? ------------------------------ ----------------------- ------ -------- SCHEMA_NAME VARCHAR2 IN OBJECT_NAME VARCHAR2 IN PARTITION_NAME VARCHAR2 IN DEFAULT OBJECT_TYPE BINARY_INTEGER IN DEFAULT REPAIR_TABLE_NAME VARCHAR2 IN DEFAULT ORPHAN_TABLE_NAME VARCHAR2 IN DEFAULT FLAGS BINARY_INTEGER IN DEFAULT KEY_COUNT BINARY_INTEGER OUT PROCEDURE FIX_CORRUPT_BLOCKS Nom d'argument Type E/S par dÚfaut ? ------------------------------ ----------------------- ------ -------- SCHEMA_NAME VARCHAR2 IN OBJECT_NAME VARCHAR2 IN PARTITION_NAME VARCHAR2 IN DEFAULT OBJECT_TYPE BINARY_INTEGER IN DEFAULT REPAIR_TABLE_NAME VARCHAR2 IN DEFAULT FLAGS BINARY_INTEGER IN DEFAULT FIX_COUNT BINARY_INTEGER OUT FUNCTION ONLINE_INDEX_CLEAN RETURNS BOOLEAN Nom d'argument Type E/S par dÚfaut ? ------------------------------ ----------------------- ------ -------- OBJECT_ID BINARY_INTEGER IN DEFAULT WAIT_FOR_LOCK BINARY_INTEGER IN DEFAULT PROCEDURE REBUILD_FREELISTS Nom d'argument Type E/S par dÚfaut ? ------------------------------ ----------------------- ------ -------- SCHEMA_NAME VARCHAR2 IN OBJECT_NAME VARCHAR2 IN PARTITION_NAME VARCHAR2 IN DEFAULT OBJECT_TYPE BINARY_INTEGER IN DEFAULT PROCEDURE REBUILD_SHC_INDEX Nom d'argument Type E/S par dÚfaut ? ------------------------------ ----------------------- ------ -------- SEGMENT_OWNER VARCHAR2 IN CLUSTER_NAME VARCHAR2 IN PROCEDURE SEGMENT_FIX_STATUS Nom d'argument Type E/S par dÚfaut ? ------------------------------ ----------------------- ------ -------- SEGMENT_OWNER VARCHAR2 IN SEGMENT_NAME VARCHAR2 IN SEGMENT_TYPE BINARY_INTEGER IN DEFAULT FILE_NUMBER BINARY_INTEGER IN DEFAULT BLOCK_NUMBER BINARY_INTEGER IN DEFAULT STATUS_VALUE BINARY_INTEGER IN DEFAULT PARTITION_NAME VARCHAR2 IN DEFAULT PROCEDURE SKIP_CORRUPT_BLOCKS Nom d'argument Type E/S par dÚfaut ? ------------------------------ ----------------------- ------ -------- SCHEMA_NAME VARCHAR2 IN OBJECT_NAME VARCHAR2 IN OBJECT_TYPE BINARY_INTEGER IN DEFAULT FLAGS BINARY_INTEGER IN DEFAULT
mboubidi,Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 SET SERVEROUTPUT ON DECLARE num_corrupt INT; BEGIN for t in (select owner, table_name from dba_tables where owner='SYSMAN') loop num_corrupt := 0; DBMS_REPAIR.CHECK_OBJECT ( SCHEMA_NAME => t.Owner, OBJECT_NAME => t.Table_Name, REPAIR_TABLE_NAME => 'REPAIR_TABLE', CORRUPT_COUNT => num_corrupt); DBMS_OUTPUT.PUT_LINE('Table: '||t.Owner||'.'||t.Table_Name||' number corrupt: ' || TO_CHAR (num_corrupt)); END LOOP; END; /
je ai lancé le script. Il m'a affiché Package créé. Mais après en utilisation (le script ci-dessus) je me retrouve avec les erreure précédentes :
Merci.
est ce que t'as des bloques corrompus?
merci, oui :
Mais je veux utiliser dbms_repair pour cela.Code:
1
2
3 ORA-01578: bloc de données ORACLE altéré (fichier # 3, bloc # 30029) ORA-01110: fichier de données 3 : 'D:\BASE\RMAN\SYSAUX01.DBF'
Salut,
Il semble que tu essaies de récupérer un bloc d'une IOT. Et ce n'est pas possible avec le package DBMS_REPAIR. (cf. http://download.oracle.com/docs/cd/B...htm#sthref3159 : Index-organized tables and LOB indexes are not supported.)
Comme visiblement tu dois être en version enterprise edition, si tu disposes de backup RMAN, tu peux passer par RMAN ... ca sera plus simple.
Essaies ce bloc RMAN
LaurentCode:
1
2
3
4 rman> run { 2 blockrecover datafile 3 block 30029; 3 }
version est 10.2.0.1.
Non je ne dispose pas de backup RMAN. Il parait que même ayant RMAN il faut avoir un BACKUP datant avant l'apparition de block corrompu. Or Oracle ne le detect qu'au moment de l'utilser donc on ne peut pas connaître la date exact.
Quand on détecte un bloc corrompu, la procédure (BLOCKRECOVER) remet en place le bloc issu du backup et rejoue les transactions sur ce bloc (avec les archivelog, d'où la nécessité d'être en ARCHIVELOG) pour le remettre dans un état consistent.
Pour ton cas, ca ne sent pas très bon : DBMS_REPAIR.CHECK_TABLE qui ne fonctionne pas sur une IOT, pas de sauvegarde)
Dans la mesure où c'est un objet du SYSAUX (donc système), peux tu nous donner un peu plus d'info sur cet objet (nom, owner, type etc.)
Laurent
est ce que tu as détecté les segments touché par la corruption?
voici :
Code:
1
2
3
4
5
6
7
8
9
10
11
12 SQL> SELECT tablespace_name, segment_type, owner, segment_name 2 FROM dba_extents 3 WHERE file_id = 3 4 and 30029 between block_id AND block_id + blocks - 1; TABLESPACE_NAME SEGMENT_TYPE OWNER ------------------------------ ------------------ --------------- SEGMENT_NAME ----------------------------------------------------------------- SYSAUX TABLE SYSMAN MGMT_SYSTEM_PERFORMANCE_LOG
ok, essaye de faire un mouve dans le meme tablespace afin de libéré ces bloques. et un rebuild, après formate les bloques corrompus
Plus simple ...
Plutôt que de TOUS les objets de ton schéma SYSAUX, tu peux réaliser un check uniquement sur cet objet.
En gros, le problème est que tu récupères toutes les tables du schéma SYSAUX dans ta boucle, et tu les vérifie une à une avec la procédure. Or, si tu tombes sur une IOT (ou une exception du package), tu tombes sur une exception.
Donc, sois tu réalises un test dans ta boucle pour savoir si tu n'es pas dans une exception, sois tu réalises le check objet par objet.
ce code là, fonctionne très bien sur l'objet en question :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 SET SERVEROUTPUT ON DECLARE num_corrupt INT; BEGIN DBMS_REPAIR.ADMIN_TABLES ( TABLE_NAME => 'REPAIR_TABLE', TABLE_TYPE => dbms_repair.repair_table, ACTION => dbms_repair.create_action, TABLESPACE => 'USERS'); num_corrupt := 0; DBMS_REPAIR.CHECK_OBJECT ( SCHEMA_NAME => 'SYSMAN', OBJECT_NAME => 'MGMT_SYSTEM_PERFORMANCE_LOG', REPAIR_TABLE_NAME => 'REPAIR_TABLE', CORRUPT_COUNT => num_corrupt); DBMS_OUTPUT.PUT_LINE('number corrupt: ' || TO_CHAR (num_corrupt)); END; /
merci Laurent,
je dois cloner la base dans laquelle il y a des blocks corrumpus et ensuite applique le script.
Je pense que de toute façon j'ai ma réponse pour l'erreur :
DBMS.REPAIRE ne support pas les table IOT. Sinon le package DBMS.REPAIRE est installé.Code:
1
2 ORA-24123: feature IOT support is not yet implemented
Mon but était de tester RDBMS.REPAIR pour voir si je peux l'utiliser pour réparer mes blocks corrumpus.
Laurent,
apparement la table n'est pas corrompue :
Alors je me demande pourquoi dans alertolog je suis avertie ?Code:
1
2
3
4
5
6 SQL> select count (*) from sysman.MGMT_SYSTEM_PERFORMANCE_LOG; COUNT(*) ---------- 3342
D'avance merci.
Salut,
- Est-ce que la requête que tu mentionnes a été exécutée avec le cache de tampon vide ? (afin de forcer des lectures physiques sur tout l'objet) ?
- la vue V$DATABASE_BLOCK_CORRUPTION contient-elle des lignes ?
- As tu essayé de réaliser un "dbv" sur le fichier du tablespace sysaux ? le cas échéant, il faudrait tenter une opération rman de BACKUP VALIDATE DATABASE (pour vérifier tous les blocs de ta base) et réinterroger la V$DATABASE_BLOCK_CORRUPTION.
Laurent