小编Ale*_*sko的帖子

可用性组 - 强制故障转移后丢失了多少数据

让我们考虑在异步复制中有两个节点的 SQL Server AlwaysOn 群集。
有没有办法计算强制故障转移后丢失了多少数据?

我的意思是在时间方面,能够知道“我丢失了 1 小时的数据或 1 分钟”。我考虑过检查 LSN,但我不知道如何将它们转换为日期时间。

sql-server clustering failover high-availability availability-groups

5
推荐指数
1
解决办法
401
查看次数

在 SQL Server 中将堆更改为聚簇表时会发生什么?

据我了解,堆是一个无序的对象。当您插入一条记录时,SQL Server 使用 IAM 页获取属于该堆的页,并使用 PFS 页查找具有足够空间容纳该记录并插入其中的特定页。

当您在其上创建聚簇索引时,它就变成了一个聚簇表,而聚簇索引本身就变成了表。但是由于聚集索引和原始堆是两种不同的结构,SQL Server 是否会创建一个新结构(聚集索引)并将所有内容从帮助移动到新结构然后删除堆?

有很多东西可以在表上定义,比如触发器、约束、权限等。如果我的假设是真的,那意味着 SQL Server 也将所有这些东西移动到新结构中。我在文档中没有找到任何相关信息。我的理解正确吗?

sql-server clustered-index heap

5
推荐指数
1
解决办法
449
查看次数

SQL Server 登录触发器的影响 - 在我的场景中是否有任何副作用?

我团队中的一些开发人员知道具有扩展权限的 SQL 帐户的密码
我们希望在任何开发人员使用任何这些 SQL 帐户进行连接时进行跟踪并收到警报

我们即将logon trigger为每次登录尝试实施该功能,评估登录的属性,并在符合特定条件时发送电子邮件报告。逻辑如下:

如果 original_login() 在(...此处列出 SQL 帐户...)并且:
a) 客户端 IP 地址是 192.168.xx VPN 子网(没有从该子网连接的生产应用程序,只有开发人员可以)或
b) 客户端主机名在(... Dev 的主机名称列表...)或
c)(SSMS、az-Data 等)中的客户端应用程序名称
exec sp_send_dbmail(通过电子邮件向 DBA 发送报告)

触发器将具有“execute as”子句并代表唯一权限是发送数据库邮件电子邮件的 SQL 登录名运行

在 Production 上启用这种登录触发器会产生什么不良副作用?
它会减慢登录过程或导致任何其他问题吗?

ps 我知道DAC以及如何使用它。
测试连接使用DAC并依靠它来帮助我在出现任何问题时禁用触发器

sql-server database-mail logins sql-server-2017 logon-trigger

5
推荐指数
1
解决办法
369
查看次数

查询无限期运行 - 根本原因是什么?(不问如何修复)

我有一个带有分组的简单查询,运行良好,直到我添加了另一个连接:

select 
   [ca].Value,
   [c].cID, 
   [c].Name

from ReportingDB..Table1 [t1]

join MainDB..Companies [c] on
    [t1].CompanyID = [c].cID
    and [c].cID not in (1)

join MainDB..CompanyAttributes [ca] on -- this is the join that causes trouble
    [t1].CompanyID = caCID
    and caAttr = 26

group by [ca].Value, [c].cID, [c].Name
Run Code Online (Sandbox Code Playgroud)

信息:

Companies 表是一个“查找”表,有 2254 行,cIDPK与表
CompanyAttributes有多对一关系Companies,有 4055 行
Table1,与表有多对一关系Companies,有 3,485,150 行,

估计的执行计划看起来并不异常。

  • 当我尝试运行查询时,它没有完成,1 小时后我停止它,因此无法看到实际执行计划发生了什么
  • 实时查询统计数据使我的 SSMS 挂起
  • 如果删除“group by”子句,它会很快开始毫无问题地获取行。或者当最后一个连接被删除时,它也可以正常工作 - 通过分组
  • 服务器不忙,有足够的资源,并且启动查询时我没有看到明显的 CPU 上升
  • 查看sys.dm_exec_requests,对于运行查询的会话,wait_type …

sql-server sql-server-2017 query-performance

5
推荐指数
1
解决办法
964
查看次数

DBCC CLONEDATABASE 与用户定义的表类型冲突

我正在使用 DBCC CLONEDATABASE 创建没有数据的数据库副本。有许多数据库无法克隆。错误信息是:

无法在具有唯一索引“clst”的对象“sys.sysschobjs”中插入重复的键行。重复的键值为 (565577053)。

它始终是三个 ID 之一:245575913、565577053、885578193。这三个 ID 始终是克隆失败的数据库中用户定义表类型的 object_id。我的大多数数据库都有用户定义的表类型,但有些会克隆,有些则不会。在模型数据库中,其中两个 ID 与内部表sys.plan_persist_context_settings&相关sys.plan_persist_query_hints。第三个在 model.sys.objects 中不匹配。

我见过其他博客提到删除模型中的对象。模型数据库没有任何用户代码,我在使用 DAC 登录时无法删除这些内部表。数据库最初是在 SQL Server 2016 Std 中创建的,实例已升级到 2019 Std CU17。数据库也恢复到沙盒服务器 2019 Std CU17。这就是克隆失败的地方。在升级之前(生产和沙箱一起升级),只有 2 个数据库无法克隆,我现在有 10 个!

不确定它是否相关,但 sys.table_types 中的表类型是 dbo.TableType,与 type_table_object_id 匹配。在 sys.objects 中,它是 sys.TT_TableType_34C8D9D1,is_ms_shipped 设置为 1。它们被创建为 dbo.TableType。

任何帮助表示赞赏

sql-server dbcc

5
推荐指数
1
解决办法
314
查看次数

安装 SQL Server 数据库引擎服务实例功能时出错 - 注册表中的用户日志目录无效

我们有一个 SQL Server:

Microsoft SQL Server 2017 (RTM-CU14-GDR) (KB4494352) - 14.0.3103.1 (X64) 2019 年 3 月 22 日 22:33:11 Windows Server 2016 Datacenter 10.0 上的企业版(64 位)(内部版本 14393:)(虚拟机管理程序)

尝试安装“SQL Server 2017 累积更新包 18 - KB4527377” https://www.microsoft.com/en-us/download/details.aspx?id=56128

安装程序做了 15 分钟的事情,安装和更新文件,停止/启动服务,看起来会成功,但最后它显示:

需要采取的行动:

使用以下信息解决错误,然后再次尝试安装过程。

功能失败原因:

该功能的设置过程中发生错误。

错误详情:

安装 SQL Server 数据库引擎服务实例功能时出错
注册表中的用户日志目录无效。
验证实例配置单元下的 DefaultLog 键是否指向有效目录。
错误代码:0x851A0044 访问https://go.microsoft.com/fwlink?LinkId=20476&ProdName=Microsoft+SQL+Server&EvtSrc=setup.rll&EvtID=50000&ProdVer=14.0.3257.3&EvtType=0xD8FB5EBA%400x97A656BB%401306%4068&E vtType=0xD8FB5EBA%400x97A656BB% 401306%4068获取故障排除帮助。

SQL Server 2017 CU18 更新失败

是什么阻止了 CU18 安装?

patching sql-server-2017 cumulative-update

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

ALTER INDEX REORGANIZE - 问题

我有几个表的索引高度碎片化(超过 90% 碎片化)并且大小足够大(数十 GB)
对这些表进行碎片整理的目标是减少上述表的空间消耗

我想避免执行 REBUILD 操作,因为它太资源密集
还试图避免记录到事务日志和日志增长,以及大事务日志备份大小作为结果

这就是为什么选择 REORGANIZE 操作而不是 REBUILD 来处理高碎片化
关于 REORGANIZE,有以下问题:

  1. 如果同时在单独的索引上运行多个 REORGANIZE 操作(比如 10+,在单独的 SSMS 窗口/会话中) - 是否会导致数据损坏或任何其他已知问题?

  2. REORGANIZE 操作是否以任何方式/根本没有记录到事务日志中?

  3. REORGANIZE 持有什么样的锁?哪些查询会受到影响?

sql-server sql-server-2017 alter-index reorganize-index

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

是否可以记录从本地 SQL 服务器到 Azure SQL 托管实例的传送?

从文档来看,似乎可以恢复完整的数据库备份文件,但也可以恢复事务日志吗?

(这个想法是尽量减少从本地迁移到 MI 过程中的停机时间)。

谢谢。

sql-server azure-sql-managed-instance

3
推荐指数
2
解决办法
5465
查看次数

SQL Server - 在大堆中创建聚集索引 - 我应该添加一列吗?

我将向一个相当大的表添加一个聚集索引:

  • 超过 700 万条记录
  • 106列
  • 没有PK
  • 没有其他索引。

有一Id列可能用于索引键,但它是nvarchar(18)not unique(尽管那里没有重复值)。

但是我不愿意使用它,因为它的数据类型(性能影响)并且一直在考虑添加一int identity(1,1)列并将其用作聚集索引键。

您更愿意推荐哪种解决方案?TIA

sql-server clustered-index

3
推荐指数
2
解决办法
144
查看次数

SQL Server 中不等于运算符不返回 NULL 值

我有以下查询,我正在查找该列不等于 1 的任何行istrue。但结果只包含 0 的记录,忽略 null 的记录。虽然我知道使用(istrue != 1 or istrue is null)会产生预期的结果,但我很好奇导致 SQL Server 排除 null 值的底层机制。您能否提供对此行为的见解?谢谢!

create table #test
(
id int,
val varchar(100),
istrue bit
)

insert into #test values 
(1, 'test-1', 1),
(2, 'test-2', 0),
(3, 'test-3', 1),
(4, 'test-4', 0),
(5, 'test-5', null),
(6, 'test-6', null)

select * from #test
where istrue != 1

drop table if exists #test
Run Code Online (Sandbox Code Playgroud)

null sql-server query

3
推荐指数
3
解决办法
2173
查看次数