2008-08-15 144 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

生產通訊數據庫

,重新發送數據庫中的每封電子郵件。

相關問題