2016-05-13 40 views
2

我了解以下内容:SQL服务器 - 获取有关通过执行获取数据库名称的所有数据库和文件

select * 
from master..sysdatabases 
order by Name 

我希望能够做的是恢复所有有关每个数据库服务器上的文件。要获得每个数据库的文件列表我必须做类似下面的东西:

use [database] 

select * 
from sysfiles 

不幸的是,我需要使用前缀sysfiles只能从我使用的数据库拉。

理想情况下,我希望能够将此视图包装到可通过odbc数据库监视项目调用并挂接到zabbix的视图中。

比方说,我有3个数据库:

DB1 
DB2 
DB3 

我希望有一个观点,即会显示

Database Name FileName 
-------------------------------- 
DB1    c:\mnt\db1.mdf 
DB1    c:\mnt\db1.ldf 
DB2    c:\mnt\db2.mdf 
DB2    c:\mnt\db2.ldf 
DB3    d:\mnt\db3.mdf 
DB3    d:\mnt\db3.ldf 

回答

3

可以使用sys.databasessys.master_files意见查询它:

SELECT 
    db.name, 
    FileName = mf.name, 
    PhysicalFileName = mf.physical_name, 
    Type = mf.type_desc 
FROM sys.databases db 
INNER JOIN sys.master_files mf 
    ON mf.database_id = db.database_id 
WHERE db.name NOT IN('msdb', 'master', 'tempdb', 'model') 
ORDER BY db.name 
+1

这太棒了!问题是,需要什么安全级别?如果我运行在拥有完整SA访问权限的沙箱中,我可以获得所有内容,但是在我们的开发环境中,这种情况更加锁定,因此我得不到任何东西,因此我猜这是与我正在使用的帐户相关的权限问题。 – whoisearth

+1

证实了这个问题是用sys.master_files表我有权访问sys.databases。 – whoisearth

+1

这是“教一个人钓鱼”的日子。 sys.master文件的文档(https://msdn.microsoft.com/en-us/library/ms186782.aspx)说:“查看相应行所需的最低权限是CREATE DATABASE,ALTER ANY DATABASE或查看任何定义。“ –

相关问题