[LINUX] Comment surveiller l'état d'exécution de sqlldr avec la commande pv

À propos de sqlldr

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.

À propos de la commande 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.

Connectez sqlldr et pv

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

Comment surveiller l'état d'exécution de sqlldr avec la commande pv
Comment passer le résultat de l'exécution d'une commande shell dans une liste en Python
Comment supprimer la chaîne de caractères spécifiée avec la commande sed! !! !!
Vérifiez l'état de la mémoire du serveur avec la commande gratuite Linux
Vérifiez l'état de fonctionnement du serveur avec la commande Linux top
Comment passer le résultat de l'exécution d'une commande shell dans une liste en Python (version non bloquante)
[sh] Comment stocker les résultats de l'exécution de la commande dans des variables
Comment obtenir l'ID de Type2Tag NXP NTAG213 avec nfcpy
[EC2] Comment installer Chrome et le contenu de chaque commande
Comment vérifier la version de Django
[Linux] Comment utiliser la commande echo
Comment calculer Utiliser% de la commande df
Comment utiliser la commande CUT (avec exemple)
Comment couper la partie inférieure droite de l'image avec Python OpenCV
Comment connaître le nombre de processeurs sans utiliser la commande sar
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
[Reconnaissance d'image] Comment lire le résultat de l'annotation automatique avec VoTT
Comment trouver la zone du diagramme de Boronoi
Préparer l'environnement d'exécution de Python3 avec Docker
Comment essayer l'algorithme des amis d'amis avec pyfof
Comment spécifier des attributs avec Mock of Python
Comment implémenter "named_scope" de RubyOnRails avec Django
Comment mesurer le temps d'exécution avec Python Partie 1
Comment entraîner Kaldi avec JUST Corpus
De l'introduction de pyethapp à l'exécution du contrat
Comment mesurer le temps d'exécution avec Python, partie 2
Un mémorandum expliquant comment exécuter la commande magique! Sudo dans Jupyter Notebook
Liste de contrôle pour éviter de transformer les éléments de array of numpy avec for
Remarque: Comment obtenir le dernier jour du mois avec python (ajouté le premier jour du mois)
L'histoire de la fabrication de soracom_exporter (j'ai essayé de surveiller SORACOM Air avec Prometheus)
Comment obtenir une liste de fichiers dans le même répertoire avec python
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Comment revenir à la commande depuis l'état où vous ne pouvez pas entrer en mode interactif avec python de git bash
Comment connaître le numéro de port du service xinetd
Comment écrire une interface graphique à l'aide de la commande maya
Comment obtenir le nombre de chiffres en Python
Je veux grep le résultat de l'exécution de strace
[Python] Comment spécifier l'emplacement de téléchargement avec youtube-dl
Comment démarrer du code écrit en Atom avec une seule commande sans démarrer Teminal
Comment démarrer avec Visual Studio Online ~ La fin de l'ère de la construction d'environnement ~
Ajouter un utilisateur Linux, comment utiliser la commande useradd
Comment générer un CSV d'en-tête multiligne avec des pandas
Comment utiliser la commande grep et des exemples fréquents
Essayez d'obtenir le contenu de Word avec Golang
[Blender] Comment définir dynamiquement les sélections EnumProperty
Préparation de l'environnement d'exécution de PyTorch avec Docker Novembre 2019
Comment déduire l'estimation MAP de HMM avec PyStruct
[Python] Résumé de la façon de spécifier la couleur de la figure
Comment déduire une estimation MAP de HMM avec OpenGM
Comment frapper le document de Magic Function (Line Magic)
Comment accéder à la variable globale du module importé
Un mémo sur la façon de surmonter le problème difficile de la capture d'effets avec l'IA
[Python] Comment réécrire le style de table avec python-pptx [python-pptx]
Obtenez l'état de fonctionnement de JR West avec Python
Comment compter le nombre d'occurrences de chaque élément de la liste en Python avec poids
Visualisez le statut d'appréciation des œuvres d'art avec OpenCV
Comment apprendre le SVM structuré de ChainCRF avec PyStruct
(Rappelez-vous rapidement) Comment utiliser la ligne de commande LINUX
linux / c> lien> Obtenir le résultat de l'exécution de la commande shell dans le programme C> On m'a appris à utiliser popen ()