标签: sql-server-2014

无法启动 system_health 扩展事件会话

在某些 SQL Server 实例上(我还没有找到模式),当我尝试手动启动此会话时,出现以下错误:

对于目标“5B2DA06D-898A-43C8-9309-39BBBE93EBBD.package0.event_file”,传递的参数“filename”无效。索引 0 处的目标参数无效(Microsoft SQL Server,错误:25641)

如果我们查看 SQL Server 日志,每次实例启动时(即在 Windows 重新启动以应用补丁后),我们得到:

错误:25641,严重性:16,状态:0。对于目标“5B2DA06D-898A-43C8-9309-39BBBE93EBBD.package0.event_file”,传递的参数“文件名”无效。索引 0 处的目标参数无效

错误:25710,严重性:16,状态:1。事件会话“system_health”无法启动。参考当前会话中以前的错误来确定原因,并纠正任何相关的问题。

错误:25709,严重性:16,状态:1。一个或多个事件会话未能启动。参考当前会话中以前的错误来确定原因,并纠正任何相关的问题。

有没有人注意到这个问题?我怀疑这是由于权限,因为会话的定义不指示路径,而只是 .xel 文件的名称。也就是说,它直接写入 SQL Server 日志文件夹,显然 SQL Server 服务帐户被授予完全访问权限。

我在 AlwaysOn_health 会话中遇到了同样的问题。

在此先感谢您的帮助 !

sql-server extended-events sql-server-2014

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

创建数据库后轻松授予对用户列表的访问权限

我有几个数据库偶尔会被删除和重新创建。当架构更改时会发生这种情况。

我有一组需要访问这些数据库的开发人员。为了授予这些开发人员访问这些数据库的权限,我可以:

  • 使用共享登录,并使用 SSMS 授予该登录访问每个数据库的权限。这是不好的安全性,但相当快。我不想这样做,只是它可以节省我很多时间。

  • 使用个人登录,并使用 SSMS 授予每个登录访问每个数据库的权限。这是很好的安全性,但每次我必须重新创建数据库时都会花费我的时间。我必须选择每个用户的登录名,并编辑用户的用户映射。

如何轻松授予一组用户访问我删除并重新创建的数据库的权限?

版本

  • Microsoft SQL Server 管理工作室 12.0.2569.0

  • SqlServer 12.0.4100.1

范围

  • 大约有六个开发人员。
  • 有两个 SqlServer 服务器。
  • 每个服务器都有两个数据库,开发人员有权访问这些数据库。
  • 数据库每月删除/重新创建一次或两次。

sql-server permissions sql-server-2014

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

为逗号分隔的字符串中的每个值创建一行

我目前正在尝试从执行以下操作的表创建视图:

Table A
??????????????????????????????? 
? PART NUMBER ?   FILE NAME   ?
???????????????????????????????
?  PN0001-01  ?      FOO      ?
?  PN0002-01  ?      BAR      ?
?  PN0003-01  ?    FOO,BAR    ?
?  PN0004-01  ?  BAR,FOO,FOB  ?
???????????????????????????????
Run Code Online (Sandbox Code Playgroud)

创造

View B
??????????????????????????????? 
? PART NUMBER ?   FILE NAME   ?
???????????????????????????????
?  PN0001-01  ?      FOO      ?
?  PN0002-01  ?      BAR      ?
?  PN0003-01  ?      FOO      ?
?  PN0003-01  ?      BAR      ?
?  PN0004-01  ?      BAR      ?
?  PN0004-01  ?      FOO      ?
?  PN0004-01  ?      FOB      ? …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql view sql-server-2014

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

SQL Server 对象并发

背景: SQL Server Version 2014,设计的是发票订单系统。

我有几个问题来确认我对 SQL Server 并发性的看法。作为简要背景,创建此模型的开发人员构建了每个订单库存表(属于订单的一部分的项目)和带有InUse字段的订单表(订单)。会发生的情况是,当销售人员尝试更新订单时,通过更改订购商品的名称(例如需要将一本名为《哈利波特》的书重命名为《哈利波特》),如果其他人正在阅读该数据,他们就不能访问对象。

实际的数据库设计是这样的:该SalesOrder表将具有SalesPersonIdInUse列设置为1,没有人可以访问OrderId。这意味着对于每次读取、更新、插入或删除,都会发生三个事务:首先将更新设置InUse为 1,以便没有人可以访问特定的OrderId然后是实际事务,然后是将最终更新设置InUse为 0 以允许人们访问那个OrderId。这意味着多次读取和写入而不是更少 - 随着规模的扩大,性能噩梦!

开发人员解释说,如果两个用户尝试写入或更新订单中的项目,这可以解决并发问题。嗯?

根据我对 SQL Server 的了解,如果两个用户尝试写入相同的顺序——比如添加两个新项目,它们都会被添加,因为这些将作为元数据插入日志中,然后添加到磁盘上。另外,如果插入物完全相同,我们应该设计具有唯一约束的表来防止这种情况(公平地说,该开发人员根本不使用约束和外键),因此不会发生第二次插入。这意味着两个用户可以将插入写入同一个表,并且插入通常会很快发生。

此外,如果两个用户正在更新同一个记录——比如说一个OrderItemId名字为“Harry Potter”的 1 来更新为“Harry Potter”(这是一个特定的项目OrderId),即使是两个不同的更新也会发生,但是第二个无关紧要,因为它是相同的更新。 只有当对同一对象发生两次不同的更新时,例如更新一是“哈利波特”,更新二是“哈利波特”,才会出现问题,因为它们不同。但是,不允许用户访问对象并不能解决这个问题(他的设计),因为用户一个的更新可能是错误的更新,从而锁定了用户 2(反之亦然)。

我不明白这个设计;对我来说,它反映了对SQL Server并发的完全误解,以及SQL数据库如何处理事务,而且他创建的大部分内容已经由SQL Server在后端处理(除了没有解决错误更新的问题) . 但是,也许我遗漏了一些东西,其他人可以启发我这是 SQL Server 的标准做法(我以前从未见过这种设计)。

sql-server concurrency sql-server-2014

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

恢复加密数据库的副本

我已经使用文件服务器遵循的方法对备份进行了加密。不幸的是,我没有保留加密过程的证书副本,不幸的是服务器也被完全破坏,无法再次运行,我必须恢复数据库的副本。我有一份规则的副本,但它是加密的。这个问题有解决方案吗?

sql-server restore sql-server-2014

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

从分区表的分区中删除所有数据的最快方法是什么?

我有一个分区表,在现实生活中它有 8000 万行。

出于测试目的,我在这里创建并分区了这个表

当我运行以下查询时:

select * from countries
where visit >= '20110101'
  and visit <= '20111231'
Run Code Online (Sandbox Code Playgroud)

正如您在此处和下图的查询计划中看到那样,它使用分区消除,所以我知道我在做一些正确的事情。

在此处输入图片说明

我知道分区通常不是为了加速我的查询,它是一个管理功能,但是,它可以加速对大表的查询

我将首先说明我不想要的东西。我不想从我的表中删除任何分区

我想要的是?

我想以最快的方式从分区中删除所有数据:

有什么比这更快的吗? 不考虑批量删除

BEGIN TRANSACTION T1

DELETE 
FROM dbo.countries WITH (TABLOCKX)
WHERE visit >= '20110101'
  AND visit <= '20111231'

--COMMIT TRANSACTION T1
Run Code Online (Sandbox Code Playgroud)

查询计划在这里

在此处输入图片说明

sql-server delete optimization partitioning sql-server-2014

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

并行性的 TDE 性能和成本阈值

是否有任何文档、测试数据或其他证据表明在数据库上启用 TDE 时并行成本阈值 (CTP) 设置可能会影响性能?在不深入研究所有细节的情况下,我们发现在数据库上启用 TDE 后,基准测试出现了一些显着的性能下降,我们正在寻找可能产生影响的任何设置。CTP 当前设置为默认值 5,我知道这并不理想,所以请抵制对我进行惩罚的冲动。

我们还将添加 CPU 并进一步测试,但如果我们可以通过更改 CTP 或其他设置获得更好的性能,那当然比添加 CPU 更好(由于硬件成本以及每个 CPU 的 SQL Server 许可) .

我正在推动更改 CTP 并再次测试,但我希望看看是否有人已经对其进行了测试,以便我们可以相应地优先考虑要测试的更改。

谢谢!

sql-server transparent-data-encryption sql-server-2014

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

允许用户只查看他们有权访问的数据库

我想知道是否有任何方法可以让用户只查看他们有权访问的特定数据库。例如。假设我们有一个 alwaysOn,其中只有一个本地数据库和 10 个添加到 AO 中的数据库。用户需要对 AO 中添加的 10 个数据库之一的读取权限。但是当授予用户对该数据库的权限并且他连接到 AO 时,他可以查看每个数据库,但当然只能访问他有权访问的数据库。如果 AO 在本地数据库所在的位置处于活动状态,他也会看到那个。

我们已经尝试了一些东西,但没有成功,而且从我们所阅读的内容来看,除非用户被授予 dbowner 权限,否则它似乎不是一种方法。

有人有任何想法吗?

sql-server availability-groups sql-server-2014

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

我真的需要升级到 SQL Server 2014 SP2 吗?——

我们有一个应用程序升级到下一个版本。

SQL Server 2014 当前位于 SP1 上。

升级先决条件不一定是 SQL Server SP2。

但我觉得并阅读了下面的链接,其中说 SQL Server 2014 有许多与 AOAG 相关的修复程序和一些对 SQL 文件流的修复程序。

https://support.microsoft.com/en-in/help/3171021/sql-server-2014-service-pack-2-release-information

我陷入了以下情况:

我的经理问我们真的需要升级到 SP2,因为升级不是必需的。

他并不担心,因为这可能涉及到很小的风险,因为它们是 PRODUCTION 服务器。

但我确信微软发布 SP2 是出于某种目的,因为这有助于 SQL Server 2014 的性能。

我想传达相同的信息并让他们接受将 SP2 应用于我们的 PROD 服务器的可行性?

那么我真的需要申请 SP2 吗,我怎样才能让他们理解它有帮助?

service-pack sql-server-2014

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

如何跳过 SQL Server 查询中的行?

我从我的product表中选择了一个额外的 Row_Number() 列 (Num) 的查询,我得到了如下的答案(我只限制了 20 行来检索)。

询问

SELECT * 
FROM (SELECT ROW_NUMBER() OVER(ORDER BY ProductCode) AS Num, 
             ProductName
      FROM   BASE_Product 
      WHERE IsActive = 1) BASE_Product 
WHERE Num > 0 
AND   Num < (21)
Run Code Online (Sandbox Code Playgroud)

结果

在此处输入图片说明

我的要求是如何跳过每 3 行并仅检索 7 个限制行。

预期结果

我需要如下结果:

在此处输入图片说明

sql-server sql-server-2012 sql-server-2014

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