解剖SQLSERVER 第九篇 OrcaMDF现在能通过系统DMVs显示元数据(
解剖SQLSERVER 第九篇 OrcaMDF现在能通过系统DMVs显示元数据(译) http://improve.dk/orcamdf-now-exposes-metadata-through-system-dmvs/ 我坐在去丹麦的火车上,参加在北欧的SQL RALLY会议的最后一站。在演讲的过程中,我根据OrcaMDF 的工作比较含蓄地宣
解剖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语句
<span>SELECT</span><span> c.</span><span>*</span> <span>FROM</span><span> sys.columns c </span><span>INNER</span> <span>JOIN</span><span> sys.tables t </span><span>ON</span> c.<span>object_id</span> <span>=</span> t.<span>object_id</span> <span>WHERE</span><span> t.name </span><span>=</span> <span>'</span><span>Persons</span><span>'</span>
在OrcaMDF里的C#代码里看起来会像这样:
<span>using</span> (<span>var</span> db = <span>new</span> Database(<span>new</span>[] { <span>@"</span><span>C:Test.mdf</span><span>"</span><span> })) { </span><span>var</span> sys =<span> db.Dmvs; </span><span>var</span> table = sys.Tables.Where(t => t.Name == <span>"</span><span>Persons</span><span>"</span><span>).Single(); </span><span>var</span> columns = sys.Columns.Where(c => c.ObjectID ==<span> table.ObjectID); </span><span>foreach</span> (<span>var</span> col <span>in</span><span> columns) Console.WriteLine(col.Name); }</span>
如果你更喜欢SQL-esque LINQ的语法,你当然可以像下面那样做
<span>using</span> (<span>var</span> db = <span>new</span> Database(<span>new</span>[] { <span>@"</span><span>C:Test.mdf</span><span>"</span><span> })) { </span><span>var</span> sys =<span> db.Dmvs; </span><span>var</span> columns = <span>from</span> c <span>in</span><span> sys.Columns join t </span><span>in</span><span> sys.Tables on c.ObjectID equals t.ObjectID </span><span>where</span> t.Name == <span>"</span><span>Persons</span><span>"</span> <span>select</span><span> c; </span><span>foreach</span> (<span>var</span> col <span>in</span><span> columns) Console.WriteLine(col.Name); }</span>
不管使用哪种写法,结果都会像下面那样
可用的DMVs有哪些
如果你获取到最新的已提交的OrcaMDF代码,你可以访问下面的DMVs,他们是通过SQLSERVER暴露出来的
<span>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</span>
如果你对DMV 有期望可以跟我联系,我会让你愿望成真!
第九篇完

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

对于 SQL Server 数据库中已存在同名对象,需要采取以下步骤:确认对象类型(表、视图、存储过程)。如果对象为空,可使用 IF NOT EXISTS 跳过创建。如果对象有数据,使用不同名称或修改结构。使用 DROP 删除现有对象(谨慎操作,建议备份)。检查架构更改,确保没有引用删除或重命名的对象。

导入步骤如下:将 MDF 文件复制到 SQL Server 的数据目录(通常为 C:\Program Files\Microsoft SQL Server\MSSQL\DATA)。在 SQL Server Management Studio(SSMS)中,打开数据库并选择“附加”。单击“添加”按钮,选择 MDF 文件。确认数据库名称,点击确定按钮即可。

当 SQL Server 服务无法启动时,可采取以下步骤解决:检查错误日志以确定根本原因。确保服务帐户具有启动服务的权限。检查依赖项服务是否正在运行。禁用防病毒软件。修复 SQL Server 安装。如果修复不起作用,重新安装 SQL Server。

要查看 SQL Server 端口号:打开 SSMS,连接到服务器。在对象资源管理器中找到服务器名称,右键单击它,然后选择“属性”。在“连接”选项卡中,查看“TCP 端口”字段。

SQL Server 数据库文件通常存储在以下默认位置:Windows: C:\Program Files\Microsoft SQL Server\MSSQL\DATALinux: /var/opt/mssql/data可通过修改数据库文件路径设置来自定义数据库文件位置。

若误删 SQL Server 数据库,可采取以下步骤恢复:停止数据库活动;备份日志文件;检查数据库日志;恢复选项:从备份恢复;从事务日志恢复;使用 DBCC CHECKDB;使用第三方工具。请定期备份数据库并启用事务日志以防止数据丢失。

如果 SQL Server 安装失败,可通过以下步骤清理:卸载 SQL Server删除注册表项删除文件和文件夹重启计算机

问题发现这次使用的是SqlServer数据库,之前并没有使用过,但是问题不大,我按照需求文档的步骤连接好SqlServer之后,启动SpringBoot项目,发现了一个报错,如下:刚开始我以为是SqlServer连接问题呢,于是便去查看数据库,发现数据库一切正常,我首先第一时间问了我的同事,他们是否有这样的问题,发现他们并没有,于是我便开始了我最拿手的环节,面向百度编程。开始解决具体报错信息是这样,于是我便开始了百度报错:ERRORc.a.d.p.DruidDataSource$CreateCo
