标签: sql-server

如何在数据库重启后清除错误 15404(除了重启)

每隔一段时间(例如~几个月),SQL Server 代理每小时作业将开始报告错误 15404 并继续这样做直到被干预。

[298] SQLServer 错误:15404,无法获取有关 Windows NT 组/用户“DOMAIN_NAME\SomeDomainAccount”的信息,错误代码 0x6e。[SQLSTATE 42000] (ConnIsLoginSysAdmin)

有时,在手动重新启动 SQL Server 引擎和 SQL Server 代理服务后会立即发生第一次失败。可以通过重新启动机器来清除问题。

作业所有者是错误消息中列出的名称,并且是 SQL Server 管理员。

SQL Server 引擎服务帐户看起来是一个服务帐户(我相信它是默认安装帐户(比通用 NetworkService 好一个档次,以防止引擎/代理实例之间的干扰):

   NT Service\MSSQL$INSTNAME
Run Code Online (Sandbox Code Playgroud)

如果作业总是失败,那将是一回事,但由于作业在重新启动后成功,这让我认为像这样的服务帐户应该可以正常工作,并且存在一些 A/D 计时问题或可能存在错误。当 IT 被问及 A/D 配置时,回答通常是“没有任何变化”。

  • 重新启动引擎和代理服务可能会导致作业开始失败。
  • 机器重新启动即可解决问题。
  • 随后立即重新启动引擎和代理不再导致作业失败。

链接: 如何解决 SQL Server 8198 错误

sql-server sql-server-agent jobs active-directory

9
推荐指数
1
解决办法
2万
查看次数

SQL Server 已启动但未侦听任何端口

我新安装了 SQL Server 2012。尚未创建数据库。我可以使用 sa/password 打开 Management Studio。Binn\sqlservr.exe 作为服务启动,我可以在服务列表中看到它启动。但是,它没有侦听 1433 端口,甚至默认情况下也没有侦听任何端口,如下所示:

tasklist|find /I "sql"
Run Code Online (Sandbox Code Playgroud)

我有:

sqlservr.exe                  5668 Services                   0     40,112 K
Run Code Online (Sandbox Code Playgroud)

其中5668我认为是PID。然后获取 PID = "5668" 正在监听哪个端口:

netstat -ano | find /I "5668"
Run Code Online (Sandbox Code Playgroud)

但我除了空白什么都没有。另一方面,在本站搜索帖子后,我再次检查了我的 SQL Server 配置:开始->所有程序-> Microsoft SQL Server 2012 -> 配置工具 -> SQL Server 配置管理器-> SQL Server SQL Native Client 11.0配置 -> 客户端协议 -> TCP/IP -> 默认端口 1433。有 3 个服务,SQL Server(MyInstanceName)、SQL Server Agent(MyInstanceName) 和 SQL Server Browser。最后两个停止。

SQL Server 配置管理器-> SQL Server 网络配置-> MyInstanceName 的协议-> TCP/IP 默认禁用,在我启用它并重新启动服务后重复 netstat -ano …

sql-server windows

9
推荐指数
2
解决办法
4万
查看次数

SentryOne Plan Explorer 是否计算 UDF 中的读取次数?

我有一个这样的查询:

select dbo.fn_complexFunction(t.id)
from mytable t
Run Code Online (Sandbox Code Playgroud)

SQL Sentry Plan Explorer 中,我注意到我必须运行 Get Estimated Plan 才能使查询计划包含 UDF。

运行“获取实际计划”时,逻辑读取和其他指标似乎不包括 UDF 中发生的操作。在这种情况下,使用 Profiler 是唯一的解决方法吗?

sql-server-2008 sql-server execution-plan functions query-performance

9
推荐指数
1
解决办法
690
查看次数

“当连接关闭并返回到池中时,保留最后一个 SET TRANSACTION ISOLATION LEVEL 语句的隔离级别”?

MSDN 在线文章“ SQL Server 中的快照隔离”指出:

  • “隔离级别具有连接范围的范围,一旦使用 SET TRANSACTION ISOLATION LEVEL 语句为连接设置,它将一直有效,直到连接关闭或设置另一个隔离级别。当连接关闭并返回到池中时,保留最后一个 SET TRANSACTION ISOLATION LEVEL 语句的隔离级别。重用池连接的后续连接使用在连接池时有效的隔离级别“

这不是自相矛盾的段落(“直到”与“保留”)吗?

那么,如果在关闭连接并将其返回到池后“保留了来自最后一个 SET TRANSACTION ISOLATION LEVEL 语句的隔离级别”,应该如何理解:

  • 默认隔离级别将具有任意值(池中的不同连接将具有不同的隔离级别,其值将取决于重新打开的连接)?
  • 或所有连接的所有默认值?游泳池会改成最后一个吗?但在手之前又很陌生?

sql-server transaction isolation-level connection-pooling snapshot-isolation

9
推荐指数
2
解决办法
2612
查看次数

由于需要升级数据库,因此无法使用 WITH STANDBY 恢复此备份。在没有 WITH STANDBY 的情况下重新发出 RESTORE

我正在为两个数据库 db1 和 db2 创建日志传送。

它将从 SQL Server 2008 R2 升级到更新的版本 SQL Server 2012。

在 SQL Server 2008R2 上,它们都是dbi_version= 661:

DBCC TRACEON (3604);  
GO 
DBCC PAGE (db1, 1, 9, 3); 
GO 
DBCC TRACEOFF (3604); 
Run Code Online (Sandbox Code Playgroud)

我在待机模式下恢复它们:

RESTORE DATABASE db1 FROM DISK = 'Q:\db1.bak' WITH STANDBY = N'R:\SQLLog\db1.undo'
Run Code Online (Sandbox Code Playgroud)

其中一个恢复正常,升级,另一个给我错误:

由于需要升级数据库,因此无法使用 WITH STANDBY 恢复此备份。在没有 WITH STANDBY 的情况下重新发出 RESTORE。

sql-server sql-server-2008-r2 restore log-shipping standby

9
推荐指数
1
解决办法
5098
查看次数

sp_reset_connection 执行时间过长的可能原因是什么?

为什么sp_reset_connection通过 SQL Server Profiler 查看系统存储过程的执行时间会超过几毫秒?

我使用 SQL Server Profiler 从生产系统中获取了一个简单的跟踪,然后使用 SqlNexus 对其进行了分析。SqlNexus 表明 sp_reset_connection 的累积持续时间最长——占整个跟踪的 33%。观察到的持续时间范围为 0-7 秒(12 到 6,833,270 微秒),但平均为 0.956 秒。

我知道当池连接被重用时会调用 sp_reset_connection。我已经看到一个建议,这可能是由于无关的痕迹而发生的,但情况似乎并非如此。

我已经阅读调用 sproc 时服务器正在做什么,但我不相信在这种情况下,任何这些都会有问题——代码不会留下需要清理的开放事务或巨大的临时表。

我还查看了https://serverfault.com/questions/199974/sp-reset-connection-taking-a-long-time-to-run但这没有帮助。

编辑(2013-12-23): 在所有情况下,读写都是0,CPU几乎总是0(只有两个非零CPU实例,都是16ms)。

sql-server-2008 sql-server

9
推荐指数
1
解决办法
9564
查看次数

显示备份信息(成功和失败)SQL Server 的查询

我有两个备份两个不同数据库的作业。
作业 1 备份 DB1
作业 2 备份 DB2

DB1 由于驱动器 1 上的空间不足导致作业 1 失败而无法备份。为了解决这个问题,我只需要添加空间。没什么大不了的。当这个问题已经发生一个月时,我今天被告知了这一点。是的,我知道这很疯狂,但这是开发人员


我想获得 DB1 的完整备份历史记录。我知道我可以从 msdb.dbo.backupset 表中检索成功的备份信息,但我想知道是否存在显示数据库备份失败的查询。

我下面的查询显示了特定数据库从 12/31/13-1/27/14 的备份历史记录。信息包括服务器、数据库名称、备份开始和结束时间、备份数据库所需的总时间、数据库大小和备份集名称。

SELECT  
   distinct CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server, 
   msdb.dbo.backupset.database_name,  
   msdb.dbo.backupset.backup_start_date,  
   msdb.dbo.backupset.backup_finish_date, 
 CAST((DATEDIFF(second,  msdb.dbo.backupset.backup_start_date,msdb.dbo.backupset.backup_finish_date)) AS varchar)+ ' secs  ' AS [Total Time] ,

   Cast(msdb.dbo.backupset.backup_size/1024/1024 AS numeric(10,2)) AS 'Backup Size(MB)',   
   msdb.dbo.backupset.name AS backupset_name
FROM   msdb.dbo.backupmediafamily  
   INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id   
--Enter your database below
--and database_name = 'db_name_here'
and msdb.dbo.backupset.backup_start_date>'2013-12-31' and msdb.dbo.backupset.backup_start_date<'2014-01-27 23:59:59'
ORDER BY  
   msdb.dbo.backupset.database_name, 
   msdb.dbo.backupset.backup_start_date
Run Code Online (Sandbox Code Playgroud)

有没有办法通过修改我的代码来获取该信息?我可以通过执行针对 sysjobhistory …

sql-server-2005 sql-server backup

9
推荐指数
1
解决办法
4万
查看次数

如何在 sql server 中创建用户以使用 Management Studio 仅访问一个数据库

如何在 sql server 2008 R2 中创建用户以使用 Management Studio 仅访问一个数据库。

问候, 萨尔曼

sql-server users

9
推荐指数
2
解决办法
6万
查看次数

Free space of mdf and ldf does not match with database free space

In SSMS I saw file size related properties and found below details for one database. Here values does not match with other properties. Here size of the mdf, ldf and total size matches with other values under each window. But Available free space of mdf and ldf if added then it does not equal to Available free space shown in shrink database window and free space shown in database properties. This is true for any database. Why is it so? …

sql-server-2008 sql-server ssms sql-server-2008-r2

9
推荐指数
1
解决办法
6014
查看次数

帮助解决 SQL Server 错误“对 OLE DB 提供程序‘Microsoft.ACE.OLEDB.12.0’的临时访问”

因此,我们遇到了一个有趣的问题,即用户在尝试查询 SQL Server 2008 R2 中的视图时收到以下错误:

消息 7415,级别 16,状态 1,第 1 行 对 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”的临时访问已被拒绝。您必须通过链接服务器访问此提供程序。

在研究这个问题时,我发现有很多文章列出了对 OPENROWSET 参数进行更改、注册表值更改、AdHoc 分布式查询等(链接到下面的文章)

http://www.johnsoer.com/blog/?p=538

http://www.remotedbaexperts.com/Blog/dba_tips/2010/09/ad-hoc-access-to-ole-db-provider-microsoft-ace-oledb-12-0-has-been-denied/

按照上述链接中的步骤操作后,我们仍然收到错误消息。

这里需要注意的是,当我们创建一个测试帐户并给它 sa 时 - 它运行得很好。我的具有管理员访问权限的同事也可以毫无问题地运行查询。

此查询是从托管此实例的服务器本地的 excel 文件提供的。

任何人都知道 2008 年的任何其他修复程序?

sql-server excel linked-server

9
推荐指数
2
解决办法
2万
查看次数