2010-05-12 68 views
2

背景:
我有一個網站建在ASP.NET與Sql Server 2005作爲它的數據庫。該站點是坐在客戶機服務器機房中的Windows Server 2003框中的唯一站點。客戶端是當地的學區,所以出於數據安全的原因,沒有遠程桌面訪問,也沒有遠程Sql Server連接,所以如果我必須服務數據庫,我必須在終端。我有FTP訪問來更新ASP代碼。奇怪的Sql Server 2005行爲

問題:
昨天我與系統聯繫了一個問題。當我仔細研究它時,似乎我近一年前解決的一個錯誤已經返回。我有一個存儲過程用於將int作爲參數,但一年前我們更改了系統結構並更新了存儲過程以獲取nvarchar(10)。存儲的過程不知何故變回採用int而不是nvarchar。

有一個外部硬盤驅動器連接到服務器,可以定期複製數據,並且有能力在發生故障時恢復服務器。我假設不知怎的,舊版本的數據庫已經恢復,但我知道的數據是在錯誤發生前7天和1天插入的,仍然在數據庫中。

問題:
無論如何,Sql Server 2005數據庫的結構可以恢復到以前的版本或恢復到以前的版本而不觸及實際的數據?沒有其他人能夠訪問服務器,所以我想要弄清楚這是如何發生的。

任何想法?

回答

0

通過數據轉換服務(DTS)?或者如果設置數據庫的腳本在某處可用。

+0

Gaby - 我最初直接在服務器上創建數據庫,並手動完成所有更新。我只使用腳本經常複製備份,以便帶回我的辦公室以保持生產環境的更新。 – 2010-05-12 14:33:41

2

使用SQL Server的內置備份和恢復機制,沒有辦法只選擇某些要恢復的對象。通過事務日誌備份,您可以恢復到可能在某個事務或ALTER語句創建之前的時間點,但這是您獲得的最接近的時間點。有一些工具可以讓你挑選某些對象進行還原,但是它們的工作方式是將數據庫還原到副本並複製所需的對象或直接讀取備份並將這些對象複製出來。換句話說,這不是偶然使用內置工具可能發生的事情。我的猜測是有人不小心運行了存儲過程的舊腳本來恢復它。

+0

「......有人不小心跑了一個老腳本......」也是我的猜測。但它*聽起來像是在該系統上有強大的安全性? – 2010-05-12 14:32:28

+0

@Philip Kelley - 它必須由某個擁有權限的帳戶運行,即使它是恢復。這意味着某件事或某人必須有權訪問。如果使用ALTER權限的帳戶數量有限,則應該可以輕鬆縮小更改的來源。 – Thomas 2010-05-12 14:35:16

+0

ASP連接的帳戶非常有限。本地管理員帳戶是唯一具有存儲過程等任何更改權限的帳戶。 – 2010-05-12 15:40:23

2

在不觸摸任何數據或任何其他存儲過程的情況下更改存儲過程並不重要。如何爲什麼何時,那是問題。

一個建議,運行

select * from sys.procedures 

,並檢查CREATE_DATE和modify_date列,對於你的問題的程序和數據庫中的所有其他程序。

+0

感謝您的想法。這是一個命令,我只能從終端上運行,所以它必須等到下一次我能離開我的辦公室後再到他們的辦公室。 – 2010-05-12 15:43:38

1

我見證了我在一個客戶端安裝的應用程序發生類似的事情。每隔一段時間這個程序就會恢復到舊版本。

這只是一個客戶端,應用程序安裝在其他幾個從未有過這個問題的應用程序,而且他們恰好也是一個學區。它每三個月左右發生一次,沒有人應該觸摸那臺機器。我甚至不知道他們有誰知道如何打開企業經理。

出於好奇,您的客戶端使用哪種備份軟件?並且在檢查過程的創建/修改日期之後,服務器是否在那段時間重新啓動?

我問的原因是我的客戶端有備份軟件,在那臺服務器上做了一些非常奇怪的事情。例如,自上次成功備份以來,重新啓動時必須「播放」更改,包括文件操作。另外,它是否安裝在虛擬機?

+0

順便說一下,我放棄了試圖弄清楚這一點,而只是保留一個當前流程的腳本,我可以在任何時候重新應用它。但我仍然很好奇他們有什麼備份解決方案。既然你提出了這個問題,我的想法就轉向了。 – NotMe 2010-05-12 15:46:33