SQL Server目录视图教程:数据库和文件目录视图

日期: 2011-02-09 作者:Robert Sheldon翻译:冯昀晖 来源:TechTarget中国 英文

SQL Server 2008提供了上百个系统视图,这些视图可以让你查看数据库和服务器元数据,而无需访问真正的数据源。系统分类视图的目录在通过数据库引擎提取信息时特别有用。SQL Server目录视图是视图的集合,为目录元数据提供通用的接口。   通过目录视图你能访问到的信息量是非常广泛的。

例如,使用目录视图提取关于特定数据库中表和视图的信息。或者提取关于安全对象,全文检索,数据库镜像,分区或者各种其它目录相关的信息。   SQL Server目录视图可以按功能线分成子分类,比如数据库对象视图和安全视图。在本文中,我为你提供了这样几种子分类的视图示例。

我在SQL Server 2008的一个本……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

SQL Server 2008提供了上百个系统视图,这些视图可以让你查看数据库和服务器元数据,而无需访问真正的数据源。系统分类视图的目录在通过数据库引擎提取信息时特别有用。SQL Server目录视图是视图的集合,为目录元数据提供通用的接口。

  通过目录视图你能访问到的信息量是非常广泛的。例如,使用目录视图提取关于特定数据库中表和视图的信息。或者提取关于安全对象,全文检索,数据库镜像,分区或者各种其它目录相关的信息。

  SQL Server目录视图可以按功能线分成子分类,比如数据库对象视图和安全视图。在本文中,我为你提供了这样几种子分类的视图示例。我在SQL Server 2008的一个本地实例上创建了这些示例。在那些需要指定具体数据库的例子中,我使用的是“AdventureWorks 2008”数据库。然而,要注意,我在示例查询中展示的返回结果是与我的SQL Server实例有关的。如果你在你自己的环境中运行这些示例,你可能会得到不同的结果。

  对于我演示的每个目录视图(以及所有一般目录视图),SQL Server在SQL Server联机丛书上提供了针对这些视图的帮助主题。由于每个视图返回的信息类型不同,你会希望通过访问该主题阅读每个视图的详细信息的。

  数据库和文件目录视图

  我们要了解的第一组SQL Server目录视图允许你访问关于SQL Server实例中安装的数据库信息,以及与那些数据库相关的文件信息。在下面的例子中,我利用“sys.databases”目录视图来提取数据库列表,要求查询名称以“adventureworks”开头的数据库。

  SELECT
  name AS DbName,
  database_id AS DatabaseID,
  user_access AS UserAccess,
  user_access_desc AS AccessDescript
  FROM
  sys.databases
  WHERE
  name LIKE 'adventureworks%';

  正如“SELECT”语句中显示的,你访问目录视图就跟你访问其它视图一样。在这种情况下,我在“FROM”从句中使用了“sys.databases ”视图来提取实例数据库的详细信息。要得到该视图支持的列清单,以及每列的描述信息,请参见该视图在SQL Server联机丛书中的主题。这些描述信息包括在列中用作值的代码解释。例如,该主题解释了存储在“user_access ”列中的代码,展示了数据库是允许多用户访问(用“0”表示),还是只允许单用户访问(用“1”表示),还是限制用户访问(用“2”表示)。

  在上面的“SELECT”语句中提取了每个“adventureworks”数据库的名称和ID,还有用户访问代码和代码描述。下面的表展示了我在我的SQL Server 2008本地实例中运行该查询时返回的结果:

DbName

DatabaseID

UserAccess

AccessDescript

AdventureWorks

7

0

MULTI_USER

AdventureWorks2008

8

0

MULTI_USER

AdventureWorksDW2008

10

0

MULTI_USER

  可见,我在我的系统中安装了三个“adventureworks”数据库。默认情况下,用户访问代码“0”被赋给每个数据库。用户访问代码描述显示在列“user_access_desc”,它表示每个数据库都支持“MULTI_USER”用户访问。

  SQL Server还提供了一个目录视图,允许你提取关于数据库文件的信息。在下面的“SELECT”语句中,我利用“sys.master_files”视图来访问有关“AdventureWorks 2008”数据库文件的详细信息:

  SELECT
  file_id AS FileID,
  name AS LogicalName,
  type AS FileType,
  type_desc AS TypeDescript
  FROM
  sys.master_files
  WHERE
  database_id IN
  (
  SELECT database_id
  FROM sys.databases
  WHERE name = 'AdventureWorks2008'
  );

  对于与“AdventureWorks2008”数据库关联的每个文件,我都提取了文件ID,文件的逻辑名称,文件类型代码,以及解释类型代码的描述。另外,请参考与“sys.master_files”目录视图有关的主题获取关于该列的更多信息。

  请注意,为了提取正确的数据,我的“WHERE”从句中包含有一个从“sys.databases ”查询数据库ID的子查询。这使我可以访问文件信息,无需知道ID,只要知道数据库名称即可。

  SQL Server元数据函数

  SQL Server提供了一组元数据函数,可以使你执行诸如提取数据库ID这类操作。在本文中,我没有使用元数据函数,这样我可以更好地展示各种目录视图。您可以在SQL Server联机丛书的“元数据函数(Transact-SQL)”专题中找到关于这些函数的更多介绍。比如函数“DB_ID”可以提取数据库ID,有助于避免使用子查询。

  在我提取了数据库ID之后,我可以限制只查询我指定的数据库。下面的结果展示了关于“AdventureWorks 2008”数据库的返回信息:

FileID

LogicalName

FileType

TypeDescript

1

AdventureWorks2008_Data

0

ROWS

2

AdventureWorks2008_Log

1

LOG

65537

FileStreamDocuments

2

FILESTREAM

  另一个SQL Server目录视图是“sys.database_files”。这个视图与“sys.master_files”视图类似,只是它需要指定一个数据库。在下面的例子中,我首先使用了一个“USE”语句,明确使用“AdventureWorks 2008”数据库,然后我运行“SELECT”语句来从“sys.database_files”提取数据:

  在本例中,我提取了文件ID,逻辑文件名,文件类型,当前状态,以及文件大小。下面的结果展示了该语句返回的信息(使用的是我的系统环境):

FileID

FileName

TypeDescript

StateDescript

Size

1

AdventureWorks2008_Data

ROWS

ONLINE

24928

2

AdventureWorks2008_Log

LOG

ONLINE

256

65537

FileStreamDocuments

FILESTREAM

ONLINE

0

  正如查询结果所展示的,有三个文件与“AdventureWorks 2008”数据库有关联。通过使用“ sys.database_files”目录视图,我能很容易地访问每个文件中的数据。您可以在SQL Server联机丛书中的“数据库与文件目录视图(Transact-SQL)”中获得关于该话题的更多信息,然后再查询指定的视图。

相关推荐

  • SQL Server 2008将退出微软主流数据库支持

    你的企业是否还在运行SQL Server 2008?请注意微软为SQL Server 2008提供的主流技术支持服务将于今年的7月8日正式结束。

  • Oracle SQL:使用分析排序函数

    我们开发了一个应用程序,用来记录高尔夫巡回赛中的分数排名。其中我正在使用SQL来写一段代码,以根据分数来对选手进行前三名的排序。

  • SQL Server 2008中的对称密钥加密

    证书和非对称密钥使用数据库级的内部公钥加密数据,并且使用数据库级内部私钥解密数据。而对称密钥相对简单,它们包含一个同时用来加密和解密的密钥。

  • 通过PassPhrase对SQL Server 2008加密

    与数字证书类似,SQL Server 证书包括公钥和私钥这一对密钥,它们都用来加密和解密数据。SQL Server也拥有创建非对称密钥和对称密钥对象的能力。