解剖SQLSERVER 第九篇 OrcaMDF现在能通过系统DMVs显示元数据(译)

简介: 原文:解剖SQLSERVER 第九篇 OrcaMDF现在能通过系统DMVs显示元数据(译)解剖SQLSERVER 第九篇  OrcaMDF现在能通过系统DMVs显示元数据(译) http://improve.dk/orcamdf-now-exposes-metadata-through-system-dmvs/ 我坐在去丹麦的火车上,参加在北欧的SQL RALLY会议的最后一站。
原文: 解剖SQLSERVER 第九篇 OrcaMDF现在能通过系统DMVs显示元数据(译)

解剖SQLSERVER 第九篇  OrcaMDF现在能通过系统DMVs显示元数据(译)

http://improve.dk/orcamdf-now-exposes-metadata-through-system-dmvs/

我坐在去丹麦的火车上,参加在北欧的SQL RALLY会议的最后一站。在演讲的过程中,我根据OrcaMDF 的工作比较含蓄地宣布了OrcaMDF可以读取元数据

现在,我也不妨在这里分享。除了在OrcaMDF中扩大对核心引擎的支持之外,另一个重要的我想要实现的主要功能之一就是显示关于的你的数据库的元数据

你的表,列,数据库是怎麽展开的?

 

 

避免错误的抽象

我最初的想法是在上层对象下面创建自己的抽象层,你可以通过database.GetMetadata().UserTables 枚举出你的所有的用户表

你可以获取用户表的列表,包括数据列。从开发层面考虑这是一个非常清晰的接口,每样东西都是普通的.NET对象。

然而,这需要我自己去定义抽象- 如何去划分出哪些数据需要暴露,哪些数据不能,怎样抽象对于DBA是最自然的,需不需要使用

类似SQLSERVER的 sys. DMVs

 

从SQLSERVER里暴露出内置的DMVs

我花费了一些时间考虑最后会有哪类人使用OrcaMDF ,最后得出结论是这个世界可能只有四类人会使用

而将这四类人再拆分开最终只有DBA和SQLSERVER开发人员。而他们通常会通过DVMs 例如sys.tables,sys.columns,sys.indexes

来浏览SQLSERVER数据库的元数据。那么能够使我有信心开发这个功能的动力是我已经能解析出所有的系统表,并且使用 SELECT OBJECT_DEFINITION() 

我能够看到内置的系统DMVs的源代码。因此,创建我自己的内置DMVs的复制品是一件很简单事

 

 

在OrcaMDF里如何使用DMVs 

比如我们需要获取某个表的所有列的信息,我们会建立如下SQL语句

SELECT
    c.*
FROM
    sys.columns c
INNER JOIN
    sys.tables t ON c.object_id = t.object_id
WHERE
    t.name = 'Persons'

在OrcaMDF里的C#代码里看起来会像这样:

using (var db = new Database(new[] { @"C:Test.mdf" }))
{
    var sys = db.Dmvs;

    var table = sys.Tables.Where(t => t.Name == "Persons").Single();
    var columns = sys.Columns.Where(c => c.ObjectID == table.ObjectID);

    foreach (var col in columns)
        Console.WriteLine(col.Name);
}

如果你更喜欢SQL-esque LINQ的语法,你当然可以像下面那样做

using (var db = new Database(new[] { @"C:Test.mdf" }))
{
    var sys = db.Dmvs;

    var columns =    from c in sys.Columns
            join t in sys.Tables on c.ObjectID equals t.ObjectID
            where t.Name == "Persons"
            select c;

    foreach (var col in columns)
        Console.WriteLine(col.Name);
}

不管使用哪种写法,结果都会像下面那样

 

 

可用的DMVs有哪些

如果你获取到最新的已提交的OrcaMDF代码,你可以访问下面的DMVs,他们是通过SQLSERVER暴露出来的

sys.columns
sys.indexes
sys.index_columns
sys.objects
sys.objects$
sys.system_internals_allocation_units
sys.system_internals_partitions
sys.system_internals_partition_columns
sys.tables
sys.types

 

如果你对DMV 有期望可以跟我联系,我会让你愿望成真!

 

第九篇完

目录
相关文章
|
Java 数据库连接 数据库
JSP奖学金管理系统myeclipse开发sqlserver数据库bs框架java编程jdbc
JSP 奖学金管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为SQLSERVER2008,使用java语言开发,系统主要采用B/S模式开发。
181 0
|
4月前
|
SQL 容灾 安全
云时代SQL Server的终极答案:阿里云 RDS SQL Server如何用异地容灾重构系统可靠性
在数字化转型的浪潮中,数据库的高可用性已成为系统稳定性的生命线。作为经历过多次生产事故的资深开发者,肯定深知传统自建SQL Server架构的脆弱性——直到遇见阿里云 RDS SQL Server,其革命性的异地容灾架构彻底改写了游戏规则。
|
SQL Windows
安装SQL Server 2005时出现对性能监视器计数器注册表值执行系统配置检查失败的解决办法...
安装SQL Server 2005时出现对性能监视器计数器注册表值执行系统配置检查失败的解决办法...
220 4
|
SQL 关系型数据库 数据管理
Microsoft SQL Server 是微软公司开发的一款关系型数据库管理系统
【5月更文挑战第14天】Microsoft SQL Server 是微软公司开发的一款关系型数据库管理系统
425 2
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
199 0
|
存储 开发框架 前端开发
C#开发的全套成熟的LIS系统源码JavaScript+SQLserver 2012区域云LIS系统源码
医院云LIS系统是一套成熟的实验室信息管理系统,目前已在多家三级级医院应用,并不断更新。云LIS系统是为病人为中心、以业务处理为基础、以提高检验科室管理水平和工作效率为目标,将医学检验、科室管理和财务统计等检验科室/实验室所有工作进行整合,全面改善检验科室/实验室的工作现状。
165 0
|
SQL 搜索推荐 关系型数据库
Windows 系统彻底卸载 SQL Server 通用方法
Windows 系统彻底卸载 SQL Server 通用方法
1701 0
Windows 系统彻底卸载 SQL Server 通用方法
|
开发框架 .NET 数据库
asp.net企业费用报销管理信息系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
asp.net 企业费用报销管理信息系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使 用c#语言开发 应用技术:asp.net c#+sqlserver 开发工具:vs2010 +sqlserver
246 0
|
SQL 存储 数据库
数据库原理与应用(SQL Server)笔记 第七章 流程控制语句、系统内置函数
数据库原理与应用(SQL Server)笔记 第七章 流程控制语句、系统内置函数
数据库原理与应用(SQL Server)笔记 第七章 流程控制语句、系统内置函数
|
开发框架 监控 前端开发
云LIS平台源码,基于B/S架构的实验室信息系统,技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis
支持Westguard,Gubbuss+T(n)等多种质控规则,自动判断是否失控,可自动计算靶值、SD,多个质控品可列于一个图表上;每个质控品每天可多达7次结果,可使用平均值、最后一次结果,最好一次结果画图等;靶值可自动计算,免疫等支持按季度或者自定义日期画图
581 0
云LIS平台源码,基于B/S架构的实验室信息系统,技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis