我们将在新硬件/VM 上创建新的 Sql-Servers,并考虑使用哪个 Sql-Server 版本。我们实际上使用的是 Sql Server 2008 R2。我们已经完成了一个项目,用于测试 2008 年和 2014 年之间的所有兼容性问题 - 并修复了应用程序代码以及数据库架构中的所有问题,为 2014 年做好准备。
现在简单地忽略 2014 并直接进入 2016 的问题出现了。我们不确定。
我已经运行了 SQL 2016 升级顾问 - 它说“准备升级(2016)”并针对已弃用的 ntext、text 和 image 列提出了大约 500 条警告。
我有一个 SQL Server 2014 数据库(在便携式硬盘上),我必须使用正常的附加方法将它附加到 SQL Server 2016 机器上。
但是,由于将它附加到该计算机,即使我没有更改兼容性级别或其他任何内容,它也不再适用于 SQL Server 2014 计算机。
我现在卡住了,因为 SQL Server 2016 无法在所有其他计算机上运行的 Windows 7 机器上运行。我只是碰巧将它附加在运行 Windows 10 和 SQL 2016 的笔记本电脑上,认为这不会有问题。
有什么办法可以扭转这种局面吗?我无法从管理工作室的错误屏幕中获得任何好的信息。
我必须将 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命令,但我真的不明白会发生什么。数据是否会被合并到现有文件组之一,之后我仍然会有一个分区表?
我是否必须将所有数据复制到具有相同结构的新表中(可能需要很长时间......)?
我将不得不在停机期间执行此操作,因此我需要一个尽可能高效的程序。
我已经使用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
如果我要使用只读路由设置一个包含 3 个节点的 Alwayson 可用性组。我需要配置法定人数吗?
我试图在一个简单的临时 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) 我注意到有一个错误,当人们询问它时,他们被发送到错误的方向(见下面的最后评论)。
尝试使用带有 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在许多情况下被遗忘的恢复,但在正确完成备份和恢复时并不是真正的问题。
每隔几分钟到大约一小时,进程缓存就会被刷新(但不是完全!)。如果我运行:
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。我没有看到任何内存压力指标。
我还观察到,当我将最小服务器内存减少到 16 GB 时,进程缓存清除的频率急剧增加。
我的SQL Server版本如下:
Microsoft SQL Server 2016 (SP1-CU3) (KB4019916) - 13.0.4435.0 (X64)
Run Code Online (Sandbox Code Playgroud)
还有什么:
我怀疑 VMWare 可能在这里扮演了一些角色,但是当我检查来宾端可用的 perfmon 计数器时,我没有发现任何可疑的东西。
**Priority 10: Performance**:
- Query Store Disabled - The new SQL Server 2016 Query Store …Run Code Online (Sandbox Code Playgroud) 我的问题:我有一组视图,我想从中动态查询。我想将视图名称加载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 ×10
sql-server-2016 ×10
ssms ×2
dbatools ×1
mirroring ×1
partitioning ×1
plan-cache ×1
plan-guides ×1
powershell ×1
upgrade ×1
view ×1