标签: sql-server-2012

更改跟踪内部结构是否从 SQL Server 2008 更改为 2012?

在解决将断开连接的设备与中央数据库服务器同步的问题时,我们在服务器上升级到 SQL Server 2012 后遇到了问题。看起来 CHANGE_TRACKING_MIN_VALID_VERSION 返回的值比它应有的值高 1(或至少比升级前的值高)。

我一直在研究如何设置简单示例的Arshad Ali 的精彩示例。

我已经运行了从 #1 到 #5 的脚本,以在 SQL Server 2008 和 2012 环境中的 Employee 表中插入、删除和更新一行。

在 2008 年,以下语句返回 0:

SELECT CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID('Employee'))
Run Code Online (Sandbox Code Playgroud)

在 2012 年,它返回 1。

在测试中通过更多脚本 (6-8) 工作时,我将保留期设置为 1 分钟,以期强制执行清理操作。我离开了一天,显然它运行了一夜。

在 2008 年的实例中,CHANGE_TRACKING_CURRENT_VERSION 和 CHANGE_TRACKING_MIN_VALID_VERSION 是相等的 (11)。在 2012 年的实例中,CHANGE_TRACKING_MIN_VALID_VERSION 比 CHANGE_TRACKING_CURRENT_VERSION (11) 高一 (12)。当数据库长时间空闲时,这可能会对同步过程产生影响。我们发现进程可能会陷入循环,尤其是在执行以下测试以确定是否需要重新初始化而不是同步时:

IF CHANGE_TRACKING_MIN_VALID_VERSION(object_id(N'dbo.Employee')) > @sync_last_received_anchor 
       RAISERROR (N'SQL Server Change Tracking has cleaned up tracking information for table ''%s''...
Run Code Online (Sandbox Code Playgroud)

有没有其他人经历过这种行为变化?有人有解释吗?

sql-server sql-server-2012 change-tracking

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

在 SQL Server 代理中运行 Powershell 脚本时出错

我有一个通过 SQL Server 代理(运行 SQL Server 2012 Enterprise)运行的 SQL 作业。作业的最后一步是运行位于网络共享上的应用程序。不幸的是,我不知道应用程序所在文件夹的名称(文件夹是版本号),所以我使用 PowerShell 来查找它:

set-location "\\server\companydocuments\MyApp\Application Files\"
$name = Get-ChildItem | sort name -desc | select -f 1 | select name
cd $name.name
& ".\Application.exe"
Run Code Online (Sandbox Code Playgroud)

如果我在 SQL Server 上打开一个 PowerShell 窗口,那么它工作正常。当我在 SQL Server 代理中运行它时,出现以下错误:

A job step received an error at line 1 in a PowerShell script.
The corresponding line is 'set-location "\\server\companydocuments\MyApp\Application Files\'"
Run Code Online (Sandbox Code Playgroud)

我认为这可能是权限问题,所以我尝试在我的凭据下运行 SQL Server 代理(它是测试服务器,而不是生产服务器),但我仍然遇到相同的错误。我还尝试将网络驱动器映射到共享文件夹而不是 UNC 路径,但出现相同的错误。

谁能建议我如何连接到这个文件夹?

sql-server powershell sql-server-2012 sql-server-agent jobs

9
推荐指数
1
解决办法
6413
查看次数

如何在 sql 代理作业中选择邮件配置文件

我在 sql 代理上配置了几个邮件配置文件,如何选择这些配置文件中的哪些用于发送特定 sql 代理作业的通知?

sql-server-2012 database-mail

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

查看和编写对象的权限,但不能更改它们?

我是一名软件开发人员。

我有一个生产数据库,我需要完全 ddl 读取访问权限,但不需要任何 ddl 写入或执行访问权限。

是否有我可以发送给我的 DBA 的脚本,该脚本将授予我完整的 ddl 读取访问权限,而不允许我影响数据库?

sql-server permissions ddl sql-server-2012

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

SQL Server 实例仅使用几百 MB。远低于最低服务器内存设置

资源监视器的屏幕抓取

我有两个 SQL Server 2012 实例在具有 32GB RAM 的服务器上运行,并且很少运行其他实例。

一个实例表现正常。它的工作集内存运行接近其提交,这也接近 SQL Server 中的最大服务器内存设置。

另一个实例(在图像中突出显示)的行为不符合我的预期。无论我如何配置它的最小和最大内存设置,即使服务器上有足够的可用 RAM,我也无法获得超过几百 MB 的工作集内存。

这对其性能产生了非常不利的影响,尤其是在重负载下。数据库使用得很好,当这个实例正常工作时*它会很快填满20GB的最大服务器内存设置。

服务器已重新启动。实例已重新启动。我尝试更改为各种最小/最大设置并停止运行良好的实例 - 只是为了检查它是否以某种方式干扰。问题仍然存在,而一个实例似乎对最小和最大内存设置正常响应,而另一个则没有。

* 我不知道发生了什么变化,否则我会把它改回来。

  • 操作系统和 SQL Server 都是 64 位的。
  • sys.configurations的内容在两个实例上是相同的。
  • “低”服务器上的数据库总共有 10 多 GB。
  • 我相信服务器上的负载足够大,它应该使用更多内存。在过去,它过去常常很快地填充其内存分配。
  • 我已经对应该将数据提取到内存中的表进行了一些大型查询。
  • 这只是一个数据库服务器,它上面没有运行任何其他东西,而且自从出现这个问题以来,它的运行速度明显变慢。
  • sys.dm_os_sys_memoryperfmon与资源监视器一致。
  • 目标服务器内存 (KB) = 10240008;总服务器内存 (KB) = 5237744

sql-server memory configuration sql-server-2012

9
推荐指数
1
解决办法
1555
查看次数

在 XML 列中编辑单个条目的最简单方法?

据我了解,MS SQL Server Management Studio 不允许通过 GUI 直接编辑/替换 XML 列中的条目(复制/粘贴不起作用等)。

替换 XML 列中单个条目的最简单选项是什么?对于 XML 列值,我是否必须使用与 UPDATE/REPLACE 不同的东西?

xml sql-server sql-server-2012

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

收缩 SQL Server 事务日志

我目前不得不处理失控的 SQL Server 事务日志。免责声明:我不是 dba,这不是我的专业领域,所以请耐心等待。

目前,我有一个500MB 的数据库的115GB事务日志文件,该文件(显然)在一段时间内管理不善,无法进入这种状态。

首要任务是在我们用完之前回收这个文件占用的磁盘空间!有人告诉我增加驱动器的大小不是一种选择,即使是暂时的,而且根据过去的增长,我们需要尽快采取行动。

据我了解,最好的方法是将数据库保持在完全恢复模式,但定期备份日志文件,在一段时间内对其进行监控并调整初始大小和增量以适应。一切都好。

鉴于我们在午夜定期进行完整的数据库备份,我是否可以安全地将数据库暂时置于简单恢复模式(在这些备份之一运行后),缩小日志文件以回收(几乎所有)空间和然后使用上述备份策略将其放回完全恢复?

我的想法是,如果这个时候发生了什么事情,我们可以简单地恢复完整备份而不使用日志。

更新

回复一些答案和评论的一些额外细节:

  • 我们确实希望保留进行时间点还原的能力,因此数据库应保持在完全恢复模式。

  • t-log 文件变得如此大的原因是它从未被备份过。验证为 log_reuse_wait_desc 返回“LOG_BACKUP”。

sql-server backup restore sql-server-2012

8
推荐指数
1
解决办法
1852
查看次数

SQL Server 访问问题

我正在尝试使用来自不同登陆服务器的 SSMS 连接 3 个 SQL 服务器。问题是我可以连接 1 个服务器但无法连接其他 2 个。我得到的错误如下:

在此处输入图片说明

已成功与服务器建立连接,但随后在登录过程中出现错误。(提供者:SSL 提供者,错误:0 - 远程主机强行关闭了现有连接。)

我无法弄清楚其他 2 台服务器出了什么问题,需要您的帮助。

登陆服务器详情:

  1. Windows server 2008 R2 Ent版
  2. SSMS 2012 SP1

SQL 服务器详细信息:

  1. SQL Server 2012 -- 能够连接
  2. SQL Server 2012 -- 无法连接
  3. SQL Server 2005 -- 无法连接

我能够从我的登陆服务器 ping 和 telnet 所有 3 个服务器。另外,尝试了 2 台服务器的 SQL 身份验证,但我无法连接但它不起作用。禁用 TCP 烟囱,不起作用。相同的 3 个连接在我的其他登陆服务器上运行良好。所以不确定这个有什么问题。请帮我解决这个问题。

sql-server sql-server-2012 connectivity

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

我应该禁用超线程吗

背景我最近一直在研究一些相当高的 CXPacket 等待时间,这让我使用 SQL Sentry 非常密切地监视处理器活动。

结果我注意到的一件事是我们在上下文切换中出现了巨大的峰值下面是一个 5 分钟的示例,但这种模式在一天中非常普遍。

语境

正如你所看到的,它非常有规律地飙升。现在我对此的理解将使我相信这将是 CPU 压力的结果。然而在那段时间里几乎没有超过 60%。

处理器

经过一些研究,这让我相信这是超线程的结果。我知道我之前已经阅读过超线程的一些危险。然而,那是很久以前写的。

使长话短说。超线程可能是上下文切换峰值的罪魁祸首吗?上下文切换是否可能对我的并行查询产生负面影响?我应该在我的环境中禁用超线程吗?

更新虽然我的环境中正在发生这种特定的事情,但其核心问题更为普遍。高级上下文切换对并行查询的影响有多大?超线程会导致此类问题吗?

最终,我在互联网上发现的大部分内容都表明超线程和 SQL Server 不是好朋友,但大多数信息都非常过时。

我的系统有很多配置问题,所以我将在这里解决这些问题,以便可以排除它们。我们在操作系统和生物级别都有性能的电源设置。我们的 Maxdop 设置为 8,并行的成本阈值为 25。我们有 32 个逻辑内核和 16 个物理内核。这也是大部分数据仓库加载场景。

sql-server sql-server-2012 windows-server

8
推荐指数
1
解决办法
3967
查看次数

错误:“无法删除证书,因为一个或多个实体使用它进行签名或加密。”

我有一个要从数据库中删除的证书。

如果我发出命令

DROP CERTIFICATE <FooCert>
Run Code Online (Sandbox Code Playgroud)

我收到错误

The certificate cannot be dropped because one or more entities are either signed or encrypted using it
Run Code Online (Sandbox Code Playgroud)

根据 Jason Strate 的说法,我应该能够找出证书签名的内容。

以下查询返回 0 行:

SELECT OBJECT_SCHEMA_NAME(co.major_id) + '.' + OBJECT_NAME(co.major_id)
FROM sys.certificates c 
INNER JOIN sys.crypt_properties co ON c.thumbprint = co.thumbprint
WHERE co.crypt_type_desc = 'SIGNATURE BY CERTIFICATE' 
AND c.name = 'FooCert'
Run Code Online (Sandbox Code Playgroud)

我还尝试根据这个 SO 问题将实体解耦。 /sf/ask/3672231/

如何删除对这个证书的依赖,以便我可以删除它?

sql-server encryption sql-server-2012 signature certificate

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