Vous n'êtes pas identifié(e).
Bonjour
j'ai un probléme de migration de données oracle vers postgres via Ora2Pg (c sous linux),
j'ai constaté que le taille de ces données de type BLOB(se sont des fichiers pdf) qui sont migrées a partir d'une base oracle, ne dépasse pas 1Mo. C a dire que meme si le fichier pdf d'origine (qui se trouve dans la base oracle) a une taille de plus de 1Mo, je le trouve dans la base postgres avec une taille de 1023KO exact ce qui induit a une erreur lors de son ouverture.
S'il ya quelqu'un qui peut m'orienter, je lui serais trés reconnaissante
PS: la migration de la table qui contient les BLOB se fait avec le type 'COPY'. Le type 'DATA' me génére des erreurs.
Hors ligne
Bonjour,
Le problème que vous rencontrez est lié aux limitations d'Oracle qui lors d'une simple lecture (SELECT) sur un BLOB ne renvoi par défaut que les premiers 4Ko de l'enregistrement. Ora2Pg fait un simple "SELECT * FROM table" pour extraire les données. Cette taille peut être réglée à l'aide du mot clé STORAGE lors de la création de la colonne. Je pense dans le cas de votre base que le champ à du être définie de la façon suivante : ... storage (initial 1m next 1m) d'où les 1023Ko.
Le problème est que je n'ai pas de solution rapide sous la main coté Ora2Pg pour palier à ce problème. La solution est peut-être plus rapide coté Oracle s'il est possible d'utiliser la clause MODIFY LOB d'un ALTER TABLE, par contre je n'ai jamais testé ce type de redimensionnement, il serait donc judicieux de l'exécuter sur une copie de la base Oracle. J'ai quelque doute sur cette dernière solution.
Merci de nous tenir au courant, dans le cas où cela ne fonctionnerait pas merci d'envoyer un mail au support d'Ora2Pg.
Hors ligne
Bonjour gilles,
je te remercie pour ta réponse ainsi pour tes explications.
Je vais tester cette solution et je vous tiendrez au courant du résultat
je tiens seulement à préciser que le champs BLOB dans la base oracle est correct (il contient la totalité de la donnée BLOB).
Merci encore.
Hors ligne
Oui, ce que j'essayais d'expliquer c'est qu'au niveau d'Oracle les blob sont stockés par "blocs/chunk" de 4Ko par défaut ou de la taille spécifiée dans la clause storage. Lors d'une lecture (select) sur cette colonne, seul le premier bloc est retourné. Si l'on veut donc obtenir l'intégralité des données du blob lors d'un select, la taille du bloc doit donc être supérieure à la taille du plus grand enregistrement.
Voila, je ne sais pas si c'est plus clair mais le but du "alter modify blob" est d'augmenter la taille de ce bloc au maximum pour obtenir directement les données. Si cela n'est pas possible je modifierai Ora2Pg pour qu'il puisse travailler avec les blocs de BLOB.
Hors ligne
bonjour gilles
Je viens de faire la modification sur ma table oracle,enfin, jai du la recrée comme suit
//
create table nom_table
(
blob1 BLOB,
blob2 BLOB,
code1 VARCHAR2(250),
code2 NVARCHAR2(500),
)
LOB (blob1, blob2) STORE AS (
STORAGE(INITIAL 3M NEXT 3M )
);
//
Parcque en effet le 'alter table modify lob' n'a pas fonctionné
Mais le probléme persiste toujours...
Dernière modification par yamina (29/12/2011 12:20:22)
Hors ligne
Bonjour
Mon probléme persiste toujours, si vous avez des idées je suis à votre écoute.
Merci.
Hors ligne