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

时间:2009-02-09 14:03:18

标签: sql-server sql-server-2005 tsql

你知道我正在谈论的那个。

我们已经在某个时候到过那里。你得到了那种可怕的恐惧感,并且实现了我的上帝,实际上只是发生了。

当然,你现在可以笑一下,对,所以继续和我们分享你的SQL Server意外。

如果您可以详细说明如何解决问题,以便我们可以一起从错误中吸取教训,那就更好了。

所以为了让球滚动,我会先走......

作为一名初级SQL Server大师,它早在我早年就回归了。我正在围绕企业管理器竞争,履行一些管理职责。你知道它是怎么回事,查看几个日志,确保备份运行正常,一点点数据库管理,几乎关于自动驾驶的业务,并按弹出的常规提示点击回车键。

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

只是为了确认任何有抱负的DBA,删除生产表是非常非常糟糕的事情!

毋庸置疑,世界纪录被迅速设置为最快的数据库恢复到新数据库,很快就会进行表迁移,哦是的。当然,其他人都不是明智的,但仍然是一个宝贵的经验教训。集中!

25 个答案:

答案 0 :(得分:49)

我想每个人都在某个时候错过了DELETE或UPDATE的WHERE子句......

答案 1 :(得分:6)

将500万测试人员插入生产数据库。我认为最大的错误就是让我首先对生产数据库进行写访问。 :P Bad dba!

答案 2 :(得分:6)

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

让我解释一下。

在SQL Server中涉及事务隔离级别时,您有两种选择:

  1. 脏读:交易可以看到未提交的数据(来自其他交易);或
  2. 选择阻止未提交的更新。
  3. 我相信这些来自ANSI SQL。

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

    另一方面,Oracle拥有MVCC。这基本上意味着每个事务都会看到一致的数据视图。他们不会看到未提交的数据(除非您设置隔离级别来执行此操作)。它们也不会阻止未提交的事务(我对这个想法感到惊讶,据称企业数据库会认为这是可以并发的)。

    我只想说,这是一次学习经历。

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

答案 3 :(得分:6)

我在一个高产量的电子商务网站上将所有价格都改为零。我不得不把网站关闭并从备份中恢复数据库..非常糟糕。

幸运的是,那是一段时间以前的一段时间。

答案 4 :(得分:6)

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

脚本首先处理和检查drop依赖对象,然后在生产中运行它

答案 5 :(得分:6)

我正在研究大型在线业务的支付系统。数百万欧元的业务。

  • 从一位同事处获取一些脚本,并附上一些小更新。
  • 在生产中运行。
  • 30分钟后从服务台获取错误报告,抱怨过去30分钟没有购买。
  • 发现所有连接都在等待要发布的表锁
  • 发现我同事的脚本以明确的BEGIN TRANSACTION开头,并希望我在最后手动输入COMMIT TRANSACTION。
  • 向老板解释为什么30分钟的销售损失。
  • 责备自己没有正确阅读脚本文档。

答案 6 :(得分:5)

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

答案 7 :(得分:4)

值得庆幸的是,在您意识到使用交易真的非常非常微不足道之前,我们只会做一次蠢事。我之前修改了数以千计的事故记录,幸运的是回滚......

如果您在没有彻底测试脚本的情况下查询实时环境,那么我认为令人尴尬的应该是蛮干的,也可能是不专业的。

答案 8 :(得分:3)

我见过很多其他人错过WHERE条款。

我自己,我总是首先输入WHERE子句,然后返回到行的开头并输入查询的其余部分:)

答案 9 :(得分:3)

我的最爱之一发生在自动导入时,客户端更改了数据结构而没有先告诉我们。社会安全号码栏和我们为此人支付的金额已经转换。幸运的是,我们在系统试图向某人支付他的社会安全号码之前就找到了它。我们现在检查自动导入,在运行之前查找有趣的数据,如果数据看起来很奇怪则停止它。

答案 10 :(得分:2)

就像zabzonk所说的那样,在我今天的一两个更新中忘记了WHERE子句。

答案 11 :(得分:2)

我们有一个旧的应用程序没有处理与我们的HR数据库同步的名称更新非常有效,主要是由于他们键入标题更改的方式。无论如何,某个女人结婚了,我不得不写一个数据库更改请求来更新她的姓氏,我忘记了where子句,所有应用程序名称中的每个人现在都是Allison Smith。

答案 12 :(得分:1)

多年前健康的数量我在一个客户网站上工作,有一个很好的脚本来清除所有订单,购物车和客户的开发环境......以便轻松测试,所以我当然把该死的脚本放在制作服务器查询分析器并运行它。

运行了大约5-6分钟,我一直在讨论开发服务器的速度有多慢,直到删除的行数出现。 :)

幸运的是,我刚刚进行了一次完整备份,因为我正要进行安装..

答案 13 :(得分:1)

与SQL服务器相关的排序。我记得了解总是处理SqlDataReader是多么重要。我有一个在开发中运行良好的系统,并且碰巧在ERP数据库中运行。在生产中,它降低了数据库,因为我认为它足以关闭SqlConnection,并且有数百个(如果不是数千个)开放连接。

答案 14 :(得分:1)

超出典型的where子句错误。在不正确的数据库上丢弃,因此必须运行恢复。现在我三重检查我的服务器名称。谢天谢地,我有一个很好的备份。

答案 15 :(得分:1)

这是在Google可以提供帮助的日子之前。我没有遇到过SQL Server这个问题,但是它是丑陋的老表兄Sybase。

我在生产环境中更新了表模式。当时不能​​理解使用SELECT *的存储过程必须重新编译以获取新字段,我继续花费接下来的八个小时试图弄清楚为什么执行关键工作的存储过程仍然失败。只有在服务器重启后我才知道。

在您的旗舰客户网站上浪费数千美元和数百(最终用户)工时非常具有教育经验。强烈推荐!!

答案 16 :(得分:1)

我将最大服务器内存设置为0.我当时正在考虑自动告诉SQL服务器使用所有可用内存(现在很早)。没有这样的运气。 SQL服务器决定只使用16 MB,我不得不在单用户模式下连接以更改设置。

答案 17 :(得分:1)

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

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

我设法很快修复了错误。由于那个和另一个错误,我的更新总是以:

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

以这种方式避免错误要容易得多。

答案 18 :(得分:1)

不是,完全是一个“错误”,但当我第一次学习PHP和MYSQL时,我每天都会花费数小时,试图找出我的代码无效的原因,不知道我的密码/用户名/主机/错误数据库凭据到我的SQL数据库。你不能相信我浪费了多少时间,而且更糟糕的是,这不是一次性事件。但LOL,它的一切都很好,它构建了特色。

答案 19 :(得分:1)

我们的IT Ops决定从SQL 2000升级到SQL 2005。

下周一,用户会问为什么他们的应用无效。错误如:

  

未找到DTS等。

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

答案 20 :(得分:1)

在我的合作术语开始时,我最终将访问使用此特定系统的所有人(我省的许多应用程序使用过)。在我的辩护中,我是SQL Server Management Studio的新手,并且不知道你可以“打开”表并用sql语句编辑特定的条目。

我使用简单的UPDATE语句过期了所有用户访问权限(对此应用程序的访问权限由SQL框上的用户帐户以及访问表中的特定条目提供)但是当我去强调该声明时运行它,我没有包含WHERE子句。

我被告知的一个常见错误。快速解决方案是在每个人帐户(包括应该过期的帐户)之前解除,直到可以备份数据库。现在我打开表并使用SQL选择特定条目,或者我将事务中的所有内容都包装完毕,然后立即回滚。

答案 21 :(得分:1)

最大的错误是让开发人员“写”访问生产数据库 许多DEV和TEST记录被插入/覆盖并备份生产,直到明智地建议(由我!)只允许读取访问!

答案 22 :(得分:1)

我和一位初级开发人员一起工作过,他们感到困惑并在桌子上叫“Drop”而不是“删除”。

这是一个漫长的夜晚工作,以恢复备份......

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

答案 23 :(得分:1)

列可以为空,参数值无法检索正确的信息......

答案 24 :(得分:0)

在Management Studio中点击“恢复”而不是“备份”。