新聞中心
前幾天看到一篇" SQL Server DBA三十問",很不錯(cuò),比較中肯。這些題目還是需要一定操作經(jīng)驗(yàn)的才能答得上來,其中的很多題目都可以通過books online查到,有些題目我也非常感興趣,因?yàn)橐蔡幚磉^類似的問題,所以印象深刻,現(xiàn)在把我的答案寫出來,希望可以幫到有緣人,如果有更好的方案,當(dāng)然我也很樂意學(xué)學(xué)。

我們注重客戶提出的每個(gè)要求,我們充分考慮每一個(gè)細(xì)節(jié),我們積極的做好網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站服務(wù),我們努力開拓更好的視野,通過不懈的努力,創(chuàng)新互聯(lián)贏得了業(yè)內(nèi)的良好聲譽(yù),這一切,也不斷的激勵(lì)著我們更好的服務(wù)客戶。 主要業(yè)務(wù):網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),小程序開發(fā),網(wǎng)站開發(fā),技術(shù)開發(fā)實(shí)力,DIV+CSS,PHP及ASP,ASP.Net,SQL數(shù)據(jù)庫的技術(shù)開發(fā)工程師。
題目:7. 在線系統(tǒng),一個(gè)表有五千萬記錄,現(xiàn)在要你將其中的兩千萬條記錄導(dǎo)入到另一臺服務(wù)器的某個(gè)表中,導(dǎo)完后,需要將這兩千萬數(shù)據(jù)刪 除,你預(yù)備如何處理,優(yōu)缺點(diǎn)是什么;
我的答案: (先說明一下我的環(huán)境是sqlserver 2000,并且假設(shè)他有主鍵id)
第1步:先做一個(gè)表,t_update_log,記錄更新過的記錄的主鍵id,記錄修改和刪除的記錄,這步驟的具體作用看下面的步驟;
第2步:導(dǎo)出2000萬的數(shù)據(jù)到另一個(gè)庫另一表,我起名為 t_2000w ,我是用dts來處理的,效率很好,如果沒有大字段,2000萬大概3個(gè)小時(shí)可以導(dǎo)完,如果有大字段,比如很大的varchar,text,ntext 等,那需要的時(shí)間久會比較長,具體時(shí)間還要看數(shù)據(jù)的大小。
第3步:刪除當(dāng)前庫導(dǎo)出的2000萬,我把當(dāng)前庫起名為 t_5000w, 我是這樣來處理的,首先建一個(gè)和源數(shù)據(jù)表相同結(jié)構(gòu)的表,起名t_3000w,導(dǎo)入剩下的3000萬條數(shù)據(jù),然后用sp_rename 分別修改兩個(gè)表,把t_5000w改成t_5000w_bak,把t_3000w改成t_5000w(即源表), 大概就是這樣,很easy吧。
別急,第一步的準(zhǔn)備工作還沒用上呢,而且還有很多細(xì)節(jié)的問題。
Q1:如何保證數(shù)據(jù)的準(zhǔn)確性,如果你在導(dǎo)入的同時(shí)有人對數(shù)據(jù)進(jìn)行了更新怎么辦?
Q2:盡量減少對用戶的影響,如果在sp_rename修改表名稱需要的時(shí)間比較長,而且剛好有數(shù)據(jù)需要insert怎么辦?
我的解決方案:
A1:剛好用到了第1步的表t_update_log,把有更新的記錄再重新導(dǎo)入到新表t_2000w,從此記錄表中t_update_log找出被刪除的id,從t_2000w中刪除;
A2:修改對表t_5000w的insert操作接口,可以再建一個(gè)結(jié)構(gòu)和t_5000w一樣的新表,取名t_6000w,如果有自增id,把自增id的當(dāng)前值設(shè)置為6000w,然后新增的數(shù)據(jù)都insert到t_6000w中,如果你的數(shù)據(jù)庫操作都是通過存儲過程統(tǒng)一操作,那很幸運(yùn),你只需要修改存儲過程,不需要修改你的。net程序,你甚至可以不停止服務(wù)就可以順利升級,在這里存儲過程的優(yōu)越性得到了充分體現(xiàn),如果你不是通過存儲過程,而是sql語句,而且調(diào)用的地方很多,那我建議,升級期間你還是暫停服務(wù)吧。
當(dāng)然以上操作都是需要再測試環(huán)境下演練一遍,記錄下每一部需要的時(shí)間,并且做好失敗時(shí)能及時(shí)恢復(fù)到之前狀態(tài)。當(dāng)然升級期間還是建議暫停服務(wù),因?yàn)榇蟛糠秩丝梢越邮軙和7?wù),但不能接受數(shù)據(jù)丟失。
網(wǎng)頁名稱:SQLServerDBA三十問之我答(第7題)
本文鏈接:http://m.fisionsoft.com.cn/article/ccdipii.html


咨詢
建站咨詢
