Hop*_*00b 6 sql-server t-sql sql-server-2008-r2
我需要获取 SQL 服务器迁移项目的数据库大小列表。我们要迁移的 SQL Server 服务器安装了三个实例,一个是默认实例,两个是命名实例。如果重要的话,它在 Server 2008 R2 上运行 SQL Server 2008 R2。
为了得到这个列表,我删除了我在上一个职位上作为事实上/意外 DBA 使用的旧 T-SQL“脚本”,它在默认实例上按预期工作,但没有返回任何一个命名实例的数据。
SELECT [Database Name] = DB_NAME(database_id),
[Type] = CASE WHEN Type_Desc = 'ROWS' THEN 'Data File(s)'
WHEN Type_Desc = 'LOG' THEN 'Log File(s)'
ELSE Type_Desc END,
[Size in MB] = CAST( ((SUM(Size)* 8) / 1024.0) AS DECIMAL(18,2) )
FROM sys.master_files
GROUP BY GROUPING SETS
(
(DB_NAME(database_id), Type_Desc),
(DB_NAME(database_id))
)
ORDER BY DB_NAME(database_id), Type_Desc DESC
GO
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我原因(以及如何解决),或提出更好的解决方案吗?
(它一定是FROM sys.master_files一点,因为它还能是什么,但我不确定我应该在命名实例上使用什么。)
编辑:下面是我在我的命名实例上看到的内容,无论如何......所以如果这段代码确实/应该适用于命名实例,那么关于它为什么不适用于这些实例的想法将不胜感激。
Kin*_*hah 10
如果您只需要整个数据库的大小,那么下面的脚本将为您提供帮助:
SELECT @@servername as server_name,
d.name,
CONVERT(DECIMAL(10,2),(SUM(size * 8.00) / 1024.00)) Size_MBs
FROM sys.master_files mf
INNER JOIN sys.databases d ON d.database_id = mf.database_id
WHERE d.database_id > 4 -- Skip system databases
AND d.state_desc = 'ONLINE'-- ONLY get size for ONLINE database.
GROUP BY d.name
ORDER BY d.name
Run Code Online (Sandbox Code Playgroud)
如果您想自动将数据库从一台服务器迁移到另一台服务器,我强烈建议您使用sqlmigration - 一种将您的数据库、作业、登录名等从一台服务器迁移到另一台服务器的 powershell 脚本。此外,如果您要从 sql server 的一个版本迁移到更高版本(2012 或 2014),请注意迁移前和迁移后的步骤。
根据您的数据库大小和停机时间,您可以实施多种方法来最大限度地减少整个迁移的停机时间 - 例如使用日志传送或镜像,然后在切换期间,仅故障转移到新服务器等。
始终准备并测试您的迁移和回滚过程。
编辑:从您的屏幕截图来看,您似乎没有权限。你能不能做一个select * from sys.master_files