Vous n'êtes pas identifié(e).
Pages : 1
Peut-être, mais sachant que les transactions se sont bien passées et que rien ne justifie ce trou et que cet écart est redondant sur différentes séquences qui n'appartiennent pas forcément au même schéma et qu'en plus elles ont eu lieu le même jour, il y doit bien y avoir une explication logique.
Bonjour,
J'aurais une remarque concernant Talend, après avoir vu quelques comparatif, il semblerai que Talend Open Studio ne puisse pas migrer des tables de plus de 4 millions de lignes.
C'est la seule restriction que j'ai pu voir sur TOS.
Merci pour ces quelques précisions.
Entre ces 2 dates, le serveur a été arrêté pour une maintenance (upgrade hardware).
Est il possible que ce problème vienne de là et y a t il une commande pour éviter ce genre de problème avant l'arrêt du serveur ?
edit : toutes les séquences n'ont pas de cache (valeur 1), ce comportement reste assez étrange.
Bonjour,
Voici le problème que j'ai constaté.
J'ai une application qui génère un ensemble de fichiers, ces fichiers contiennent une valeur tirée d'une séquence qui s'incrémente de 1 à chaque fois.
Entre les les 19 et 26 juin, le problème suivant est apparut, toutes les applications ont vu leurs séquences respectives incrémentées de 33 oO .
Au début, je pensais à une erreur humaine mais avouez que c'est étrange d'avoir autant de séquences qui se sont incrémentées du même nombre.
Les séquences qui ne sont pas employées n'ont pas eu ce problème.
Auriez vous une explication ou une idée qui pourrait m'éclairer sur ce qui s'est passé ?
Merci d'avance pour vos réponses.
Autant pour moi, j'ai lu un peu rapidement et ma réponse passait par la simplicité.
D'après les messages d'erreurs que vous avez, c'est une erreur de propriété du schéma pour résoudre cela, vous pouvez essayer la commande suivante :
ALTER SCHEMA [nom du schema] OWNER TO userB;
Cela devrait résoudre votre problème puisqu'ensuite le schéma appartiendra au userB et le supprimer ne posera plus de problème.
La base de destination à sans doute été crée avec le mauvais user; je suppose que le propriétaire de la base n'est pas userB.
Question : Et pourquoi ne pas tout simplement utiliser l'utilisateur posgres qui est quand même l'utilisateur pour la maintenance ???
De plus, j'aurais tendance à utiliser les options -d Mabase -U user dans le psql au lieu de le mettre dans l'archive du restore.
Je suis plutôt d'accord avec gleu, c'est complexe et surtout au niveau perfs tu seras loin du compte.
Ca dépend également du type de dump que tu veux faire : sauvegarde intégrale de ta base ou simple extraction des données de tables ?
Ca lui fera gagner du temps pour la migration de ses données mais Talend ne lui rendra pas la vie plus facile pour tout ce qui concerne les fonctions, les index et autres types et contraintes personnalisées.
En prenant en compte le temps nécessaire pour apprendre à utiliser cet ETL et vu la volumétrie de ces données, je ne suis pas certain qu'il y gagne.
Bonjour,
C'est pas évident de répondre comme ca. Ca dépend de la puissance du serveur employé, de la vitesse des disques, de la quantité de RAM, de se qui tourne au moment du dump, etc....
Si tu pouvais être plus précis sur la configuration employée par ton serveur qui héberge ta BDD Oracle, on pourrait éventuellement te répondre .
Tu t'attaques à un gros morceau là !
En faisant un dump juste des données (option -a) et avec des insert (option -d) tu n'auras pas trop de problème pour faire passer les données d'une base à l'autre. Il faudra quand même supprimer tous ce que postgresql met de pour lui (set path, etc...).
Où ca devient intéressant, c'est dans la création des tables ... Si le format de ta table est basic : sans contraintes, sans index ni types personnalisés; alors la création des tables sera assez aisée. Autrement, il faudra alors les traduire en sql server.
Dans tous les cas, tu sera obligé de retranscrire toutes tes fonctions, tes index et autres contraintes en sql server. Pour cela je te conseille de te pencher sur la msdn et les forum spécialisé SQL Server.
Vu la taille de ton fichier, ce n'est pas insurmontable surtout que la plus grande partie de ce fichier, ce sont des données .
Afin de ne pas trop te perdre, je serais toi, je migrerai table par table. C'est un peu laborieux mais c'est le plus sûr moyen de ne pas avoir de mauvaises surprise.
Et je laisserai pour la fin, le plus dégueulasse, à savoir la réécriture des fonctions :X
Bonjour,
déjà tu demandes de faire du dump de masse via pg_admin .... ca va être laborieux.
Pour faire le dump de tes tables je vais t'indiquer la ligne de commande à exécuter dans un shell windows car les options passées en paramètres par défaut dans pg-admin son trop limitées et les modifier n'est pas pratique.
Il faut que tu te déplaces dans le dossier où se trouve pg_admin (c'est pour avoir la commande pg_dump.exe si cette commande est dans le classpath de ton serveur alors pas besoin de se déplacer).
Ensuite,exécutes la commande suivante :
pg_dump -i -c -h [adresse de l'hote] -U [utilisateur] -F p -t [nom table1] -t [nom table2] etc. -d -f [chemin et nom du fichier de sauvegarde] [nom de la base]
Petite explication des options employées :
-i : exécute le dump même si les versions de pg_dump et de la base sont différentes.
-c : (clean) supprime la table si elle existe, sinon une erreur est envoyée.
-F p : force le format a employer, p pour plain text (il me semble que c'est le format par défaut mais j'en suis pas sur).
-t : pour dumper une table spécifique avec les données.
-d : va mettre les données de ta table sous forme d'insert dans ton fichier, si cette option n'est pas mise, les données seront restaurées en utilisant COPY.
-f : signifie fichier.
TRUNCATE sert effectivement à vider les tables.
Maintenant que tu as tes fichiers, il te suffit de les ouvrir sous pd admin et de les excécuter.
Attention, si tu drop une table qui n'existe pas sous pg_admin ca annulera la transaction entière, alors qu'en utilisant psql sur le serveur ca ignore juste la commande qui ne fonctionne pas.
Sur la base dumpée, les triggers sont bel et bien tous activés.
Il me semble être tombé au détour de la doc, qu'une variable existe dans la configuration pour dire d'activer ou de désactiver les triggers lors d'une restauration. Mais comme souvent, c'est toujours quand on cherche qu'on trouve pas.
Les triggers existent bien dans la base de pé-prod puisque sous pgadmin un "activer tous les triggers sur cette table" fonctionne.
P-e suis je tombé sur un bug... toujours est il qu'au lieu de chercher encore pendant 3 heures, voici une fonction qui active tous les triggers présents dans une base.
Testée et approuvée .
create or replace function public.f_enable_all_triggers()
returns integer as
$$
declare
l record;
requete character varying;
nbt integer;
begin
nbt := 0;
for l in select trigger_schema, trigger_name, event_object_table
from information_schema.triggers where trigger_schema != 'pg_catalog' loop
requete := 'alter table ' || l.trigger_schema || '.' || l.event_object_table;
requete := requete || ' enable trigger ' || l.trigger_name || ';';
raise notice '%', requete;
execute requete;
nbt := nbt + 1;
end loop;
return nbt;
end;
$$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
Mon problème est un peu confus. Je vais tout ré-expliquer depuis le début.
J'ai 2 environnements différents : la production et la pré-production.
Sur demande, je réalise des dump et des restauration en fonction des besoins de chacun.
Voici les commandes que j'utilise :
pour le dump : pg_dump -i -h [adresseprod] -U [utilisateur] -F c [mabase] -f [monarchivecompressée]
pour la restauration : pg_restore -i -c [monarchivecompressée] -f [fichier.sql]
et je lance la restauration par psql -U postgres -d [basecible] -f [fichier.sql]
La restauration se passe sans problème (pas d'erreurs ds les logs) sauf qu'à la fin aucun triggers n'est activé.
Je cherche un moyen de les réactivers dans l'ensemble, sinon, je vais devoir faire un script ou une fonction qui réactive tous les triggers présents dans la base.
p.s : Slony n'intervient pas dans la réplication.
Je te remercie pour tes réponses.
Il faut croire que non, j'en ai fait l'expérience suite à une remarque d'un utilisateur.
Dans la base d'origine, les triggers sont activées après réplication sur le serveur de pré-prod, ils sont tous désactivés : ca pose problème puisque l'intégrité des données filtré par ces triggers n'est plus respecté.
Comme dit plus haut, j'ai essayé avec et sans l'option disable-triggers. Cela ne change rien, avec l'option -clean ca va être difficile de désactiver quelque chose qui n'existe plus au moment de la restauration.
edit : cela a un p-e un lien mais la version de pg_dump et en 8.1 et la base en 8.3 et je suis oligé d'ajouter l'option ignore pour réaliser le dump.
Bonjour,
Je cherche l'option qui a la fin d'une restauration active tous les triggers présents sur toutes les tables restaurées.
J'utilise pg_dump / pg_restore avec l'option clean et l'utilisateur postgres pour le faire.
Dans la doc rien n'est mentionné (j'ai pas trouvé) et même en utilisant l'option -X disable-triggers les triggers ne sont pas activés.
Pour info, j'utilise une version 8.3 recompilée sous Solaris 5.10.
Pages : 1