返回顶部
首页 > 资讯 > 数据库 >ATS调用含nickname存储过程出错的解决方法
  • 597
分享到

ATS调用含nickname存储过程出错的解决方法

2024-04-02 19:04:59 597人浏览 八月长安
摘要

本篇文章为大家展示了ATS调用含nickname存储过程出错的解决方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 问题描述:客户这

本篇文章为大家展示了ATS调用含nickname存储过程出错的解决方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

问题描述:
客户这边的db2版本为V10.5,跑在linux上。通过联邦数据库的nickname连接了了一个oracle数据库,oracle的版本为11.2。客户开发了一个存储过程抓取oracle数据库的数据,手工跑存储过程(db2 "call ***")没有任何问题,但只要用ATS调用就报错(创建ATS TASK的用户只有dbadm权限,不是instance owner):
sql30080N  A communication error "NET8: 24315" occurred sending or receiving data from the remote database.  SQLSTATE=08001    POINT:0001
最后协调客户使用instance ID 来调用此ATS task,则没有错误。

解决过程:
--重现错误:
[root@dba_test:/]{20170630+0 18:21:38}# useradd -g staff -d /home/shenft shenft
[root@dba_test:/]{20170630+0 18:21:38}# cd /home
[root@dba_test:/home]{20170630+0 18:21:47}# mkdir shenft
[root@dba_test:/home]{20170630+0 18:22:36}# chown shenft:staff shenft

su - nbuinst1
db2 connect to FEDORADB
[nbuinst1@dba_test:/db/dbhome/nbuinst1]{20170630+0 18:17:32}$ db2 "grant connect,dbadm on database to user shenft"
DB20000I  The SQL command completed successfully.

[root@dba_test:/home]{20170630+0 18:22:50}# su - shenft
[shenft@dba_test:/home/shenft]{20170630+0 18:24:07}$ vi .profile
".profile" [New file]
PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:$HOME/bin:/usr/bin/X11:/sbin:.
export PATH
# The following three lines have been added by IBM DB2 instance utilities.
if [ -f /db/dbhome/nbuinst1/sqllib/db2profile ]; then
    . /db/dbhome/nbuinst1/sqllib/db2profile
fi
--手工调用存储过程无错误
[shenft@dba_test:/home/shenft]{20170630+0 18:28:00}$ db2 connect to FEDORADB   

   Database Connection InfORMation

 Database server        = DB2/aiX64 10.5.5
 SQL authorization ID   = SHENFT
 Local database alias   = FEDORADB

[shenft@dba_test:/home/shenft]{20170630+0 18:28:06}$ db2 "call KPI.INFO_TASK()"

  Return Status = 0
 
[shenft@dba_test:/home/shenft]{20170630+0 18:32:20}$  db2 "call SYSPROC.ADMIN_TASK_ADD ('Shenft test', NULL, NULL, NULL, '35,38 18 * * *', 'KPI', 'INFO_TASK', NULL, NULL, NULL)"

  Return Status = 0
 
[shenft@dba_test:/home/shenft]{20170630+0 18:38:01}$ db2 "select * from kpi.tasklog"

TASKNAME                         BEGINTIME                  ENDTIME                    RTCODE      FIRSTTIME                  SUCCNUM              FAILNUM             
-------------------------------- -------------------------- -------------------------- ----------- -------------------------- -------------------- --------------------
CMDB.ORA_TEST                    2017-06-30-18.38.00.837737 2017-06-30-18.38.01.016671      -30080 2017-06-30-18.38.00.837737                    0                    1

  1 record(s) selected.

[shenft@dba_test:/db/dbhome/nbuinst1/sqllib/db2dump]{20170630+0 18:42:35}$ grep -ip "ORA" db2diag.log
2017-06-30-18.38.01.001931+480 E2470A651            LEVEL: Error
PID     : 17498252             TID : 17872          PROC : db2sysc 0
INSTANCE: nbuinst1             node : 000           DB   : FEDORADB
APPHDL  : 0-34655              APPID: *N0.nbuinst1.170630103800
AUTHID  : SHENFT               HOSTNAME: dba_test
EDUID   : 17872                EDUNAME: db2agent (FEDORADB) 0
FUNCTION: DB2 UDB, net8 wrapper, Net8_Connection::error_report, probe:40
DATA #1 : String, 28 bytes
Oracle Error - Current User
DATA #2 : String with size, 6 bytes
SHENFT
DATA #3 : String, 22 bytes
Oracle Error Received
DATA #4 : String, 26 bytes
ORA-24315: ..............

2017-06-30-18.38.01.014148+480 E3122A700            LEVEL: Error
PID     : 17498252             TID : 17872          PROC : db2sysc 0
INSTANCE: nbuinst1             NODE : 000           DB   : FEDORADB
APPHDL  : 0-34655              APPID: *N0.nbuinst1.170630103800
AUTHID  : SHENFT               HOSTNAME: dba_test
EDUID   : 17872                EDUNAME: db2agent (FEDORADB) 0
FUNCTION: DB2 UDB, net8 wrapper, Net8_Connection::error_report, probe:40
DATA #1 : String, 28 bytes
Oracle Error - Current User
DATA #2 : String with size, 6 bytes
SHENFT
DATA #3 : String, 22 bytes
Oracle Error Received
DATA #4 : String, 75 bytes
ORA-03113: ..................
.... ID: 46989330
.... ID: 274 ......: 14361

2017-06-30-18.38.01.014852+480 E3823A671            LEVEL: Error
PID     : 17498252             TID : 17872          PROC : db2sysc 0
INSTANCE: nbuinst1             NODE : 000           DB   : FEDORADB
APPHDL  : 0-34655              APPID: *N0.nbuinst1.170630103800
AUTHID  : SHENFT               HOSTNAME: dba_test
EDUID   : 17872                EDUNAME: db2agent (FEDORADB) 0
FUNCTION: DB2 UDB, net8 wrapper, Net8_Connection::error_report, probe:40
DATA #1 : String, 28 bytes
Oracle Error - Current User
DATA #2 : String with size, 6 bytes
SHENFT
DATA #3 : String, 22 bytes
Oracle Error Received
DATA #4 : String, 46 bytes
ORA-24327: .................., ..............
之后尝试了多种方法都无效,包括将shenft加入instance ID所在的组,给shenft创建自己的uesr mapping, nick_name, store procedure。
我还发现一个现象,就是尽管数据库中2个用户各自有自己的user mapping,我改了oracle端的用户密码后,只修改shenft的user mapping的密码,则用shenft手工调用存储过程时没有问题,而用ATS调用时则报密码错误。修改了instance ID的user mapping的密码后又报回-30080错误。
从现象看我觉得是ATS的bug,就是说尽管是别的用户创建的ATS task,但数据库还是试图用instance ID的身份跑,由此造成冲突导致错误发生。

最后求助IBM level 2,确认了这是个bug,在ATS中其他用户调用ATS task时其实还是使用instance ID来执行。

IBM level 2给出的最终解决方案,问题被fix:
db2 "alter wrapper net8 options (add DB2_FENCED 'N')"
db2 "alter server *** options (add fold_ID 'N',fold_PW 'N')"
db2 "alter user mapping for *** server *** options (add use_trusted_context 'Y')"
同时在oracle端用DBA权限跑(<username>为user mapping中连接oracle数据库的用户):
ALTER USER <username> GRANT CONNECT THROUGH <username>

上述内容就是ATS调用含nickname存储过程出错的解决方法,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: ATS调用含nickname存储过程出错的解决方法

本文链接: https://lsjlt.com/news/67952.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • ATS调用含nickname存储过程出错的解决方法
    本篇文章为大家展示了ATS调用含nickname存储过程出错的解决方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 问题描述:客户这...
    99+
    2024-04-02
  • mysql调用存储过程报错怎么解决
    当在MySQL中调用存储过程时出现错误,可以尝试以下解决方法: 检查存储过程的语法:确保存储过程的语法正确,没有语法错误。可以通...
    99+
    2024-04-09
    mysql
  • mysql调试存储过程的方法
    小编给大家分享一下mysql调试存储过程的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!mysql调试存储过程的方法:首先用一张临时表,记录调试过程;然后直接在存储过程中,增加【selec...
    99+
    2024-04-02
  • navicat导出存储过程的方法
    这篇文章给大家分享的是有关navicat导出存储过程的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。  NAVICATE是一款数据库管理工具,有针对大众数据库的,也有专门针对...
    99+
    2024-04-02
  • mysql调用存储过程的方法是什么
    mysql调用存储过程的方法是什么?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧! MySQL调用存储过程必须要使...
    99+
    2024-04-02
  • jdbc调用存储过程的方法是什么
    JDBC调用存储过程的方法如下:1. 获取数据库连接:首先创建一个合适的数据库连接,使用`java.sql.DriverManage...
    99+
    2023-09-28
    jdbc
  • oracle存储过程调用的方法是什么
    在Oracle数据库中,可以使用以下方法来调用存储过程: 使用 PL/SQL 匝中调用存储过程: DECLARE resul...
    99+
    2024-04-02
  • MySQL存储过程创建及调用方法
    MySQL存储过程是一个sql语句,那么我们如何创建呢,MySQL存储过程创建及修改,删除操作。 1,存储过程创建 DELIMITER //CREATE PROCEDURE G...
    99+
    2024-04-02
  • mssql 存储过程调用另一个存储过程中的结果的方法分享
    摘要:下文将分享"一个存储过程"中如何调用"另一个存储过程的返回结果",并应用到自身的运算中 在实际开发中,我们经常会遇到在一个存储过程中调用另一个存储过程的返回结果...
    99+
    2024-04-02
  • 使用sqlserver官方驱动包调用存储过程遇到的坑及解决方法
    和外部系统做对接,对方提供了一个存储过程,对方为sqlserver数据库,我方为oracle数据库。需求简单来说就是调用对方的存储过程获得结果,转储到我方库,后续在对数据进行处理。 我写了个代码片段做测试,用jdbc来调...
    99+
    2024-04-02
  • sql存储过程调试的方法是什么
    调试SQL存储过程的方法可以有以下几种:1. 使用PRINT语句:在存储过程中插入PRINT语句,将变量的值或执行的步骤输出到消息窗...
    99+
    2023-08-28
    sql
  • db2存储过程调试的方法是什么
    要调试db2存储过程,可以使用以下方法: 使用db2的调试工具:db2提供了一些调试工具,可以帮助开发人员调试存储过程。其中包括...
    99+
    2024-04-09
    db2
  • mysql存储过程调试的方法是什么
    MySQL存储过程调试的方法有以下几种: 使用PRINT或SELECT语句输出变量值:在存储过程中可以使用PRINT或SELEC...
    99+
    2024-04-09
    mysql
  • Springmvc调用存储过程,并返回存储过程返还的数据方式
    目录Springmvc调用存储过程,并返回存储过程返还的数据实现如下这里要重点说明一下Springmvc调用存储过程,entity文件写法Springmvc调用存储过程,并返回存储过...
    99+
    2024-04-02
  • MySQL中创建存储过程出现报错如何解决
    这期内容当中小编将会给大家带来有关MySQL中创建存储过程出现报错如何解决,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 mysql> ...
    99+
    2024-04-02
  • Mysql中调试存储过程最简单的方法
    以前同事告诉我用临时表插入变量数据来查看,但是这种方法过于麻烦,而且Mysql没有比较好的调试存储过程的工具。今天google了下发现可以用select + 变量名的方法来...
    99+
    2024-04-02
  • mybatis调用sqlserver存储过程返回结果集的方法
    第一种:返回值通过out输出 sqlserver存储 testMapper.xml 两种都能接收到数据的, 因为我的实体类字段与数据库的不一致,上面图片是按照数据库字段定义的,下...
    99+
    2024-04-02
  • mysql调用存储过程的方式有哪些
    在MySQL中调用存储过程有以下几种方式: 使用CALL语句调用存储过程:可以使用CALL语句来直接调用存储过程,例如:CALL ...
    99+
    2024-04-09
    mysql
  • Java调用存储过程事务问题怎么解决
    在Java中调用存储过程时,可以使用JDBC提供的事务管理功能来解决事务问题。以下是解决事务问题的一般步骤:1. 创建数据库连接:使...
    99+
    2023-10-24
    Java
  • Oracle存储过程的几种调用方式图文详解
    目录一、案例场景1.基础环境2.SQL窗口中调用存储过程3.命令窗口中调用存储过程4.Procedures菜单列表中调用存储过程5.Package或Package Bodies菜单列表中调用存储过程6.Jobs菜单列表调...
    99+
    2023-04-14
    oracle存储过程怎么调用 oracle调用存储过程语句 oracle存储过程实例
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作