我在 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 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...
我有这 3 个表:
构造函数员工
EID (员工 ID)作为主键和其他键。项目
PID 作为主键和其他键。项目建设者员工
PID并EID作为其他表的外键。每个ConstructorEmployee可以在几个Projects. 我需要创建一个触发器,如果项目已被删除,我需要删除所有ConstructorEmployee 该工作仅在这个项目上。我需要从ConstructorEmployee表中删除它们。
我正在研究 SQL Server 2017。
当 sp_BlitzIndex 做索引建议时,我脑子里的问题如下:
是的,建议的索引在执行 select 语句时会带来很多速度优势。但是这些索引还有另一个成本,即删除、插入、更新查询
sp_BlitzIndex 脚本是否也考虑了删除、插入、更新成本?还是仅评估 select 语句会带来多少速度优势?
此外,我如何通过 sp_BlitzIndex 列出坏索引?他们是如何确定坏的?
非常感谢您的回答
我试图在 SQL Server 2017 实例上创建可用性组,但遇到错误 35220:
无法处理该操作。Always On 可用性组副本管理器正在等待主机启动 Windows Server 故障转移群集 (WSFC) 群集并加入它。要么本地计算机不是集群节点,要么本地集群节点不在线。如果计算机是集群节点,则等待其加入集群。如果计算机不是群集节点,请将计算机添加到 WSFC 群集。然后,重试该操作。
我被难住了,因为主机绝对是 WSFC 的一部分,并且节点在线。我最终在一篇专注于多子网可用性组的博客中找到了答案,我之前没有看过,因为我的不是多子网。
因此,我在这里发布这个是为了更好地了解解决方案,以防其他一些糟糕的 DBA 像我一样被难倒。我将在下面发布解决方案。
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
我们要计算表中每一行的总“行上”存储字节数。正如我们所理解的,我们必须将每一列的 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 中已经有一个算法可以计算行的确切大小。
我们如何直接访问该算法?
不重复:
原因:我的日志不大,但是是空的。它很大,但正在使用中。
我有一个小型数据库 (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)进行,所有这些都具有Status的2。
DBCC opentran 说:最旧的活动事务:
SPID:51
名称:user_transaction
开始时间:2019 年 3 月 11 日晚上 7:27
注意:鉴于我的服务器时间,此事务大约有五分钟的历史。
我不明白为什么当我的应用程序只创建 - 最多 - 大约六个短期交易时,每个 VLF 都在使用中,尽管非常频繁。
我尝试终止连接到该数据库的唯一应用程序进程,但它没有释放事务日志。
我做了一个完整备份只是为了解决这个问题,它释放了整个日志空间......所以......我不知道。我得看看它是否会再次过度生长。
我已经计算出所有隐式转换,但我仍然在计划中看到它的提及。我已附上该计划,任何建议都会有所帮助。
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)
我刚刚开始使用所有很酷的复制工具来以编程方式监控复制
早期发现之一是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 ×10
sql-server-2017 ×10
clustering ×1
dbcc ×1
identity ×1
size ×1
ssms ×1
storage ×1
trigger ×1