使用shell脚本连接DB2数据库的问题

简单介绍下实验环境,两台机器,分别是64位AIX和32位Linux,分别装着64位DB2V9.5FP1和32位DB2V9.1FP8。两边都各有一个db2inst1实例,实例下各建有一个TESTDB,数据库中各有一个表T1,只有一列c1,int类型。
先在AIX上写ksh脚本
#!/usr/bin/ksh
su - db2inst1 -c "db2 connect to testdb"
su - db2inst1 -c "db2 select c1 from t1"
运行该脚本,可以成功打印出select结果

再到Linux上写bash脚本
 
#!/bin/bash
su - db2inst1 -c "db2 connect to TESTDB"
su - db2inst1 -c "db2 select c1 from t1"
运行该脚本,却报连接不存在

[root@test01 /]# ./test.sh
   Database Connection Information
Database server        = DB2/LINUX 9.1.8
SQL authorization ID   = DB2INST1
Local database alias   = TESTDB
SQL1024N  A database connection does not exist.  SQLSTATE=08003

利用公司的资源,连到64位AIX版本的DB2V8.1上和64位Linux版本的DB2V9.1上看过了,但凡是ksh都是OK的,但凡是bash都是报连接不存在。个人认为比较大的可能是ksh和bash的语法区别。不知道各位有谁在Linux上写过连接DB2的脚本,如果要在Linux上使用bash写脚本连接数据库,shell该如何写呢?
参与14

13同行回答

不确定的linux 是否使用rlwarp。检查检查吧显示全部
不确定的linux 是否使用rlwarp。检查检查吧收起
2010-12-20
浏览2746
rehtreht技术经理Ora
买LICENSE啊。IBM的D版不好用。少买用户吧。显示全部
买LICENSE啊。IBM的D版不好用。少买用户吧。收起
2010-11-10
浏览2709
Lion@2010Lion@2010数据库管理员
[db2inst1@ServerA stript]$ db2 ? SQL08003 | moreSQL8003N  A valid license key was not found for the requested function.Explanation:The current license key(s) do not allow the requested functionality.User response:Purchase the license key fo...显示全部
[db2inst1@ServerA stript]$ db2 ? SQL08003 | more


SQL8003N  A valid license key was not found for the requested function.

Explanation:

The current license key(s) do not allow the requested functionality.

User response:

Purchase the license key for this function from your IBM representative
or authorized dealer and update your license using the License Center or
the db2licm command line utility. For more information on updating
licenses refer to the Quick Beginnings manual for your platform. For
more information on the db2licm utility, refer to the DB2 Command
Reference.
不知道上面的是何解??收起
IT分销/经销 · 2010-11-07
浏览2765
rehtreht技术经理Ora
我的理解,一般这样的SHELL不应该这样写。不应该su到什么用户。起头就是source db2profile,然后再说。那样su不是很规范的做法。个人习惯。楼主的做法,估计是启动了2个进程,不同的进程在这个地方会有问题的。可以看看fork,exec等方面的资料,或许可以把两个进程关联起来,如果一定...显示全部
我的理解,一般这样的SHELL不应该这样写。不应该su到什么用户。

起头就是source db2profile,

然后再说。

那样su不是很规范的做法。

个人习惯。

楼主的做法,估计是启动了2个进程,不同的进程在这个地方会有问题的。可以看看fork,exec等方面的资料,或许可以把两个进程关联起来,如果一定要那么做的话。



今天好热啊。NND。收起
2010-11-06
浏览3137
limin19821limin19821系统工程师乐酷天
个人感觉   这个问题应该不是没把Db2环境变量引入造成的,请大家也好好看一下人家的输出。理由如下:1.  db2profile不过就是实例名和数据库的一些命令路径,如果是因为环境变量的问题,他压根就执行不了db2这个命令,绝对不会报什么数据库连接不存在的错,而且...显示全部
个人感觉   这个问题应该不是没把Db2环境变量引入造成的,请大家也好好看一下人家的输出。
理由如下:
1.  db2profile不过就是实例名和数据库的一些命令路径,如果是因为环境变量的问题,
他压根就执行不了db2这个命令,绝对不会报什么数据库连接不存在的错,而且很明显,两句当中第一句是执行成功的,数据已经连接上了,只是第二句没有成功。原因其实应该很简单,类似与以下场景:两个人同事操作数据库,第一个人连上了数据库,第二人不连数据库就直接Select。
2.  人家用的su - db2inst1 命令, 这个命令意思应该是切换到db2inst1这个用户下,连同环境也一起切换(也就是执行 who am i 输出也是db2inst1,换句话说,现在登录的就是db2inst1),你觉得db2inst1这个用户的环境中会没有db2profile的引用吗?收起
IT分销/经销 · 2010-11-05
浏览3136
rehtreht技术经理Ora
写这种SHELL,source一把/xxx/sqllib/db2profile必须的。你看看db2inst1用户的.bashrc文件,都读了这个东西。基本功啊!!!显示全部
写这种SHELL,source一把/xxx/sqllib/db2profile必须的。

你看看db2inst1用户的.bashrc文件,都读了这个东西。

基本功啊!!!收起
2010-11-05
浏览3050
wangzhonnewwangzhonnew软件工程师IBM Canada Ltd.
do this in aix#!/usr/bin/kshsu - db2inst1 -c "ps -elf" > out1.aixsu - db2inst1 -c "ps -elf" > out2.aixdo this in linux#!/bin/bashsu - db2inst1 -c "ps -elf" > out1.linuxsu - db2inst1 -c "ps -elf" > out2.linuxsend out1/out2 for both aix and linux, thx显示全部
do this in aix
#!/usr/bin/ksh
su - db2inst1 -c "ps -elf" > out1.aix
su - db2inst1 -c "ps -elf" > out2.aix

do this in linux
#!/bin/bash
su - db2inst1 -c "ps -elf" > out1.linux
su - db2inst1 -c "ps -elf" > out2.linux

send out1/out2 for both aix and linux, thx收起
IT分销/经销 · 2010-11-05
浏览3032
谢谢大家不吝赐教!明天我去继续做实验。显示全部
谢谢大家不吝赐教!明天我去继续做实验。收起
2010-11-04
浏览3029
limin19821limin19821系统工程师乐酷天
对的我就不管了,把Linux下的改为 #!/bin/bashsu - db2inst1 -c "db2 connect to TESTDB"db2 select c1 from t1试试看, 感觉应该可以。 如果用两次su - 可能linux会重启一个进程,觉得没必要su两次。包括Aix下的脚本感觉一次su就够了!  不过 以上纯属意淫,没有试验。...显示全部
对的我就不管了,把Linux下的改为

#!/bin/bash
su - db2inst1 -c "db2 connect to TESTDB"
db2 select c1 from t1

试试看, 感觉应该可以。 如果用两次su - 可能linux会重启一个进程,觉得没必要su两次。包括Aix下的脚本感觉一次su就够了!  不过 以上纯属意淫,没有试验。收起
IT分销/经销 · 2010-11-04
浏览3083
bright2007bright2007系统运维工程师新大陆软件工程
#!/bin/bash#set -x . /home/db2user/sqllib/db2profiledb2 connect to db user user using passwd我是这样连接数据库的,应该是环境变量的问题显示全部
#!/bin/bash
#set -x

. /home/db2user/sqllib/db2profile

db2 connect to db user user using passwd

我是这样连接数据库的,应该是环境变量的问题收起
互联网服务 · 2010-11-04
浏览3083

提问者

捣蛋鬼
擅长领域: 数据库

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2010-11-04
  • 关注会员:1 人
  • 问题浏览:21369
  • 最近回答:2010-12-20
  • X社区推广