【问题标题】:SQL Table Dropped Weeks Ago Only Erroring Now几周前删除的 SQL 表现在只出错了
【发布时间】:2014-02-24 16:31:14
【问题描述】:

我昨晚遇到了一个我无法弄清楚的问题。我不是 SQL 专家,在进行了无数次谷歌搜索之后,我仍然无法弄清楚为什么会发生这种情况。

大约六周前,据说一张表已从我的数据库中删除,而不是由我删除。删除此表后,依赖于它的所有视图仍然正常运行。我现在可以在 SQL Management Studio 的对象依赖关系查看器中看到该表未使用,但仍然有一些依赖关系。我们昨晚对 SQL Server 2012 进行了一些更新,并重新启动了服务器。

大约在进行这些更新时,我们开始收到一堆错误,这些错误都围绕着 6 周前删除的这张丢失的表格。重建表格后一切正常。

我们目前正在检查更新,看看它们是否会以任何方式影响它。有谁知道是否存在我不知道的任何类型的缓存?我真的很困惑为什么这 6 周有效。

【问题讨论】:

    标签: sql sql-server database sql-server-2012


    【解决方案1】:

    该表是临时表吗? (以# 开头的表名。)如果是这样,SQL 有时会缓存临时表。这可以解释为什么这些观点有效。然后,当您更新服务器并重新启动它时,临时表缓存被清除。

    【讨论】:

    • 这不是临时表。这是一张过去使用过但不再相关的表格。
    • 听起来该表仍然存在于 sysobjects 表中,并且视图从那里跑掉了。如果您知道表是如何被删除的(通过脚本,通过管理工作室),您可以尝试在您的一个测试服务器上重新创建场景,看看是否得到相同的结果。
    • 我可以确认正在执行某种 SQL 缓存。我能够在没有开发数据库的开发网站上重新创建该问题。我只是不完全确定为什么会这样。
    • 现在我们知道缓存正在进行中,所以成功了一半。我试图记住第一次安装 SQL 时是否有一些设置,或者是否可以将其关闭。缓存确保满足三个基本规则 - 所有 1. 语句中引用的数据库对象都存在 2. 它们在语句的上下文中有效, 3. 数据修改语句不违反任何数据完整性规则。
    • 这可能适用:它可能已经从 SQL 的查询计划运行:SQL Server 自动缓存查询计划并尽可能尝试重用它们。对于许多应用程序(例如 OLTP 事务性应用程序),计划重用是一件非常好的事情,因为它避免了每次执行查询时可能需要很长时间才能完成的不必要的编译。 SQL Server 缓存查询计划(基于参数假设的执行计划)但不缓存执行上下文(基于实际参数值的执行计划)。来自:sqlbadpractices.com
    猜你喜欢
    • 2021-06-15
    • 2020-10-04
    • 2015-03-26
    • 2022-10-01
    • 1970-01-01
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    相关资源
    最近更新 更多