代码之家  ›  专栏  ›  技术社区  ›  John Sansom

您最大的SQL Server错误或尴尬事件是什么?

  •  13
  • John Sansom  · 技术社区  · 16 年前

    你知道我说的那个。

    我们都曾在某个时候去过那里。你会有一种可怕的恐惧感,并且意识到,哦,我的天哪,这真的发生了。

    当然你现在可以笑了,对吧,所以继续和我们分享你的SQL Server灾难吧。

    如果你能详细说明你是如何解决问题的,这样我们就能一起从错误中吸取教训,那就更好了。

    所以,为了让球滚起来,我先去——阿尔法——阿尔法。。

    那是在我作为初级SQL Server专家的早年。我在企业经理身边跑来跑去,履行一些管理职责。您知道它是如何工作的,检查一些日志,确保备份正常运行,进行一些数据库管理,在autopilot上进行业务操作,并在弹出的常见提示中按enter键。

    哦,等等,那是一个你确定要删除这个表提示吗。太晚了!

    不用说,数据库恢复到新数据库的速度迅速创下了世界纪录,紧接着是表迁移,哦,是的。当然,其他所有人都没有变得更聪明,但仍然吸取了宝贵的教训。集中

    25 回复  |  直到 16 年前
        1
  •  49
  •   anon anon    16 年前

    我想每个人都在某个时候错过了删除或更新的WHERE子句。。。

        2
  •  6
  •   JohannesH    16 年前

    将500万测试人员插入生产数据库。我认为最大的错误是首先让我拥有对生产数据库的写访问权糟糕的dba!

        3
  •  6
  •   cletus    16 年前

    我最大的SQL Server错误是在并发性方面假设它与Oracle一样强大。

    让我解释一下。

    对于SQL Server中的事务隔离级别,您有两种选择:

    1. 脏读:事务可以看到未提交的数据(来自其他事务);或
    2. 选择阻止未提交的更新。

    我相信这些来自ANSI SQL。

    (2) 是默认隔离级别(imho)和(imho)两者中的较小者。但对于任何长期运行的流程来说,这都是一个巨大的问题。我不得不批量加载数据,只能在几个小时内完成,因为它在网站运行时杀死了网站(插入50万条记录需要10-20分钟)。

    另一方面,Oracle拥有MVCC。这基本上意味着每个事务都将看到一致的数据视图。他们不会看到未提交的数据(除非您将隔离级别设置为这样做)。他们也不阻止未提交的交易(我被一个据称企业数据库会认为在并发基础上可以接受的想法震惊了)。

    可以说,这是一次学习经历。

    你知道什么? 甚至MySQL也有MVCC。

        4
  •  6
  •   Ryan Emerle    16 年前

    幸运的是,那是很久以前的事了。

        5
  •  6
  •   SQLMenace    16 年前

    更新或删除时忘记突出显示WHERE子句

    首先编写过程脚本并检查依赖于删除的对象,然后在生产环境中运行此操作

        6
  •  6
  •   Jonas Lincoln    16 年前

    • 从同事那里获取一个脚本,并进行一些小的更新。
    • 在生产上运行它。
    • 发现所有连接都在等待释放表锁
    • 发现我同事的脚本以显式BEGIN事务开始,并希望我在最后手动键入COMMIT事务。
    • 向老板解释为什么损失了30分钟的销售时间。
    • 怪我自己没有正确阅读脚本文档。
        7
  •  5
  •   Jonathan    16 年前

    开始从上周恢复到生产实例而不是开发实例。早上不好。

        8
  •  4
  •   Alnitak    16 年前

    我看到很多其他人错过了一场比赛 WHERE 条款

    我自己,我总是打字 哪里 子句,然后返回到行的开头并键入查询的其余部分:)

        9
  •  4
  •   Ed Blackburn    16 年前

    谢天谢地,在您意识到使用事务真的是非常非常琐碎之前,我们只犯了一个错误。我以前修改过数千条关于事故的记录,幸运的是有回卷。。。

    令人尴尬的 真的应该是鲁莽的或者不专业的。

        10
  •  4
  •   HLGEM    16 年前

    我最喜欢的一个例子发生在一次自动导入中,当时客户端在没有事先通知我们的情况下更改了数据结构。社会保险号码栏和我们支付给此人的金额发生了变化。幸运的是,我们在系统试图向某人支付其社会保险号码之前找到了它。我们现在在自动导入中进行检查,在运行之前查找有趣的数据,如果数据看起来很奇怪,就停止它。

        11
  •  2
  •   atfergs    16 年前

        12
  •  2
  •   Ta01    16 年前

        13
  •  1
  •   Dimi Takis    16 年前

    列可为空,参数值检索不到正确的信息。。。

        14
  •  1
  •   WACM161    16 年前

    最大的错误是允许开发人员“写”访问生产数据库

        15
  •  1
  •   Daniel    16 年前

    某种程度上与SQL server相关。我记得了解到始终处理SqlDataReader是多么重要。我有一个在开发过程中运行良好的系统,并且碰巧运行在ERP数据库上。在生产中,它关闭了数据库,因为我认为它足以关闭SqlConnection,并且有数百个甚至数千个打开的连接。

        16
  •  1
  •   Dalin Seivewright    16 年前

    我用一个简单的UPDATE语句终止了所有用户访问权限(对该应用程序的访问是通过SQL框上的用户帐户以及访问表中的特定条目提供的),但当我突出显示该语句并运行它时,我没有包括WHERE子句。

    有人告诉我一个常见的错误。快速修复方法是在备份数据库之前,每个人的帐户(包括应该过期的帐户)都未过期。现在,我要么用SQL打开表并选择特定的条目,要么将事务中的所有内容包装起来,然后立即回滚。

        17
  •  1
  •   cjk    16 年前

    我们的IT运营部决定从SQL 2000升级到SQL 2005。

    下周一,用户问为什么他们的应用程序不能工作。错误如下:

    这将导致办公室中有一组不错的3个星期六,用一个好的加班包在SSIS中重建包:)

        18
  •  1
  •   teh_noob    16 年前

    不是,这完全是一个“错误”,但当我第一次学习PHP和MYSQL时,我每天都会花费数小时,试图找出我的代码不起作用的原因,不知道我的SQL数据库的密码/用户名/主机/数据库凭据是错误的。你无法相信我在这件事上浪费了多少时间,更糟糕的是,这不是一次性事件。但是哈哈,这一切都很好,它塑造了人的性格。

        19
  •  1
  •   LoranceStinson    16 年前

    我曾经,也只有一次,键入了类似于以下内容的内容:

    psql> UPDATE big_table SET foo=0; WHERE bar=123
    

    我很快就纠正了这个错误。由于该错误和另一个错误,我的更新总是以以下方式开始:

    psql> UPDATE table SET WHERE foo='bar';
    

    这样更容易避免错误。

        20
  •  1
  •   Guy Starbuck    16 年前

    编辑:我应该提到,这是在一个生产环境中,表中充满了数据。。。

        21
  •  1
  •   hunterjrj    16 年前

    这是在谷歌能够提供帮助之前。我在使用SQL Server时没有遇到这个问题,但在使用它丑陋的老表兄Sybase时遇到了这个问题。

    在旗舰客户的网站上损失数千美元和数百(最终用户)工时是一种很有教育意义的体验。强烈推荐!!

        22
  •  1
  •   Sciolist    16 年前

    运行起来也花了5-6分钟,我一直在抱怨开发服务器的速度有多慢,直到删除的行数出现为止。:)

    幸运的是,我刚刚运行了一个完整的备份,因为我即将进行安装。。

        23
  •  1
  •   Russ960    16 年前

    超出了典型的where子句错误。在不正确的数据库上执行删除操作,因此必须运行还原。现在我三次检查我的服务器名。谢天谢地,我有一个很好的后援。

        24
  •  1
  •   notandy    16 年前

    我将最大服务器内存设置为0。当时我在想,这会自动告诉SQL server使用所有可用内存(现在还早)。没有这样的运气。SQLServer决定只使用16MB,我必须以单用户模式连接才能重新更改设置。

        25
  •  0
  •   iandisme    15 年前

    在Management Studio中点击“还原”而不是“备份”。