标签: sql-server-2016

SQL Server 版本决定的要素

我们将在新硬件/VM 上创建新的 Sql-Servers,并考虑使用哪个 Sql-Server 版本。我们实际上使用的是 Sql Server 2008 R2。我们已经完成了一个项目,用于测试 2008 年和 2014 年之间的所有兼容性问题 - 并修复了应用程序代码以及数据库架构中的所有问题,为 2014 年做好准备。

现在简单地忽略 2014 并直接进入 2016 的问题出现了。我们不确定。

我已经运行了 SQL 2016 升级顾问 - 它说“准备升级(2016)”并针对已弃用的 ntext、text 和 image 列提出了大约 500 条警告。

  • 到 2016 年而不是 2014 年有什么特别的额外缺点吗?
  • 是否有新的兼容性问题?AFAIKS 2016 年没有新的弃用尚未取代 2014 年......
  • 我们需要考虑什么?

sql-server upgrade sql-server-2014 sql-server-2016

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

将数据库附加到 SQL Server 2016,现在无法在 SQL Server 2014 中使用

我有一个 SQL Server 2014 数据库(在便携式硬盘上),我必须使用正常的附加方法将它附加到 SQL Server 2016 机器上。

但是,由于将它附加到该计算机,即使我没有更改兼容性级别或其他任何内容,它也不再适用于 SQL Server 2014 计算机。

我现在卡住了,因为 SQL Server 2016 无法在所有其他计算机上运行的 Windows 7 机器上运行。我只是碰巧将它附加在运行 Windows 10 和 SQL 2016 的笔记本电脑上,认为这不会有问题。

有什么办法可以扭转这种局面吗?我无法从管理工作室的错误屏幕中获得任何好的信息。

sql-server sql-server-2014 sql-server-2016

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

删除此表分区的最佳方法是什么?

我必须将 Sql Server 2008 R2 中的分区表更改为普通表,以使我的数据库与 Sql Server 2016 标准版兼容。

实际上该表有 5 个分区,行数如下:

> boundary, rows 
2009-01-01 00:00:00.000 419 
2010-01-01 00:00:00.000 386031 
2011-01-01 00:00:00.000 1307990 
2012-01-01 00:00:00.000 673183 
NULL                    9743057
Run Code Online (Sandbox Code Playgroud)

该表包含一个 BLOB(图像)列。该表的总大小约为 25 GB。

我已经通读了如何删除表分区的问题但尽管它已经回答,但没有被接受的答案,而且这些答案并没有完全解决我的问题。

我意识到了ALTER PARTITION FUNCTION MERGE RANGE命令,但我真的不明白会发生什么。数据是否会被合并到现有文件组之一,之后我仍然会有一个分区表?

我是否必须将所有数据复制到具有相同结构的新表中(可能需要很长时间......)?

我将不得不在停机期间执行此操作,因此我需要一个尽可能高效的程序。

sql-server partitioning sql-server-2016

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

如何在 SQL Server 2016 中设置自动增长?

如何在 SQL Server 2016 中设置自动增长值?数据库中通常的位置Properties -> Files不可用。

在此处输入图片说明

sql-server sql-server-2016

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

Get-MSSQLLinkPasswords Powershell 脚本在 SQL Server 2016 下似乎不起作用

我已经使用Get-MSSQLLinkPasswordsPowershell 脚本很长时间了,它提供了巨大的帮助。该脚本解密特定 Windows 服务器上所有链接服务器的密码,并以纯文本形式显示给您。此功能甚至已合并到dbatools Copy-SqlLinkedServer脚本中。

运行脚本有一些安全注意事项,如下所示

该脚本必须在 MSSQL 服务器上本地运行(因为 DPAPI 需要访问本地机器密钥)。执行脚本的用户还必须具有对所有数据库实例(用于 DAC 连接)的 sysadmin 访问权限和 Windows 服务器上的本地管理员权限(以访问注册表中的熵字节)。此外,如果启用了 UAC,则必须以管理员身份运行该脚本。

在最近升级到 SQL Server 2016 之前,此脚本一直运行良好。我想知道是否有人在 SQL Server 2016 下遇到过此脚本的任何问题。也许 SQL Server 2016 中的某些安全模型已更改,并且此脚本无法解密密码现在。

如果时间允许,我将尝试查看该dbatools Copy-SqlLinkedServer脚本是否仍然适用于 2016 年。

sql-server powershell linked-server sql-server-2016 dbatools

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

3 个节点的仲裁 AlwaysOn 可用性组

如果我要使用只读路由设置一个包含 3 个节点的 Alwayson 可用性组。我需要配置法定人数吗?

sql-server availability-groups sql-server-2016

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

未使用 SQL 指南计划?

我试图在一个简单的临时 SQL 查询上强制参数化。如本文中所述https://www.simple-talk.com/sql/performance/fixing-cache-bloat-problems-with-guide-plans-强制参数化/

但即使试图用最简单的查询来做到这一点,我也无法让它工作

CREATE TABLE fruit
(
 id BIGINT PRIMARY KEY(id)
,title VARCHAR(150)
)
INSERT INTO fruit VALUES ( 1, 'Apple') , ( 2, 'Banana'), ( 3, 'Orange'), ( 4, 'Pear')

DECLARE @params nvarchar(max);
DECLARE @stmt nvarchar(max);
EXEC sp_get_query_template N'SELECT title FROM fruit WHERE id = 4',@stmt OUTPUT, @params OUTPUT;

--SELECT @params
EXEC sp_create_plan_guide 
    N'fruitGuide', 
    @stmt, 
    N'TEMPLATE', 
    NULL, 
    @params, 
    N'OPTION(PARAMETERIZATION FORCED)';
GO

SELECT title FROM fruit WHERE id = 1
Run Code Online (Sandbox Code Playgroud)

计划 XML:

显示编译并且不使用计划指南,我在这里遗漏了什么吗?我哪里出错了?

<?xml version="1.0" encoding="utf-16"?>
<ShowPlanXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2016 plan-guides

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

SQL Server Management Studio 17.1 镜像错误

我注意到有一个错误,当人们询问它时,他们被发送到错误的方向(见下面的最后评论)。

尝试使用带有 SSMS 17.1 的 SQL Server 2016 创建镜像数据库时,可能会收到以下错误:

没有为数据库镜像配置数据库。
无法打开数据库 x。它正处于恢复过程中。

这个错误是一个真正的 PITA,我花了 2 周的时间搜索,因为我是 DBA 的新手,否则我会走脚本路径。

我认为这是 SSMS 17.1 中的一个错误,因为它适用于 SSMS 16.5.3。不幸的是,我花了很长时间才弄清楚真正的问题是管理工作室本身。17.1版本的界面比16.5.3版本好很多!

错误的建议和误导性的解决方案

主要是数据库镜像/hadr_endpointTCP://servername:port设置,NORECOVERY在许多情况下被遗忘的恢复,但在正确完成备份和恢复时并不是真正的问题。

sql-server ssms mirroring sql-server-2016

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

SQL Server 2016 SP1 CU3 清除计划缓存

每隔几分钟到大约一小时,进程缓存就会被刷新(但不是完全!)。如果我运行:

SELECT count (*) FROM sys.dm_exec_cached_plans
Run Code Online (Sandbox Code Playgroud)

……刚刚清零之后,计划的数量下降到几百个,然后逐渐增加到大约2000个,然后再次清零,依此类推。

服务器在 VMWare 上运行,它有128 GB的 RAM(SQL Server 最大服务器内存设置为102 GB,最小服务器内存设置为72 GB)。根据 SentryOne 的输出,我可以看到缓冲池消耗了~61 GB。我没有看到任何内存压力指标。

SentryOne SQL Server 内存使用情况

我还观察到,当我将最小服务器内存减少到 16 GB 时,进程缓存清除的频率急剧增加。

我的SQL Server版本如下:

Microsoft SQL Server 2016 (SP1-CU3) (KB4019916) - 13.0.4435.0 (X64)
Run Code Online (Sandbox Code Playgroud)

还有什么:

  • 我还没有尝试过 LPIM,因为它需要重新启动 SQL Server,但即使它是解决方案,我也很想了解为什么会发生这个问题。此外,Brent建议它仅在缓冲池修整的情况下有帮助。在我的情况下,缓冲池看起来完好无损,只有 proc 缓存受到影响。
  • 我没有找到任何可以对此负责的工作,也找不到任何真正的模式。
  • 如果有人发现这对修复/调查此问题有用,我可以访问 vCenter。但如果是这种情况,请您告诉我我应该在那里检查什么。

我怀疑 VMWare 可能在这里扮演了一些角色,但是当我检查来宾端可用的 perfmon 计数器时,我没有发现任何可疑的东西。

VM 内存性能计数器

我还根据Brent 的建议收集了sp_Blitz的输出:

**Priority 10: Performance**:

- Query Store Disabled - The new SQL Server 2016 Query Store …
Run Code Online (Sandbox Code Playgroud)

sql-server plan-cache sql-server-2016

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

在视图名称为变量的过程中查询视图

我的问题:我有一组视图,我想从中动态查询。我想将视图名称加载SELECT * from sys.all_views到游标中(让我们称之为view_cursor),然后在过程中执行以下操作:

-- loop starts
FETCH NEXT FROM view_cursor INTO @view_name;
SELECT * FROM @view_name;
-- fetch next
-- loop ends
Run Code Online (Sandbox Code Playgroud)

我已经在一个视图中尝试过这个,我将它作为参数传递给存储过程:

CREATE PROCEDURE [dbo].[query_Special_View](@view_name VARCHAR(100)) AS
DECLARE viewname VARCHAR(100);
DECLARE @counter INT = 0;
BEGIN

    PRINT @view_name
    EXECUTE('SELECT COUNT(Value) INTO' + @counter + 'FROM' + @view_name + '');

    PRINT @counter;
END
Run Code Online (Sandbox Code Playgroud)

然后,我想使用现有视图名称执行该过程:

EXEC    [dbo].[query_Special_View]
        @view_name = N'A_very_special_LOC_view' -- the view name as parameter
GO
Run Code Online (Sandbox Code Playgroud)

结果是:

消息 207,级别 16,状态 1,第 1 行 列名“值”无效。

但是,我尝试 …

sql-server stored-procedures ssms view sql-server-2016

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