早上上班,维护人员报告应用发生如下错误
ORA-24792: cannot mix services in a single global transaction
ORA-02063: preceding line from RC
RC为数据库中的一个dblink,是由A用户连接B用户的,AB用户都在同一个数据库中。
为了应用用户可以单独连接各自独立的instance,避免数据库两个节点之间的数据交换,提高数据库性能,昨天晚上由Oracle的工程师进行了service的划分,并对应用连接的service_name进行了修改。
由于当时我不在现场,Oracle工程师对service配置我并不清楚。查询v$services视图
SQL> select * from v$services where name like '%gxdb%';
SERVICE_ID NAME NAME_HASH NETWORK_NAME CREATION_DATE CREATION_DATE_HASH GOAL DTP AQ_HA_NOTIFICATION CLB_GOAL
---------- ------------------ -------------------------- ------------------ ------------ --- ------------------ --------
5 gxdb1 1426779647 gxdb1 2011/1/13 18: 1583095287 NONE Y NO LONG
7 gxdb2 112875848 gxdb2 2011/1/13 18: 1291542420 NONE Y NO LONG
3 gxdbXDB 2224759585 gxdbXDB 2010/2/2 11:3 526425370 NONE N NO LONG
4 gxdb 1256654134 gxdb 2010/2/2 11:3 526425370 NONE N NO LONG
发现新划分的service(gxdb1,gxdb2)的DTP的数值为Y,与gxdb的不一样。
初步确定应该是service的参数问题。
查询Oracle文档dtp:
Declares the service to be for DTP or distributed transactions including XA transactions
对gxdb1,gxdb2参数进行修改:
SQL> begin
2 dbms_service.modify_service(service_name => 'gxdb1',dtp => false);
3 dbms_service.modify_service(service_name => 'gxdb2',dtp => false);
4 end;
5 /
PL/SQL procedure successfully completed
应用恢复正常。
后找Oracle工程师要来操作记录文档,里面果真有
EXECUTE DBMS_SERVICE.MODIFY_SERVICE(service_name =>'GXDB1',DTP => true);
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/195110/viewspace-684195/
,如需转载,请注明出处,否则将追究法律责任。