帮助!我的主数据库损坏了,我什至无法使 SQL 实例联机!我有哪些选项可以让我的服务器备份?
我确实有 master 的备份,但是MSDN 页面“恢复 master 数据库”要求我以单用户模式启动实例,我做不到!
(注意:我不指定 SQL 版本的这个问题,以便作为更广泛适用的参考。在 DBA.SE 上有一些类似的问题,但没有涉及服务器无法启动的问题。)
我有一个简短的问题,为什么要使用use master;创建数据库?这是Microsoft 文档中的示例
USE master ;
GO
CREATE DATABASE Sales
ON
( NAME = Sales_dat,
FILENAME = 'C:\Program Files\...\saledat.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
FILENAME = 'C:\Program Files\...\salelog.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB ) ;
Run Code Online (Sandbox Code Playgroud) 在渗透测试期间,我发现了一个 MSSQL 数据库的多个 .bak 文件。我想全部恢复。在 Windows VM 中,我安装了 SQL Server 2017。为了恢复主数据库,我将服务器置于单用户模式并尝试如下恢复数据库(也通过 SSMS 尝试了相同的方法):
RESTORE DATABASE master
FROM DISK = 'C:\Foo\<path>\master.bak'
WITH MOVE 'master' TO 'C:\Foo\master.mdf',
MOVE 'master_log' TO 'C:\Foo\master_log.ldf',
REPLACE
GO
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误,如:
.. 无法恢复,因为它是由与此服务器 (14...) 不同版本的服务器 (13.00.4435) 创建的。
然后,我通过订阅 my.visualstudio.com 上的“Visual Studio Dev Essentials”下载了带有 Service Pack 1 的 MSSQL 2016。现在我得到了错误:
.. 无法恢复,因为它是由与此服务器 (13.00.4001) 不同版本的服务器 (13.00.4435) 创建的。
所以现在我需要更新。我下载了 MSSQL 2016 服务包 2,它给了我错误:
.. 无法恢复,因为它是由与此服务器 (13.00.5026) 不同版本的服务器 (13.00.4435) 创建的。
所以我似乎真的需要确切的补丁。但是,我找不到对应服务器版本的补丁列表。有没有人知道如何找到合适的补丁?
如果我能将 .bak 文件提取到它的 .mdf- 和 .ldf 文件就足够了。我找到了一堆用于恢复 MSSQL .bak 文件的工具,但希望它们都想连接到数据库(进行简单的恢复)。如果我能获得正确的 SQL Server …
在过去的几天里,我已经阅读了很多关于此的内容,但没有专门针对 Master db。
如果我从完整切换到简单,它会清除任何计划、统计数据等吗?任何性能命中?
我知道如何继续,只是以前从未见过完全康复的师父。
TIA
在解决为什么我在 SQL Server 2012 中看到与我们内部使用的数据库之一的这么多连接时。
我在网上找到的一个对我有帮助的查询是这样的:
SELECT DB_NAME(sP.dbid) AS the_database
, COUNT(sP.spid) AS total_database_connections
FROM sys.sysprocesses sP
GROUP BY DB_NAME(sP.dbid)
ORDER BY 1;
Run Code Online (Sandbox Code Playgroud)
但是,尽管在解决问题后,我看到与我们自己的自定义数据库的连接恢复到正常水平,但我始终看到与master数据库的连接数始终超过 30 个连接。
这对于 SQL Server 2012 是否正常?master运行此查询时,还有其他人获得 30 个或更多连接吗?
sql-server max-connections sql-server-2012 connections master-system-database
我刚刚发现,该master数据库包含一些其他数据库的表和存储过程的重复项。
例如,我有一个SomeDB包含表的数据库justTable。出于某种原因,该表的副本master也在其中,但没有数据。
这怎么可能?我敢肯定,在创建这些表和过程时,我使用的是相应的数据库,而不是master. 它们都存在于这些数据库中(它们应该存在),只是还有一个副本master。
我使用 Microsoft SQL Server Management Studio 2014 和 Redgate 添加(源代码控制和东西)。
我注意到我可以在master数据库中创建表、模式、存储过程等。
我不知道是什么授予此权限。这很烦人,因为当我们在 SSMS 中打开一个 *.sql 文件时,它默认与master 相关。如果在CREATE没有注意到并设置正确的数据库上下文的情况下执行操作,则在master 中创建表。
如果我们没有权限,我们会得到一个错误,注意到它并更改数据库上下文。有了权限,表就创建好了,后面我们才看到错误,需要删除重新创建。我注意到在master中已经错误地创建了一些表。
我想撤销每个人类用户的许可,但我害怕破坏某些东西。我不知道某些 SQL Server 例程是否需要在那里创建的权限。
在不破坏 SQL Server 的情况下从master撤销创建权限的最佳方法是什么?
security sql-server permissions sql-server-2012 master-system-database
sql-server ×7
connections ×1
corruption ×1
ddl ×1
permissions ×1
restore ×1
security ×1
t-sql ×1