属性大小不适用于数据库


14

我最近将数据库还原到了从(SQL Server 2008 R2 Enterprise)备份的同一实例,发现我无法访问数据库属性。

我已经完成以下工作:

  • 检查数据库所有者使用正确设置sp_helpdb
  • 将数据库所有者更改为sa。不能解决。
  • 将数据库所有者更改回我的sysadmin用户。不能解决。
  • DBCC updateusage针对受影响的数据库发出。不能解决。
  • DBCC CheckDB在还原的副本上运行到另一个实例。找不到腐败。访问数据库属性窗口时,从同一备份文件还原的副本没有引发任何错误。

有人可以帮忙吗?

尝试查看属性时收到的错误消息是:

无法显示请求的对话框。(SqlMgmt)
属性大小不适用于数据库“ [DBNAME]”。
该属性对于该对象可能不存在,或者由于访问权限不足而无法检索。(Microsoft.SqlServer.Smo)

sysadmin在这种情况下。

更新:根据建议,我创建了一个新用户,使其成为sysadmin并将数据库所有者更改为该用户。不幸的是没有修复。我将查看探查器跟踪是否产生任何有用的信息。

更新:Aaron-原始数据库已重命名并脱机,但仍在该实例上。然后使用原始名称还原了该数据库的备份。新数据库文件的文件名与原始文件名不同,因为它们与原始mdf / ldf位于同一文件夹中。恢复的数据库当前正在正常驱动我们的关键应用程序。


@Shanky我正在使用SSMS 2014,并已尝试从多个客户端/服务器进行此操作。
彼得

也许还对它工作的数据库运行探查器跟踪,并查看它在工作和不工作的数据库之间还有什么不同–一定有所不同吗?
Pimp Juice IT

恢复大型数据库后,我最近遇到了此问题。我很遗憾地说它已经清除了。可能是一个愚蠢的问题,但是您是否检查了错误日志中的任何不良信息?
dwjv 2015年

Answers:


8

不幸的是,我已经通过重新启动SQL Server服务来解决此问题。

我最初的想法是分离/附加数据库。并不是说我认为这实际上可以解决问题,我只是在某个地方的论坛上阅读过。这没有效果。

遗憾的是,我没有做PJ Mahoney建议的事情:追踪。我希望我能再次看到此问题,以便找出是否有痕迹。谢谢你的建议。

至少回答我自己的问题意味着我不必再看到其他有关更改数据库所有者的建议;

谢谢


5

尝试修改生产数据库的日志文件的文件增长属性时,我遇到了相同的错误。我尝试使用SSMS,但遇到了相同的错误:

属性大小不适用于XXX数据库。

我改用T-SQL修改数据库日志文件。

USE [master]
GO
ALTER DATABASE [MyDatabase] MODIFY FILE ( NAME = N'MyDatabase_log', FILEGROWTH = 524288KB )
GO

命令完成后,我能够在SSMS中打开数据库属性。我希望这对其他人有用。


有趣!这里注释如果为你工作
彼得

工作正常,对吗?
Kiquenet '19

1

这可能在非常繁忙的数据库上发生,甚至即使该数据库通常不是一个繁忙的数据库也可能发生,但是此刻它正在执行一条正在迅速改变日志文件大小的语句。例如,如果您尝试从表中删除大量行(百万),则引擎将不得不记录每行以进行回滚,这将迫使日志文件快速增长。在此过程中,如果尝试在SSMS中打开数据库属性,则会看到错误消息“属性大小不可用。”。

重现它的另一种方法如下:获取一个非常大的数据库(100+百万行),并在其上执行ALTER TABLE语句(例如,将char列转换为varchar)。看到您的日志文件以每秒兆兆甚至千兆字节的速度爆炸。同样,在发生这种情况时,SSMS将无法为您提供数据库大小,因为它的更改速度太快而无法准确。

不用说,请不要在实时服务器上尝试此操作。:)


1

刚刚从跟踪中发现了这一点,显然这被正在运行的INDEX REBUILD操作阻止了

我的具体错误是

属性SpaceAvailable不适用于数据库'[dbOverwatch]'。该属性对于该对象可能不存在,或者由于访问权限不足而无法检索。(Microsoft.SqlServer.Smo)

SELECT
(SELECT SUM(CAST(df.size as float)) FROM sys.database_files AS df WHERE df.type in ( 0, 2, 4 ) ) AS [DbSize],
(SUM(a.total_pages) + (SELECT ISNULL(SUM(CAST(df.size as bigint)), 0) FROM sys.database_files AS df WHERE df.type = 2 )) AS [SpaceUsed]
FROM
sys.partitions p join sys.allocation_units a on p.partition_id = a.container_id left join sys.internal_tables it on p.object_id = it.object_id

它必须具有非常低的超时值,但是当您尝试访问属性时,也许可以检查是否有任何被阻止的东西


有趣。我会测试的。
彼得

0

在针对数据库部署SQL Server数据库工具解决方案的过程中(在SQL Server 2008 R2上),我收到此错误消息。部署完成后,错误消失了。这有点令人讨厌,因为DB既不在单用户模式下也不处于只读状态(不是Corse),也没有其他任何指示原因的原因。

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.