หลังจากทดลองใช้ข้อมูลไปยัง MQ ผ่านทาง DB2MQ.MQSEND and etc. ไปแล้ว
ผมก็ได้ทดลองนำไป implement เข้ากับ trigger แต่ผลที่ได้ ตกใจเลยครับ ซวยละมัน error
DB2 SQL error: SQLCODE: -723, SQLSTATE: 09000, SQLERRMC: COMMON.TGT_EPAPP;-443;38H01;DB2MQ.MQSEND|MQSND1CLOB|rc=1:amSesCreateSeMessage: An error occurred in a triggered SQL statement in trigger "COMMON.TGT_EPAPP".Information returned for the error includes SQLCODE "-443", SQLSTATE "38H01" and messagetokens "DB2MQ.MQSEND|MQSND1CLOB|rc=1:amSesCreateSe".
เกิดอะไรขึ้นเนี๊ยะ error SQL-443 เนี๊ยะก็มีหลาย reason ด้วย งงเลยครับ
แล้ว SQLSTATE 38H01 เนี๊ยะไม่เคยเห็นมาก่อนเลย หาไปหามาก็ได้คำตอบว่า
38H01 An MQSeries® function failed to initialize.
ครับโดยอ้างอิงจาก นี้
อ้าวแล้วทำไมอยู่ดีๆมันถึง initial ไม่ได้ละงงล่ะสิครับ ทดลองสร้าง table ขึ้นมาเอง แล้วรัน
ก็ทำได้แฮะ งั้นเราลองรัน command ผ่าน font end เพื่อให้ trigger ทำงานดีกว่า
อาวว ก็ทำงานได้นี่ แล้วทำไม พอรันผ่าน WebSphere Application Server ไม่ได้เนี๊ยะ
คิดไปคิดมา มีสิ่งเดียวที่แตกต่าง นั้นก็คือ USER ที่เข้าใช้งาน DB2 นั้นเอง
ผมเลยทดลองใช้ font-end login เข้าด้วย user เดียวกับที่ set ไว้ใน connection pool
ผลก็คือได้ error
SQLCODE "-443", SQLSTATE "38H01" and message tokens"DB2MQ.MQSEND|MQSND1CLOB|rc=1:amSesCreateSe
เหมือนกันเลยครับ แบบนี้ต้องเกี่ยวกับ permission แน่เลย
เมื่อทดลองใช้ command grant สิทธิสำหรับ select ให้กับ user ใน connection pool
ดังนี้
CONNECT TO CHANDB;GRANT SELECT ON TABLE DB2MQ.MQHOST TO USER POOLUSER;GRANT SELECT ON TABLE DB2MQ.MQPOLICY TO USER POOLUSER;GRANT SELECT ON TABLE DB2MQ.MQPUBSUB TO USER POOLUSER;GRANT SELECT ON TABLE DB2MQ.MQSERVICE TO USER POOLUSER;GRANT SELECT ON TABLE DB2MQ.MQUPDATED TO USER POOLUSER;CONNECT RESET;
แล้วทดลองอีกครั้ง โอ้ววว ทำงานได้ปกติแล้ว
เรื่องนี้สอนให้รู้ว่า error code ไม่ได้ช่วยอะไรเราเลย
No comments:
Post a Comment