Domanda

Sto tentando di eseguire il seguente comando nel KornShell (ksh):

set -A INDEXES `db2 "describe indexes for table ${TABSCHEMA}.${TABNAME} show detail" | awk '{print $1"."$2}'`

Quello che sto cercando di realizzare è mettere un elenco degli indici più di una particolare tabella in un array che posso poi scorrere.

Il problema è che, quando si esegue il comando sopra i contenuti della matrice inizia con il messaggio di errore di 'SQL1024N' (che mi sta dicendo che la connessione al database non esiste).

Tuttavia, se mi tolgo la awk alla fine della dichiarazione come:

set -A INDEXES `db2 "describe indexes for table ${TABSCHEMA}.${TABNAME} show detail"`

funziona bene (bene, nella misura in cui sta tornando dati. Ovviamente senza la <=> non sto catturando i dati corretti).

Qualcuno sa il motivo per cui il <=> sta avendo questa influenza?

Mi rendo conto non v'è più di un modo per ottenere questi dati, ma mi sconcerta il motivo per cui questo sta accadendo.

Grazie in anticipo.

È stato utile?

Soluzione

In questo caso, quando il DB2 CLP dice che non è collegato al database, è perché il guscio ha aperto un sotto-processo che richiede un proprio processo backend db2bp dedicato, che non può accedere alla connessione aperta dalla shell originale processi. Non è che qualcosa sta diventando scollegato, è che un processo shell appena creato (e il suo processo db2bp di accompagnamento) sono stati creati, ma non viene detto per la connessione a un database. Un modo per porre rimedio a tale è quello di collegare in modo esplicito (o ri-connect) al database quando sai di essere in una di quelle situazioni.

set -A INDEXES `db2 connect to watevrDB >/dev/null;db2 -x describe indexes for table ${TABSCHEMA}.${TABNAME} show detail | awk {'print $1"."$2'}`

Mi rendo conto che questa domanda è più su script e awk con DB2 di circa catalogo di sistema, altrimenti avrei consigliato alcune query Catalogo semplici per produrre lo stesso risultato.

Altri suggerimenti

Dubito che sia awk per sé. Forse DB2 è particolare circa stdout di essere collegato ad una tty o una console? O almeno non piace quando è collegato ad un tubo.

Questo è un insolito, e come dice Pez è probabilmente un capriccio DB2.

ho visto problemi simili quando, per esempio usando il tempo o Timex prima di una stringa di comando DB2, DB2 in cui non dispone di un database definito per la connessione a.

C'è un DB2DBDFT variabile d'ambiente che stabilisce un database predefinito per le connessioni implicite. Mi dispiace dire che io non sono sicuro se questa variabile è disponibile per gli utenti non-DBA (presumendo sei uno sviluppatore di app). Vale la pena di indagare se l'impostazione di questa variabile tramite:

db2set DB2DBDFT = $ {} your_db_name

E riprovare la query.

Se si dispone di più database il proprio ambiente potrebbe connettersi a te può eliminare la variabile DB2DBDFT dopo aver completato il lavoro.

Prova il comando DB2 con l'interruttore -x:

db2 **-x** "describe indexes for table ${TABSCHEMA}.${TABNAME} show detail" ....

Ho avuto casi in cui questa ha curato la mia incapacità di uscita del tubo di awk.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top