标签: sql-server-2017

Active Directory 无法通过 SQL 服务器管理工​​作室工作

我在 SQL Server 中创建了一个组,并向其中添加了一个包含用户的 Active Directory 组。

当我尝试通过 Windows 身份验证登录时,出现以下错误:

Login failed for user 'UserName'. (Microsoft SQL Server, Error: 18456)
Run Code Online (Sandbox Code Playgroud)

但是当我只添加一个与组分开的 AD 用户时,登录没有问题。

为什么只有添加为登录名的组才能登录?

我曾尝试将 Active Directory 设置从全局类型更改为通用类型,但这并没有改变任何内容

在此处输入图片说明

这在 Windows 2016 服务器计算机和 SQL Server 2017 上。

sql-server ssms active-directory sql-server-2017

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

如何将 SQL Server 2017 设置为服务

我有一个关于将 SQL Server 2017 设置为服务的最佳方式的问题。

我有客户将 SQL Server 数据库作为服务购买,就好像它是 Azure 或 AWS 实例一样,他们无法访问服务器。他们在实例中只有用户名和密码,我需要向这些用户隐藏可通过 SQL Server Management Studio 或 T-SQL 命令访问的服务器配置,例如分配给实例的内存、CPU 数量等.

在 SQL Server 2016 中,我通过删除 master..xp_msver 视图的权限来完成此操作。例如,如果没有此权限,他们将无法查看实例属性(在 SSMS 中右键单击服务器)和 Facets 表单中的一些数据。即使没有此权限,他们也可以登录并在其数据库中执行所需的一切操作。

但在 SQL Server 2017 中,这不再有效,如果我拒绝此视图的权限,则无法再登录 SQL Server。

我知道将标准 SQL Server 用作服务可能不正确,也许它还没有为此做好准备,但是有正确的方法吗?或者可以使用哪些替代方案?

我花了很多时间在 Google 上试图寻找替代方案,但是对于 SQL Server 2017,我没有找到任何隐藏服务器设置的东西。

注意:我的用户使用 SQL Server Management Studio...

sql-server sql-server-2017

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

SQL Server:删除行触发器

我有这 3 个表:

构造函数员工

  • EID (员工 ID)作为主键和其他键。

项目

  • PID 作为主键和其他键。

项目建设者员工

  • PIDEID作为其他表的外键。

每个ConstructorEmployee可以在几个Projects. 我需要创建一个触发器,如果项目已被删除,我需要删除所有ConstructorEmployee 该工作在这个项目上。我需要从ConstructorEmployee表中删除它们。

我正在研究 SQL Server 2017。

trigger sql-server sql-server-2017

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

关于sp_BlitzIndex的几个问题

当 sp_BlitzIndex 做索引建议时,我脑子里的问题如下:

是的,建议的索引在执行 select 语句时会带来很多速度优势。但是这些索引还有另一个成本,即删除、插入、更新查询

sp_BlitzIndex 脚本是否也考虑了删除、插入、更新成本?还是仅评估 select 语句会带来多少速度优势?

此外,我如何通过 sp_BlitzIndex 列出坏索引?他们是如何确定坏的?

非常感谢您的回答

sql-server sp-blitzindex sql-server-2017

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

为什么我无法创建此可用性组?(错误 35220)

我试图在 SQL Server 2017 实例上创建可用性组,但遇到错误 35220:

无法处理该操作。Always On 可用性组副本管理器正在等待主机启动 Windows Server 故障转移群集 (WSFC) 群集并加入它。要么本地计算机不是集群节点,要么本地集群节点不在线。如果计算机是集群节点,则等待其加入集群。如果计算机不是群集节点,请将计算机添加到 WSFC 群集。然后,重试该操作。

我被难住了,因为主机绝对是 WSFC 的一部分,并且节点在线。我最终在一篇专注于多子网可用性组的博客中找到了答案,我之前没有看过,因为我的不是多子网。

因此,我在这里发布这个是为了更好地了解解决方案,以防其他一些糟糕的 DBA 像我一样被难倒。我将在下面发布解决方案。

sql-server clustering availability-groups sql-server-2017

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

将任意 GUID 插入 [uniqueidentifier] 列是否需要“SET IDENTITY_INSERT”?

SQL Server 2016 和 2017 标准版

我需要将原始数据(来自另一个表)插入有两uniqueidentifier列的表中。

这是否需要我使用SET IDENTITY_INSERT Carrier ON

这是表:

SET ANSI_NULLS ON

SET QUOTED_IDENTIFIER ON

CREATE TABLE [dbo].[Parkingspace](
    [ParkingspaceId] [uniqueidentifier] NOT NULL,
    [AccountId] [uniqueidentifier] NULL,
    [ParkingspaceType] [smallint] NULL,
 CONSTRAINT [PK_ParkingspaceId] PRIMARY KEY CLUSTERED 
(
    [ParkingspaceId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

如果没有IDENTITY_INSERT选项,以下内容是否有效?(我认为应该,但这里的 DBA 非常喜欢这个IDENTITY_INSERT选项。)

INSERT INTO Parkingspace 
  (ParkingspaceID,AcountID,ParkingspaceType) …
Run Code Online (Sandbox Code Playgroud)

sql-server uniqueidentifier identity sql-server-2016 sql-server-2017

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

计算每行的总“行上”字节......简单的方法

我们要计算表中每一行的总“行上”存储字节数。正如我们所理解的,我们必须将每一列的 DATALENGTH() 相加,同时还要考虑 NULL 和诸如 VARCHAR(MAX) 之类的东西,它们在“行”上只有一个 24 字节的指针。我们知道每一行也有一些开销,这在下面的查询中没有考虑。

SELECT   ROW_ID,

         CASE
              WHEN COLUMNPROPERTY(OBJECT_ID('EXAMPLE_TABLE'),'COL1','PRECISION') = -1 THEN 24
              ELSE ISNULL(DATALENGTH(COL1), 1)
         END
          +
         CASE
              WHEN COLUMNPROPERTY(OBJECT_ID('EXAMPLE_TABLE'),'COL2','PRECISION') = -1 THEN 24
              ELSE ISNULL(DATALENGTH(COL2), 1)
         END
          +
         CASE
              WHEN COLUMNPROPERTY(OBJECT_ID('EXAMPLE_TABLE'),'COL3','PRECISION') = -1 THEN 24
              ELSE ISNULL(DATALENGTH(COL3), 1)
         END
          +
         ...
         ...
         AS ROW_SIZE

FROM     EXAMPLE_TABLE

ORDER BY ROW_SIZE DESC
;
Run Code Online (Sandbox Code Playgroud)

多么野兽!而且这只是一个近似值。

然后我们发现

DBCC SHOWCONTIG ('EXAMPLE_TABLE') WITH TABLERESULTS
Run Code Online (Sandbox Code Playgroud)

返回最大记录大小。这表明 SQL Server 中已经有一个算法可以计算行的确切大小。

我们如何直接访问该算法?

sql-server storage dbcc size sql-server-2017

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

为什么我的使用简单恢复模式的数据库有这么大的事务日志?

不重复:

原因:我的日志不大,但是是空的。它很大,但正在使用中。


问题

我有一个小型数据库 (100 MB),它全天都会受到大量小型事务性工作负载的影响。尽管我似乎了解如何限制它,但我已经看到事务日志继续增长。显然我错过了一些东西。

  • 数据库处于简单恢复模式(我不能保证它在第一次创建时没有处于完全状态,但它从未处于完全负载状态)。

  • DBCC SQLPERF(Logspace) 说:

| Log Size (MB) | Log Space Used (%) | Status
--------------------------------------------
| 927.2422      | 94.72562           | 0
Run Code Online (Sandbox Code Playgroud)
  • DBCC LOGINFO 说:

有39行(VLF)进行,所有这些都具有Status2

  • DBCC opentran 说:

最旧的活动事务:
SPID:51
名称:user_transaction
开始时间:2019 年 3 月 11 日晚上 7:27

注意:鉴于我的服务器时间,此事务大约有五分钟的历史。


我不明白为什么当我的应用程序只创建 - 最多 - 大约六个短期交易时,每个 VLF 都在使用中,尽管非常频繁。

我尝试终止连接到该数据库的唯一应用程序进程,但它没有释放事务日志。

解决方法

我做了一个完整备份只是为了解决这个问题,它释放了整个日志空间......所以......我不知道。我得看看它是否会再次过度生长。

sql-server transaction-log recovery-model sql-server-2017

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

我怎样才能使这个执行计划更有效率?

我已经计算出所有隐式转换,但我仍然在计划中看到它的提及。我已附上该计划,任何建议都会有所帮助。

select cardholder_index, sum(value) as [RxCost] 
into #rxCosts 
from RiskPredictionStatistics with (nolock) where model_name = 'prescription_cost_12_months'
 and model_set_name = 'rx_updated' and run_id in (select value from #runIds) 
 and exists (select 1 from StringContainsHelper with (nolock) where IntValue = cardholder_index and ReferenceId = @stringContainsHelperRefId)
group by cardholder_index
Run Code Online (Sandbox Code Playgroud)

https://www.brentozar.com/pastetheplan/?id=SyHl9xFeS

sql-server execution-plan type-conversion sql-server-2017

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

为什么 sp_replmonitorhelpsubscription 在没有参数的情况下不起作用?

我刚刚开始使用所有很酷的复制工具来以编程方式监控复制

早期发现之一是sp_replmonitorhelpsubscription

当我运行它时

 sp_replmonitorhelpsubscription
Run Code Online (Sandbox Code Playgroud)

我得到

消息 20587,级别 16,状态 1,过程 sp_replmonitorhelpsubscription,第 77 行 [批处理开始第 16 行]

存储过程“sp_replmonitorhelpsubscription”的“@publication_type”值无效。

根据 MS 文档,它应该是有效的,默认值为空

NULL(默认)

如果我用参数运行它,它工作正常。

sp_replmonitorhelpsubscription  @publication_type = '0' 
Run Code Online (Sandbox Code Playgroud)

我将它与事务复制一起使用,在单个服务器(报告副本)上我已经尝试过,并且在 SQL 2017 和 2016 上得到了相同的结果。我正在针对分发数据库运行它

不确定我是否在做一些愚蠢的事情,如果 MS 文档有误,或者什么。

为什么 sp_replmonitorhelpsubscription 在没有参数的情况下不起作用?

sql-server transactional-replication sql-server-2017

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