oracle链接SQLSERVER,事务语句的提交
来源:互联网 发布:西安编程培训班 编辑:程序博客网 时间:2024/05/17 21:53
在写pl/sql的时候,有个很重要的注意点;
比如:
begin
update 某个sqlserver的表@dblink名字 .....;
update 某个oracle的表...;
end;
这段pl/sql执行会报错:
错误信息是:
-----------------------------------------------------------------
执行失败:ORA-02054: 事务处理 2.12.27634 有问题
ORA-28500: 连接 ORACLE 到非 Oracle 系统时返回此信息:
[Oracle][ODBC SQL Server Driver][SQL Server]对象名 'RECOVER.HS_TRANSACTION_LOG' 无效。
ORA-02063: 紧接着 2 lines (起自 dblink名字)
-----------------------------------------------------------------
然后你执行:
select * from 某个sqlserver的表@dblink名字
这个没问题;
再执行:
select * from 某个oracle的表
完了!结果提示:
执行失败:ORA-01591: 锁被有问题的分布式事务处理 2.12.27634 持有
这时候,你查询:
SELECT * FROM DBA_2PC_PENDING
会发现,被锁的信息;
然后,你用
commit/rollback force '2.12.27634' ; 解锁;
当然这里的2.12.27634 是随机的。每次被锁,都是不同的值;
这个问题如何解决呢?
begin
update 某个sqlserver的表@dblink名字 .....;
commit; --非常重要;
update 某个oracle的表...;
end;
这样就OK了,原因我觉得是这样的:oracle内部其实是两块事务,一个是针对sqlserver,一个针对自己的oracle;
所以必须把两端的事务独立下来;
下面这个写法也是OK的:
begin
update 某个sqlserver的表@dblink名字 .....;
update 某个sqlserver的表@dblink名字 .....;
commit; --非常重要;
update 某个oracle的表...;
update 某个oracle的表...;
比如:
begin
update 某个sqlserver的表@dblink名字 .....;
update 某个oracle的表...;
end;
这段pl/sql执行会报错:
错误信息是:
-----------------------------------------------------------------
执行失败:ORA-02054: 事务处理 2.12.27634 有问题
ORA-28500: 连接 ORACLE 到非 Oracle 系统时返回此信息:
[Oracle][ODBC SQL Server Driver][SQL Server]对象名 'RECOVER.HS_TRANSACTION_LOG' 无效。
ORA-02063: 紧接着 2 lines (起自 dblink名字)
-----------------------------------------------------------------
然后你执行:
select * from 某个sqlserver的表@dblink名字
这个没问题;
再执行:
select * from 某个oracle的表
完了!结果提示:
执行失败:ORA-01591: 锁被有问题的分布式事务处理 2.12.27634 持有
这时候,你查询:
SELECT * FROM DBA_2PC_PENDING
会发现,被锁的信息;
然后,你用
commit/rollback force '2.12.27634' ; 解锁;
当然这里的2.12.27634 是随机的。每次被锁,都是不同的值;
这个问题如何解决呢?
begin
update 某个sqlserver的表@dblink名字 .....;
commit; --非常重要;
update 某个oracle的表...;
end;
这样就OK了,原因我觉得是这样的:oracle内部其实是两块事务,一个是针对sqlserver,一个针对自己的oracle;
所以必须把两端的事务独立下来;
下面这个写法也是OK的:
begin
update 某个sqlserver的表@dblink名字 .....;
update 某个sqlserver的表@dblink名字 .....;
commit; --非常重要;
update 某个oracle的表...;
update 某个oracle的表...;
end;
---------------------------------------------------------------
附:
oracle写sqlserver的插入语句,不允许语法:insert into ta@sqlserver("ColumnA","ColumnB") select t.a,t.b from oracle_table a;
只能insert into ta@sqlserver("ColumnA","ColumnB") values('asd','bsd');
多条插入需要循环插入。
- oracle链接SQLSERVER,事务语句的提交
- ORACLE 未提交事务与语句查询
- sqlserver事务提交
- SqlServer和Oracle中一些常用的sql语句8 触发器和事务
- 查找客户端未提交的事务语句
- Hibernate 事务提交sql语句的顺序
- Hibernate 事务提交sql语句的顺序
- Hibernate 事务提交sql语句的顺序
- Hibernate 事务提交sql语句的顺序
- Oracle,SqlServer,MySql数据库链接语句和驱动类
- sqlserver事务与oracle事务
- sqlserver禁止management studio的自动提交事务(转)
- Oracle提交事务的三种类型
- 删除oracle未提交的事务
- Oracle事务的隐式提交
- Oracle事务的隐式提交
- 建立sqlserver指向oracle的链接服务器
- oracle事务锁导致事务无法提交的问题
- linux SCP 命令
- CSA发布云控制矩阵3.0版
- java.lang.OutOfMemoryError: Java heap space 和PermGen space的解决
- WSAStartup函数 和WSACleanup 函数
- ThreadLocal类
- oracle链接SQLSERVER,事务语句的提交
- 使用eclipse JDT compile class,解决 无法确定 X 的类型参数;对于上限为 X,java.lang.Object 的类型变量 X,不存在唯一最大实例
- 永恒的主题--java与.net通信编码统一(个人笔记)
- ajax的优缺点
- UFT Mobile (QTP) Setup
- Linux获取系统当前时间(精确到毫秒)
- ms sql 存储过程分页
- 读Python在linux系统运维中的应用http://wuhan88.bitbucket.org
- Lombok 安装、入门 - 消除冗长的 java 代码