Questions tagged «sql-server-2012»

SQL Server 2012(主要版本11.00.xxxx)。还请标记sql-server。

1
为什么MSDB数据库值得信赖?
TRUSTWORTHY如果您不小心,该设置可能会非常危险,除特殊情况外,建议保持关闭状态。但是默认情况下,MSDB数据库TRUSTWORHTY设置ON默认。我很好奇为什么? 我已经在BOL中阅读了此条目 注意默认情况下,MSDB数据库的TRUSTWORTHY设置设置为ON。使用默认值更改此设置可能会导致使用MSDB数据库的SQL Server组件出现意外行为。 但是我对细节感到好奇。为什么MSDB需要专门TRUSTWORTHY打开电源?它使用什么功能?

1
SQL Server代理启动自我终止
在过去的一个月中,我的一台服务器遇到了SQL Server代理问题。它会自动停止并显示以下错误,该错误随机发生: SQL代理输出文件 [097]检测到内存泄漏[204字节] 在文件e:\ sql9_sp2_t \ sql \ komodo \ src \ core \ sqlagent \ src \ alerter.cpp的第403行捕获到异常5。SQLServerAgent启动自我终止 我用谷歌搜索了这个错误,但是没有得到太多的信息。SQL Server和代理都使用相同的域帐户运行。但是,问题仅在于SQL Server代理服务。 我也无法在SQL Server配置管理器中看到SQL Server代理服务。我检查了SQL Server错误日志和Windows Event Viewer日志,但没有看到任何可疑活动。 我的内存设置配置正确。该服务器具有32GB RAM,并且SQL Server已分配为使用最大26GB的内存。 系统细节: SQL Server 2012 SP2标准版11.0.5058 64位 Windows Server 2008 R2 Ent Edition 64位 专用于SQL Server(服务器上没有其他运行的应用程序) 几个月前,服务器已从SQL Server 2005 …

2
CPU调度程序离线
我登录到新的客户端系统并运行sp_blitz以查看发生了什么变化。它向我报告说,“ CPU Schedulers Offline ”对我来说是新的。 由于亲缘关系屏蔽或许可问题,某些CPU内核不可用于SQL Server。 足够公平,我运行基本查询 SELECT DOS.is_online , DOS.status , DOS.* FROM sys.dm_os_schedulers AS DOS ORDER BY 1; 那报告我有8设置为VISIBLE OFFLINE,43设置为在线。据我所知,此客户端上没有人会故意设置任何CPU亲缘关系。 我决定看看是否可以调试它。当我查看属性窗口时,我看到40个可用处理器,但没有一个设置为具有亲和力。 为什么dm_os_schedulers中有40个条目显示is_online为true的43个条目,这似乎也很奇怪。8个离线服务器的cpu_id为32到39。 sys.configurations似乎同意未明确启用亲和力 name value value_in_use description affinity I/O mask 0 0 affinity I/O mask affinity mask 0 0 affinity mask affinity64 I/O mask 0 0 affinity64 …

2
可用性组侦听器
我正在查看AlwaysOn可用性组。我越看越多,可用性侦听器组似乎是单点故障。监听器实际在哪里运行?一个单独的服务器,即主要的SQL服务器,都是吗? 假设我在第二个数据中心拥有整个应用程序堆栈。如何配置侦听器,使它们将在两个站点上运行,并且应用程序将指向它们自己的本地副本? 我确定我在这里遗漏了一些东西,但我不知道。

2
SQL Server中的批处理中止错误列表
在SQL Server中,如果XACT_ABORT关闭,则某些错误将终止当前语句(例如,向使用某些参数的存储过程提供不正确数量的参数),而某些错误将中止整个批处理(例如,将参数提供给存储的不带参数的程序)。[参考]:http : //www.sommarskog.se/error-handling-I.html#scope-abortion。 我想知道的是,是否有明确的列表列出哪些错误正在批处理中止,哪些错误正在语句终止。

1
ORDER BY和字母和数字混合字符串的比较
我们需要对值进行报告,这些值通常是数字和字母的混合字符串,需要“自然”排序。诸如“ P7B18”或“ P12B3”之类的东西。@字符串主要是字母序列,然后是数字交替。但是,这些段的数量和每个段的长度可能会有所不同。 我们希望这些数字部分按数字顺序排序。显然,如果我直接使用来处理这些字符串值ORDER BY,则“ P12B3”将出现在“ P7B18”之前,因为“ P1”早于“ P7”,但是我想反过来,因为“ P7”自然会在前面“ P12”。 我还希望能够进行范围比较,例如@bin < 'P13S6'此类。我不必处理浮点数或负数;这些严格来说是我们要处理的非负整数。字符串长度和段数可能是任意的,没有固定的上限。 在我们的案例中,字符串大小写并不重要,尽管如果有一种方法可以按排序规则识别的方式执行此操作,那么其他人可能会觉得有用。所有这一切中最丑陋的部分是我希望能够在WHERE子句中同时进行排序和范围过滤。 如果我在C#中执行此操作,那将是一个非常简单的任务:进行一些解析以将alpha与数字分离,实现IComparable,基本上就可以完成。当然,至少就我所知,SQL Server似乎没有提供任何类似的功能。 有人知道有什么好办法可以使这项工作吗?是否有一些鲜为人知的功能来创建实现IComparable的自定义CLR类型,并使它的行为符合预期?我也不反对愚蠢的XML技巧(另请参阅:列表串联),并且服务器上也提供了CLR regex匹配/提取/替换包装器功能。 编辑: 作为一个更详细的示例,我希望数据表现出这样的效果。 SELECT bin FROM bins ORDER BY bin bin -------------------- M7R16L P8RF6JJ P16B5 PR7S19 PR7S19L S2F3 S12F0 例如,将字符串分成所有字母或所有数字的记号,并分别按字母或数字对它们进行排序,最左边的记号是最重要的排序术语。就像我提到的那样,如果实现IComparable,.NET无疑是小菜一碟,但是我不知道如何(或是否)可以在SQL Server中实现这种功能。在使用它的10年左右的时间里,这肯定不是我遇到过的事情。

5
进行扫描,尽管我希望进行搜索
我需要优化一条SELECT语句,但是SQL Server总是执行索引扫描而不是查找。这是查询,它当然在存储过程中: CREATE PROCEDURE dbo.something @Status INT = NULL, @IsUserGotAnActiveDirectoryUser BIT = NULL AS SELECT [IdNumber], [Code], [Status], [Sex], [FirstName], [LastName], [Profession], [BirthDate], [HireDate], [ActiveDirectoryUser] FROM Employee WHERE (@Status IS NULL OR [Status] = @Status) AND ( @IsUserGotAnActiveDirectoryUser IS NULL OR ( @IsUserGotAnActiveDirectoryUser IS NOT NULL AND ( @IsUserGotAnActiveDirectoryUser = …

1
在SQL Server 2012中比较两个大型结果集的最有效方法是什么
当前比较两个大型结果/行集的最有效方法的建议似乎是使用EXCEPT运算符。随着行大小的增加(更改@last值),下面的自包含SQL脚本效率非常低下。我试图在组合表中查找唯一条目,但没有任何改进。 DECLARE @first AS INT, @step AS INT, @last AS INT; -- This script is comparing two record sets using EXCEPT -- I want to find additions from OLD to NEW -- As number of rows increase performance gets terrible -- I don't have to use two tables. I could …

2
为什么在SQL执行计划中执行TOP操作
经过一会儿的搜索后,我决定发布此问题,因为它找不到答案,并向您道歉,如果那里没有类似的问题/答案。 在两个类似设置的SQL服务器上运行下面的查询时,我们会遇到不同的执行计划,这会影响性能,我们需要帮助找出原因。 查询: SELECT process_id INTO #temp FROM revrep_revenue_fact WHERE process_id = 284 DROP TABLE #temp 服务器A的执行计划 服务器B的执行计划 服务器B http://s2.postimg.org/z9fjrfv4n/server_B.png 您会注意到,服务器B在实际执行计划中具有TOP物理操作,我们正在尝试找出原因。两个查询在索引查找中使用相同的索引。 这是服务器A和服务器B的一些详细信息 服务器A和B都 Windows Server 2008 R2标准Service Pack 1 24GB RAM 64位操作系统 使用(SELECT SERVERPROPERTY('ProductVersion'))获得的SQL Server 2012版本 服务器A SQL版本11.0.3000.0 服务器B SQL版本11.0.5058.0 我们尝试过的 清除过程缓存 重建索引 刷新统计 设置行数0 为什么服务器B在执行计划中有TOP?在这个简单的查询示例中,没有实际问题,但是在较大的查询中,TOP的成本增加了,我们发现性能受到了影响。我们将不胜感激调试任何帮助,我们将为您提供可能需要帮助的任何其他信息。

3
Always On可用性组,始终将用户重定向到只读实例
我们有一个Always On可用性组,其中有一个主服务器和一个已启用读取的辅助服务器。我们的实施团队有一个用户,该用户使用数据库检查他们打算放入数据库的数据的正确性。 用户仅具有读取数据库的权限,但是当用户通过AG Listener连接(通过SSMS)时,他们始终连接到活动节点。 我试图让他们直接访问只读实例,但是它们陷入了困境,在一两天之后,它们又又回到了活动节点上。 SQL Server是否可以通过某种方式说出该用户始终具有只读意图,并将其重定向到那里? 注意:我尝试在其他连接参数中设置'ApplicationIntent = ReadOnly',但这似乎没有重定向到辅助节点,也不是理想的解决方案,因为它们不可避免地会忘记为新的启动程序进行设置。 SQL Server 2012 Enterprise,可用性组1个主要的,1个可读性次要的同步提交。 我不打算让用户连接到链接服务器或通过任何其他服务器。用户通过SSMS(没有其他应用程序)直接连接到数据库,并且我希望AG侦听器(或附近的东西)能够将用户定向到辅助节点(如果有)(因为那里只有读取访问权限)无需用户做任何事情就可以访问主数据库,因为用户在计算机之间移动并且会忘记添加应用程序意图。另外,我发现将其添加到其他连接参数并不总是将您定向到辅助节点。

2
列存储索引中的标识列
我有一个非常大的表IMO(约1.37亿行),其中包含很多重复数据,很多NULL列等等。 我正在考虑使用带有a的表进行探索,COLUMNSTORE INDEX并且IDENTITY在原始表中有一列,这是我唯一的一列,其中每一行都是唯一的。 我应该保留还是不包括此列?我已经读到您想将表的所有行都包含到中,COLUMNSTORE INDEX但是我也读到最好的候选者是具有很多非唯一行的列。 这只是一个不好的候选人COLUMNSTORE INDEX吗? 我正在使用SQL Server 2012,因此它是非群集的列存储。我只是在探索可能更好的方法来存储这些数据。更新是不存在的,尽管新行将通过ELT流程定期添加,所以我假设在那里会做一些工作。一些人挖掘这些数据并生成大量报告,进行大量行扫描,有时使服务器爬网,这迫使我们每天将副本卸载到辅助服务器。

1
递归SQL查询性能问题
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 4年前关闭。 这是我第六次尝试问这个问题,也是最短的一个。先前的所有尝试都是通过类似于博客文章的方式而不是问题本身来实现的,但是我向您保证,我的问题是真实的,只是它涉及一个大主题,而没有所有这些细节,该问题将包含在其中。不清楚我的问题是什么。所以这里... 抽象 我有一个数据库,它允许以某种幻想的方式存储数据,并提供了业务流程所需的一些非标准功能。功能如下: 通过仅插入方法实现的非破坏性和非阻塞性更新/删除,允许数据恢复和自动记录(每个更改都与进行更改的用户相关) 多版本数据(同一数据可能有多个版本) 数据库级权限 最终与ACID规范和交易安全的创建/更新/删除保持一致 可以将当前数据视图快退或快进到任何时间点。 我可能还没有提到其他功能。 数据库结构 所有用户数据Items均以JSON编码字符串(ntext)的形式存储在表中。所有数据库操作都通过两个存储过程GetLatest和进行InsertSnashot,它们允许对数据进行操作,类似于GIT操作源文件的方式。 结果数据在前端被链接(JOINed)成完全链接的图,因此在大多数情况下不需要进行数据库查询。 也可以将数据存储在常规SQL列中,而不是以Json编码形式存储它们。但是,这增加了总体复杂性。 读取数据 GetLatest结果以说明形式提供数据,请考虑下图进行说明: 该图显示了对单个记录所做的更改的演变。图表上的箭头显示了进行编辑所基于的版本(假设用户正在脱机更新某些数据,与在线用户进行的更新并行,这种情况会引入冲突,基本上是两种数据版本而不是一个)。 因此,GetLatest在以下输入时间跨度内调用将产生以下记录版本: GetLatest 0, 15 => 1 <= The data is created upon it's first occurance GetLatest 0, 25 => 2 <= Inserting another version on top of first …

1
有效地存储键值对的集合,这些键值对具有完全不同的键
我继承了一个将许多不同类型的活动与站点相关联的应用程序。大约有100种不同的活动类型,每一种都有3-10个字段的不同集合。但是,所有活动至少都有一个日期字段(可以是日期,开始日期,结束日期,预定开始日期等的任意组合)和一个负责人字段。所有其他字段的差异很大,开始日期字段不一定称为“开始日期”。 为每种活动类型创建一个子类型表将导致具有100个不同子类型表的模式,这太麻烦了以至于无法处理。该问题的当前解决方案是将活动值存储为键值对。这是当前系统的一个大大简化的架构,可以用来说明要点。 每个活动都有多个ActivityField;每个站点都有多个活动,并且SiteActivityData表存储每个SiteActivity的KVP。 这使基于Web的应用程序非常容易编写代码,因为您真正需要做的就是遍历SiteActivityData中给定活动的记录,并为表单的每一行添加标签和输入控件。但是有很多问题: 诚信不好;可以在SiteActivityData中放置一个不属于活动类型的字段,而DataValue是一个varchar字段,因此需要不断地转换数字和日期。 报告和临时查询此数据非常困难,容易出错且速度很慢。例如,要获得某个结束日期在指定范围内的某种类型的所有活动的列表,则需要进行数据透视并将varchars转换为日期。报表编写者讨厌这种模式,我不怪他们。 因此,我要寻找的是一种存储大量几乎没有共同字段的活动的方式,从而可以简化报告。到目前为止,我想出的是使用XML以伪noSQL格式存储活动数据: Activity表将包含每个活动的XSD,从而无需使用ActivityField表。SiteActivity将包含键值XML,因此站点的每个活动现在都位于一行中。 一个活动看起来像这样(但是我还没有完全充实它): <SomeActivityType> <SomeDateField type="StartDate">2000-01-01</SomeDateField> <AnotherDateField type="EndDate">2011-01-01</AnotherDateField> <EmployeeId type="ResponsiblePerson">1234</EmployeeId> <SomeTextField>blah blah</SomeTextField> ... 优点: XSD将验证XML,捕获错误,例如在数据库级别将字符串放入数字字段中,这对于将所有内容都存储在varchar中的旧模式是无法实现的。 用于构建Web表单的KVP记录集可以很容易地使用 select ... from ActivityXML.nodes('/SomeActivityType/*') as T(r) XML的xpath子查询可用于生成一个包含开始日期,结束日期等列的结果集,而无需使用数据透视表,例如 select ActivityXML.value('.[@type=StartDate]', 'datetime') as StartDate, ActivityXML.value('.[@type=EndDate]', 'datetime') as EndDate from SiteActivity where... 这似乎是个好主意吗?我想不出其他方式来存储大量不同的属性集。我的另一个想法是保留现有模式,并将其转换为更容易在数据仓库中查询的内容,但是我以前从未设计过星型模式,也不知道从哪里开始。 附加问题:如果我使用定义XSD中具有日期数据类型的标记xs:date,SQL Server会将其索引为日期值吗?我担心如果我按日期查询,它将需要将日期字符串转换为日期值并浪费使用索引的任何机会。

1
PK上的压缩与表上的压缩之间有什么区别?
可以在表上设置数据压缩: CREATE TABLE dbo.SomeTable( SomeId [bigint] NOT NULL, OtherId [bigint] NOT NULL, IsActive [bit] NOT NULL, CONSTRAINT [PK_Some] PRIMARY KEY CLUSTERED ( SomeId Desc ) ) ON SomePartitionScheme(SomeId) WITH (DATA_COMPRESSION=PAGE) 可以在主键上定义它: CREATE TABLE dbo.SomeTable( SomeId [bigint] NOT NULL, OtherId [bigint] NOT NULL, IsActive [bit] NOT NULL, CONSTRAINT [PK_Some] PRIMARY KEY …

1
如何判断备份文件是否包含CDC?
使用SQL Server 2008到2014年,我知道如何在启用更改数据捕获(CDC)的情况下备份和还原数据库,但是我正在寻找一种查询完整备份文件以确定其是否包含CDC数据的方法。 最好的办法是RESTORE FILELISTONLY从数据库获取文件列表,但获取CDC状态以确定还原是否需要使用KEEP_CDC标志? 有没有办法确定备份是否包含CDC数据? 谢谢!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.