插入到Prod数据库的测试数据如何删除该记录

时间:2016-04-28 19:44:06

标签: sql-server sql-server-2008 oracle-sqldeveloper

我错误地使用PROD GUI插入了一些测试记录,这些记录已写入PROD数据库。有没有办法找到这些记录触及的表格和列?

由于

3 个答案:

答案 0 :(得分:2)

我认为您没有启用运行跟踪,CDC或其他跟踪机制。因此,以下步骤似乎是一个合理的解决方案:

  1. 确保您无法从中找到并删除该数据 应用程序GUI
  2. 使用调整模板运行SQL事件探查器跟踪(它将为您提供足够的信息)。包括ApplicationName和HostName列以标识您的连接。
  3. 使用UI插入另一个测试记录(尝试执行与之前相同的操作)
  4. 停止跟踪并找到您已插入的数据。
  5. 使用ApplicationName,HostName和SPID确定从您的应用程序完成的其他修改。
  6. 创建一个SQL脚本以删除这些记录。
  7. 识别之前插入的记录(可能是它们插入到相同的表中)
  8. 写一个查询以删除它们
  9. 打开交易
  10. 删除这些记录
  11. 检查您是否仅删除了所需的记录
  12. 提交交易
  13. UPD:根据对此答案的评论(我完全同意),如果您有DEV或TEST环境,您可以在其上执行相同的操作,请执行此操作并在那里查找已修改的记录。之后在PROD上的相同表中找到修改过的记录。

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

答案 1 :(得分:0)

如果您启用了正确的事务日志记录并使用SQL Server 2008及更高版本。您可以尝试使用Change Data Capture Stored Procedures (Transact-SQL)并检查表中发生的更改。希望它有所帮助

答案 2 :(得分:0)

您可以跟踪代码以查看它触及的表格。在dev上运行Profiler,看看它发送的代码或者在输入新记录时触发它,就像你在prod上那样。

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

如果您有审计(因为每个企业解决方案应该有,但我离题),您通常可以通过在审计表中查找当时的交易来查找。我们的审计表同时具有交易的日期时间和用户,这使得更容易过滤这些事情。

当然,如果您了解自己的数据模型,那么在开始之前应该有一个很好的主意。或者,如果您在所有子表中都有一个特定的id并且没有方便的FK,那么您可以检查系统表以查找具有该列名的表。这假定了一个相当标准的命名约定。如果你在不同的表中调用同一列不同的东西,你可能会错过一些。

如果您正在使用ORM,则应该有一些方法来检查对象中与您所执行的特定任务相关的表。因此,如果您插入了实例的测试订单,请查看订单对象中包含的内容。