问题标签 [distributed-transactions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - 在 Oracle 分布式数据库中处理 LOB 的最佳方式
如果创建 Oracle dblink,则无法直接访问目标表中的 LOB 列。
例如,您使用以下命令创建 dblink:
在此之后,您可以执行以下操作:
除非该列是 LOB,否则您会收到错误:
这是一个记录在案的限制。
同一页面建议您将值提取到本地表中,但那是......有点混乱:
还有其他想法吗?
database - 两阶段提交如何防止最后一秒的失败?
我正在研究两阶段提交如何跨分布式事务工作。据我了解,在该阶段的最后一部分,事务协调器会询问每个节点是否准备好提交。如果每个人都同意,那么它会告诉他们继续并承诺。
是什么阻止了以下失败?
- 所有节点都响应他们准备好提交
- 事务协调器告诉他们“继续并提交”,但其中一个节点在收到此消息之前崩溃
- 所有其他节点都成功提交,但现在分布式事务已损坏
- 据我了解,当崩溃的节点回来时,它的事务将被回滚(因为它从未收到提交消息)
我假设每个节点都在运行一个对分布式事务一无所知的普通数据库。我错过了什么?
sql-server-2005 - 如何配置链接服务器之间的身份验证?
我正在尝试测试一个概念证明,即我可以在两个链接的 SQL Server 上运行分布式事务,使用 sp_addlinkedserver 链接 - 它们的名称是 Server1 和 Server2,两者都在默认实例下运行。每个服务器分别拥有一个数据库,Source 和 Destination,目标数据库拥有一个名为 Output 的表,即
OUTPUT 表具有以下结构:
在 Server1 中,我调用sp_addlinkedserver 'Server2'来链接两个数据库,并尝试运行以下查询来测试该链接是否确实有效:
我返回以下异常:
对远程服务器的访问被拒绝,因为不存在登录映射。
很公平,所以我从 Server1 运行sp_addlinkedsrvlogin 'Server2',根据文档,它应该获取远程运行查询的用户凭据(即来自 Server1)并将这些凭据应用于 Server2。这意味着由于我使用 Windows 身份验证连接到 Server1,这应该意味着我的 Windows 凭据也适用于 Server2。
现在异常消息变为:
用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。
在谷歌上搜索了这个异常后,我没有找到任何有用的东西来指引我正确的方向。我错过了什么?我希望 [如果登录失败] 异常引用我的Windows 凭据,而不是匿名登录凭据。
看起来一旦我让链接本身工作,分布式事务本身应该是一件相当简单的事情 - 文档暗示我只需要确保 DTC 服务在 Server1 上运行,并且任何查询都在 Server1 上运行,将被处理通过链接:
- 在初始化我的分布式事务之前包括SET XACT_ABORT ON
- 我使用BEGIN DISTRIBUTED TRANSACTION而不是BEGIN TRANSACTION
- 如果我希望在 Server2 上引用 SQL Server 的非默认实例,我将查询中名称Server2的任何实例替换为[Server2\InstanceName]
我的问题是:
- 我该如何解决这个登录问题?单独的sp_addlinkedsrvlogin存储过程似乎并不能解决问题。
- 运行分布式事务真的像文档所暗示的那样简单吗?
TIA
sql-server - 检查分布式事务中绕过 CATCH 块的约束
我有一个 MSSSQL 存储过程,它执行如下所示的分布式事务:
这工作正常。
如果我添加这第三条插入语句:
...它正确失败了——事务在远程服务器上回滚,控制权传递给 CATCH 块,我得到了有关错误的信息(无法将“错误”转换为 int)。
但是如果我添加这个插入语句:
..并且我在远程表上有一个检查约束,要求 id 列中的值> 0,然后事情就不像我预期的那样工作。事务确实回滚,但控制不会转移到 catch 块。相反,执行会终止,并打印到输出窗口:
为什么?我需要在 catch 博客中记录这些错误。
c# - 使用 WCF 的分布式事务
基本架构:n 个物理盒子,每一个都承载相同的 WCF 服务,开始放置一个负载均衡器。每个盒子都击中一个不支持事务的数据库基础设施 - 不要问:(
因此,在我的应用程序的数据访问层中,我需要一些分布式事务的方法。我有哪些选择?
请注意,我系统的客户端将是使用基本 Web 服务(BasicHttpBinding)和闪亮的新 WCF 客户端(NetTcpBinding 或 NetNamedPipeBinding)进行通信的旧应用程序。
编辑 1
例如,将在物理框 1 上对 WCF 层进行一次调用,例如 EditEntity(...)。此调用将触发对数据库的 2 次写入。在第一次写入之后,另一个客户端调用 EditEntity(...) 为第二个物理框上我的 WCF 服务的第二个实例上的同一实体。在第二个框中,我如何知道该特定实体的交易已经在进行中?
谢谢。
asp-classic - 使用 .NET Web 服务的 VB-ASP 应用程序有哪些选择?
我有一个传统的 ASP 应用程序,它预计会使用一个 .net Web 服务。ASP 为这种情况提供了哪些支持?
我记得在页面开头支持事务属性的 VB 脚本。我可以使用事务来包含 Web 服务调用吗?
任何指针将不胜感激。谢谢
帕里托什
transactions - MSDTC(分布式事务协调器)首次启动缓慢
我注意到非常简单的分布式事务在第一次运行时需要很长时间(3-4 秒)才能完成。但是如果再次调用相同的事务范围,它会快得多(30ms)。似乎 MSDTC 在一小时后进入睡眠状态。一个小时过去后,下一个要运行的事务将需要 3-4 秒。
我预计网站上的流量不会很大,因此单个交易之间可能会经过很多小时。
我认为这可能是由于 MSDTC 服务设置为手动启动,但我确保 MSDTC 服务都自动运行。
猜测某处有一个注册表设置,但我没有在 MSDN 中找到任何东西。
谢谢!
c# - 启用 MSDTC 的安全风险
默认情况下禁用 MSDTC(Windows 2003 - 更高版本),我希望为我正在开发的需要来自 .Net C# 的分布式事务的应用程序启用它。
我不相信启用它会出现任何安全问题,但是 SO 是否知道启用 DTC 的任何安全问题?
干杯
奥利
sql - Oracle 10.2 行为怪异。还是我
请查看以下查询。SQL 并不像看起来那么糟糕。基本上,我们有一个事实表和一些维表的简单连接。然后我们有一个派生表的连接,给定别名 ACCOUNTS-DIM-DEP
用户抱怨当他们的 WebI(商业智能)报告在他们的过滤器中包含多个 COST CENTERS 时,导致 SQL 的“IN”包含多个值,返回以下错误:
否则,对于单个 COST CENTER,报告工作正常。有趣的是,我注意到以下连接条件(在我看来UNRELATED)对 SQL 产生了负面影响:
这里的问题是左侧的列accounts_dim_dep.account_id 在db 中定义为charchar,右侧的col dw_mgr.fa_trans_fct.depreciation_account_id 定义为数字。
当我修改连接条件以将数字转换为 varchar 时...
...无论过滤器中指定的 COST CENTERS 数量如何,SQL 都可以正常工作。
我想知道一个看似不相关的列上的类型不匹配如何影响是否可以在 IN 列表中指定多个 COST CENTERS。
sql - 存储过程中循环内的事务
我正在开发一个过程,该过程将使用本地数据库中的记录更新远程服务器上的大量项目。这是伪代码。
无论我们如何优化它,该例程都需要一段时间,因此我们不希望将整个事情作为单个事务处理。这些项目在处理后会被标记,因此如果过程中断,应该可以从我们离开的地方继续。
在 begin/commit tran 中包装循环的内容(“处理项目”)并不能解决问题......似乎整个语句
被视为单个事务。如何将每个项目流程作为一个完整的、单独的事务处理?
请注意,我很乐意将这些作为“非事务更新”运行,但该选项仅在 2008 年可用(据我所知)。