有些事現在不做,一輩子都不會做了!

電影"練習曲"

Community Server 2007出來好一陣子了,由於每天分配給這些543的時間有限,偏偏自己又是少不了睡眠的中年人(最近的新體認---所謂的技術強者,意指既聰明又不用睡覺的超人,Scott Hanselman, ScottGu, Rex都是血淋淋活生生的例子!),Blog的平台CS2.1就這麼一天拖過一天,眼見2007就要過去。前幾天還在想,說不定直接等CS2008算了(如果有的話)...

這陣子忽然發現自己好久沒到溪邊看小魚,"有為"程度大不如前,就偷偷地立下了志願,要開始少睡點覺,多花些時間學新東西追一下進度。昨天晚上不知吃錯了什麼藥,忽然就想把Blog平台從2.1升到2007.1,勇氣冒出來的一瞬間,我想到了練習曲那句經典Slogan--有些事現在不做,一輩子都不會做了, 那...那...那... 就衝吧!

在本機做了小測試,利用2007附的SQL指令檔,可以輕鬆將2.1的DB升級成2007版,然後將CS2007 Web的connectionString.config(連線字串從web.config拉出來了)指向DB,整個Blog就升級完成,順利得不得了。最後,再把我在Theme上做的一些手腳,例如: Accordian、Google AdSense、CAPTCHA... 等移植到CS2007上,工程不算大,但也花去近兩個小時。

不過,這幾件簡單的小事,要在ASPNix Hosting的環境上實作卻沒這麼簡單...

第一,我沒有SQL Admin的權限,所以不能利用Backup/Restore的技巧為升級失敗留後路。
第二,遠在美國的主機Ping起來就有200ms+的Delay,要將Server上現有的2.1舊檔備份或上傳2007新檔都很耗時間。
第三,同上,遠距執行SQL,執行與回應的時間都拉長數十倍,徒增等待時的刺激感。
第四,由於是Shared Web Hosting,我沒法直接管理IIS及SQL,只能用廠商給的管理介面執行簡單操作並用FTP上傳檔案,一旦有狀況,並不好Trouble-Shooting。

最後,我決定用比較保險的做法,在ASPNix的SQL上建了第二個DB,利用SQL Server Management Studio產生建立DB的Script,先Remark掉建立Foreign Key的部分,在新DB上跑一次,同樣的Schema(但不含Foreign Key)就在新DB上重生了。接著,利用INSERT INTO NewDB.dbo.csTable (Col1, Col2...) SELECT Col1, Col2... FROM OrigDB.dbo.csTable的做法,將舊DB的資料搬來一份。其實這番苦工,用Backup/Restore一下就可以搞定,在沒有足夠DB權限的狀況,又怕胡亂試把"Production環境"搞爛(我已經有100名訂戶,每天超過500人次到訪,說什麼也要付起社會責任,謎之聲: 你可不可以不要再往臉上貼金了?),只好土法鍊鋼用最穩當的做法。

因為先不設Foreign Key,各Table的資料才可以不依相依順序一一塞入,另外,有些IDENTITY欄位的Table,還要開啟IDENTITY_INSERT旗標,並明列欄位清單(也就不能用SELECT *混過去)。我另外試過MS的Database Publishing Wizard及SSMS的Export Data功能,一個是部分資料未匯入,一個是Identity會亂掉,所以只好自己來。

資料都順利塞完了,此時才加上FK、跑升級2007的SQL Script,上傳2007的Web檔案,接著第二個Blog就建立起來了。看到新Blog運作順利,才敢用新Blog取代原Blog。

看似只有幾句話帶過,實際上卻因為遠距操作,做什麼都很慢,耗掉近10個小時的時間才完成,也就是說我眼睜睜看著週日的早晨天空漸亮,才去瞇了不到四個小時,又繼續扮演在現實生活中的真實身份。

帶著一身的疲憊,看著一夜之前換新的Blog,漸漸又有點熱血的感覺。大家如果發現新版Blog什麼地方有問題的,請回應給我,我再來慢慢改。


Comments

# by 小熊子

辛苦了,又嗑藥了,我們就是愛這種熱血在內心中奔騰的感覺

# by Rex Tang

ASPnix在管理資料庫的部分的確挺麻煩的, 每次要備份的時候都得發 SR (Service Request) 給那邊的管理人員才行. 不過他們的服務效率還挺好的就是了. 網路的確是挺慢的. 日本到美國也是 250ms 左右, 這邊就沒啥辦法了...

Post a comment