Questions tagged «sql-server»

所有版本的Microsoft SQL Server(非MySQL)。还请添加特定于版本的标记,例如sql-server-2016,因为它通常与问题相关。

2
默认跟踪已启用但未激活
当我查询默认跟踪的配置时,它显示已启用: exec sp_configure 'default trace enabled'; --> name minimum maximum config_value run_value default trace enabled 0 1 1 1 但是当我查询sys.traces路径时,它返回一个空行集: select * from sys.traces; 有什么可以解释缺少启用的跟踪的原因?

3
处理身份范围以进行事务复制
我注意到,当您设置事务复制时,SQL Server会将身份范围管理设置为手动。这意味着在我的订阅数据库中,当我尝试将新记录插入到其PK为标识列的表中时,它将给我一个错误,并说它试图插入PK为“ 1”,“ 2” ”,“ 3”等。这是因为订阅服务器上所有标识列的当前标识值都重置为种子值(通常为1),而不是停留在发布者上的原始值上。 我了解为什么SQL Server会这样做-您应该将订户表保留为只读状态。但是,我的情况有点不合常规-我不时通过复制更新订户,立即备份该数据库,然后我想对订户进行一些更新,以免将其推回发布者,然后当我再次更新订户时,我从较早的备份中还原了它的数据库并提取了最新的更新。因为我想在这些更新之间进行订阅服务器的更新(如果需要,可以使用“临时增量”),因此我需要Identity列起作用,并且复制时不要重置为1。 我尝试在设置发布时打开自动标识范围管理,但是当我尝试向发布中添加表时,这只会给我以下错误: 消息21231,级别16,状态1,过程sp_MSrepl_addarticle,第2243行 自动标识范围支持仅对允许更新订户的发布有用。 有什么办法可以解决这个问题?我确实想将此复制呈现给SQL Server,就好像它在订阅服务器端是只读的,因为我不打算进行将被推回发布服务器的更新,但是我确实想进行临时更新在下一次复制之前将被删除。 对于我的使用模式,我还认为快照复制可能比事务复制更合适,但是麻烦在于快照复制需要每个更新发送整个darn数据库。因为我打算在最新复制后立即备份数据库,所以我不需要每次都进行整个传输。只是自上次以来的变化。

2
函数使用空大小写操作挂起
我创建了一个接受开始和结束日期的函数,结束日期是可选的。然后CASE,如果未传递结束日期,则在过滤器中写入a 以使用开始日期。 CASE WHEN @dateEnd IS NULL THEN @dateStart ELSE @dateEnd END 当我为最近一个月的数据调用该函数时: SELECT * FROM theFunction ('2013-06-01', NULL) ...查询挂起。如果我指定结束日期: SELECT * FROM theFunction ('2013-06-01', '2013-06-01') ...结果正常返回。我从函数中取出代码,并在查询窗口中运行良好。我也不能重复提琴的问题。查询如下: SELECT * FROM theFunction ('2013-04-01', '2013-06-01') ...也很好。 查询中(下)中是否有任何内容可能导致NULL在结束日期传递a时函数挂起? SQL小提琴 执行计划的SELECT * FROM theFunction ('2013-06-01', '2013-06-01') 预计计划的SELECT * FROM theFunction ('2013-06-01', NULL)

3
切换到简单恢复时的事务日志维护
背景: 我最近继承了450多个数据库中的50多个SQL Server。每晚备份大约为8TB,不用说,我们使用的磁盘空间比我们想要的要多。所有数据库均设置为“完全恢复”,并且从未备份过事务日志。我已经遍历了所有SQL Server,并确定了低优先级的服务器,这些服务器仅需要每晚进行备份并且可以接受一天的数据丢失。 题: 我将许多低优先级数据库SIMPLE从切换到恢复模式FULL。现有事务日志会被截断吗(创建检查点时)?一些现有的事务日志为50-100GB;为了继续前进,确定我应该缩小到什么范围的最佳方法是什么?我显然不想让它们那么大。还是随着时间的推移它们会自行收缩(我不认为会收缩)?

3
PK作为ROWGUIDCOL还是使用单独的rowguid列?
这里正在进行一场激烈的辩论,所以我想听听其他意见。 我有很多带有uniqueidentifier集群PK的表。这是否是一个好主意在这里超出了范围(并且不会很快改变)。 现在,必须合并发布数据库,并且DEV提倡使用单独的rowguid列,而不是将现有PK标记为ROWGUIDCOL。 基本上,他们说应用程序永远不应将仅用于复制的内容带入其域(对于他们来说,这只是“ DBA内容”)。 从性能的角度来看,我没有理由为什么要添加一个新列来执行现有列可以做的事情。而且,由于它只是“ DBA的东西”,为什么不让DBA选择? 我有点理解DEV的观点,但是我仍然不同意。 有什么想法吗? 编辑:我只是想补充一点,在这场辩论中我是少数派,而质疑我立场的DEV是我尊敬和信任的人。这就是我诉诸意见的原因。 我可能还缺少一些东西,可能会误解了他们的观点。

1
行为异常DBCC Shrinkfile
我正在尝试对其中95%的数据已被存档和删除的数据库运行1GB的dbcc收缩文件。我用的是235GB的文件,其中9GB是数据/索引。我想缩小到50GB。我知道收缩数据库文件是不好的,它会导致碎片等。作为数据清除/收缩的一部分,我们还有一个重建idnex脚本。 当我在自己的工作站(四核,12GB RAM,2个SATA驱动器)上对数据库运行dbcc收缩文件脚本时,收缩过程大约需要8-10分钟。 当在数据库发布后数据清除的相同副本上运行相同的代码时,在我们的测试环境(80多个核,128GB RAM,SSD SAN)中,需要70分钟。请注意,运行收缩文件时,此服务器上几乎没有活动。它已运行4次,结果相同。 然后,我采取了另一种方法,将剩余的9GB移动到另一个文件组和物理文件。在空的230GB文件上运行dbcc收缩文件以将其缩减到50GB,在我自己的工作站上花费的时间不到1分钟。 使用相同的方法,在测试环境上,又需要70分钟以上的时间。 在测试环境运行70分钟的过程中,按照布伦特·奥扎尔(Brent Ozar)的脚本操作前后,我已经对waitstats进行了快照,并且返回的waittypes值得关注。下面的前3行: 秒采样时间采样持续时间(以秒为单位)wait_type等待时间(秒)等待次数平均每次等待的毫秒数 2013-05-28 11:24:22.893 3600 WRITELOG 160.8 143066 1.1 2013-05-28 11:24:22.893 3600 CXPACKET 20.9 13915 1.5 2013-05-28 11:24:22.893 3600 PAGELATCH_EX 11.1 443038 0.0 Windows事件日志显示没有异常。在这一点上,我要抓挠,为什么与独立工作站相比,忍者硬件要花这么长时间。


2
查找具有相同的子行集的父行
假设我有一个这样的结构: 食谱表 RecipeID Name Description RecipeIngredients表 RecipeID IngredientID Quantity UOM 关键RecipeIngredients是(RecipeID, IngredientID)。 查找重复食谱的一些好方法是什么?重复配方定义为具有完全相同的一组配料以及每种配料的数量。 我曾经考虑过使用FOR XML PATH将成分合并到一个单独的列中。我尚未对此进行全面探讨,但是如果我确保成分/ UOM /数量按相同顺序排序并具有适当的分隔符,那么它应该可以工作。有更好的方法吗? 有48K食谱和200K成分行。

1
我可以在镜像数据库上收缩事务日志文件吗?
这是先前问题的后续问题,该问题为何我无法缩小主体数据库上的日志文件。 简而言之,我设置了数据库镜像,但是忘记确保备份事务日志的作业再次运行,并且事务日志增长到将近60GB。 由于已建立镜像,因此在镜像服务器上重复进行了此大小增加,最终占用了所有磁盘空间,并使镜像数据库不可用。 每这一问题有关镜像数据库事务日志的维护,你不能备份日志上镜,但是当在特别要求评论有关如何收缩镜像数据库上一个杂草丛生的日志文件,一个注释中留下了 一种方法是将故障转移到镜像数据库并在该数据库上进行收缩。在非生产环境中进行彻底测试,以确保它具有您想要/期望的行为。 这似乎表明可能还有其他方法可以将镜像文件收缩到镜像上,并且这种方法在生产服务器上不一定是安全的。 有没有办法安全地缩小数据库镜像上的事务日志文件?

3
SSIS保持强制更改excel源字符串浮动
Excel中有一列应该是文本,但是SSIS在那里看到数字文本,并自动使其成为双精度浮点[DT_R8]。 我可以在“输出”分支的“外部”和“输出”列中手动更改它,但是“错误输出”只是拒绝让我更改相应的列。 Error at Extract Stations [Excel Source [1]]: The data type for "output "Excel Source Error Output" (10)" cannot be modified in the error "output column "Group No" (29)". Error at Extract Stations [Excel Source [1]]: Failed to set property "DataType" on "output column "Group No" (29)". 我尝试修改包xml。我尝试了IMEX=1,typeguessrow=0但这些都没有解决我的问题。这有什么解决办法吗?也有文章建议您修改注册表,以便excel在猜测数据类型之前读取更多的行,然后读取默认的8行。我不想走这条路,因为即使它可以工作,那我也必须在打算运行该程序包的计算机上修改注册表。 例如,要导入到SQL …

2
如何跟踪使SQL Server崩溃的SQL查询
我们有一台SQL Server 2008数据库服务器(它恰好在MS故障转移群集下运行,但是我认为这与这里无关)。 我们的应用程序运行用于数据库访问的Hibernate,并且由于我们最近从v3.1升级到3.6,所以我们一直在定期遇到SQL Server崩溃(每24-48小时,但有时更频繁)。 有问题的具体问题似乎与内存有关。在服务器崩溃之前(然后由故障转移群集管理器自动重新启动),我们得到了以下错误的负载: Error: 701, Severity: 17, State: 130. There is insufficient system memory in resource pool 'internal' to run this query. 偶尔(但定期)的消息 Error: 17300, Severity: 16, State: 1. (Params:). The error is printed in terse mode because there was error during formatting. Tracing, ETW, notifications etc …

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

3
SQL Server沙箱
我正试图为我们的报表开发人员设置一个沙盒,以供他们使用。我目前的计划是每天晚上“重置”数据库,但我不确定该怎么做。重置是指我实际上要从服务器上除一个数据库之外的所有数据库中删除任何用户表,视图,存储过程等。我想另一个选择是也删除并重新创建数据库,但是我很确定这也意味着要重新访问所有适当的AD组/人员。 我真的不知道这样做的最佳方式是什么,所以我希望你们中的一些人能够提供一些好的想法/建议。谢谢。 为了清楚起见,我们本质上希望使用我们的数据库来做到这一点:http : //try.discourse.org/t/this-site-is-a-sandbox-it-is-reset-every-day/57。唯一的不同是我们不想每天重新创建用户。 版本: SQL Server 2008 版本:开发人员和企业

1
识别文件增长事件
我在我的投资组合中发现了许多数据库,这些数据库是使用默认的自动增长设置(增量为1 MB或10%)创建的,这些设置已经扩展了很长时间。如果我想了解每个数据库文件的外部碎片数量,是否可以从元数据中获取一个数据库文件已被修改(自动增长或手动修改)多少次?为了明确起见,我是否可以从元数据中获得数据库生命周期中数据库文件修改的历史记录,而不仅仅是实例重启之后?

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

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.