我在某些合并复制数据库的 msmerge_contents 表上遇到了一个非常令人困惑的问题。似乎我在表 msmerge_contents 的同一索引上的完全相同的行上收到了死锁。
这是我目前看到的死锁 xml。根据我可以告诉索引名称的信息:1 表示聚集索引(查看关联的 objid)。所以它是相同的 i/o 路径并且行 hashid 是相同的 (b5f70c321dc6),即同一行。一个过程是我相信合并代理运行的 msmakegeneration(在这种情况下每分钟),另一个过程是调用的触发器(每次请求表更新时)。任何人都可以对这个问题有所了解,我仍在学习僵局,对我来说这没有意义。谢谢
<deadlock-list>
<deadlock victim="process8f31f9498">
<process-list>
<process id="process8f31f9498" taskpriority="5" logused="2616" waitresource="KEY: 20:72057594653704192 (b5f70c321dc6)" waittime="1925" ownerId="3680081779" transactionname="user_transaction" lasttranstarted="2012-10-05T10:02:01.223" XDES="0x8f3b283a8" lockMode="U" schedulerid="7" kpid="11784" status="suspended" spid="252" sbid="0" ecid="0" priority="-5" trancount="2" lastbatchstarted="2012-10-05T10:02:01.177" lastbatchcompleted="2012-10-05T10:02:01.177" lastattention="1900-01-01T00:00:00.177" clientapp="GN-SQL-GW_National-GW_National Publicati-vz-sql-59" hostname="GN-SQL" hostpid="19364" loginname="DCSINFOSYS\SQLServer" isolationlevel="read committed (2)" xactid="3680081779" currentdb="20" lockTimeout="4294967295" clientoption1="673384544" clientoption2="128024">
<executionStack>
<frame procname="mssqlsystemresource.sys.sp_MSmakegeneration" line="337" stmtstart="29568" stmtend="29880" sqlhandle="0x0300ff7fa885d0f97c6e5901f39f000001000000000000000000000000000000000000000000000000000000">
update dbo.MSmerge_contents with (rowlock) set generation = @target_gen
where generation = @gen and tablenick = @art_nick </frame> …Run Code Online (Sandbox Code Playgroud) 我在 Windows2008R2 上安装了一堆 SQL Server。目前,每个 Windows 服务器都有两个 NIC,每个都连接到不同的网络。换句话说,每个服务器都出现在每个网络上。一个网络允许应用程序访问数据库,另一个网络旨在用于在服务器之间迁移大量数据而不影响应用程序使用的网络。
我有一份工作将大量数据从一个 SQL 服务器拉入另一个。我也希望那份工作能够利用第二个网络,但我很难过。
有没有办法告诉 SQL 在与另一台服务器通信时使用特定的网络设备?
谢谢!
我在无法编辑自己的作业的 SQL 2008 服务器上有 AD ID 用户。他们可以创建它们,但是为了编辑它们,他们必须删除它们然后重新添加它们。这个问题在这里解释:http : //blogs.msdn.com/b/sqlserverfaq/archive/2009/06/08/owner-of-the-job-will-not-be-able-to-modify-edit-在-job-in-sql-server.aspx
我做了进一步的研究并发现在我的特殊情况下这是因为我使用 CREATE LOGIN [domain\user] 语法添加了 AD ID 用户。使用该方法,AD ID 的大小写就是您在括号中指定的内容。
无论如何,是否可以使用正确的 Windows AD ID 案例创建用户,以便我不必弄清楚然后修改每个 AD ID 用户的登录名?
此外,我使用此脚本为特定用户获取正确的大小写:
execute as login = 'usa\johndoe'
SELECT SUSER_SNAME()
revert;
Run Code Online (Sandbox Code Playgroud)
但是当我要求用户运行 SELECT SUSER_SNAME() 并给我结果时,它为我返回所有小写字母,但所有大写字母。正确的是全部大写(好吧,为了让该用户能够编辑作业)。
我不知所措,非常沮丧。
-- 我发现获得正确大小写的最佳(唯一?)方法是使用 SQL 界面添加用户,单击搜索,输入 AD ID,然后单击检查名称。对于上面的示例,它返回所有大写字母,尽管该脚本示例返回所有小写字母。
我正在使用 WMI 来获取服务器本地组的成员以及成员的 SID。WQL 查询适用于本地用户、本地组、AD 域用户和 AD 域组的成员。但是,当脚本查看恰好与 SQL Server 相关的成员时,它在它认为应该查看的类中找不到对象,因此我没有得到成员的 SID。例如,以下是为碰巧与 SQL Server 相关的组成员动态构造的一些查询:
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='SQLBrowser'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='MsDtsServer100'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='SQLAgent$SQLEXPRESS'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='MSSQL$EPROVISIONAPP'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='MSOLAP$EPROVISIONAPP'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='ReportServer$EPROVISIONAPP'
select SID from Win32_SystemAccount where Domain='NT SERVICE' and Name='SQLAgent$EPROVISIONAPP'
Run Code Online (Sandbox Code Playgroud)
上面的查询不返回任何结果,即使这些成员的 PartComponent …
我正在将合并复制与 SQL 2012 一起使用。
我有一个表,将该表传播给订阅者会很有用,但只是表结构,而不是实际数据。
表格中的数据按会话填充,即当您登录软件时将数据添加到表格中,然后在退出软件时删除。
这意味着不应将表中的数据从发布复制到订阅者,或从订阅者复制到发布。但是最好复制表结构,这样我们就不必在订阅者处手动运行脚本。
我在将数据导入 SQL Server 2008 数据库时遇到问题。
如果我在 SSMS 中执行以下语句,它工作正常。
INSERT INTO
[dbo].[ObjectiveRatingTranslation]
(
[ObjectiveRatingId]
, [TranslationId]
, [Abbreviation]
, [RateName]
, [Description]
, [CreatedBy]
, [CreatedOn]
, [ModifiedBy]
, [ModifiedOn]
)
VALUES
(
3
, 29
, N'O / T'
, N'På målet'
, N'Målet har slutförts i enlighet med detta förväntningar. Uppfyller de slutprodukter som definieras. Det förväntas att de flesta mål bör vara Topplista på denna nivå.'
, 0
, '2012-03-27T11:49:43.2300000'
, 0
, '2012-03-27T11:49:43.2300000'
)
Run Code Online (Sandbox Code Playgroud)
如果我在 VS 2010 …
我们有一个奇怪的系统,我们正在与之集成,它使用 XML,但它不理解自闭合标签,所以
<BOOKING>
<BOOKINGID>56812</BOOKINGID>
<PERSONCODE />
</BOOKING>
Run Code Online (Sandbox Code Playgroud)
超出了它的能力。
如果我拥有的是declare @x xml,我如何将其转换@x为字符串而没有自关闭标签:
<BOOKING>
<BOOKINGID>56812</BOOKINGID>
<PERSONCODE></PERSONCODE>
</BOOKING>
Run Code Online (Sandbox Code Playgroud) 在数据迁移过程中,我需要在写入目标表之前转换来自源系统的一些列值。
我已经获得了一个 Csharp 代码,它读取一个字符串并进行转换(这是一个复杂的字符串操作),然后返回转换后的字符串。
将此代码插入数据迁移 SQL 脚本的最佳方法是什么?我对 CSahrp 编程知之甚少,在研究了不同的站点后,发现这可以通过在 SSIS 包中添加脚本组件或将 .net 代码包装在可从 SQL Server 调用的 CLR 函数中来完成。
由于我的脚本不是 SSIS 包的一部分,我的偏好是定义一个 CLR 函数,但是可以吗?每个选项的优缺点是什么?
你还认为这个目标可以使用另一种更容易实现和维护的技术来实现吗?
如果你知道一个很好的链接,它会一步一步地向我展示这个过程,请与我分享:)
谢谢你。
我们计划在 SQL Server 2008 R2 的 2 个节点上创建一个事务复制,每个节点将是一个发布者和一个订阅者。
完成此场景的最佳实践是什么?微软一直建议分发者应该独立于发布者或订阅者,因此很明显,场景中要涉及到第三个节点。但是,由于每个节点将同时是发布者和订阅者,同一个(第三个节点)可以成为 2 个发布者的分发者吗?我应该创建 2 个分发服务器,还是仍然可以使用相同的架构,只使用 2 个节点,每个节点都充当分发服务器和发布服务器?
sql-server sql-server-2008-r2 high-availability transactional-replication
该文档没有指定是否max_connections仅适用于 TCP 连接。
据说,它似乎适用于任何类型的连接,但我想确定,否则,即使(最后一个)SUPER连接出现“连接过多”问题时,我也可以使用它插槽已在使用中。