【问题标题】:FxCop for SQL Server - Tool to analyze SQL Server databases for potential issuesFxCop for SQL Server - 分析 SQL Server 数据库潜在问题的工具
【发布时间】:2012-02-14 06:35:29
【问题描述】:

是否有可以分析 SQL Server 数据库的潜在问题的工具?

例如:

  • a foreign key column that is not indexed
  • uniqueidentifier 列上没有 FILL FACTOR 的索引
  • LastModifiedDate DATETIME 列没有 UPDATE 触发器来更新日期时间
  • 具有“高”碎片的大型索引
  • 存在于多个区段中的非分段索引
  • 一个不包含 SET NOCOUNT ON 的触发器(让其怀疑“一个触发器返回了一个结果集和/或在另一个未完成的结果集处于活动状态时以 SET NOCOUNT OFF 运行。”
  • 使用SET ANSI_NULLS OFF 创建的数据库、表、存储过程、触发器、视图
  • database or table with SET ANSI_PADDING OFF
  • 使用SET CONCAT_NULL_YIELDS_NULL OFF 创建的数据库或表
  • 一个高度分散的索引,可能受益于较低的FILLFACTOR(即更多的填充)
  • 具有非常宽的聚集索引(例如唯一标识符+唯一标识符)的表
  • 具有非唯一聚集索引的表
  • 使用text/ntext 而不是varchar(max)/nvarchar(max)
  • 在可能包含本地化字符串且应为 nvarchar 的列中使用 varchar(例如 Name、FirstName、LastName、BusinessName、CountryName、City)
  • 使用*==**=* 而不是LEFT OUTER JOINRIGHT OUTER JOINFULL OUTER JOIN
  • trigger that returns a results set
  • 声明为timestamp 而不是rowversion 的任何列
  • 一个可以为空的timestamp
  • 使用image 而不是varbinary(max)
  • 数据库不处于简单模式(或日志文件大小超过数据文件的 100 倍)

是否有适用于 SQL Server 的 FxCop?

注意:Microsoft SQL Server 2008 R2 最佳实践分析器doesn't fit the bill

【问题讨论】:

  • Database Administrators 的候选人?
  • 我当然不希望数据库管理员修改我的触发器、存储过程、列数据类型、列可空性。
  • 我的意思是,this question 可能是Q&A for database professionals 的候选...
  • 我的意思是我认为它非常适合程序员,而不是服务器/数据库管理员。

标签: sql-server sql-server-2008-r2 fxcop


【解决方案1】:

SQLCop - 免费,也是一个非常有趣的工具!

【讨论】:

  • 非常好。界面可能需要一些工作,但检查范围很广。
  • @Ian - 您希望在本地运行这些检查,还是作为持续集成等自动化构建过程的一部分?
  • 大概我会以交互方式运行它们。服务器/数据库的预定测试可能会很好;除了误报率。
  • 是的,您必须选择哪些支票对您来说算作问题。我问的原因是,在 Red Gate,我们已经将一些 SQLCop 测试集成到 SQL 测试(SSMS 测试运行程序)中,这使得这些测试不仅可以在 SSMS 中运行,而且可以作为 CI 的一部分,作为 tSQLt它使用的框架(tSQLt.org)可以通过命令行运行。
  • @IanBoyd,我写了 SQLCop。您提到该界面可能需要一些工作。您能分享一下您对此的看法吗?
【解决方案2】:

Visual Studio Premium 和 Ultimate 中包含一个名为 Static Code Analysis 的工具(考虑到它与集成 VS 的 FxCop 的冲突,这并不是一个好名字),它至少可以涵盖您的规则的设计时子集。如果收件箱规则集不能满足您的所有需求,您也可以add your own rules

【讨论】:

    【解决方案3】:

    【讨论】:

      【解决方案4】:

      我不知道有一个。会很受欢迎的。

      我将此作为答案发布,因为实际上我在实现监控许多事情方面做了很长的路要走,这些事情可以在直接 T-SQL 中轻松完成 - 您提供的大多数示例都可以通过检查元数据来完成。

      在编写了大量“系统健康”程序和一些围绕它们的组织之后,我自己编写了一个类似这样的框架,使用包括扩展属性的元数据。它允许使用扩展属性将对象标记为从警告中排除,并且可以对规则进行分类。我在元数据演示文稿中包含了一些规则及其实现的示例。 http://code.google.com/p/caderoux/source/browse/#hg%2FLeversAndTurtles 这还包括一个将调用系统的 Windows 窗体应用程序,但系统本身完全用 T-SQL 编码和组织。

      【讨论】:

        【解决方案5】:

        看看SQLCop。这是我见过的最接近 FXCop 的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-10-19
          • 1970-01-01
          • 2010-09-24
          • 1970-01-01
          • 2014-09-26
          • 2011-03-08
          • 2023-03-21
          相关资源
          最近更新 更多