因此,标题进行了总结。
我有一个包含28个表和86个存储过程的SQL Server数据库,必须对其进行反向工程。我很确定,某些表从未使用过,并且并非所有proc也都使用过。
最大的问题是丢失了为此数据库使用的所有Windows服务以及所有软件和数据库文档,并且找不到整个系统的设计人员。
我已经设法创建了一个ER图来帮助我理解这些关系,但是由于我没有数据库管理经验,所以我不知道应该从哪里开始。
同样,如果您不想在这里提出这样的问题,我也感到抱歉。
因此,标题进行了总结。
我有一个包含28个表和86个存储过程的SQL Server数据库,必须对其进行反向工程。我很确定,某些表从未使用过,并且并非所有proc也都使用过。
最大的问题是丢失了为此数据库使用的所有Windows服务以及所有软件和数据库文档,并且找不到整个系统的设计人员。
我已经设法创建了一个ER图来帮助我理解这些关系,但是由于我没有数据库管理经验,所以我不知道应该从哪里开始。
同样,如果您不想在这里提出这样的问题,我也感到抱歉。
Answers:
三个非常快速的步骤来帮助您入门:
1)
USE DatabaseName
SELECT [TableName] = OBJECT_NAME(object_id),
last_user_update, last_user_seek, last_user_scan, last_user_lookup
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID('DatabaseName')
会告诉您上次使用每个索引的时间,包括聚集索引。因此,至少可以让您了解正在访问哪些表(哪些没有访问)。
2)在使用应用程序的情况下,打开扩展事件会话(如果您正在运行SQL 2012之前的版本,则打开服务器端Profiler跟踪)大约一个小时。您还可以要求用户以特定顺序在应用程序中执行各种操作,以便将其与跟踪/会话相关联。
一个有用的建议:如果您完全可以修改应用程序使用的连接字符串,请附加“; Application Name = AppNameGoesHere”,以便可以对该特定的应用程序名称运行跟踪筛选。无论如何都是好的做法。
3)获取在非生产服务器上运行的应用程序的版本。为应用程序开发一个由行为驱动的测试的列表(“当用户单击“新建项目”按钮时,它将为该用户创建一个新项目,等等。”)开始软删除您认为与测试无关的对象(我使用的格式类似于objectName_DEPRECATED_YYYYMMDD-日期是我计划实际删除的日期。)重新验证所有测试。
通过扩展事件会话,索引使用DMV和您的软删除的组合,您应该能够识别应用程序正在使用的主要对象,并且可以很好地就哪个对象执行的操作达成共识。
祝好运!
最好的选择是使用SQL Power Doc记录数据库
使用Windows PowerShell的SQL Server和Windows文档
SQL Power Doc是Windows PowerShell脚本和模块的集合,这些脚本和模块可发现,记录和诊断SQL Server实例及其基础Windows OS和计算机配置。SQL Power Doc适用于从SQL Server 2000到2014的所有版本的SQL Server,以及Windows 2000和Windows XP至Windows Server 2012 R2和Windows 8的所有版本的Windows Server和使用者Windows操作系统。SQLPower Doc还能够文档Windows Azure SQL数据库。
注意:我已经使用了它,它将为您提供一个非常好的开始,以记录和理解数据库服务器实例。
New-Item -type directory -path "$([Environment]::GetFolderPath([Environment+SpecialFolder]::MyDocuments))\WindowsPowerShell\Modules"
在SqlServerInventory ReadMe.txt
文件上通过该步骤。我不知道应该在哪里插入新创建的文件夹的路径以及在哪里插入新创建的文件夹的名称。
由于我曾经处于类似的情况,所以我可以告诉你,这将是一件很难甚至不可能的工作。我只有源代码(> 10万行代码),正在运行的服务,正在运行的数据库(〜50个表),并且没有文档,也没有人问这件事,只有该应用程序的用户以及在其中运行的数据库和服务的副本测试环境(前面有几个版本号,但没有源代码)。另一个要求是服务必须运行24/7,因为它们在客户外部。之所以出现这种情况,是因为大多数员工在大约同一时间离开,包括开发人员和文档在混乱中消失了。我花了超过6个月的时间才获得了大致的概述/文档。有许多表和函数没有作用,因为它们是供将来使用或从未完全实现的,错误,不推荐使用或未发布的功能。6个月后,我不得不重写文档,因为我发现了新事物或事物之间的关系,并且之前有错误的假设。
为什么我要告诉这个?因为有时在这种情况下,从头开始并编写新的应用程序更容易且更便宜,以满足新旧应用程序的需求(或新的应用程序,如果它们随着时间的推移而改变,或者您需要新的主要版本)。或告诉您您将要期待什么。
如果您真的想对它进行反向工程,我建议您执行以下步骤:
祝你好运 ;)
我的代表不足,无法发表评论,但想帮助您解决有关
getting the SQL Power Doc to work
。
如果您按照其文档页面上的步骤进行操作,它将非常容易。从顶部开始。
https://sqlpowerdoc.codeplex.com/wikipage?title=Guide%20For%20PowerShell%20Beginners