我正在尝试编写一个执行某些db2工作的bash脚本。我面临的问题是子shell需要重新连接db2连接。
不幸的是,每次重新连接都很慢,因为需要大约1000个新连接,每个连接大约需要一秒钟。因此,我希望避免这些子shell重新连接。
围绕这种情况,我发现有一种方法可以使用变量DB2DBDFT设置默认连接模式。不幸的是,使用此设置,它将linux登录的用户名作为您运行的数据库模式名称,而我们的系统具有与登录到bash的用户不同的数据库用户名。
1)有没有办法设置DB2DBDFT变量,但要使它可以使用“user abc using 123”样式语法,或者如果有其他变量你可以设置这些(我搜索过但没有找到了他们。)
2)如果有的话,这实际上会在任何时候拯救我吗?显然,如果我找到一个解决方案,我将进行基准测试,但我不确定即使我发现它,它会更快,并且肯定会减慢所有其他子shell产生。
3)我对其他建议非常开放,我已尝试使用while语句而不是调用子shell,但后来记得这有同样的问题。
e.g。
result=$(call_procedure "$get_sell_price_old_sql")
与
call_procedure "$get_sell_price_old_sql" | while read result_
do
result=$result_
done
4)我确信还有其他途径我没有考虑过,任何建议和建议都非常感激。
非常感谢, 米奇。
答案 0 :(得分:0)
要回答你的第二个问题,不,这不太可能使这个过程更快。如果连接不存在,DB2DBDFT仅指定要连接的数据库的名称,因此每次运行任何SQL语句时,客户端仍将连接。不,您不能指定用户进行隐式连接,它始终是登录的OS用户。
通常,数据库连接应该非常快,除非它是非活动数据库的第一个连接,在这种情况下需要花费大部分时间的是数据库激活。如果您是脚本运行时唯一连接到数据库的用户,请尝试在连接之前发出db2 activate db <your db>
命令,这将使它在连接之间保持活动状态。