Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour à tous,
J'aimerai avoir une aide afin de gérer un Job qui doit durer plusieurs jours. J'interroge des tables de ma base MSSQL contenant dans des champs de contenu XML que je remets donc en forme etc.
Le problème est que tous les soirs nous avons une maintenance sur le serveur MSSQL de 21h à 2h environ. Cela entraine l'arrêt de mon Job, j'ai donc l'impossibilité d'aller jusqu'au bout.
Voici le message que j'obtiens :
Démarrage du Job Prod_B_Extract_Contenu_XML_2023_1 à 11:09 02/05/2024.
[statistics] connecting to socket on port 4035
[statistics] connected
Exception in component tDBInput_1 (Prod_B_Extract_Contenu_XML_2023_1)
java.sql.SQLException: Invalid state, the Connection object is closed.
at net.sourceforge.jtds.jdbc.TdsCore.checkOpen(TdsCore.java:481)
at net.sourceforge.jtds.jdbc.TdsCore.clearResponseQueue(TdsCore.java:767)
at net.sourceforge.jtds.jdbc.JtdsStatement.reset(JtdsStatement.java:722)
at net.sourceforge.jtds.jdbc.JtdsStatement.close(JtdsStatement.java:966)
at easily_xml_specialites.prod_b_extract_contenu_xml_2023_1_0_1.Prod_B_Extract_Contenu_XML_2023_1.tDBInput_1Process(Prod_B_Extract_Contenu_XML_2023_1.java:2559)
at easily_xml_specialites.prod_b_extract_contenu_xml_2023_1_0_1.Prod_B_Extract_Contenu_XML_2023_1.runJobInTOS(Prod_B_Extract_Contenu_XML_2023_1.java:4586)
at easily_xml_specialites.prod_b_extract_contenu_xml_2023_1_0_1.Prod_B_Extract_Contenu_XML_2023_1.main(Prod_B_Extract_Contenu_XML_2023_1.java:4377)
[statistics] disconnected
Job Prod_B_Extract_Contenu_XML_2023_1 terminé à 21:54 02/05/2024. [Code de sortie = 1]
J'ai bien essayé de mettre le code suivant dans un des mes composants tJava (dans la capture, tJava_5), mais rien n'y fait car une déconnexion à la base MSSQL a lieu, ce qui interrompt donc le Job.
LocalTime currentTime = LocalTime.now();
LocalTime startTime = LocalTime.parse("21:00");
LocalTime endTime = LocalTime.parse("02:00");
if (!currentTime.isBefore(startTime) && currentTime.isBefore(endTime)) {
long sleepTime = java.time.Duration.between(currentTime, endTime).toMillis();
Thread.sleep(sleepTime);
}
Je vous joint une capture d'écran de mon Job.
Pourriez-vous m'aider à trouver une solution à ce problème ? Merci à tous par avance.
Hello
I think we need to know more about your use case, you mentioned you want the job to last several days.
Is the job scheduled to run regularly?
How big is your data volume?
How long does your job take to execute under normal circumstances?
When the connection fails or fails during execution, do you need to reconnect until the job executes and ends normally?
Regards
Shicong
Bonjour,
Le job est prévu pour s'exécuter environ une fois par an, avec un très gros volume de données. Il faut environ 2 jours pour exécuter à bien ce job. Lorsque la connexion échoue je n'ai pas de possibilité de reconnexion pour reprendre le job où il s'est arrêté, je dois ainsi tout reprendre depuis le début.
Merci pour votre aide
Si la connexion à MSSQL est fermée par le serveur il n'y a pas la possibilité depuis Talend de contourner ce problème.
Deux solutions :
- éviter l'arrêt de ce serveur sur la plage horaire mentionnée (1 fois par an c'est un besoin spécifique)
- faire l'exécution sur un second serveur puis faire la bascule sur le premier serveur
Comme mentionné par d'autres personnes deux solutions :
Suspendre les opérations de maintenance côté MSSQL pour ne pas que la base s'arrête.
Ou bien :
Faire en sorte de diminuer le volume de données à l'aide de conditions dans vos requêtes (modulo sur des ID, périodes de date etc...) pour faire en sorte que chaque partie que vous souhaitez exécuter puisse tenir sur une journée classique.