by Joseph Wu
30. September 2012 02:56
之前有客戶因為安裝資料庫太分散,導致授權數不足,經過我們的分析之後,其實用現有的授權就足夠了,只需要將分散在各個 VM 中的 SQL Server instance 移除,並將資料庫統一集中即可。
這個想法其實很單純,但沒想到轉移 SharePoint 2003 的資料庫由 A Server to B Server 這麼麻煩。
由於我之前沒有嘗試過在 SharePoint 2003 上轉移 SQL Server 資料庫,所以我先去找了相關文獻,這才發現,在 SharePoint 2003 中,並不是改改 web.config 中的連線字串就結束了。參考連結如下:
http://support.microsoft.com/kb/894164
上述技術文件大致上有幾個重要步驟:
1、使用 SharePoint 內建的工具進行備份
2、使用 SSMS 資料庫管理工具進行資料庫的備份
3、使用 SharePoint 組態設定網站,將原先的設定值全部砍掉 (這步驟有相當多細節)
4、還原使用 SharePoint 工具備份的資料
但是我一開始的第一個步驟就失敗了,如下圖:
SITEDB (網站相關資料庫) 、 DOCLIB (文件資料庫) 我都成功備份,就 INDEX 備份失敗。我找了老半天找不出原因,但我不打算停止嘗試,我要把 SharePoint 產生的網站砍掉重建 = =
當然,在做之前,因為有 vmware ESXi 的虛擬化環境,所以一定要先做 snapshot ,至少失敗了還可以倒回來。
過程就不多說了,我嘗試的結果就是,SharePoint 所產生的備份檔無法重建網站 Orz…
事件檢視器的產生一堆錯誤 logs
我檢查過資料夾權限、執行 SQL Server 帳戶權限,但就是找不出為何會還原失敗的原因。試了 3、4 個小時後,我覺得這樣不行,趕緊使用 snapshot 還原,並找詢其它可用辦法。
過程中我覺得很納悶,為何組態設定網站的資料庫、內容資料庫都可以由組態網站中進行設定,但 SharePoint 的其它二個資料庫卻沒辦法,相關資料庫一共 4 個如下:
- PortalSiteName_prof
- PortalSiteName_serv
- PortalSiteName_site
- SharePoint 入口網站 Server 2003 組態資料庫。預設情況下,這個資料庫稱為 SPS_Config_db
我想了想,既然 portal 網站中所有的檔案都沒有連線字串相關資訊,那程式該怎麼知道資料庫是位於哪台 SQL Server , 如果程式寫死又被 compile 成 .dll 檔的話我就認了。但既然不在檔案裡,那或許是在資料庫中。
或許是我運氣不錯,被我找到在組態資料庫中的 Database 資料庫中的 DatabaseServiceId 中。雖然說是一堆看不懂的數字,但是我們剛剛已經確定其中一個資料庫被我改了 SQL Server 的主機,所以應該是有 2 個一樣的,一個不一樣的字串,我們就 copy 那一個不同的字串,在 paste 到另外 2 個資料庫的欄位即可,如下是完成圖。
終於弄完了,想說下次應該碰不到了吧,但還是寫起來,避免自己忘掉。 可以躺平了……