Pregunta

Estoy intentando ejecutar el comando siguiente en KornShell (ksh):

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

Lo que estoy tratando de lograr es colocar una lista de los índices más de una tabla en particular en una matriz la que más tarde se pueden repetir.

El problema es que cuando ejecuto el comando anterior el contenido de la matriz comienza con el mensaje de error de 'SQL1024N' (lo que me está diciendo que no existe la conexión de base de datos).

Sin embargo, si quito el awk al final de la declaración como así:

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

funciona muy bien (bueno, en la medida en que está devolviendo datos. Obviamente, sin la <=> No estoy capturando los datos correctos).

¿Alguien sabe por qué el <=> está teniendo afecta esto?

aprecio que hay más de una manera de obtener estos datos, pero me desconcierta por qué está sucediendo esto.

Gracias de antemano.

¿Fue útil?

Solución

En este caso, cuando el DB2 CLP dice que no está conectado a la base de datos, es porque la cáscara ha abierto un sub-proceso que requiere su propio proceso de back-end db2bp dedicado, que no puede acceder a la conexión abierta por la Shell original proceso. No es que algo está desconectarse, es que un proceso de cáscara de nueva creación (y su proceso db2bp acompaña) se crean pero no se les dice a conectarse a una base de datos. Una manera de remediar esto es para conectar de forma explícita (o volver a conectar) a la base de datos cuando se sabe que está en una de esas situaciones.

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

Me doy cuenta de que esta pregunta es más acerca de secuencias de comandos y AWK con DB2 que aproximadamente el catálogo del sistema, o de lo contrario me hubiera recomendado algunas consultas de catálogo sencillos para producir el mismo resultado.

Otros consejos

Dudo que sea awk per se. Tal vez DB2 es particular acerca de la salida estándar conectado a un TTY o consola? O al menos no le gusta cuando está conectado a una tubería.

Esto es inusual, y como dice Pez es probable que sea un capricho de DB2.

He visto problemas similares cuando, por ejemplo, usando el tiempo o Timex antes de una cadena de comandos de DB2, DB2, donde no tiene una base de datos que se puedan conectar a.

Hay un DB2DBDFT variable de entorno que establece una base de datos por defecto para conexiones implícitas. Siento tener que decir que no estoy seguro de si esta variable está disponible para los usuarios que no son de DBA (suponiendo que eres un desarrollador de aplicaciones). Vale la pena investigar si el establecimiento de esta variable a través de:

db2set DB2DBDFT = $ {} your_db_name

Y volver a intentar la consulta.

Si tiene varias bases de datos de su entorno podría conectar a usted puede desactivar la variable DB2DBDFT una vez que haya completado su trabajo.

Trate el comando de DB2 con el modificador -x:

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

He tenido casos en que esto ha curado mi incapacidad de salida de la tubería de awk.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top