设为首页 收藏本站
查看: 1221|回复: 0

[经验分享] db2 client连接db2 server的若干问题

[复制链接]

尚未签到

发表于 2016-11-17 09:53:11 | 显示全部楼层 |阅读模式
  第一个问题:远程创建Database
  近段时间项目的原因,需要通过远程方式在DB2 server上创建DB,执行创建表格插入数据等操作,创建表格和插入数据等功能可以通过ant提供的SQL完成,而创建DB却不行,于是采用了DB2 client这个工具,它的理念是通过在本地创建一个node,连接到远程DB2 server上,然后就可以本地进行操作了。
  其实远程创建DB可以通过SSH的方式解决,命令:ssh -l {remote user name} {remote host} {cmd}, 例如 ssh -l db2inst1 9.186.113.102 "db2 list db directory",但是这种方式的缺陷是需要交互两次,第一次是将远程机器添加入本机的know host,第二次则是输入密码,这对于自动化来说并不合适。
  如果不需要输入密码,那么需要先建立信任,参照这篇文章(SSH Without Password):http://www.linuxhorizon.ro/ssh-wo-passw.html, 此种方法并没有验证,因为个人觉得如果你需要连接数十台DB2 server,那么就需要在这数十台机器上执行(SSH Without Password)这篇文章中提到的操作,对于自动化来说也是不能满足的,所以最终选择了DB2 client这个工具。
  第二个问题:DB2 client的用户混淆
  DB2 client的安装过程(应该有silent安装和non-silent安装,本人采用的是non-silent安装)中设计到设置用户名密码,这是本机上用来登陆DB2 client使用的,比如创建了名字为db2user的用户,那么在连接远程DB2 server之前,需要执行如下操作:



su db2user
db2 catalog tcpip node $nodeName remote $db2Server server $db2PortNumber
db2 attach to $nodeName user $db2ServerUserName using $db2ServerUserPassword
  这里的su db2user需要创建sub-shell脚本,那么剩下的两句在当前shell脚本中就无法执行,这里碰到的情况是在su db2user这里挂起了,可以改为su - db2user -c 'command1&&command2&&command3&&exit‘这样的方式执行,由于command中有很多很多变量传进来,显得比较臃肿,(其实这条路我当时没有走通,不过我认为是个人的问题,这个应该是可以work的),还有leader试了试这样的方式:



su - db2user -c 'db2catalog tcpip node resnode remote 9.125.70.48 server 50000'
db2 attach to resnode user db2inst1 using respassword
db2 create db res
  这里只是在-c中执行了一条语句,然后下面的语句照样执行,这点有点让我困惑,下面的db2 命令也应该是使用db2user这个用户执行啊,怎么就没有su - db2user -c作为前缀呢?
  这是第二种尝试,第三种尝试则是通过修改环境变量,在db2 client的用户目录下/home/db2user/sqllib下有这么一个文件:db2profile
  通过这种执行方式来改变环境变量,这种改变只是临时的,那么重启以后必须重新执行这条命令:



. ./db2profile
  这里两个标点的执行方式应该是shell多种执行方式中的source的执行方式,至于shell的执行方式在另外的文章中进行解释
  然后执行命令就如这样:



. ./db2profile
db2 catalog tcpip node $nodeName remote $serverName server $serverPort
db2 attach to $nodeName user $userName using $userPassword
cd /opt/ibm/ae/AS
. ./createDatabase.sh $userName $userPassword $dbName
db2 -tvf createTable.sql
  这是第三个尝试,是work的。
  第三个问题:在以某个名字比如dbName创建了某个DB之后,重新再创建这个dbName的database,总是提示这个dbName已经存在了,但是呢又找不到这个dbName,这个很可能是catalog的原因,需要先recatalog才行,具体的操作见文章(Recataloging nodes and databases using TCP/IP protocol):http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=%2Fcom.ibm.db2.udb.uprun.doc%2Fdoc%2Ft0023402.htm
  大致操作如下:



db2 LIST NODE DIRECTORY
--找到你的node-name,然后uncatalog
db2 UNCATALOG NODE node-name
db2 LIST DATABASE DIRECTORY
--找到你创建的database-name,然后uncatalog
db2 UNCATALOG DATABASE database-name  
  对于这些我的理解是,虽然你在远程DB2 server上删除了名为database-name的database,但是本机的node-name有这个database的备份,你以这个node-name连接到远程DB2 server上创建同样名字的database-name时,就会出现错误,所以必须在本地的node-name上uncatalog这个database的备份。
  


  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-301558-1-1.html 上篇帖子: DB2 导入CSV文件 下篇帖子: (转)DB2常用SQL的写法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表