2008-08-15 149 views

回答

0

我丢弃了实时数据库并将其删除。

获得的经验:确保您知道您的SQL - 并确保在您触摸东西之前进行备份。

+0

删除和删除在同一时间..但为什么你反应如此努力,糟糕的生产数据库;-) – Chris 2011-03-21 11:46:33

4

初级DBA的意思做:

delete from [table] where [condition] 

相反,他们键入:

delete [table] where [condition] 

哪个是有效的T-SQL,但基本上忽略了其中[状态]完全位(至少它没有然后在MSSQL 2000/97上 - 我忘记了哪个)并擦掉整个表格。

这很有趣: -/

+2

当然不是在SQL Server 2000上。没有SQL Server 97-前身是SQL Server 7。 – splattne 2008-11-09 17:22:01

0

我发现我不明白Oracle重做日志文件(?术语中,它是很久以前),失去了周的交易数据,这不得不手动重新从纸质机票中取出钥匙。

那里一线希望 - 在我花了输入的周末期间,我学到了很多关于我的交易输入屏幕的可用性,之后显着提高的交易输入屏幕。

11

我觉得我最大的错误是

truncate table Customers 
truncate table Transactions 

我没有看到什么MSSQL服务器,我登录,我想清楚了我的本地副本......熟悉的“OH小号**吨”,当它我的老板注意到我白得可怕,并问我刚刚做了什么。大约半分钟后,我们的网站监视器疯了,开始发邮件告诉我们该网站已关闭。

经验教训?切勿将连接打开以使数据库长于绝对需要。

直到凌晨4点才恢复备份数据!我的老板为我感到难过,并给我买了晚餐......

+0

是啊我几乎已经做到了这一点。肯定总是关闭连接,尽快生活。 – alexmac 2008-11-23 21:57:45

0

大多数人最糟糕的情况是生产数据丢失,但如果他们没有运行夜间备份或将数据复制到灾难恢复站点,那么他们应得的一切他们得到!

@Keith在T-SQL中,是不是FROM关键字可选的DELETE?这两种说法都是完全一样的......

5

我为一家小型电子商务公司工作,有2名开发人员和1名DBA,我是其中一名开发人员。我通常不习惯更新生产数据,如果我们已经更改了存储过程,我们会通过源代码管理将它们放入并正式部署例程设置。

好吧,无论如何,一个用户来找我需要更新我们的联系人数据库,批量更新一堆设施。所以我在我们的测试环境中写下了这个查询,如

update facilities set address1 = '123 Fake Street' 
    where facilityid in (1, 2, 3) 

就是这样的。在测试中运行它,更新3行。将它复制到剪贴板,粘贴到我们的生产数据库的终端服务器上,运行它,惊恐地看着它,因为它需要5秒钟来执行和更新100000行。不知怎的,我复制的第一线,而不是第二个,没有注意我CTRL +VCTRL +è“d。

我的DBA,一位老希腊绅士,可能是我遇到的最暴躁的人并不激动。幸运的是,我们有一个备份,并没有打破任何网页,幸运的是,该领域只是为了显示目的(和结算/运输)。

经验教训是关注你正在复制和粘贴的内容,可能还有其他一些内容。

0

发生在我身上的最糟糕的事情是生产服务器消耗了HD中的所有空间。我使用的是SQL Server,所以我看到数据库文件,并看到日志大约为10 GB,因此,当我想截断日志文件时,我决定做我总是这样做的事情。我做了一个分离删除日志文件,然后重新附加。那么我意识到,如果日志文件没有正确关闭,这个过程不起作用。所以我最终得到一个mdf文件并且没有日志文件。幸运的是,我去了微软的网站,我得到了一种恢复数据库的方式作为恢复和移动到另一个数据库。

1
update Customers set ModifyUser = 'Terrapin' 

我忘了在where子句 - 很无辜的,但与5000+客户的表,我的名字将在一会儿每条记录......

教训:使用事务提交和回滚!

3

我曾经设法写一个永远不会退出的更新游标。在2M +行的桌子上。锁升级并升级,直到这个16核,8GB内存(在2002!)盒子实际上停止(蓝屏类型)。

4

大约7年前,我在工作到很晚之后为客户的数据库生成了一个更改脚本。我只改变了存储过程,但是当我生成SQL时,我选中了“脚本相关对象”。我在我的本地机器上运行它,并且都显得运行良好。我在客户端的服务器上运行它,脚本成功。

然后我加载了网站,网站是空的。令我惊骇的是,“脚本依赖对象”设置为我的存储过程触及的每个表做了DROP TABLE

我立即打电话给主要开发人员和老板让他们知道发生了什么,并询问最新的数据库备份位置。其他2位开发者参加了会议,我们得出的结论是没有备份系统甚至没有备份系统,也没有数据可以恢复。客户失去了他们整个网站的内容,我是根本原因。结果是给我们的客户一个$ 5000信贷。

对我来说这是一个很好的教训,现在我对运行任何更改脚本和首先备份数据库持谨慎态度。我今天仍然在同一家公司工作,每当有关备份或数据库脚本的笑话出现时,总会有人提起着名的“DROP TABLE”事件。

1

我以为我是在测试DB(这是不是这种情况显然)工作,所以当我完成了“测试”我运行一个脚本来重置所有数据返回给我们使用标准的测试数据..哎!
幸运的是,这发生在有备份的数据库上,因此在弄清楚我做了错误的事情后,我们可以轻松地恢复原始数据库。

然而这次事件确实教导了我曾经工作过的公司realy分离生产和测试环境。

2

我们正在尝试修复Oracle群集上的已被破坏的节点。

存储管理模块出现问题,所以我们点击卸载按钮,打算从其他节点重新安装和复制配置。

嗯,原来应用于整个群集的卸载按钮,所以它愉快地从系统中的所有节点删除存储管理模块。

导致生产群集中的每个节点崩溃。而且由于没有一个节点有存储管理器,他们不会出现!

以下是关于备份的一个有趣事实...最旧的备份在异地进行轮换,并且您知道数据库中最古老的文件是什么?系统安装时设置的配置文件。

因此,我们必须让场外人员用该磁带发送快递,几个小时后,我们已经重新安装并运行了一切。现在我们保留安装和配置文件的本地副本!

0

更新客户表的所有行,因为您忘记添加where子句。

这就是我所做的: 。我已将所有用户的密码列更新为我输入到控制台的示例字符串。最糟糕的部分是我正在访问生产服务器,当我这样做时,我正在检查一些查询。然后,我的老年人不得不恢复一个旧的备份,不得不从一些真正不满的客户那里接到一些电话。 Ofcourse存在时,我没有使用delete语句,我甚至不想谈论;-)

0

截断表T_DAT_STORE

T_DAT_STORE是我司的事实表中的另一个时间工作英寸我想我已连接到开发数据库。幸运的是,我们有一个每日备份,直到那一天才被使用,数据在六个小时内恢复。

从那时起,我裁截前修改的一切,并定期请问未成年表​​的备份恢复只检查备份做得很好(备份是不是我的部门完成)

1

我不记住所有失控的sql语句,但我有一个教训 - 在交易(如果可以的话)(注意大日志文件!)。

在生产中,如果可以的话,继续用老办法:

  1. 使用维护窗口
  2. 备份
  3. 执行你的变化
  4. 验证
  5. 恢复,一旦发生错误

很不开心,但一般工作,甚至有可能给他人这个程序在他夜班期间运行它,而你得到你当之无愧的睡眠:-)

0

这并没有发生在我身上,只是一个我不得不清理我们的客户。

他们有一个运行在RAID5磁盘阵列上的SQL服务器 - 很好的热插拔驱动器配有点亮的磁盘状态指示器。绿色=好,红色=不好。

他们的一个驱动器从绿色变为红色,谁被告知拉和更换(红色)光驱坏了天才花费(绿色)好一出代替。好吧,这并没有完全消除整个raid集 - 选择可读性(红色)vs不可达(绿色)几分钟。在意识到错误并将驱动器交换回在此期间写入的任何数据块后由于磁盘同步丢失,时间变得非常残酷)... 24小时后,编写元程序来恢复可读数据并重建他们备份和运行的中型架构。

这个故事的道德包括...永远不要使用RAID5,永远保持备份,小心你雇用的人。

我做了一个客户生产系统出现了重大失误一次 - 幸运的是,同时想知道为什么命令要花这么长时间来执行意识到我做了什么,并取消其在世界面前落下帷幕。

这个故事的道德包括......任何更改之前总是开始一个新的事务,测试结果是你期望什么,然后,然后才提交事务。

作为一般的观察室射频/类型错误的许多类可以通过适当定义你的架构外键约束和保持远离标有“CASCADE”

1

我确实做到了你的建议的任何命令阻止。我更新了持有客户文档的表中的所有行,因为我忘记了在末尾添加“where ID = 5”。那是个错误。

但我很聪明,偏执。我知道我会搞砸一天。我发布了“开始交易”。我发出回滚,然后检查表是OK。

不是。

在生产中学到的经验:尽管我们喜欢在MySQL中使用InnoDB表格,原因很多很多的原因......请确保您没有设法找到少数不关注交易的MyISAM表格之一,你不能回滚。在任何情况下都不要相信MySQL,习惯性地发布“开始交易”是件好事。即使在最糟糕的情况下(这里发生了什么),它也没有伤害任何东西,它会保护我在InnoDB表上。我不得不从备份恢复表。幸运的是,我们每晚进行备份,数据几乎不会改变,并且表格是几十行,因此几乎是瞬间的。作为参考,没有人知道我们仍然有非InnoDB表格,我们认为我们很久以前就转换了它们。没有人告诉我要注意这个问题,没有人知道它在那里。我的老板会做同样的事情(如果他在输入where子句之前打得太早)。

4

某事的效果:

update email set processedTime=null,sentTime=null

生产通讯数据库

,重新发送数据库中的每封电子邮件。

相关问题