标签: sql-server

SQL Server 链接服务器:“无法在此会话上启动更多事务。”

我正在尝试INSERT对链接服务器执行操作:

DBCC TRACEON (3604, 7300)

BEGIN TRANSACTION

INSERT INTO LIVE.Contoso.dbo.Events (EventGUID, EventDate, LoginGUID, UserGUID, EventType, Notes, TargetGUID) 
VALUES ('{494D023F-CD5A-11E2-9F18-C86000D0B92A}', getdate(), '{3B4F90C0-CD5A-11E2-9F18-C86000D0B92A}', '{494D023D-CD5A-11E2-9F18-C86000D0B92A}', 1, N'Test notes', '{494D023E-CD5A-11E2-9F18-C86000D0B92A}')

ROLLBACK TRANSACTION
Run Code Online (Sandbox Code Playgroud)

它返回错误:

链接服务器“LIVE”的 OLE DB 访问接口“SQLNCLI”返回消息“无法在此会话上启动更多事务。”。
消息 7395,级别 16,状态 2,第 3 行
无法为链接服务器“LIVE”的 OLE DB 提供程序“SQLNCLI”启动嵌套事务。需要嵌套事务,因为 XACT_ABORT 选项设置为 OFF。

这个本地数据库从 2000 年(查询有效)移动到 2005 年(查询无效)。远程服务器是 2008 R2。

你尝试过什么?

两年前我问过的这个问题的详尽清单。

你是如何创建链接服务器的?

--EXEC master.dbo.sp_dropserver @server = N'LIVE'
EXEC master.dbo.sp_addlinkedserver @server = N'LIVE', @srvproduct=N'', @provider=N'SQLOLEDB', @datasrc=N'vader'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'LIVE', @locallogin = NULL, …
Run Code Online (Sandbox Code Playgroud)

msdtc sql-server sql-server-2005 sql-server-2008-r2

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

如何允许域组访问 SQL Server?

我确定这是一个简单的问题,但我已经找了好几天了......

我有一个属于域的 SQL 服务器。该域有许多用户。

我想允许域中特定组内的任何人选择权限。

现在我必须为每个域用户添加一个 SQL 用户,我确定有更好的方法吗?

CREATE USER [Bob] FOR LOGIN [Domain\Bob]
GRANT SELECT ON TABLE TO "Domain\Group"
Run Code Online (Sandbox Code Playgroud)

鲍勃是组的成员

domain sql sql-server

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

MSSQL:将数据库还原到备份集中的最新文件

我有一个处于 SIMPLE 恢复模式的 MSSQL 2008R2 DB,它定期备份

BACKUP DATABASE MyDB to DISK = 'Z:\MyDB.cbak'  WITH COMPRESSION
Run Code Online (Sandbox Code Playgroud)

这会定期运行,在文件中创建多个备份集。我想恢复所做的最新备份。

手动执行此操作我可以运行RESTORE HEADERONLY from Disk='Z:\DougHub.cbak',然后找到要运行的最新位置RESTORE DATABASE MyDB from Disk='Z:\MyDB.cbak' with FILE = <some number> 但我想自动执行此步骤,以便它始终恢复最新的备份。

如何创建一个 TSQL 命令来从备份文件中恢复最近的备份?

database sql-server tsql database-restore

4
推荐指数
1
解决办法
4068
查看次数

镜像本地帐户以连接到不同服务器和域上的数据库

我的数据库客户端和数据库服务器在不同的机器上,没有连接到同一个域(我的网络主机不支持)。我不想通过连接字符串发送用户名/密码详细信息,并希望使用 Windows 身份验证连接到数据库。

在本文的概述中,它提到了这一点(强调我的):

当您使用 Windows 身份验证连接到 SQL Server 时,您可以使用 Kerberos 或 NTLM 身份验证,具体取决于您的服务器和域的配置。如果出现以下情况,您可能无法使用 Kerberos 身份验证:

  • 您的数据库客户端和数据库服务器由阻止 Kerberos 身份验证的防火墙分隔。

  • 您的应用程序服务器和数据库服务器位于不同的域中,互不信任。

在这些情况下,您可以使用镜像本地帐户或 SQL 身份验证。使用镜像本地帐户,您可以在每台服务器上使用相同的用户名和密码配置两个帐户。您必须确保密码保持不变。

我假设这只是意味着在两台机器上创建一个具有相同用户名和密码的 Windows 用户,但是我怀疑这是否可行。当我在数据库客户端上为这个用户添加权限时,它在用户名前面加上服务器名,在数据库服务器上创建数据库登录时也会发生同样的事情。

这是创建镜像本地帐户的意思吗?如果是这样,考虑到用户位于不同的域中,这如何工作?

windows-server-2008 windows-authentication sql-server windows-server-2012

4
推荐指数
1
解决办法
2242
查看次数

SQL Server 2008 还原数据库在不存在完整数据库时允许差异备份

我将备份文件(它用作新数据库的模板)恢复为新数据库。通常作为此过程的一部分,我会在还原后进行完整备份,但这次我因另一个问题而被叫走,然后我才可以这样做,与此同时,我的定期安排的差异备份作业运行了。它成功地对该数据库进行了差异备份,而没有抛出任何错误。相反,日志备份作业未能正确报告没有可用的完整备份。

我在多个地方读到过,如果没有完整备份,您不能进行差异备份或日志备份,那么为什么这个特定的数据库允许差异?有没有其他人遇到过这种行为?

sql sql-server

4
推荐指数
1
解决办法
250
查看次数

特定数据类型的 vSphere 数据存储:NFS 或 iSCSI

我正在考虑提高 vSphere 环境中的性能。我们正在使用 NetApp 设备,其中所有 VM 都存储在通过 NFS 挂载的数据存储中。

有人向我建议,对于某些特定的工作负载(例如 SQL 数据或文件服务器),将 iSCSI 用于数据 vHD 可能会更好地提高磁盘 IO 性能。

在我的示例中,启动磁盘将是存储在 NFS 附加数据存储中的普通 VMDK。D 驱动器(SQL 数据或文件服务器数据所在的磁盘)将是 iSCSI 连接的卷。

C: - VMDK disk container -> VMFS datastore -> NFS -> NetApp
D: - iSCSI -> NetApp
Run Code Online (Sandbox Code Playgroud)

我也在琢磨:iSCSI是从vSphere层面发起的还是直接从Windows发起的?

有没有人有这方面的经验或想法?

iscsi netapp sql-server vmware-esxi vmware-vsphere

4
推荐指数
1
解决办法
2435
查看次数

检查是否应用了 GRANT EXECUTE T​​O 用户或角色

在 Microsoft SQL Server 中,我可以使用

GRANT EXECUTE TO <principal>
Run Code Online (Sandbox Code Playgroud)

授予某些用户或角色执行权限。我对检测感兴趣:

我怎样才能同样简单地检查该GRANT EXECUTE命令是否已经应用于给定的用户/角色?(由我或其他管理员)

例子:

如果我使用GRANT EXECUTE TO user01并在几周后返回:是否有一种简单的方法来检查我(或其他人)是否已经使用过GRANT EXECUTE TO user01?

permissions audit sql-server

4
推荐指数
1
解决办法
6873
查看次数

您如何开始诊断间歇性 SQL Server 连接错误?

我们的几个 Web 应用程序都出现了一个间歇性错误,它们都说同样的话:

System.Data.SqlClient.SqlException:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供程序:命名管道提供程序,错误:40 - 无法打开与 SQL Server 的连接)---> System.ComponentModel.Win32Exception:找不到网络路径

我们无法根据命令重现该问题;一切正常 99%。我们每天会看到 2 到 3 次这些错误。它发生的时间并不一致。我们有两台独立的服务器在 AWS 中运行:一台 SQL Server Standard 2016 服务器和一台运行我们的 .NET Web 应用程序的单独服务器。Web 应用程序通过 ADO.NET 连接。

我们如何开始诊断这些错误?

是否有我们可以打开的日志?我们应该首先排除什么?

sql-server

4
推荐指数
1
解决办法
3503
查看次数

诊断 VM 上缓慢的数据处理

我们正在尝试从 VM 内部诊断显然运行缓慢的 VM。

情况:

  • 我们在 6 核 12GB 虚拟机上运行的 Windows Server 2008R2 上有一个 IIS 托管的应用程序。
  • 我们有一个在 SQL Server 2008R2 SP3 集群上运行的数据库(16+ 核,>16GB RAM)
  • 应用程序正在处理针对此数据库的消息队列。处理主要包括查询/获取和更新,每条消息可能有十几个往返。有限数量的线程 (3) 分配给此工作负载,这是同步的,因此线程确实会阻塞数据库响应。
  • 数据库显然负载很轻:只有最大 CPU 负载的百分之几。
  • 据我们所知,数据库和 VM 主机都在同一个数据中心。

数据库报告在等待异步网络 IO 上花费了大量时间,即。等待应用程序消费数据。应用程序 VM 显然也是轻载的:~20% CPU。基础设施不归我们所有,我们唯一的访问权限是通过 RDP 访问虚拟机,以及通过 SQL Management Studio 访问数据库集群。我们没有足够的权限来运行分析器,但我们确实记录了数据库和 VM 的性能计数器。

几周前,消息处理率突然下降了 70-80%。据我们所知,没有任何变化:应用程序没有被修改或重新配置,性能计数器没有指示负载特性的任何变化。基础设施的所有者表示,他们最终没有任何改变。

作为重新启动过程的一部分,应用程序必须重新加载其消息队列。这涉及对几十万行的简单选择,然后将这些行读入内存结构。数据库在几秒钟内为 SELECT 提供服务,但随后在读取结果集的应用程序上等待了大约 10 分钟。这是一个单线程操作,涉及非常简单的反序列化,在此硬件上花费的时间不应超过几分钟。

我目前的理论是网络延迟在某种程度上增加了,但 ping 只报告“<1ms”,而且我们在任何情况下都没有基线。hrPing 报告从应用程序服务器到数据库的时间在 0.5 到 2 毫秒之间。

另一种可能性是 VM 的实际 CPU 容量以某种方式减少了,但我预计这会表现为“明显”负载的增加。

我们还有其他调查途径吗?

windows-server-2008 performance sql-server vmware-esxi

4
推荐指数
1
解决办法
962
查看次数

Azure AD 连接自定义安装

我正在尝试安装 Azure AD Connect 以将本地 AD 与 Azure 同步。我以为整个过程会很简单。但是,我面临着奇怪的问题。我创建了服务帐户,它拥有使用 Azure AD 所需的所有权限(它基本上是域管理员)。我想使用完整安装的 SQL Server 而不是 Express。因此,我选择自定义安装并得到一条没有任何文字的红线(这似乎是一个错误,但没有文字)。我被困在这一点上。你知道我错过了什么吗?谢谢!

active-directory sql-server azure-active-directory

4
推荐指数
1
解决办法
221
查看次数