Questions tagged «sql-server»

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

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


3
获取MS SQL Server释放磁盘空间
管理不善的数据库表已经变得非常庞大。48个以上的孤儿记录。我正在尝试清理它并将危险的满硬盘驱动器恢复到正常状态。我将从该表中删除大约4亿条记录。当我键入时,它正在运行。我注意到我的硬盘驱动器空间没有减少,但是系统表查询的内存减少了,我正在运行以获取表大小。该数据库正在使用“简单恢复模型”。 有许多与此类似的问题,有答复说您需要缩小数据库。但是他们继续解释由于数据等的分散,这样做是多么的糟糕/可怕。 由于数据库不应该具有此大小。缩小它仍然对我有害吗? 这是一个生产数据库。如果缩小,会导致停机或锁定数据库吗? 在SQL Server Management Studio中,您有两个选项用于收缩,数据库或文件。根据我的情况,最好的选择是什么? 数据库应具有的可用空间百分比是否有规定? 即使阅读了shrink的标签说明,我也不想这样做。还有另一种方法吗?

1
无法还原(错误3456)
我的情况不容易弄清楚,以为我会在这个论坛上问其他人是否有建议。 我正在Windows Server 2008R2 Enterprise上运行SQL Server 2008 R2 Standard SP3。 数据库需要一些维护,事实上,我需要在另一台服务器上进行还原。我使用COPY_ONLY进行了完整的数据库备份,再加上一组4个日志备份。 在开始之前,创建tlogbackup1 从转换FULL为BULK_LOGGED恢复模式 添加新文件组 将文件添加到newfilegroup 将newfilegroup设置为默认 选择进入表(在newfilegroup上) 放下原始表 删除原始文件 删除原始文件组 更改新表的名称以匹配原始表 更改newfilegroup的文件名以匹配原始文件组 更改目录中的文件名以匹配原始文件名 在操作系统级别更改文件名以匹配原始文件名 将默认文件组设置为原始文件组 使数据库联机 从转换BULK_LOGGED为FULL恢复模式 完成所有步骤后,创建tlogbackup2 由于还原服务器上驱动器号的更改,所有备份的还原必须使用WITH MOVE。 恢复步骤: RESTORE database SomeDB FROM DISK = 'D:\REPRO\SomeDB.bak' WITH MOVE 'SystemData' TO 'D:\SQLDATA\SomeDB.mdf' ,MOVE 'SystemDataPDS' TO 'D:\SqlData\SomeDB.ndf' ,MOVE 'SystemData_log' TO …

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
使用xml参数更新多个数据时,如何避免使用合并查询?
我正在尝试使用值数组更新表。数组中的每个项目都包含与SQL Server数据库中的表中的一行相匹配的信息。如果表中已经存在该行,则使用给定数组中的信息更新该行。否则,我们在表中插入新行。我已经基本描述了upsert。 现在,我试图在采用XML参数的存储过程中实现这一目标。我使用XML而不是表值参数的原因是因为这样做,我将不得不在SQL中创建自定义类型并将该类型与存储过程相关联。如果我曾经更改过存储过程或数据库模式中的某些内容,则必须重做存储过程和自定义类型。我想避免这种情况。此外,TVP优于XML的优势对我的情况没有用,因为我的数据数组大小永远不会超过1000。这意味着我无法使用此处提出的解决方案:如何在SQL Server 2008中使用XML插入多个记录 另外,这里的类似讨论(UPSERT-MERGE或@@ rowcount是否有更好的替代方法?)与我要的内容有所不同,因为我试图将多行插入表中。 我希望我可以简单地使用以下查询集从xml向上插入值。但这是行不通的。仅当输入为单行时,才应采用这种方法。 begin tran update table with (serializable) set select * from xml_param where key = @key if @@rowcount = 0 begin insert table (key, ...) values (@key,..) end commit tran 下一个替代方法是使用穷举的IF EXISTS或其以下形式的变体之一。但是,我以效率不佳为由拒绝了这一点: IF (SELECT COUNT ... ) > 0 UPDATE ELSE INSERT 下一个选择是使用Merge语句,如下所述:http …

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配置管理器”和“ …

3
程序集'system.web,版本= 4.0.0.0,文化=中性,publickeytoken = b03f5f7f11d50a3a'。在SQL目录中找不到
我正在尝试使用System.Web的HTTPUtility.UrlDecode方法部署SQL CLR函数,但是无法部署它。收到错误: .Net SqlClient数据提供程序:消息6503,级别16,状态12,行1程序集'system.web,version = 4.0.0.0,culture = neutral,publickeytoken = b03f5f7f11d50a3a。' 在SQL目录中找不到。 功能(作为SSDT项目的一部分): using System; using System.Web; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; public partial class UserDefinedFunctions { [Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true)] public static SqlString udf_UrlDecode(SqlString encodedXML) { string decodedXML; decodedXML = HttpUtility.UrlDecode(encodedXML.ToString()); return new SqlString(decodedXML); } } 与这个线程有关。我是带有VS2012 SSDT和数据库项目的SQL …

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
基于客户端TCP端口的SQL Server跟踪
我有一个Windows终端服务器,其中许多用户通过RDP登录以运行应用程序。该应用程序为每个用户与SQL Server 2008 R2实例建立一个或多个连接。所有用户都使用相同的SQL登录名访问相同的数据库。我希望能够跟踪特定用户的SQL会话,但是我还没有找到一种方法来确定哪个SQL会话属于哪个用户。但是,我能够确定应用程序的每个实例使用的源TCP端口。 有没有一种方法可以基于客户端的TCP端口来跟踪SQL会话?


1
进行还原时是否尾日志备份?
通常,在将数据库从生产服务器还原到非生产服务器时,我将使用WITH REPLACE选项,就像我忘记了有关未备份尾日志的错误时一样。 根据MSDN,在恢复之前,我确实应该备份我的尾日志: 如果数据库处于联机状态,并且您打算对数据库执行还原操作,请先备份日志尾部。为避免在线数据库出错,必须使用BACKUP Transact-SQL语句的…WITH NORECOVERY选项。 我这样做的方式有哪些危险或不利之处?为什么备份尾部日志对我来说是最有利的? 我正在使用SQL Server 2008R2,但我假设此查询与SQL Server的大多数较新版本相关,因此最初并未对其进行标记。

1
ALTER TABLE…从常规表切换到分区表失败
下面的代码执行以下操作: 在C:\ TEMP中创建一个数据库play_partition 创建两个相同的分区表play_table和archive_play_table 将play_table分区1切换到archive_play_table分区1 在与play_table分区2相同的文件组上,创建一个新的未分区表temp_table,其结构与play_table相同。 将play_table_partition 2切换到temp_table 尝试将temp_table切换回play_table分区2并失败 消息4982,级别16,状态1,第64行ALTER TABLE SWITCH语句失败。检查源表'play_partition.dbo.temp_table'的约束是否允许目标表'play_partition.dbo.play_table'上分区2定义的范围所不允许的值。 为什么会失败? 我正在使用SQL Server 2014(企业版试用版)。 问候, 科林·戴利 http://www.colindaley.com/translator /* Playing with partitioned tables */ USE master; GO DROP DATABASE play_partition; GO CREATE DATABASE play_partition ON PRIMARY( NAME = play_partition , FILENAME = 'C:\TEMP\play_partition.mdf') ,FILEGROUP play_fg1( NAME = play_fg1 ,FILENAME …

1
SQL Server升级破坏了数据库快照后,如何“删除”数据库快照
我正在处理SQL Server升级到2014后无法删除数据库快照的问题。快照已失效,但不能删除。 现在,尽管“连接”项中的注释令人失望,但我认为此问题最终将得到解决。但是,我需要尽快处理。 有没有办法删除由于该错误而无法删除的数据库快照?我担心我已经用尽了所有有据可查的手段来做到这一点。可能需要对系统表进行未记录的修改。有没有一种方法可以强制删除数据库(快照)?

3
“将数据库部署到SQL Azure”任务丢失
我最近在拥有的工作站上安装了SQL Server 2014 Express,并且正在尝试将其部署到SQL Azure。我之前在使用SQL Server 2012 Express的以前的工作站上通过以下操作完成了此操作: 右键单击数据库>任务>“将数据库部署到SQL Azure” 在SQL Server 2014上,该选项完全消失,取而代之的是一个新选项:“将数据库部署到Windows Azure VM” 我无法弄清楚为什么缺少部署到SQL Azure的选项。SQL Server 2014是否需要单独安装某些东西?根据我在网上阅读的内容,这两个选项都应该在2014年版中同时出现。Microsoft是否为SQL Server 2014 Express删除了此选项?

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.