L'utilitaire sqlldr d'Oracle est utilisé pour charger des fichiers dans des tables sqlldr génère la progression suivante vers la sortie standard, afin que vous puissiez vérifier l'état d'exécution. Cependant, si le nombre de charges est important, il n'est pas possible de savoir combien de temps il faudra pour terminer la charge.
SQL*Loader: Release 12.1.0.2.0 -Production le jeu 23 janvier 14:36:14 2020
Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.
Utiliser le chemin:Type conventionnel
Vous avez atteint le point de validation.-Nombre d'enregistrements logiques 64
Vous avez atteint le point de validation.-Nombre d'enregistrements logiques 128
Vous avez atteint le point de validation.-Nombre d'enregistrements logiques 192
Vous avez atteint le point de validation.-Nombre d'enregistrements logiques 256
Vous avez atteint le point de validation.-Nombre d'enregistrements logiques 320
Vous avez atteint le point de validation.-Nombre d'enregistrements logiques 384
Vous avez atteint le point de validation.-Nombre d'enregistrements logiques 448
Vous avez atteint le point de validation.-Nombre d'enregistrements logiques 512
Vous avez atteint le point de validation.-Nombre d'enregistrements logiques 576
Par conséquent, je me suis demandé s'il serait possible de surveiller l'état d'exécution à l'aide de la commande Linux pv.
La commande Pv est disponible sous Linux La commande pv est un outil pratique qui s'exécute entre les commandes acheminées et affiche l'état actuel et le temps estimé jusqu'à la fin à partir de la quantité totale de données et de la quantité de données qui ont traversé le tube.
Par exemple, si vous souhaitez compresser un fichier volumineux avec la commande gzip
$ gzip bigfile
Créera un bigfile.gz compressé Cependant, il ne génère aucun message pendant l'exécution, donc je ne sais pas quand cela se terminera.
Donc, en utilisant la commande pv,
$ pv bigfile | gzip -c > bigfile.gz
Lorsque vous exécutez
$ pv bigfile | gzip -c > bigfile.gz
129MB 0:00:15 [92.8MB/s] [===========> ] 36% ETA 0:00:31
La quantité totale, le temps écoulé, la quantité de passage par seconde, l'état d'exécution actuel (jauge et%), le temps restant sont affichés comme
Comme vous pouvez le voir, pv est très pratique, mais il surveille la quantité de données passant par le tube, il ne peut donc prendre en charge que le format de commande connecté par le tube.
Comme mentionné précédemment, sqlldr écrit actuellement sur la sortie standard le nombre de charges qu'il a chargées. Si seulement ce nombre de cas peut être retiré et passé à pv par pipe, il en est bien ainsi.
Le nombre d'enregistrements est suffisant, pas le nombre d'octets à charger, tant que vous connaissez l'état d'exécution. Alors, créons un script shell qui exécute un awk simple, lisons la sortie standard de sqlldr et sortons le nombre de caractères équivalent au nombre de cas.
loadcount
#!/bin/bash
awk -F'nombre' '
BEGIN { SV = 0; }
NF==2{
for (i = 0; i < $2 - SV; i++) {
printf("1");
}
SV = $2;
}'
Ce script doit être exécutable, alors donnez-lui l'autorisation d'exécution après l'avoir enregistré dans l'éditeur
$ chmod +x loadcount
Le contenu du traitement est le suivant -Lorsque le nombre de champs (NF) est de 2 (= lorsque le nombre d'observations est yyy) avec la chaîne de caractères «nombre d'observations» comme délimiteur, le «nombre d'observations» Extraire la dernière chaîne de caractères (2 $) -Le caractère 1 octet "1" est émis pour le nombre de différences par rapport au nombre d'éléments récupérés la dernière fois. En d'autres termes, si sqlldr charge 1 000 enregistrements, 1 000 "1" seront émis.
Si l'entrée est un tube, la commande pv ne connaît pas le montant total, donc dans ce cas, vous pouvez spécifier le montant total avec l'option -s. Dans ce cas, le montant total correspondra au nombre d'enregistrements du fichier à charger. Le nombre d'enregistrements (nombre de lignes) peut être obtenu à l'aide de la commande wc.
$ wc -l Nom du fichier
La forme finale est la suivante
$ sqlldr USER/PASS@SID control=t1.ctl | ./loadcount | pv -p -t -e -s `cat t1.csv|wc -l` > /dev/null
0:00:20 [========> ] 17% ETA 0:01:33
-USER / PASS @ SID est un descripteur de connexion à Oracle -T1.ctl est un fichier de contrôle d'entrée pour sqlldr -T1.csv est le fichier de données à charger
J'ai pu surveiller avec succès l'état d'exécution de sqlldr
Recommended Posts