Questions tagged «sql-server-2012»

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

2
Page Life Expectancy对实例有何看法?
我已经在环境中的一些SQL Server实例上安装了监视软件。我正在尝试查找瓶颈并解决一些性能问题。我想找出某些服务器是否需要更多内存。 我对一个计数器感兴趣:页面预期寿命。在每台机器上看起来都不同。为什么在某些情况下经常更改,这意味着什么? 请查看上周在不同计算机上收集的数据。您能对每个实例说些什么? 大量使用的生产实例(1): 适度使用的生产方式(2) 很少使用的测试实例(3) 大量使用的生产实例(4) 中度使用的测试实例(5) 大量使用的数据仓库(6) 编辑:我为所有这些服务器添加SELECT @@ VERSION的输出: Instance 1: Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) Jun 17 2011 00:54:03 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor) Instance 2: Microsoft SQL …

1
没有故障转移群集的环境中Windows Update之后AlwaysOn可用性组错误
今天早上我们的SQL Server服务关闭,这使我们的一些网站瘫痪了。当我检查Windows事件查看器时,看到以下错误: 数据库'master'的脚本级别升级失败,因为升级步骤'SSIS_hotfix_install.sql'遇到错误942,状态4,严重性25 无法恢复主数据库。SQL Server无法运行。从完整备份还原母版,对其进行修复或重建。有关如何重建主数据库的更多信息,请参见SQL Server联机丛书。 我所做的第一件事是向Google发送错误信息。我最终找到了一个包含确切问题的论坛条目,并对其进行了修复(也在我正在寻求解决方案的博客条目上)。该问题与AlwaysOn可用性组有关,并且此修复程序要求您执行以下操作: 使用跟踪标志902启动SQL Server服务: 净启动MSSQL $ InstanceName / T902 打开SQL Server Management Studio,转到可用性组,然后从可用性数据库中删除SSISDB 打开“新建查询”,执行SSIS_hotfix_install.sql脚本,该脚本位于\ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQL $ InstanceName \ MSSQL下的Install文件夹中。 停止SQL Server服务: 净止损MSSQL $ InstanceName 从SQL Server配置管理器启动SQL Server服务 将SSISDB添加回可用性组 但是,我无法通过第2步,因为在尝试扩展“ AlwaysOn High Availability”文件夹时遇到以下错误: 在此实例上创建可用性组之前,必须为服务器实例“ InstanceName”启用“ AlwaysOn功能”。 然后,我按照说明转到“ SQL Server配置管理器”和“ …

1
T-SQL-选项(FAST x)和跟踪标志8722
我已经搜索了很长时间,但仍然找不到我的问题的答案。 我们的Dynamics AX生成带有查询提示OPTION(FAST x)的查询,有时会强制使用错误的执行计划。开发人员说这是默认设置,很难更改(可能会固定在所有表格上)。 因此,我正在寻找一种使用跟踪标志覆盖这些提示的方法。我发现了可爱的跟踪标志8722,据称它使SQL Server忽略了某些查询提示,尤其是OPTION子句中的那些。 但是,这对我来说不起作用。我也尝试启用跟踪标志8602(禁用索引提示),但我的查询仍在使用FAST x提示运行(这比我实际删除OPTION子句时要慢得多)。 我也尝试清除计划缓存,但无济于事。 有任何想法吗?我有什么想念的吗? PS我全局启用了跟踪标志,这是SQL Server 2012 Developer版本


1
服务帐户使用数据库邮件需要什么权限?
我有一个在托管服务帐户下运行的SQL Server 2012实例。我已经使用一个帐户配置了数据库邮件,并尝试发送测试电子邮件,但是服务器的事件日志中出现了一些错误: 数据库引擎实例= MYINSTANCE;邮件PID = 2132;错误消息:对数据库的更新失败。原因:对对象'sysmail_logmailevent_sp',数据库'msdb',模式'dbo'的EXECUTE权限被拒绝。 数据库引擎实例= MYINSTANCE;邮件PID = 2212; 异常类型:Microsoft.SqlServer.Management.SqlIMail.Server.Common.BaseException消息:数据库读取失败。原因:对对象'sp_readrequest',数据库'msdb',模式'dbo'的EXECUTE权限被拒绝。数据:System.Collections.ListDictionaryInternal TargetSite:Microsoft.SqlServer.Management.SqlIMail.Server.Objects.QueueItem GetQueueItemFromCommand(System.Data.SqlClient.SqlCommand)帮助链接:NULL来源:DatabaseMailEngine 如果我使运行SQL Server的帐户成为sysadmin,则该错误消失,邮件成功发送。但是,我所做的所有研究都表明,赋予此帐户数据库DatabaseMailUserRole角色msdb应该足够。我这样做了,仍然收到相同的错误。 我在BOL中查看了一下,但找不到任何东西。

2
在SQL Server代理中运行Powershell脚本时出错
我有一个通过SQL Server代理运行的SQL作业(正在运行SQL Server 2012 Enterprise)。作业的最后一步是运行位于网络共享上的应用程序。不幸的是,我不知道应用程序所在的文件夹的名称(该文件夹是版本号),因此我正在使用PowerShell查找它: set-location "\\server\companydocuments\MyApp\Application Files\" $name = Get-ChildItem | sort name -desc | select -f 1 | select name cd $name.name & ".\Application.exe" 如果我在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\'" 我以为这可能是权限问题,所以我尝试在我的凭据(这是测试服务器,不是生产服务器)下运行SQL …

1
从扩展事件会话中收集参数值
我正在使用扩展事件来跟踪应用程序使用的语句。我创建了一个会话,该会话将收集所需的信息,但我也想知道所使用的参数的实际值。 我正在非生产环境中执行此跟踪,因此跟踪所导致的任何性能下降都是可以接受的。 所有查询均源自Hibernate,并已通过以下形式进行了参数化: SELECT a, b, c From Customer where CustomerId = @P0 这是我的会话设置。 CREATE EVENT SESSION [TracingForStatements] ON SERVER ADD EVENT sqlserver.sp_statement_completed ( ACTION ( sqlserver.session_id, package0.collect_system_time, sqlserver.transaction_id, package0.event_sequence ) WHERE ( sqlserver.database_id=555 ) ) ADD TARGET package0.ring_buffer(SET max_memory= 128000) WITH (EVENT_RETENTION_MODE = NO_EVENT_LOSS, MAX_DISPATCH_LATENCY = 1 SECONDS) 如何捕获捕获的语句中使用的参数的实际值?可能吗? …

1
变更跟踪内部结构是否从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')) 在2012年,它返回1。 在测试中通过其他几个脚本(6-8)工作时,我将保留期设置为1分钟,以期希望执行清除操作。我离开了一天,显然它跑了一整夜。 在2008年实例中,CHANGE_TRACKING_CURRENT_VERSION和CHANGE_TRACKING_MIN_VALID_VERSION相等(11)。在2012年实例中,CHANGE_TRACKING_MIN_VALID_VERSION(12)比CHANGE_TRACKING_CURRENT_VERSION(11)高一。当数据库长时间闲置时,这可能会对同步过程产生影响。而且我们发现进程可能陷入循环,尤其是在执行以下测试以确定是否需要重新初始化而不是同步的情况下: 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''... 有没有其他人经历过这种行为改变?有人解释吗?


2
如何用两个相关的“许多”表展平一个表的结果?
我已经对数据库中的某些表进行了重组,以使其更加灵活,但是我不确定如何编写SQL从中提取有意义的数据。 我有以下表格(为简洁起见,略有缩写): CREATE TABLE Loans( Id int, SchemaId int, LoanNumber nvarchar(100) ); CREATE TABLE SchemaFields( Id int, SchemaId int, FieldName nvarchar(255) ); CREATE TABLE LoanFields( Id int, LoanId int, SchemaFieldId int, FieldValue nvarchar(4000) ); 带有以下数据: INSERT INTO Loans (Id, SchemaId, LoanNumber) VALUES (1, 1, 'ABC123'); INSERT INTO SchemaFields (Id, SchemaId, …

3
SQL Server 2012 catalog.execution到sysjobhistory-以任何方式加入它们?
我已经用光了资源,无法找到一种将ssisdb.catalog表加入运行它们的作业的简便方法。尝试编写一些自定义的sproc来监视我的执行时间和从目录表中写入的行,并且能够将它们与调用作业绑定在一起将非常有益。 我试图找出是否有可用于将catalog.executions表连接到msdb.sysjobhistory的表。我需要关联哪个作业称为SSIS包,然后在执行中使用数据进行分析。

2
为档案进行碎片整理/压缩数据库的最佳方法
我们有一个用于电子邮件归档的SQL Server实例(由第三方归档软件包提供)。每隔一段时间,该软件就会被转移到一个新的空数据库中。我们过去每个季度都会做一次,但现在希望每月进行一次。每月要存档的数据量约为15-20 GB,并且大部分数据仅存储在少数几个表中(通常为2-4个)。 一旦我们转到新的数据库,旧数据库就会严格用作只读数据库。我想做的是将其优化为一个美观,紧凑的数据文件,所有表/索引都相邻并且具有很高的填充系数,并且数据文件末尾没有太多的空白空间。另外,我们在此服务器上使用标准版,但存在所有限制(否则,我将已经在使用数据压缩)。 我能想到的几种可能性: 重建/重新组织索引,DBCC SHRINKFILE(好吧,这不是一个明智的选择,因为DBCC SHRINKFILE会将小便从它接触的任何部分中剔除掉,​​但出于完整性考虑,我将其包括在内。) 创建一个新数据库并关闭自动统计。编写脚本并从源数据库重新创建所有表。使用bcp以集群键顺序将数据导出/导入到新数据库中。编写脚本并重新创建所有索引。使用全面扫描重新计算所有统计信息。 创建一个新数据库并关闭自动统计。编写脚本并从源数据库重新创建所有表。使用SSIS或T-SQL将数据传输到新数据库。编写脚本并重新创建所有索引。使用全面扫描重新计算所有统计信息。 在每种情况下,最后一步都是将数据库设置为只读模式。 还有什么其他好的/更好的选择呢?我的担心是以逻辑上连续的方式移动数据,以保留高填充因子。 编辑: 我应该提到,大约75%的数据似乎存储在图像(LOB)列中。

4
将行从一个表移动到另一个表
作为归档过程的一部分,我正在将记录从一个数据库移动到另一个数据库。我想将这些行复制到目标表,然后从源表中删除相同的行。 我的问题是,在删除行之前检查第一个插入是否成功的最有效方法是什么? 我的想法是这样,但是我觉得有更好的方法: @num_records=select count(ID) from Source_Table where (criteria for eligible rows) insert * into Destination_Table where (criteria for eligible rows) if ((select count(ID) from Destination_Table where (criteria) )=@numrecords) delete * from Source_Table where (criteria) 将它与RAISERROR函数结合起来更好/可行吗?谢谢!

2
案例与虚无与融合
我正在阅读SQL Server 2012考试的文档,发现了以下几点: 案例与虚无与融合 现在,我知道如何使用每个,但不知道何时使用。请可以澄清一下。谢谢。 附言 请给我们一个考试题标签吗?

1
如何修复SQL Server程序集优化错误和内存耗尽?
mscorsvw自从我安装SQL Server 2012 Service Pack 1以来,.NET运行时优化服务()一直消耗着我所有工作站的内存。 在耗尽所有可用内存之前,它将消耗约1.6 GB的内存: 我可以取消该过程,但是当我重新启动计算机或等待足够长的时间后,它会再次发生。 Techdows建议使用.NET本机图像生成器(ngen)解决问题。 我取消了命令提示符并运行了以下命令: cd C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319.1 ngen executeQueuedItems 内存消耗mscorsvw下降到大约20-30 MB,并ngen消耗了所有剩余的内存。 ngen仅生成错误消息,直到我终止了该过程。输出的前几行如下所示: Microsoft (R) CLR Native Image Generator - Version 4.0.30319.1 Copyright (c) Microsoft Corporation. All rights reserved. Failed to load dependency Microsoft.DataWarehouse of assembly Microsoft.SqlServer.MaintenancePlanTasks, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 because of the following error …

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.