Skip to main content
Announcements
See what Drew Clarke has to say about the Qlik Talend Cloud launch! READ THE BLOG
cancel
Showing results for 
Search instead for 
Did you mean: 
Sylv
Contributor II
Contributor II

Déconnexion à ma base MSSQL au cours d'un Job

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.

Labels (7)
4 Replies
Shicong_Hong
Support
Support

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

Sylv
Contributor II
Contributor II
Author

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

jeoste
Creator
Creator

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

 

quentin-vigne
Partner - Contributor III
Partner - Contributor III

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.