标签: sql-server-2016

无法在默认端口上建立 DAC 连接。确保 DAC 已启用

当我登录到 Sql-Server 操作系统的远程桌面时,无法使用 SSMS 建立本地DAC 连接。第一个原因是 SQL 浏览器服务关闭。后来,我被指出的第二个原因是“DAC 未激活”错误:

“无法在默认端口上建立 DAC 连接。请确保 DAC 已启用”。

我寻找解决方案。我发现的建议解决方案是启用“RemoteDacEnabled”Facet 属性或运行

sp_configure 'remote admin connections', 1 
Run Code Online (Sandbox Code Playgroud)

这让我想知道,为什么我应该启用REMOTE DacEnabled 属性,以防我想从本地系统连接?我这里的 REMOTE 是不是错了?

MSDN 解释说

"The connection is only allowed from a client running on the server. No network connections are permitted."

If I HAVE TO logon from local server and NOT over the network, what sense does a REMOTE DAC setting ever make?

EDIT/part of the answer: The main reason …

sql-server ssms connections sql-server-2016 dac

0
推荐指数
1
解决办法
1721
查看次数

是否可以从磁盘表中实现最少记录的读取

我的代码使用将 SQL Server SPID 与 CompanyID 链接起来的表。例如

Spid|CompanyID
1   | 123
2   | 412
Run Code Online (Sandbox Code Playgroud)

每次请求到达数据库时,请求首先检查此表以获取当前用户的公司 ID,如果没有,则将其插入。

自然,这是一个非常高的流量表。我当前的实现是在内存 OLTP 中使用 SQL Server 2016 使用非持久内存表。但是,我们发现了一个与内存压力有关的错误(msft 目前正在研究它),需要远离此实现。

该表在任何给定时间仅包含约 300 条记录,并且用户很少写入该表。但每秒可能有数百次读取。

我们现在将不得不移回磁盘表,并且我不想将任何内容记录到事务日志中以读取该表。有没有办法不将任何内容记录到事务日志或最少记录到事务日志?

我查看了全局临时表,还使用了 TABLOCK 和 Minimally Logging 关键字,但这些似乎都只与高流量写入有关。

有没有办法在这里完成我想要的?

performance sql-server sql-server-2016

0
推荐指数
1
解决办法
30
查看次数

如何在大量数据库中删除过程 (SQL Server 2016)

我有一个简单的过程,存在于 150 多个数据库中。我可以将它们一一删除,这是软件开发界最愚蠢的工作。或者我可以以某种方式在一个查询中动态删除它们,这很聪明但不起作用。

我试过了:

execute sp_msforeachdb 'drop procedure Usages'
Run Code Online (Sandbox Code Playgroud)

我有:

无法删除过程“用法”,因为它不存在或您没有权限。

所以我想也许我为它创建了一个游标。于是我写道:

declare @command nvarchar(max) = '
drop procedure Usages
';
declare @databaseName nvarchar(100)
declare databasesCursor cursor for select [name] from sys.databases where database_id > 5
open databasesCursor
fetch next from databasesCursor into @databaseName
while @@fetch_status = 0
begin
    print @databaseName
    execute sp_executesql @command
    fetch next from databasesCursor into @databaseName
end
close databasesCursor
deallocate databasesCursor
Run Code Online (Sandbox Code Playgroud)

再次,我收到了同样的消息。我想,也许它不会改变数据库的上下文,因此我在删除命令前面加上了给定数据库的名称,所以命令会变得类似于drop procedure [SomeDatabase].dbo.Usages,但后来我收到了:

“DROP PROCEDURE”不允许将数据库名称指定为对象名称的前缀。

所以,我想出动态执行,use @databaseName以便我可以在该数据库的上下文中删除过程。但它不起作用。我该怎么办?我被困在聪明的方法上,而且我现在比愚蠢的方法花费的时间更多。

sql-server stored-procedures cursors sql-server-2016

0
推荐指数
1
解决办法
350
查看次数

触发器在高度事务性的表上是否开始降低性能(或有时会失败)?

SQL Server 表触发器每秒可以处理多少事务?如果我有一个每秒插入 1,000 次的高度事务性表,该表上的插入触发器是否可靠地每次触发?

trigger sql-server sql-server-2016

0
推荐指数
1
解决办法
88
查看次数

差异备份与完整备份的大小相同

我有一个几乎 2 TB 大小的 SQL Server 数据库,它有带有图像数据类型的表。现在差异备份的大小与完整备份的大小相同。图像数据类型对此有什么影响吗?或者我错过了什么。

sql-server backup sql-server-2012 sql-server-2016

0
推荐指数
1
解决办法
373
查看次数

什么导致sql server为存储过程生成新计划?

我们已经在生产中遇到了几次问题,它看起来像一个存储过程获得了一个新的、糟糕的计划并开始造成严重破坏。不幸的是,在执行 dbcc freeproccache 之前,我们无法捕获之前和之后的计划以查看不良计划的情况,我们也没有设置查询存储。

我的问题是,什么会导致 sql server 为存储过程生成新计划?特别是对于一直运行的 sp。我知道的一些是:

  • dbcc freeproccache
  • 重新启动服务器
  • 选项重新编译

sql-server execution-plan sql-server-2016

0
推荐指数
1
解决办法
137
查看次数

ISOLATION LEVEL READ UNCOMMITTED 会影响删除吗?

我有一个特殊的情况让我使用SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED. (我sp_getapplock用来确保单个进程访问给定的行。)

我正在尽力避免任何类型的锁定升级。我清楚地知道ISOLATION LEVEL READ UNCOMMITTED读取有什么作用,但我不确定删除。

我看到用做删除一些示例代码ROWLOCKREADPAST,连同ISOLATION LEVEL READ UNCOMMITTED但我是没有什么,会做明确的,所以我也没有一直在使用它了。

这是否需要防止我的删除锁定升级或就ISOLATION LEVEL READ UNCOMMITTED足够了?

注意:
如果有兴趣,这里这里是这个问题的相关 sprocs。

sql-server locking isolation-level sql-server-2016

0
推荐指数
1
解决办法
483
查看次数

在子查询中生成随机行顺序

我知道这里(和这里)的其他答案说要订购newid()。但是,如果我top 1在子查询中进行选择- 以便在外部查询中的每行生成随机选择 - 每次使用都会newid()产生相同的结果。

那是:

select *,
    (select top 1 [value] from lookupTable where [code] = 'TEST' order by newid())
from myTable
Run Code Online (Sandbox Code Playgroud)

...lookupTable.value在从 返回的每一行上产生相同的值myTable

我正在尝试从lookupTable. 那个表只有几行。在现实世界中,我想要update myTable set someColumn = ......一个随机lookupTable.value值,这样每一行都myTable设置了一个随机值,而不是生成一个随机值并将其分配给所有行。

sql-server random sql-server-2016

0
推荐指数
1
解决办法
383
查看次数

如何缩小大型 LDF

我有一个带有 100Gb MDF 和 4Gb LDF 的 SQL2016 DB 的客户端。数据库设置为简单。我无法将 LDF 缩小到最低限度。如何将 LDF 缩小到正常水平?

此设置和文件大小是否会影响性能?

performance sql-server shrink sql-server-2016

0
推荐指数
1
解决办法
546
查看次数

DBCC CHECKDB 和 DBCC CHECKTABLE 在表级完整性检查上有什么具体区别吗?

我在其中一个数据库上运行 DBCC CHECKDB 时遇到了分配错误。它抛出以下错误:

消息 8947,级别 16,状态 1,第 5 行表错误:对象 ID 1277199566、索引 ID 1、分区 ID 720577176766669456、分配单元 ID 720577087666647328 的多个 IAM 页(类型 LOB 数据)包含间隔。IAM 页面 (1:425664) 和 (1:1422669)。

CHECKDB 在表“schemaName.tableName”(对象 ID 1277199566)中发现 1 个分配错误和 0 个一致性错误。CHECKDB 在数据库“databaseName”中发现 1 个分配错误和 0 个一致性错误。

奇怪的是,当我尝试在该表上运行 DBCC CHECKTABLE 时,它没有显示任何错误。此外,我尝试运行 CHECKTABLE WITH EXTENDED_LOGICAL_CHECKS 选项,但没有出现任何错误。

根据 Microsoft 文档:

要对数据库中的每个表执行 DBCC CHECKTABLE,请使用 DBCC CHECKDB。

对于指定的表,DBCC CHECKTABLE 检查以下内容:

  • 索引、行内、LOB 和行溢出数据页正确链接。
  • 索引按正确的排序顺序排列。
  • 指针是一致的。
  • 每页数据合理,包括计算列。
  • 页面偏移是合理的。
  • 基表中的每一行在每个非聚集索引中都有一个匹配的行,反之亦然。
  • 分区表或索引中的每一行都在正确的分区中。
  • 使用 FILESTREAM 在文件系统中存储 varbinary(max) 数据时文件系统和表之间的链接级一致性

但正如我所看到的,相反的情况并非如此。我们不能只对一张表运行 CHECKTABLE 并为同一张表获得相同的结果。

在检查特定对象的完整性和一致性方面,是否有人拥有与这两个命令之间的差异相关的信息?

sql-server dbcc-checkdb sql-server-2016 dbcc-checktable

0
推荐指数
1
解决办法
34
查看次数