oracle链接SQLSERVER,事务语句的提交
2013-10-31 14:39
274 查看
在写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的表...;
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');
多条插入需要循环插入。
比如:
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,MySql数据库链接语句和驱动类
- SqlServer和Oracle中一些常用的sql语句8 触发器和事务
- oracle 中--怎么查看当前表空间在作什么操作?--查锁,死锁,当前执行时间长的Sql语句,没提交的事务,对象为哪些进程所用
- oracle 中--怎么查看当前表空间在作什么操作?--查锁,死锁,当前执行时间长的Sql语句,没提交的事务,对象为哪些进程所用
- SqlServer和Oracle中一些常用的sql语句8 触发器和事务
- ORACLE 未提交事务与语句查询
- Access、SQLServer、Oracle常见SQL语句应用区别
- oracle证明题:未提交的事务也可能被DBWn写进数据文件
- sqlserver事务提交
- Oracle中DDL语句对事务的影响
- PowerDesigner链接oracle生成sql语句
- Oracle分布事务中最先提交分布式的3个阶段
- Oracle 事务控制语句
- 【转】Sqlserver通过链接服务器访问Oracle的那些事儿!
- SqlServer和Oracle从多行记录(数据集)中查询结果并拼接成一个字符串的SQL语句(纵表数据转成拼接的文本)
- 查找客户端未提交的事务语句
- Oracle,SQLserver 分页语句
- SqlServer和Oracle中一些常用的sql语句6 存储过程
- SQLSERVER 如何跟踪执行的各项事务 语句跟踪
- SqlServer和Oracle中一些常用的sql语句10 特殊应用