Sql*loader Erreur de chargement avec l'option APPEND
Résolu/Fermé
sabdoul
Messages postés
40
Date d'inscription
samedi 18 août 2012
Statut
Membre
Dernière intervention
22 octobre 2014
-
18 janv. 2013 à 11:47
sabdoul Messages postés 40 Date d'inscription samedi 18 août 2012 Statut Membre Dernière intervention 22 octobre 2014 - 18 janv. 2013 à 18:16
sabdoul Messages postés 40 Date d'inscription samedi 18 août 2012 Statut Membre Dernière intervention 22 octobre 2014 - 18 janv. 2013 à 18:16
A voir également:
- Sqlloader append
- Java:method append(char) undefined for String - Forum Programmation
8 réponses
jee pee
Messages postés
40478
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
27 novembre 2024
9 428
Modifié par jee pee le 18/01/2013 à 13:22
Modifié par jee pee le 18/01/2013 à 13:22
Bonjour,
Il faut que tu supprimes l'index sur la table avant le sqloader puis que tu le recrées après.
Ou : http://www.dba-oracle.com/t_skip_index_maintenance_sqlldr.htm , mais à la fin de cette opération l'index est dans un status inutilisable donc peu d'interet puisqu'il faut le rebatir après.
cdlt
Un étranger, c'est un ami qu'on n'a pas encore rencontré.
Il faut que tu supprimes l'index sur la table avant le sqloader puis que tu le recrées après.
Ou : http://www.dba-oracle.com/t_skip_index_maintenance_sqlldr.htm , mais à la fin de cette opération l'index est dans un status inutilisable donc peu d'interet puisqu'il faut le rebatir après.
cdlt
Un étranger, c'est un ami qu'on n'a pas encore rencontré.
sabdoul
Messages postés
40
Date d'inscription
samedi 18 août 2012
Statut
Membre
Dernière intervention
22 octobre 2014
18 janv. 2013 à 12:59
18 janv. 2013 à 12:59
Bonjour Jee pee,Metci de votre.
Avec la suppression et la recréations des indexes que se trouve toute la difficulté car les mises a jour se font régulièrement dans la journée avec une automatisation(a travers un fichier batch que je lance avec le planificateur de tache windows). Donc vous voyez que solution n'est pas adapté.
Serait-il possible d'adopter une autre solution. merci
Avec la suppression et la recréations des indexes que se trouve toute la difficulté car les mises a jour se font régulièrement dans la journée avec une automatisation(a travers un fichier batch que je lance avec le planificateur de tache windows). Donc vous voyez que solution n'est pas adapté.
Serait-il possible d'adopter une autre solution. merci
jee pee
Messages postés
40478
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
27 novembre 2024
9 428
18 janv. 2013 à 13:13
18 janv. 2013 à 13:13
Tu charges dans une table intermédiaire, et après le sqloader tu lances un sql via sqlplus qui insère la table intermédiaire dans la table finale.
sabdoul
Messages postés
40
Date d'inscription
samedi 18 août 2012
Statut
Membre
Dernière intervention
22 octobre 2014
18 janv. 2013 à 14:54
18 janv. 2013 à 14:54
Bonjour,
ok mais comment se fait cette méthode ou s'il y'a des liens pour avoir de amples information
ok mais comment se fait cette méthode ou s'il y'a des liens pour avoir de amples information
jee pee
Messages postés
40478
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
27 novembre 2024
9 428
18 janv. 2013 à 14:59
18 janv. 2013 à 14:59
C'est tout simple, tu crées une table MOUVEMENT_TEMP idem la table MOUVEMENT
Tu charges la table temporaire avec sqlloader et après tu fais un sql qui fait juste
insert into MOUVEMENT select * from MOUVEMENT_TEMP;
Tu charges la table temporaire avec sqlloader et après tu fais un sql qui fait juste
insert into MOUVEMENT select * from MOUVEMENT_TEMP;
sabdoul
Messages postés
40
Date d'inscription
samedi 18 août 2012
Statut
Membre
Dernière intervention
22 octobre 2014
18 janv. 2013 à 15:12
18 janv. 2013 à 15:12
Rebonjour jee pee,
Cette table je la crée dans ma base de donnée comme une table réel?
Ensuite l'insertion avec le sql: insert into MOUVEMENT select * from MOUVEMENT_TEMP; se fait manuellement dans la BD ou y'a-t-il un moyen pour q'il se fasse sans mon intervention car ses données doivent être insérer régulièrement dans la journée.
Cette table je la crée dans ma base de donnée comme une table réel?
Ensuite l'insertion avec le sql: insert into MOUVEMENT select * from MOUVEMENT_TEMP; se fait manuellement dans la BD ou y'a-t-il un moyen pour q'il se fasse sans mon intervention car ses données doivent être insérer régulièrement dans la journée.
jee pee
Messages postés
40478
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
27 novembre 2024
9 428
18 janv. 2013 à 15:19
18 janv. 2013 à 15:19
oui bien sur c'est une table dans la base de données.
tu lances le sql dans le fichier de commande qui lance le sqlloader
tu rajoutes quelque chose du style
sqlplus system/manager@ORACLE_SID @recopie.sql
le recopie.sql contenant l'insert
tu lances le sql dans le fichier de commande qui lance le sqlloader
tu rajoutes quelque chose du style
sqlplus system/manager@ORACLE_SID @recopie.sql
le recopie.sql contenant l'insert
sabdoul
Messages postés
40
Date d'inscription
samedi 18 août 2012
Statut
Membre
Dernière intervention
22 octobre 2014
18 janv. 2013 à 15:27
18 janv. 2013 à 15:27
si je comprend bien j'ajoute la ligne sqlplus system/manager@ORACLE_SID @recopie.sql au fichier de control?
exemple avec mon cas
LOAD DATA
APPEND
INTO TABLE MOUVEMENT
FIELDS TERMINATED BY '\t'
TRAILING NULLCOLS
(CODE_ETABL char(10),
CODE_DEPOT char(35),
CODE_PRODUIT char(35),
........
..........
)
sqlplus system/manager@ORACLE_SID @recopie.sql
dans le cas contraire comment se fait la syntaxe c'est à dire où je doit la placer. merci
exemple avec mon cas
LOAD DATA
APPEND
INTO TABLE MOUVEMENT
FIELDS TERMINATED BY '\t'
TRAILING NULLCOLS
(CODE_ETABL char(10),
CODE_DEPOT char(35),
CODE_PRODUIT char(35),
........
..........
)
sqlplus system/manager@ORACLE_SID @recopie.sql
dans le cas contraire comment se fait la syntaxe c'est à dire où je doit la placer. merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
sabdoul
Messages postés
40
Date d'inscription
samedi 18 août 2012
Statut
Membre
Dernière intervention
22 octobre 2014
18 janv. 2013 à 16:19
18 janv. 2013 à 16:19
Bonsoir,jee pee j'ai avancé un peu je pense que la ligne sqlplus system/manager@ORACLE_SID @recopie.sql doit être dans la commande c'est à dire dans mon fichier bat de sorte qu'il soit lancer dans l'invite de commande comme le sqlldr cependant où doit se trouver le fichier recopie.sql?
Merci
Merci
jee pee
Messages postés
40478
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
27 novembre 2024
9 428
18 janv. 2013 à 17:13
18 janv. 2013 à 17:13
Oui c'est bien dans le fichier batch que tu lances avec le planificateur qu'il faut rajouter la ligne sqlplus
Ou mettre le .sql : soit il est dans le répertoire de travail de la tache qui exécute le batch, soit tu mets son nom complet style c:\monsql\expl\recopie.sql
Ou mettre le .sql : soit il est dans le répertoire de travail de la tache qui exécute le batch, soit tu mets son nom complet style c:\monsql\expl\recopie.sql
sabdoul
Messages postés
40
Date d'inscription
samedi 18 août 2012
Statut
Membre
Dernière intervention
22 octobre 2014
18 janv. 2013 à 17:19
18 janv. 2013 à 17:19
ok merci beaucoup je vous tient au courant de la suite
sabdoul
Messages postés
40
Date d'inscription
samedi 18 août 2012
Statut
Membre
Dernière intervention
22 octobre 2014
18 janv. 2013 à 18:16
18 janv. 2013 à 18:16
Merci jee pee ça fonctionne
je perd en efficacité car le temps d'insertion dans la table MOUVEMENT prend du temps mais je suis vraiment ravi d'avoir pu insérer les données. Merci encore
je perd en efficacité car le temps d'insertion dans la table MOUVEMENT prend du temps mais je suis vraiment ravi d'avoir pu insérer les données. Merci encore