AWK管道时会出现断开连接DB2我会
题
我试图运行在KornShell以下命令(KSH):
set -A INDEXES `db2 "describe indexes for table ${TABSCHEMA}.${TABNAME} show detail" | awk '{print $1"."$2}'`
什么我试图实现是放置在特定的表中的索引的列表到一个数组,我可以稍后遍历。
的问题是,当我运行上述命令的数组的内容与“SQL1024N”(其是告诉我,数据库连接不存在)。
的错误消息开始然而,如果删除awk
在语句的末尾为这样:
set -A INDEXES `db2 "describe indexes for table ${TABSCHEMA}.${TABNAME} show detail"`
它工作得很好(以及,在某种程度上它返回数据,很明显没有awk
我不捕获正确的数据)。
有谁知道为什么awk
是有这个影响?
我欣赏有拿到这个数据的方法不止一种,但它令我感到困惑,为什么发生这种情况。
预先感谢。
解决方案
在这种情况下,当DB2 CLP说,这是没有连接到数据库,这是因为外壳开辟了一个子过程,需要自己的专用db2bp后端进程,它不能访问的原壳打开连接处理。这并不是说事情正在变得断开,它是一个新创建的shell进程(及其伴随的db2bp过程)被创建,但没有被告知要连接到数据库。 一种方法来解决这个问题是明确地连接(或重新连接)到数据库中,当你知道你在这些情形之一是。
set -A INDEXES `db2 connect to watevrDB >/dev/null;db2 -x describe indexes for table ${TABSCHEMA}.${TABNAME} show detail | awk {'print $1"."$2'}`
我认识到,这个问题是更多的脚本和与DB2的awk大于约系统目录,否则我会推荐一些简单的目录查询以产生相同的结果。
其他提示
我怀疑它的AWK本身。也许DB2讲究标准输出连接到一个tty或控制台?或至少不喜欢时,它的连接到管道。
这是一个不寻常的,并且如佩斯说,它可能是一个db2夸克。
我看到类似的问题时,例如使用之前,DB2命令字符串,其中DB2不具有定义的数据库的时间或天美连接到
有是一个环境变量DB2DBDFT其设定为隐式连接的缺省数据库。我很抱歉地说,我不知道,如果这个变量是提供给非DBA用户(假设你是一名应用开发者)。这是值得研究如果通过设置此变量:
的db2set DB2DBDFT = $ {your_db_name}
和重试查询。
如果您有多个数据库环境可以连接到你可以取消设置DB2DBDFT变量,一旦你完成你的工作。
尝试与-x开关db2命令:
... db2 **-x** "describe indexes for table ${TABSCHEMA}.${TABNAME} show detail"
我已经在那里这已经治好了我的无能管道输出到awk的实例。