问题标签 [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.

0 投票
6 回答
48258 浏览

sql - 在 Oracle 分布式数据库中处理 LOB 的最佳方式

如果创建 Oracle dblink,则无法直接访问目标表中的 LOB 列。

例如,您使用以下命令创建 dblink:

在此之后,您可以执行以下操作:

除非该列是 LOB,否则您会收到错误:

这是一个记录在案的限制

同一页面建议您将值提取到本地表中,但那是......有点混乱:

还有其他想法吗?

0 投票
5 回答
10261 浏览

database - 两阶段提交如何防止最后一秒的失败?

我正在研究两阶段提交如何跨分布式事务工作。据我了解,在该阶段的最后一部分,事务协调器会询问每个节点是否准备好提交。如果每个人都同意,那么它会告诉他们继续并承诺。

是什么阻止了以下失败?

  1. 所有节点都响应他们准备好提交
  2. 事务协调器告诉他们“继续并提交”,但其中一个节点在收到此消息之前崩溃
  3. 所有其他节点都成功提交,但现在分布式事务已损坏
  4. 据我了解,当崩溃的节点回来时,它的事务将被回滚(因为它从未收到提交消息)

我假设每个节点都在运行一个对分布式事务一无所知的普通数据库。我错过了什么?

0 投票
2 回答
4663 浏览

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

0 投票
1 回答
1368 浏览

sql-server - 检查分布式事务中绕过 CATCH 块的约束

我有一个 MSSSQL 存储过程,它执行如下所示的分布式事务:

这工作正常。

如果我添加这第三条插入语句:

...它正确失败了——事务在远程服务器上回滚,控制权传递给 CATCH 块,我得到了有关错误的信息(无法将“错误”转换为 int)。

但是如果我添加这个插入语句:

..并且我在远程表上有一个检查约束,要求 id 列中的值> 0,然后事情就不像我预期的那样工作。事务确实回滚,但控制不会转移到 catch 块。相反,执行会终止,并打印到输出窗口:

为什么?我需要在 catch 博客中记录这些错误。

0 投票
1 回答
3164 浏览

c# - 使用 WCF 的分布式事务

基本架构:n 个物理盒子,每一个都承载相同的 WCF 服务,开始放置一个负载均衡器。每个盒子都击中一个支持事务的数据库基础设施 - 不要问:(

因此,在我的应用程序的数据访问层中,我需要一些分布式事务的方法。我有哪些选择?

请注意,我系统的客户端将是使用基本 Web 服务(BasicHttpBinding)和闪亮的新 WCF 客户端(NetTcpBinding 或 NetNamedPipeBinding)进行通信的旧应用程序。


编辑 1

例如,将在物理框 1 上对 WCF 层进行一次调用,例如 EditEntity(...)。此调用将触发对数据库的 2 次写入。在第一次写入之后,另一个客户端调用 EditEntity(...) 为第二个物理框上我的 WCF 服务的第二个实例上的同一实体。在第二个框中,我如何知道该特定实体的交易已经在进行中?

谢谢。

0 投票
2 回答
135 浏览

asp-classic - 使用 .NET Web 服务的 VB-ASP 应用程序有哪些选择?

我有一个传统的 ASP 应用程序,它预计会使用一个 .net Web 服务。ASP 为这种情况提供了哪些支持?

我记得在页面开头支持事务属性的 VB 脚本。我可以使用事务来包含 Web 服务调用吗?

任何指针将不胜感激。谢谢

帕里托什

0 投票
2 回答
2183 浏览

transactions - MSDTC(分布式事务协调器)首次启动缓慢

我注意到非常简单的分布式事务在第一次运行时需要很长时间(3-4 秒)才能完成。但是如果再次调用相同的事务范围,它会快得多(30ms)。似乎 MSDTC 在一小时后进入睡眠状态。一个小时过去后,下一个要运行的事务将需要 3-4 秒。

我预计网站上的流量不会很大,因此单个交易之间可能会经过很多小时。

我认为这可能是由于 MSDTC 服务设置为手动启动,但我确保 MSDTC 服务都自动运行。

猜测某处有一个注册表设置,但我没有在 MSDN 中找到任何东西。

谢谢!

0 投票
1 回答
1684 浏览

c# - 启用 MSDTC 的安全风险

默认情况下禁用 MSDTC(Windows 2003 - 更高版本),我希望为我正在开发的需要来自 .Net C# 的分布式事务的应用程序启用它。

我不相信启用它会出现任何安全问题,但是 SO 是否知道启用 DTC 的任何安全问题?

干杯

奥利

0 投票
2 回答
1134 浏览

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。

0 投票
5 回答
11622 浏览

sql - 存储过程中循环内的事务

我正在开发一个过程,该过程将使用本地数据库中的记录更新远程服务器上的大量项目。这是伪代码。

无论我们如何优化它,该例程都需要一段时间,因此我们不希望将整个事情作为单个事务处理。这些项目在处理后会被标记,因此如果过程中断,应该可以从我们离开的地方继续。

在 begin/commit tran 中包装循环的内容(“处理项目”)并不能解决问题......似乎整个语句

被视为单个事务。如何将每个项目流程作为一个完整的、单独的事务处理?

请注意,我很乐意将这些作为“非事务更新”运行,但该选项仅在 2008 年可用(据我所知)。