标签: distributed-transactions

区块链(比特币)作为数据库?

我正在阅读这篇 BBC 新闻文章和以下摘录,引起了我的注意。这听起来像是Always On Availability GroupsHigh Availability Mirroring,可能会自动包含安全性。

区块链是现代、高交易量应用程序的潜在可行数据库解决方案吗?

很容易看出它对个人医疗记录等小批量交易的价值,但是大批量数据库呢?

什么是区块链?

区块链依靠密码学来允许一组计算机在不需要中央参与者的情况下更改全局记录。

去除中间商可以降低几乎每个部门的成本。

区块链是一个分类帐,它按时间顺序或“链”记录一组称为“块”的数据所发生的一切。

作为一种货币,这是一项重要功能,因为它允许用户确保他们的数字货币是独一无二的,就像钱包中的每张纸币都是独一无二的一样。

“区块链技术将成为我们创造资产的方式,因为它允许你在不复制的情况下传输数字信息,”构建区块链网络的 Chain.com 的首席执行官 Adam Ludwin 说。

区块链可用于跟踪各种信息的历史并保持其价值,例如,医生可以使用它来更新医疗记录。

由于对区块链的每次更改都是在整个网络中同时进行的,因此不会丢失任何信息,并且由于更改无法撤消,系统保持其透明度。需要一个特殊的密钥来对每个块进行更改,因此个人可以通过保护该密钥来保证他们的记录安全。

normalization database-design distributed-transactions

16
推荐指数
3
解决办法
5423
查看次数

在 SSIS 包中创建事务的问题

我正在处理需要使用事务的包,但我目前收到以下错误:

SSIS package "CATS-Package.dtsx" starting.
Information: 0x4004300A at Data Flow Task, SSIS.Pipeline: Validation phase is beginning.
Information: 0x4001100A at CATS-Package: Starting distributed transaction for this container.
Error: 0xC001401A at CATS-Package: The SSIS Runtime has failed to start the distributed transaction due to error 0x8004D01B "The Transaction Manager is not available.". The DTC transaction failed to start. This could occur because the MSDTC Service is not running.
SSIS package "CATS-Package.dtsx" finished: Failure.
Run Code Online (Sandbox Code Playgroud)

以下是我目前所知道的:

  • 2012年套餐
  • 我正在包部署中运行
  • TransactionOption 属性设置为必需
  • 针对 2008 R2 实例运行 …

sql-server ssis sql-server-2008-r2 distributed-transactions ssis-2012

13
推荐指数
1
解决办法
7961
查看次数

禁止为链接服务器推广分布式事务的安全隐患

我有一个链接服务器,我需要运行以下语句:

INSERT INTO...EXEC linkedserver.sp @parameter
Run Code Online (Sandbox Code Playgroud)

两台服务器都是 SQL Server 2008R2 SP1。一旦我运行它,我就会收到此错误:

消息 7391,级别 16,状态 2,第 6 行 由于链接服务器“MY.LINKED.SERVER”的 OLE DB 提供程序“SQLNCLI10”无法开始分布式事务,因此无法执行该操作。

搜索错误后,我看到很多建议运行:

EXEC master.dbo.sp_serveroption
     @server = N'[mylinkedserver]',
     @optname = N'remote proc transaction promotion',
     @optvalue = N'false'
Run Code Online (Sandbox Code Playgroud)

我应该注意此操作是否有任何安全隐患?

其他选项是在主服务器上使用链接服务器对象的高级属性:

在此处输入图片说明

sql-server-2008-r2 linked-server distributed-transactions

8
推荐指数
1
解决办法
1万
查看次数

如何在 Always On 集群中查询只读副本

我们有一个由 2 个服务器组成的 Always On“集群”(还会有更多),所以一个是PRIMARY,其他是SECONDARY。这个想法是将 SECONDARY 用作只读副本,因此它在某种程度上是一个搜索服务器。

我知道如何在 C# 中设置 ConnectionString 所以它将使用 SECONDARY 副本 - 只需添加ApplicationIntent=ReadOnly.

但是如果我使用分布式查询,我不明白如何从存储过程中解决 SECONDARY。有没有办法为查询设置一些参数(如 WITH 语句或其他东西),因此查询将仅使用副本而不使用 PRIMARY 节点?

问题是,很明显,从一开始server1是 PRIMARY,server2是 SECONDARY,但是当server1 出现故障时,server2是 PRIMARY,server1在修复后将是 SECONDARY。所以我不能只使用静态server2的名称。

到目前为止,我已经设法将当前副本的服务器名称作为变量并在 EXEC 中使用它:

-- find first available replica
DECLARE @replicaServer nvarchar(50)

SELECT TOP 1
    @replicaServer = RCS.replica_server_name
FROM
    sys.availability_groups_cluster AS AGC
    INNER JOIN sys.dm_hadr_availability_replica_cluster_states AS RCS
          ON RCS.group_id = AGC.group_id
    INNER JOIN sys.dm_hadr_availability_replica_states AS …
Run Code Online (Sandbox Code Playgroud)

sql-server availability-groups distributed-transactions

8
推荐指数
2
解决办法
1万
查看次数

链接服务器查询在哪里执行?

我有两个实例ServerAServerB,并且我在ServerA 中ServerB创建了一个链接服务器作为Linksrv_B

我可以使用四部分命名约定在ServerA上执行查询:

SELECT * FROM Linksrv_B.master.sys.databases
Run Code Online (Sandbox Code Playgroud)

OPENQUERY()

SELECT * FROM OPENQUERY(Linksrv_B, 'SELECT * FROM master.sys.databases')  
Run Code Online (Sandbox Code Playgroud)

我知道链接服务器使用分布式事务作为行集跨异构数据库工作。

  1. OLEDB 提供程序在哪里启动/连接?服务器A还是服务器B?
  2. 查询是在 ServerA 还是 ServerB 上执行的?优化器是否在哪个服务器上发挥作用?
  3. 结果集在哪里缓存?
  4. 谁能给我们一个详细的解释链接服务器是如何工作的。

sql-server linked-server distributed-transactions openrowset distributed-queries

8
推荐指数
1
解决办法
1753
查看次数

如何在不创建分布式事务的情况下从远程存储过程插入表?

如何在不创建分布式事务的情况下从远程存储过程插入本地表?我想在远程服务器上运行一个存储过程,并将输出用作插入本地表的源。

sql-server-2005 sql-server stored-procedures remote distributed-transactions

7
推荐指数
1
解决办法
9119
查看次数

如何为链接服务器启用分布式事务?

我有一个 SQL Server 2012 实例,其中一个链接服务器使用 System i Access ODBC 驱动程序指向 IBM Iseries 系统上的 db2 数据库。

我正在尝试启用分布式事务。我相信该提供商确实根据IBM 文档支持它们(除非我误解了该链接)。

我正在运行以下查询:

BEGIN TRANSACTION
    UPDATE LINKEDSERVER.LINKEDDATABASE.SCHEMANAME.TABLENAME SET COLUMN = VALUE

    SELECT CAST('qwerty' as integer) -- we want an error here so the transaction fails
COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

链接服务器“LINKEDSERVER”的 OLE DB 提供程序“MSDASQL”返回消息“[IBM][System i Access ODBC 驱动程序]登记 DTC 阶段失败。2”。消息 7391,级别 16,状态 2,第 2 行 由于链接服务器“LINKEDSERVER”的 OLE DB 提供程序“MSDASQL”无法开始分布式事务,因此无法执行该操作。

我对这个错误所做的所有研究都遇到过想要禁用分布式事务而不是让它们工作的人。我已经在链接服务器属性上将“启用分布式事务的提升”设置为 true。

任何想法如何让这个工作?

编辑:更多信息/更新。当我在 Windows 日志中注意到这一点时,我正准备暂时放弃这个并等待帮助:

当 XA 事务被禁用时,调用者试图注册一个 XA 资源。

我找到了这个链接,它告诉我如何修改 …

sql-server linked-server sql-server-2012 iseries distributed-transactions

7
推荐指数
2
解决办法
7万
查看次数

有没有办法使用可用性组功能在 SQL Server 2012 上实现跨数据库任务?

我们使用 SQL Server 2012 及其新的可用性组 (AG) 功能。有一项任务是将某些表的旧数据从一个数据库移动到另一个数据库。两个数据库都包含在不同的可用性组中。

以前(在使用 AG 功能之前)通过将第二个服务器实例添加为链接服务器 ( sp_addlinkedserver) 并按以下方式执行分布式事务来解决该任务:

  1. 开始交易
  2. 将旧数据从 server1.table1 插入 server2.table2
  3. 从 server1.table1 中删除旧数据
  4. 提交事务

不幸的是,AG 不支持分布式事务,因为在故障转移的情况下数据库可能会变得不一致 ( http://technet.microsoft.com/en-us/library/ms366279.aspx )。

是否有某种方法可以在保留 AG 功能的情况下实现此任务,并且在发生异常时不实现回滚逻辑?

sql-server-2012 availability-groups distributed-transactions

6
推荐指数
1
解决办法
393
查看次数

插入链接服务器失败,并显示“事务管理器已禁用对远程/网络事务的支持”

两台服务器:sq009sq202,都运行 SQL Server 2012 SP3。

sq202 是为我们的 ERP 系统Sage 500托管数据库的 SQL Server 。
sq009 是托管IBM Maximo实例数据库的 SQL Server 。

情况:sq202中的表存在触发器,在sq202 DB中插入一行时,应该在sq009 DB中插入一行。但是,当插入记录时,我在 Sage 500 对话框中收到此错误:

无法执行该操作,因为链接服务器“sq009”的 OLE DB 访问接口“SQLNCLI11”无法开始分布式事务。
链接服务器“sq009”的 OLE DB 访问接口“SQLNCLI11”返回消息“事务管理器已禁用对远程/网络事务的支持。”。

两台服务器都将另一台作为链接服务器;两者都使用指定的安全上下文进行所有连接;两者都将服务器选项Enable Promotion of Distributed Transactions for RPC设置为False

我已经确认分布式事务协调器服务正在 sq009 上运行,并且我认为适当地设置了它的权限(即使我知道这不应该被需要):

本地 DTC 属性

但 sq009 显然仍在抱怨。

sql-server distributed-databases sql-server-2012 distributed-transactions

6
推荐指数
1
解决办法
1万
查看次数

分布式事务和读提交快照

SQL Server 2008 R2 中的快照隔离级别不支持分布式事务。但是读提交的快照呢?

sql-server sql-server-2008-r2 distributed-transactions snapshot-isolation

5
推荐指数
1
解决办法
869
查看次数