2016-04-28 151 views
0

我错误地使用PROD GUI插入了几条测试记录,这些记录已写入PROD数据库。有没有办法找到这些记录所触及的表格和列?插入到Prod数据库的测试数据如何删除该记录

感谢

+0

是的。使用SELECT语句和DELETE语句。 –

+0

多数民众赞成在有趣的,你怎么知道什么所有表更新与这些记录在第一个地方? – Khatra

+0

通过检查你的GUI的源代码。或者在运行GUI时在SQL Server上运行跟踪。这将告诉您插入中使用的对象,只要确切的行需要视觉检查和分析。 –

回答

2

我想你没有运行轨迹,CDC或其他跟踪机制启用。所以它看起来像下面的步骤将是一个合理的解决方案:

  1. 确保您不能找到和使用模板调整从 应用程序GUI
  2. 运行SQL事件探查器跟踪丢弃数据(它会给你足够的信息)。包括ApplicationName和HostName列以标识您的连接。
  3. 使用用户界面插入一条测试记录(尝试执行与以前相同的操作)
  4. 停止跟踪并找到您插入的数据。
  5. 确定您的应用程序使用ApplicationName,HostName和SPID完成的其他修改。
  6. 创建一个SQL脚本来删除这些记录。
  7. 确定您已经(可能是他们被插入到相同的表)之前插入记录
  8. 编写一个查询,删除它们太
  9. Open事务
  10. 删除这些记录
  11. 检查您是否只删除需要的记录
  12. 提交交易

UPD:按照这个答案的评论(与我完全同意),如果你有DEV或TEST环境,您可以在其中执行相同的操作,执行此操作并在其中找到修改的记录。之后,在PROD的相同表格中找到修改后的记录。

P.S.我无法保证,按照这些步骤,您将能够清理您插入的数据,但可能您可以执行此操作。我还建议在删除数据之前创建完整备份。

+1

我会建议在dev或QA上运行这些步骤而不是prod来识别插入命中的表并测试删除过程。我还建议使用大致相同的值作为不同的值可能意味着涉及不同的表格。 – HLGEM

+0

好点。将此添加到答案中。 –

+0

谢谢你的所有意见,我会尽力遵循这些步骤,看看是否有效。我与我的一位同事是Java开发人员进行了对话,他建议我看看前端和字段的源代码是如何映射到表的列(SQL)的。你对此有何想法?任何帮助将不胜感激。 – Khatra

0

那么你可以通过代码来查看它接触到的表格。在dev上运行Profiler以查看它发送的代码或在按照您在prod上执行的相同方式输入新记录时触发它所调用的代码。

如果您有正式的PK和FK关系,您可能会通过反复试验发现,因为它不会让您删除父记录,直到删除所有的孩子。并在开发环境中测试其他一些记录,以确定可能涉及哪些表。或者你可以编写FK脚本来查看其他表与父表有关。

如果您已经进行审计(因为每个企业解决方案都应该有,但我离题),那么您通常可以通过在审计表中查找当时的事务来查找。我们的审计表包含交易日期和用户,这使得更容易筛选这些事情。

当然,如果你知道你的数据模型,你应该有一个不错的主意,然后再开始。或者,如果您的所有子表中都有特定的ID,并且您没有方便的FK,那么您可以查看系统表以查找具有该列名称的表。尽管这假设一个相当标准的命名约定。如果你在不同的表格中调用同一列不同的东西,你可能会错过一些。

如果您使用的是ORM,应该有一些办法来检查是在与你做的特定任务的对象是什么表。因此,如果您插入实例的测试订单,请检查订单对象中包含的内容。