标签: sql-server-2016

配置 SQL Server 2016 以允许远程连接

我在 Windows Server 2016 Core 上安装了 SQL Server 2016。在本地,它似乎有效。我可以连接使用SQLCMD.exe并做一些基本的选择,什么不是。

从远程,我无法连接。使用SQLCMD.exe远程计算机上:

sqlcmd -S boldiq_db3
Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Named Pipes 
    Provider: Could not open a connection to SQL Server [53]. .
Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Login timeout 
    expired.
Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : A network-related
    or instance-specific error has occurred while establishing a connection 
    to SQL Server. Server is not found or not …
Run Code Online (Sandbox Code Playgroud)

sql-server windows-server sql-server-2016

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

sp_who2 中的 SPID 有很多行是什么意思

sp_who2 active在盒子上运行并为每个 SPID 获取多行。例如,见下文。这是否意味着 SQL Server 已将查询分解为 23 个并行子查询?如果是这样,为什么它会忽略 MaxDegreeOfParallelism 设置 8?或者这是别的什么?

在此处输入图片说明

sql-server sql-server-2016

7
推荐指数
1
解决办法
2193
查看次数

异步副本上的 SQL Server 2016 AlwaysOn DBCC CHECKDB

我们有一个 AlwaysOn 环境,其中包括我们 DR 站点中的一个副本,该副本设置为异步提交和可读辅助 = 否。

当我们在 SQL Server 2014 SP2 上运行时,我们能够针对 DR 副本上的数据库运行 DBCC CHECKDB。但是自从升级到 SQL Server 2016 后,我们就无法升级,而且我们的每周完整性作业因错误而失败。

'The target database is participating in an availability group and is currently not accessible for queries.
Either data movement is suspended or the availability replica is not enabled for read access. 
To allow read-only access to this and other databases in the availability group, enable read access to one or more secondary availability replicas in the group.  For more …
Run Code Online (Sandbox Code Playgroud)

sql-server availability-groups dbcc-checkdb sql-server-2016

7
推荐指数
2
解决办法
1766
查看次数

每个分区/文件组有多个文件?

我正在为高性能大型 SQL Server 2016 数据库设计基于分区的解决方案。一些数据每天将有数亿条记录。在白天,我们还将运行报告查询和查询以寻找多天和多周的趋势。

我当前的解决方案将在每日分区中使用 70 天,每个分区使用一个专用文件组。数据超过 70 天标记后,它将进入每周分区,持续 42 周,每个分区也使用专用文件组,然后是 12 个月,然后是 6 年,所有这些都以相同的方式设置。

我们需要真正的高性能和大规模扩展能力(PB+ 范围)。为了最大限度地减少返工,我正在考虑为每日和每周文件组/分区使用每个文件组/分区的多个文件。确切地说,每天 4 次,每周 2 次。

通过这种方式,我们可以潜在地增加每个分区的读取/加载吞吐量,以及增加分区的最大容量(不要问为什么,但我们担心在某些日子实际上需要该级别的容量)。

有没有人这样做过,你的结果是什么?除了管理开销之外,还有什么理由不这样做吗?

所有每周、每月和每年的分区都将位于同一服务器上的同一数据库中(应用程序设计问题,但如果动机适当,多数据库可能是一种选择。多个服务器或实例是不可取的)。

目前正在讨论和评估分区中断。我根据收到的有关查询模式的信息选择了上述值。不同的天数当然是可能的,但我有点喜欢 10 周的每日分区。

我们确实有一个非常高端的数据中心,实际上是 2。我们正在讨论购买特定于该平台和其他平台的融合解决方案。我个人希望看到专用的 AFA(全闪存阵列),但在我得到这些之前,还有一些桥梁需要跨越。

我知道Data Warehouse Fast Track解决方案,但它们对我们不起作用。一方面,我们将主要进行 OLTP,因此基准数据将不能代表我们将得到的结果。其次,它们的规模不够大(目前)。来自参考架构的一些元素当然会被使用,但“交钥匙”SKU 将不是一种选择。我是前 MS PFE,所以这些资源是我首先查看的资源。

sql-server partitioning sql-server-2016

7
推荐指数
1
解决办法
810
查看次数

升级 SQL Server 2016 R 服务(数据库内)

我只是想知道这是否可行。我已经安装了 R 服务(数据库内)和 SQL Server 2016(在 SP1+ CU1 打补丁)。

我注意到 R 服务版本是 3.2.2,您可以运行以下脚本来检查

declare @v varchar(100);
exec sp_execute_external_script @language=N'R'
, @script = N'v <- toString(getRversion())'
, @params = N'@v varchar(100) output'
, @v = @v out;

print @v;

-- returns 3.2.2
Run Code Online (Sandbox Code Playgroud)

但我也安装了 Microsoft R 客户端,并注意到它的 R 服务引擎版本为:3. 3 .2。

所以我的问题是“不SQL Server R的服务(在数据库)现在支持研究第3版3 0.2?” 如果是这样,我该如何升级它?如果没有,我想我会等到 MS 发布更新。

我阅读了MSDN,并在其中提到使用sqlBindR.exe来进行更新,但是此工具仅适用于我没有安装的 Windows R 服务器,我什至怀疑如果我安装了它,它是否会更新数据库内R服务。

sql-server upgrade sql-server-2016 r

7
推荐指数
1
解决办法
2851
查看次数

SQL Server 检测到基于逻辑一致性的 I/O 错误:RESTORE 上的 pageid 不正确

将我们的数据库恢复到新的服务器硬件失败,出现页面错误。

Message
SQL Server detected a logical consistency-based I/O error: 
incorrect pageid (expected 49:8125916; actual 49:29097436).
It occurred during a read of page (49:8125916) in database ID 7 at
offset 0x00000f7fbb8000 in file x:\Databases\Data07\DataWarehouse_OperationalData_15.ndf'.
Additional messages in the SQL Server error log or system event
log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately.
Complete a full database consistency check (DBCC CHECKDB). 
This error can be caused by many …
Run Code Online (Sandbox Code Playgroud)

sql-server restore dbcc-checkdb sql-server-2016

7
推荐指数
1
解决办法
5640
查看次数

“空”更新是否会创建等量的事务日志?

问题:在 SQL Server 2016 中,将列更新为相同的值(例如将列从'john'to更新'john')是否会产生与将列更新为不同值时相同数量的事务日志?阅读下文了解更多详情。

我们有几个 SQL 代理作业按计划运行。这些作业从源表(复制数据、链接服务器)中选择数据,对其进行转换,然后相应地插入/更新/删除本地目标表的行。

在试图找到实现这一目标的最佳方式时,我们经历了各种策略。我们试过了

  • 使用 MERGE 从源更新目标
  • 使用 UPDATE 从源更新目标以更新所有列
  • 使用每个目标列的单个 UPDATE 语句从源更新目标

现在,我只是一个初级 DBD,我对事务日志如何工作的理解非常有限。话虽如此,我的前辈已经得出结论,我们不能使用 MERGE 或 UPDATE 语句,其中所有列都在同一语句中处理,因为它会创建过多的日志记录。对此的论点是,当您UPDATE在 SQL Server 中执行 -语句时,当您设置列值并且新值等于旧值时,它仍会在事务日志中标记为更新。当您执行大量无意义的 SET 操作时,这显然会变得昂贵。

在以下示例中,我们使用源表中的值更新目标表的first_namelast_name,由 连接id

-- create source- and target-table
CREATE TABLE [#tgt] (
    [id] Int PRIMARY KEY,
    [first_name] NVarchar(10),
    [last_name] NVarchar(10)
)
CREATE TABLE [#src] (
    [id] Int PRIMARY KEY,
    [first_name] NVarchar(10),
    [last_name] NVarchar(10)
)

-- fill some dummy-data …
Run Code Online (Sandbox Code Playgroud)

sql-server transaction-log sql-server-2016

7
推荐指数
1
解决办法
296
查看次数

为什么 sys.dm_exec_query_profiles 返回的某些行有“???” 对于物理运营商名称?

SQL Server 2014 引入了sys.dm_exec_query_profiles DMV,它提供了一种监视执行查询的实时进度的方法。最近我在查看 SQL Server 2016 SP1 中的一个有点复杂的查询,并注意到它sys.dm_exec_query_profiles包含查询计划中不存在的额外节点。这些节点必须???physical_operator_name

???

对于查询的并行版本,只有一个隐藏节点。该节点有一个object_id与嵌套循环连接的内表相关联。根据node_id这里是节点应该出现的地方:

平行线 ???

运行查询会MAXDOP 1产生更多的隐藏节点。该???节点出现在与之前相同的位置:

序列 1 ???

还有一个新的没有出现在平行计划中:

系列 2 ???

这些似乎只出现在一些嵌套循环连接周围。我不记得在 SQL Server 2014 上看到过这种行为。不幸的是,查询很复杂,我无法上传匿名计划。

这里发生了什么?为什么sys.dm_exec_query_profiles报告没有显示在图形计划中的额外查询计划节点?

sql-server execution-plan sql-server-2016

7
推荐指数
1
解决办法
225
查看次数

为什么两个相同的字符串长度不同但二进制值相同?

我试图从表中返回一组不同的部门名称 - 没什么特别的。但是,使用以下查询时会显示重复项:

  select distinct department_name
    from dbo.departments;
Run Code Online (Sandbox Code Playgroud)

我也试过:

  select distinct department_name
    from dbo.departments
group by department_name;
Run Code Online (Sandbox Code Playgroud)

所以这让我相信我可能在值中隐藏了字符,果然,当我检查字符串的长度时,它们返回了不同的值。所以,我决定使用堆栈溢出这个问题中的函数来定位隐藏字符。奇怪的是,这只返回 SPACE。然后我尝试了以下查询,它根本没有区别:

select distinct ltrim(rtrim(department_name)) as department_name
  from dbo.departments;
Run Code Online (Sandbox Code Playgroud)

出于好奇,我将这些值转换为VARBINARY并注意到它们具有完全相同的二进制值,并且对二进制值执行 aDISTINCT确实会产生一个唯一的结果集。

我也尝试在VARCHARNVARCHAR和到不同的排序规则之间进行转换(值在同一列中,在使用 Latin1_General_CI_AI 的同一数据库中)。我真的需要能够从这张表中得到一个不同的集合。有谁知道可能导致这个问题的原因是什么?

更新

经过进一步调查,这个问题似乎只发生在以十六进制值结尾的字符串中0xA000。列中不以该字符结尾的任何值都可以。

更新 2

如果我0xA000从字符串中删除字符,我可以DISTINCT像这样正常应用:

DECLARE @binary VARBINARY(8) = 0xA000;
DECLARE @string VARCHAR(8) = CONVERT(VARCHAR(MAX), @binary);
 UPDATE dbo.departments
    SET department_name = REPLACE(department_name, @string, '');
Run Code Online (Sandbox Code Playgroud)

但这不会长期有效,因为用户可以更新此表,我需要调整每个查询以在WHERE子句中进行替换。我现在正在使用一种解决方法,它只不过是MIN用于返回长度最短的条目。这不太理想,因为 distinct 的问题也会影响大多数其他语言元素,例如GROUP BY …

sql-server collation distinct sql-server-2016

7
推荐指数
1
解决办法
1677
查看次数

更新时态表时出错

我已经在“订单”表上实现了系统版本化临时表。应用程序使用不同的访问模式来修改此表中的数据。有来自应用程序的直接语句,或者应用程序在显式事务中运行长批处理,其中对多个表进行了多次更改。“订单”表上的更新不是那些长批次中的第一条语句!因此,有时我们会面临以下错误。

系统版本化表“Orders”上的数据修改失败,因为事务时间早于受影响记录的期间开始时间。

显然,这是系统版本化临时表的标准行为。https://docs.microsoft.com/en-us/sql/relational-databases/tables/temporal-tables?view=sql-server-2017#how-does-temporal-work

这是总是需要在异常例程中处理的东西吗?还是微软正在考虑改变这种行为?

-- 模拟错误信息的脚本:

CREATE TABLE dbo.Orders 
    (    
      [OrderId] INT NOT NULL PRIMARY KEY CLUSTERED  
      , [OrderValue] DECIMAL(19,4)
      , [ValidFrom] DATETIME2 (2) GENERATED ALWAYS AS ROW START  
      , [ValidTo] DATETIME2 (2) GENERATED ALWAYS AS ROW END  
      , PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)  
     )    
     WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.OrdersHistory)); 
     GO

     INSERT dbo.Orders ([OrderId], [OrderValue])
     VALUES (1, 9.99), (2, 9.99);
     GO

     SELECT * FROM dbo.Orders;
     GO

       --Run first query
   BEGIN TRAN
      WAITFOR DELAY '00:00:15';
      UPDATE dbo.Orders 
      SET …
Run Code Online (Sandbox Code Playgroud)

sql-server temporal-tables sql-server-2016 sql-server-2017

7
推荐指数
1
解决办法
4739
查看次数