我在IBM WebSphere上部署的一个应用程序使用Oracle 12c数据库。该应用程序确实需要在Oracle上启用XA事务,并且用户(通过WebSphere的数据源连接到Oracle)应该具有XA权限。如何查找用户是否已被授予XA权限?我尝试运行以下查询来查找权限,但没有运气。
select * from dba_profiles where resource_name='IDLE_TIME';
select * from dba_profiles where resource_name='CONNECT_TIME';
select * from dba_2pc_pending;
select * from session_privs;
SELECT * FROM DBA_TAB_PRIVS;
SELECT * FROM DBA_TAB_PRIVS where owner='<schema_user>';
SELECT * FROM USER_ROLE_PRIVS;
我知道在Oracle12中,XA是默认启用的,但是我们需要授予模式所有者参与事务的任何权限吗?
2条答案
按热度按时间wfsdck301#
在与我的DBA团队进行了几次电子邮件交流后,他们最终通过执行以下命令授予了用户权限,并解决了问题。希望这对您有所帮助。
fd3cxomn2#
有点晚了,但您可能需要更多的赠款,这取决于您的内部解决方案或外部库的要求。
最后,要确定您是否具有正确的权限,只需尝试访问(SELECT/EXECUTE)您需要赠款的表/包。例如:
或者如果您可以访问
SYSDBA
:根据Oracle XA Distributed Transactions白色:
第十一页
类似地,对于PL/SQL(来自Oracle Database 11 gR 1),DBMS_XA包中的XA_SETTIMEOUT函数可用于设置事务超时,默认值为60秒。
第12页
如果某个事务超时并变为“in-doubt”,则它将出现在DBA_2PC_PENDING和DBA_PENDING_TRANSACTIONS视图中。
第十四页
Oracle数据库允许访问数据库中有关分布式事务处理的以下信息:
第十九页:
执行分布式事务的任何数据库帐户都必须具有以下权限:
此外,使用RAC时,用户帐户必须具有以下权限:
第20页
XA接口中提供的功能,用于支持涉及多个资源管理器(如数据库和队列)的事务。PL/SQL现在能够使用DBMS_XA包中包含的XA/Open接口库在SQL*Plus会话或进程之间切换或共享事务(例如,XA_START加入事务,XA_END离开事务)。
第24页
尽管本文描述了配置XA数据库用户的权限(GRANT)以执行www.example.com的DBMS_SYSTEM系统包10.2.0.3,但对于数据库的更高版本,这可能需要对DBMS_XA系统包的权限。
因此,我们需要一个SELECT GRANT来处理
DBA_2PC_PENDING
和DBA_PENDING_TRANSACTIONS
。如果我们想处理“有疑问”的事务,Atomikos需要很多功能(即un/lock由有疑问的分布式事务持有,Expired In-Doubt Transactions等)。最重要的是,我们需要
DBA_PENDING_TRANSACTIONS
上的SELECT GRANT。关于DBMS_SYSTEM
,我们使用Oracle 11 g(见10.2.0.4),所以我们应该对DBMS_XA
表执行GRANT。如果我们想了解为什么使用DBMS_XA而不是DBMS_SYSTEM,请参见第18页,其中解释了原因:
以前,XA客户端需要DBMS_SYSTEM上的执行权限才能调用DIST_TXN_SYNC。此安全性增强需要更改服务器和客户端软件(例如,客户端OCI库和JDBC),以便调用数据包DBMS_XA而不是DBMS_SYSTEM。这意味着为了避免数据库故障转移时的用户权限错误,所有XA客户端用户现在都需要DBMS_XA上的执行权限,而不是DBMS_SYSTEM。
关于
pending_trans$
,像Atomikos团队(和IBM team)这样的XA工具可能会使用这个值,因此它通常被记录为必需的授权。也许他们是通过一个legacy documentation来推导这个值的:
对于Oracle,XA数据源的数据库用户需要具有必要的权限,才能在Application Server崩溃并重新启动后恢复任何事务。恢复事务所需的各种表的Oracle权限如下:
而且,如果你看一下ORA-01500 to ORA-02098 range of errors,你会看到
PENDING_TRANS$
正在被使用/描述。