触发器中的部分回滚和分布式事务的问题

jeremyyang824 2009-01-09 12:06:28
大家好:
我的触发器中有一块远程操作,我希望当这块远程操作执行失败时在本地数据库中进行另一个操作,同时不会滚原来对于触发器所在表的DML操作,
于是我在该远程操作之前设置了SAVE TRANSACTION remote,当远程操作失败时Rollback TRANSACTION remote.
但是这样本地事务(触发器默认事务)则无法提升为分布式事务了(报错:无法将此事务提升为分布式事务,因为在此事务中有活动的保存点。)
请问大家有什么好的解决方法?
...全文
402 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
redfox123456 2009-03-20
  • 打赏
  • 举报
回复
我也遇到同样的问题,有没有解决办法啊,mark
jeremyyang824 2009-01-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lietou1986 的回复:]
try catch
[/Quote]
sql2000没有try...catch
lietou1986 2009-01-14
  • 打赏
  • 举报
回复
try catch
zjcxc 元老 2009-01-10
  • 打赏
  • 举报
回复
--192.168.100.89不连通(即该句会失败)
----------------------------------- 不通就无法下一步啊
jeremyyang824 2009-01-10
  • 打赏
  • 举报
回复
邹建大哥能否再次解答一下,谢谢!
claro 2009-01-10
  • 打赏
  • 举报
回复
帮顶
jeremyyang824 2009-01-10
  • 打赏
  • 举报
回复
不是不通过,就是执行的时候会插入失败(导致@@Error<>0),我是故意让它执行远程插入语句时失败的,为了测试网路不通的时候的执行状况。
就是希望执行回滚事务,然后执行个本地操作(这里是打印error)。
可是在执行的时候却报:“其他会话正在使用事务的上下文。”并且未打印出error,这点我不太明白。
ljluck7687 2009-01-10
  • 打赏
  • 举报
回复
关注中。。。
ljluck7687 2009-01-10
  • 打赏
  • 举报
回复
终于看到传说中的老大了,
令人惊叹!
你的90多万分是怎么得来的?
zjcxc 元老 2009-01-09
  • 打赏
  • 举报
回复
nzperfect 2009-01-09
  • 打赏
  • 举报
回复
触发器操作远程就已经需要配置分布式事务了吧
zjcxc 元老 2009-01-09
  • 打赏
  • 举报
回复
当然, 这样做的直接后果也就是, 如果你在触发器发使用了事务, 则无法在外面 ROLLBACK 之前的操作的
zjcxc 元老 2009-01-09
  • 打赏
  • 举报
回复
你应该在操作之前, 把所有的事务提交掉

WHILE @@TRANCOUNT > 0
COMMIT TRAN;


然后再开事务做后面的操作就没问题了
roadblossom 2009-01-09
  • 打赏
  • 举报
回复
up
jeremyyang824 2009-01-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zjcxc 的回复:]
你应该在操作之前, 把所有的事务提交掉


SQL codeWHILE @@TRANCOUNT > 0
COMMIT TRAN;



然后再开事务做后面的操作就没问题了
[/Quote]

我试过提交触发器本身的事务,然后另启一个新事务的方式。
但是报错:“其他会话正在使用事务的上下文。”
我的代码如下:

......
WHILE @@TRANCOUNT > 0
COMMIT TRAN;
BEGIN TRAN
INSERT INTO [192.168.100.89].aaa.dbo.BBB(ID) values(1) --192.168.100.89不连通(即该句会失败)

IF @@Error <> 0
BEGIN
ROLLBACK TRAN
print 'error'
END
COMMIT TRAN
END

并且未打印出error
第一部分 数据库体系结构 第1章 Oracle体系结构 1 1.1 数据库概述及实例 1 1.2 数据库 1 1.2.1 表空间 2 1.2.2 文件 2 1.3 实例 3 1.4 数据库内部结构 3 1.4.1 表、列和数据类型 4 1.4.2 约束条件 5 1.4.3 抽象数据类型 6 1.4.4 分区和子分区 7 1.4.5 用户 7 1.4.6 模式 8 1.4.7 索引 8 1.4.8 簇 9 1.4.9 散列簇 9 1.4.10 视图 9 1.4.11 序列 10 1.4.12 过程 10 1.4.13 函数 10 1.4.14 软件包 11 1.4.15 触发器 11 1.4.16 同义词 12 1.4.17 权限及角色 12 1.4.18 数据库链接 13 1.4.19 段、盘区和块 14 1.4.20 回滚段 14 1.4.21 快照和显形图 14 1.5 内部存储结构 15 1.5.1 系统全局区 15 1.5.2 环境区 17 1.5.3 程序全局区 17 1.6 后台进程 18 1.7 外部结构 20 1.7.1 重做日志 20 1.7.2 控制文件 21 1.7.3 跟踪文件与警告日志 21 1.8 基本数据库的实现 21 1.8.1 备份/恢复功能 22 1.8.2 安全性能 23 1.8.3 典型数据库逻辑设计 24 1.8.4 典型数据库物理设计 24 1.9 逻辑模型约定 25 1.9.1 一对一关系 25 1.9.2 一对多关系 26 1.9.3 多对多关系 26 1.10 创建数据库 27 1.10.1 修改创建模板的脚本文件 27 1.10.2 创建数据库后修改 MAXDATAFILES 27 1.10.3 使用OEM 28 第2章 硬件配置研究 30 2.1 结构概述 30 2.2 独立主机 31 2.2.1 磁盘阵列独立主机 31 2.2.2 磁盘镜像独立主机 34 2.2.3 多数据库独立主机 35 2.3 网络主机 36 2.3.1 数据库网络 37 2.3.2 远程更新:高级复制选项 39 2.3.3 集群服务器:Oracle并行服务器 40 2.3.4 多处理器:并行查询和并行装载 选项 41 2.3.5 客户机/服务器数据库应用 42 2.3.6 三层体系结构 43 2.3.7 Oracle透明网关访问 44 2.3.8 备用数据库 44 2.3.9 复制型数据库 45 2.3.10 外部文件访问 45 第3章 数据库逻辑设计 47 3.1 最终产品 47 3.2 优化软结构 47 3.2.1 起点:SYSTEM表空间 47 3.2.2 分离应用程序数据段:DATA 48 3.2.3 分离应用程序索引段:INDEXES 48 3.2.4 分离工具段:TOOLS 49 3.2.5 分离回滚段:RBS 50 3.2.6 分离临时段:TEMP 50 3.2.7 分离用户:USERS 51 3.3 扩展OFA 51 3.3.1 分离低使用的数据段:DATA_2 51 3.3.2 分离低使用的索引段:INDEXS_2 52 3.3.3 分离工具索引:TOOLS_1 52 3.3.4 分离特殊回滚段:RBS_2 53 3.3.5 分离用户特殊临时段: TEMP_USER 53 3.3.6 附加的应用特殊OFA扩展 54 3.4 合理的逻辑设计 54 3.5 解决方案 55 第4章 数据库物理设计 57 4.1 数据库文件设计 57 4.1.1 数据文件间的I/O冲突 57 4.1.2 所有数据库文件的I/O瓶颈 59 4.1.3 后台进程的并发I/O操作 61 4.1.4 定义系统恢复能力与性能目标 61 4.1.5 系统硬件及结构镜像的定义 62 4.1.6 识别专用于数据库的磁盘 62 4.1.7 选择正确的设计 63 4.2 I/O权值估计的检验 66 4.3 如何解决磁盘不足问题 69 4.4 解决方案 70 4.4.1 小型开发数据库设计 70 4.4.2 产品OLTP数据库设计 70 4.4.3 具有历史数据的产品OLTP数据库 设计 71 4.4.4 数据仓库设计 72
课程简介: 课程总计41课时,从什么是事务讲起,直到分布式事务解决方案,很的0基础基础与提升系列课程。对于难以理解的知识点,全部用画图+实战的方式讲解。 第一部分:彻底明白事务的四个特性:原子性、一致性、隔离性、持久性,用场景和事例来讲解。 第二部分:实战讲数据库事务的6并发异常:回滚丢失、覆盖丢失、脏读、幻读、不可重复读、MVCC精讲。 第三部分:彻底搞清楚4种事务隔离级别:READ_UNCOMMITTED 读未提交隔离级别、READ_COMMITTED 读已提交隔离级别、REPEATABLE_READ 可重复度隔离级别、SERIALIZABLE 序列化隔离级别 第四部分:彻底搞清楚MySQL的各种锁:行锁、表锁、共享锁、排它锁、Next-Key锁、间隙锁、X锁、S锁、IS锁、IX锁、死锁、索引与锁、意向锁等。 第五部分:彻底搞清楚Spring事务的7种传播级别的原理和使用:PROPAGATION_REQUIRED、PROPAGATION_SUPPORTS、PROPAGATION_MANDATORY、PROPAGATION_REQUIRES_NEW、PROPAGATION_NOT_SUPPORTED、PROPAGATION_NEVER、PROPAGATION_NESTED分布式事务的理论基础:RPC定理、BASE理论、XA协议都是什么,原理是什么,有什么关联关系 第六部分分布式事务的5种解决方案原理和优缺点:2PC两阶段提交法、3PC三阶段提交法、TCC事务补偿、异步确保策略、最大努力通知策略 第七部分:阿里巴巴分布式事务框架Seata:历经多年双十一,微服务分布式事务框架,用一个Nacos+Spring Cloud+Seta+MySql的微服务项目,实战讲解阿里的分布式事务技术,深入理解和学习Seata的AT模式、TCC模式、SAGA模式。 课程资料: 课程附带配套2个项目源码72页高清PDF课件一份阿里巴巴seata-1.1.0源码一份阿里巴巴seata-server安装包一份

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧