Questions tagged «sql-server»

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

4
SQL Server脚本删除Active Directory中不再存在的帐户
我们有一个SQL Server 2000,不久将迁移到SQL Server2005。它具有多年创建的Windows身份验证帐户,这些帐户在Active Directory中已不存在,这会阻止复制数据库向导在新服务器上创建这些帐户。 是否存在脚本或某种自动删除活动目录中不再存在的帐户的方法? 编辑:为了清楚起见,需要删除的登录名在SQL Server 2000上,它不支持该DROP LOGIN命令。 另外,可以手动删除SQL Server 2000中的登录名(我认为),exec sp_droplogin 'loginname'但是在我的情况下,无论我使用“ domain \ loginname”还是“ loginname”,都找不到登录名。 只是增加了混乱,exec sp_revokelogin 'domain\loginname'看起来确实有效。 编辑2:终于解决了问题。许多有问题的登录都以编程方式添加到数据库中,尽管它们在某种意义上可以以用户可以连接的方式工作,但是当SQL Server预期没有域时,用户名与NT登录名的域前缀登录不匹配,反之,反之亦然。 为解决此问题,我修改了sp_droplogin过程以取出其中一个出错的检查。 我接受我自己的答案,因为它可以在SQL Server 2000中使用。

2
随着时间的流逝,SQL Server变得越来越慢,直到我们不得不重新启动它为止
我们有一个混合OLAP / OLTP工作负载的数据库。这些查询是非常特殊的,并且是在中间层应用程序服务器中动态创建的。当我们启动服务器时,性能是可以接受的,但是在所有可用内存(30GB)用完之前,内存消耗越来越多。在那之后,系统变得越来越慢。 像这样的命令Dbcc freeproccache无效。 交易select * from sys.dm_tran_session_transactions不多(不超过系统正常时),有时此列表为空。 的第一个结果dbcc memorystatus是 VM Reserved 42136628 VM Committed 1487176 Locked Pages Allocated 24994048 Reserved Memory 1024 Reserved Memory In Use 0 重新启动SQL Server可以解决该问题一段时间。 是什么原因导致这种现象?如何避免呢? 如果真正的解决方法太困难了,是否有一条命令可以强制SQL Server在不重新启动DBMS的情况下实际释放所有内存? 服务器在专用硬件(不是VM)上运行。我们有一些预定的工作,但是暂时禁用了它们,没有任何变化。同一台服务器上还运行着其他中层应用程序,但是它们使用的内存不超过2GB,CPU可以忽略不计,几乎没有I / O。我们没有更改就重新启动了所有此类应用程序。

1
使用复制数据库向导时发生超时过期错误
微软让我相信,SQL Server 2012复制数据库向导是将SQL Server 2000数据库复制到SQL Server 2012的最佳方法。经过几个小时的努力,我得以解决一些问题,并且能够导入到将中等大小的SQL Server 2000数据库转换为SQL Server 2012。 但是,对于30GB的数据库,该向导始终会失败,并出现以下错误: 消息:传输数据时发生错误。有关详细信息,请参见内部异常。 StackTrace:在Microsoft.SqlServer.Dts.Tasks.TransferObjectsTask.TransferObjectsTask.TransferDatabasesUsingSMOTransfer() 处的Microsoft.SqlServer.Management.Smo.Transfer.TransferData() InnerException->超时已过期。在操作完成之前超时或服务器没有响应。 CREATE DATABASE失败。列出的某些文件名无法创建。检查相关错误。 StackTrace: 位于System.Data.SqlClient.SqlConnection.OnError(SqlException异常,布尔值BreakConnection), 位于System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() 在System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj) 我已经仔细检查过,这不是文件路径,权限或磁盘空间问题。我认为该CREATE DATABASE步骤需要2分钟左右的时间,并且向导假定操作已超时。我手动创建了一个具有相同文件路径的空数据库,并使用SQL进行了文件大小调整,这是可行的。有趣的是,一个1GB的数据库副本由于相同的错误而失败,并在第二次尝试中成功。 请帮忙。

1
服务器崩溃后如何还原复制
我们在一个SQL Server 2005实例上有两个数据库,它们之间具有事务复制(作为文章有3个表)。该服务器既充当发布者又充当分发者。 然后服务器上的RAID发生故障。但是.mdf,在崩溃之前,我们设法分离并复制了几乎所有文件。 还原系统后,我们重新安装了SQL Server,还原了系统数据库(主数据库,模型数据库,msdb数据库)并将.mdf文件放置在相同的路径中。就这样开始了。 复制出现问题。尽管“ 本地订阅”文件夹包含有问题的订阅,但“ 本地出版物”文件夹为空。当我尝试添加新出版物时,我得到了: 新发布向导在检索发布名称时遇到一个或多个错误。 执行Transact-SQL语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo) 无效的对象名称“ dbo.syspublications”。(Microsoft SQL Server,错误:208) 我决定尝试删除左侧订阅(最终我设法做到了)并禁用服务器上的发布和分发,这给了我: SQL Server无法禁用“ someserver”上的发布和分发。 无效的对象名称“ dbo.syssubscriptions”。EXECUTE之后的事务计数表明缺少COMMIT或ROLLBACK TRANSACTION语句。上一个计数= 0,当前计数=1。EXECUTE之后的事务计数指示缺少COMMIT或ROLLBACK TRANSACTION语句。上一个计数= 0,当前计数=1。EXECUTE之后的事务计数指示缺少COMMIT或ROLLBACK TRANSACTION语句。上一个计数= 0,当前计数=1。EXECUTE之后的事务计数指示缺少COMMIT或ROLLBACK TRANSACTION语句。上一个计数= 0,当前计数=1。EXECUTE之后的事务计数指示缺少COMMIT或ROLLBACK TRANSACTION语句。先前计数= 0,当前计数=1。将数据库上下文更改为'master'。(Microsoft SQL Server,错误:208) 似乎某些信息未从系统数据库备份中恢复(可能distribution数据库可能丢失了某些内容)。 我也尝试遵循无法禁用发布和分发中给出的答案。但是没有成功。我尝试syspublications同时在master和中创建distribution,但未更改。 那么,如何使复制在该服务器上工作? 试图在服务器上发布一些其他数据库,并且可以正常工作。因此,问题似乎与已发布的数据库有关。如何清除它以管理在其上创建新出版物? System Tables 问题数据库的子文件夹将丢失发布数据库时创建的复制表。 在复制监视器中,我可以看到那些旧的订阅,但在Replication文件夹中不可用 。

3
使未使用的数据库脱机的性能优势
我有一些用于遗留应用程序的数据库,这些数据库在虚拟机中运行,这些虚拟机当前处于关闭状态,直到有人需要查看一些历史记录为止。我已将这些应用程序使用的每个数据库设置为脱机,但我想知道: 将这些未使用的数据库置于脱机状态,而不是使它们处于联机状态,但是在未与它们建立任何连接或对它们运行查询的情况下,是否具有性能优势?

2
可用性组如何与预定作业和SSIS包一起使用?
我在AlwaysOn可用性组中的数据库中设置了2个SQL Server。 我还设置了针对数据库运行的作业。在故障转移期间,如何确保作业将继续在辅助服务器上运行?我是否需要在两台计算机上都安装作业和SSIS软件包,并在辅助计算机上手动禁用它们...然后在发生故障转移时手动启用它们?还是有内置的功能来解决这个问题?

3
SQL Server存储过程的条件编译
简短版:是否有某种方法可以使用Visual Studio 2010的SQL Server数据工具有条件地编译SQL Server数据项目中的TSQL代码块? 我正在Visual Studio 2010中使用SQL Server数据工具在实验性SQL Server Express数据库上工作。如果一切正常,最终的目标将是企业SQL Server平台。我在一个盒子上有一个2008实例,在另一个盒子上有一个2012实例,因为我的公司也正在从2008年迁移到2012年,以迁移许多企业数据库。 在我使用的其他编程语言中,预处理器指令使按条件编译部分代码库变得容易。最常见的用途是在受限制的部分中为不同的平台使用不同的代码,或者从发行版本中排除调试输出代码。 在我正在处理的某些存储过程中,这两个都可能非常有用。有这样的东西吗?我知道我可以sqlcmd在部署过程中使用变量交换特定的值,但是我不知道如何使用它来包含或排除随后的代码块。 例: #IF $(DebugVersion) = 'True' -- A bunch of useful PRINTs and what not #ELSE SET NOCOUNT ON #ENDIF #IF $(SSVersion) = '2012' SET @pretty_date = FORMAT(@some_date, 'dddd, MMM dd, yyyy') #ELSE SET @pretty_date = CAST(@some_date …

2
Kerberos身份验证不适用于SQL Server 2012中的链接服务器
我正在使用2个在Windows Server 2012上运行SQL Server 2012的SQL Server来设置DEV / TEST环境。我们从Windows Server 2008上的SQL Server 2005迁移,在此我们已经正确启动了该服务器。 在SQL Server 2012中,Kerberos身份验证不起作用。 每个服务器都有自己的Active Directory帐户,该帐户具有通过Active Directory用户和计算机授予的“写入服务主体名称”和“读取服务主体名称”权限。每当我连接到SQL Server 2005服务器并运行时: SELECT net_transport, auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SPID; 我知道了: net_transport auth_scheme TCP KERBEROS 当我对新的SQL Server 2012实例执行相同的查询时,我看到: net_transport auth_scheme TCP NTLM 如果我使用SetSPN -Q MSSQLSvc/*Active Directory查询服务主体名称,则会看到列出的2005和2012服务器,与服务器名称完全相同。 例如: MSSQLSvc/SERVERa2005.domain.inet MSSQLSvc/SERVERa2005domain.inet:1433 MSSQLSvc/SERVERb2005.domain.inet MSSQLSvc/SERVERb2005domain.inet:1433 …

3
如何在SSMS中修改用户界面语言?
如何在SQL Server Management Studio中修改用户界面语言? 例如,如果我以英语安装,但希望以日语查看(仅举一个可能的例子)。 我正在非英语作为第一语言的环境中运行此环境,并且希望我的所有窗口都以自然语言阅读。(我特定的自然语言不是很重要吗?)

1
保存视图时,如何防止SSMS重写代码?
我正在创建一个视图,该视图使用带有与WHERE此类似的子句的语句: WHERE ( col1 IS NOT NULL OR col2 IS NOT NULL ) AND NOT EXISTS (SELECT ...) 平均需要10秒钟才能运行。但是,当我尝试将此查询另存为View时,SQL Server(或MS SQL Server Management Studio客户端)“优化”查询以使用此结构,而是: WHERE (col1 IS NOT NULL AND NOT EXISTS (SELECT ...)) OR (col2 IS NOT NULL AND NOT EXISTS (SELECT ...)) 将查询速度减慢到6分钟以上。有什么方法可以禁用此行为,以便视图完全使用我提供的SQL查询吗?

1
在48个核心AMD Opteron盒上包含24个物理tempdb文件的TempDB争用
我刚刚收到有关SQL Server 2005实例的以下通知。该实例的核心与tempdb文件比为2:1,总tempdb文件数为24。争用不应发生-我将如何检测这种争用的根源?TempDB和所有其他数据库通过10 GB以太网存储在SAN存储上。SAN具有在一个RAID-60阵列中配置的46个10k SAS驱动器。该阵列与多台VMWare服务器和一台或两台Exchange服务器共享。 来自Idera SQL Diagnostic Manager的通知: 2012年11月8日10:49:00 PM,MGSQL01上的Tempdb争用(ms)至关重要。 在MGSQL01上检测到Tempdb锁存器争用。检测到的总等待时间为1782毫秒。这表明在tempdb中分配映射上的争用会影响性能。如果这是一个经常性的问题,则可以通过遵循有关tempdb文件数,大小和IO子系统的最佳实践来缓解。 PFS等待时间:1782 ms GAM等待时间:0 ms SGAM等待时间:0 ms Tempdb争用(ms):tempdb分配映射(GAM,SGAM和PFS)的当前等待时间,以毫秒为单位。仅在运行SQL 2005或更高版本的实例上会发出此警报。

1
与OUTPUT合并似乎没有做对的事情
我正在向表添加外键,并删除任何违反FK的行,然后将它们复制到ModifiedTable_invalid表中。作为脚本的一部分,我具有以下MERGE命令: MERGE ModifiedTable t1 USING TargetTable tt ON t1.JoinColumn = tt.JoinColumn WHEN MATCHED THEN UPDATE SET t1.FkColumn = tt.FkSource WHEN NOT MATCHED BY SOURCE THEN DELETE OUTPUT DELETED.* INTO ModifiedTable_invalid; 但是,此命令似乎是将ModifiedTable中的每一行插入到ModifiedTable_invalid中,而不仅仅是由MERGE命令删除的行。这是怎么回事,以及如何将其删除的行仅放入ModifiedTable_invalid中?

2
关闭所有SQL Server数据库上的自动收缩。为什么不起作用?
我以为可以使用sp_MSforeachdb解决此问题,但是却收到错误消息。 sp_MSforeachdb ' BEGIN USE [?] DECLARE @dbid INT SET @dbid = DB_ID() IF(@dbid > 4) BEGIN --PRINT ''[?]'' + CONVERT(VARCHAR, @dbid) --ALTER DATABASE [?] SET AUTO_SHRINK OFF END END; ' 如果我在没有注释PRINT行的情况下运行上述查询,则会获得除系统数据库以外的所有数据库的列表。但是,当我取消注释ALTER DATABASE行时,出现以下两个错误消息: 消息5058,级别16,状态2,行9 无法在数据库“ master”中设置选项“ AUTO_SHRINK”。 消息5058,级别16,状态1,行9 无法在数据库“ tempdb”中设置选项“ AUTO_SHRINK”。 这似乎在某种程度上破坏了该操作,因此只有部分数据库被禁用了自动收缩。 知道如何在所有数据库上禁用自动收缩吗?额外的问题:为什么我的方法不起作用?

3
SQL Server虚拟日志大小
我有些偶然,是DBA,是一位从对数据库管理了解甚少的人那里继承了几个数据库服务器(2005年和2008年)的开发人员,而且似乎对了解更多有关该主题的兴趣甚至更少。 我正在学习,目前正在尝试找出事务日志文件。 我们所有的数据库都已使用简单的恢复模型和自动收缩功能进行设置。我知道使用自动收缩通常是一个可怕的主意,但我的理解是这样做是为了防止事务日志变得不受控制。(自动收缩实际上是收缩日志文件还是仅收缩数据库?) 我发现有关SQL Server 2012的信息,并想知道2005和/或2008是否正确,以及它的确切含义:“当数据库使用简单恢复模型时,数据库引擎会在检查点后截断事务日志。 ..]当虚拟日志已满70%时,数据库引擎会在简单恢复模式下触发自动检查点。” 虚拟日志大小在哪里指定? 我想在所有数据库上禁用自动收缩,但是在此之前,我需要知道日志文件不会很快失去控制。 任何帮助将不胜感激。

2
在存储过程中选择权限?
我已授予用户使用动态SQL的存储过程的执行权限。但是当他尝试执行它时,他得到了错误: 对对象“ [表名]”,数据库“ [数据库名]”,模式“ dbo”的SELECT权限被拒绝。 是否需要向用户授予存储过程使用的任何表的权限?这对我来说真的没有任何意义。

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.