雖然說SQL Server 2008到目前為止已經算是新版本的資料庫系統了。但是其以後還會不斷的更新換代。為此在部署SQL Server 2008的時候,資料庫管理員仍然需要考慮到向後相容性的問題。為了減少以後升級的麻煩,資料庫管理員有必要瞭解這個話題。具體來說,就是要瞭解SQLServer2008的資料庫版本中,哪些功能可能在以後的資料庫版本中會被拋棄。然後資料庫管理員在部署這些功能時,要謹慎。能夠不用就不用,或者用其他功能來代替。免得在以後資料庫升級過程中,再來進行調整。筆者現在就以資料複製功能為例,談談如何做好這個向後的相容性。
一、 在SQL Server 2008中不推薦使用事務複製的訂閱到期。
其實這個訂閱保持期就好像是一個“有效期間”或者叫做“質保期”。如果資料庫系統未能夠在有效“質保期”內完成同步訂閱工作,則這訂約作業就會停用或者到期。如假設最大的散發保留週期為72小時(這是SQLServer資料庫的預設設定,管理員可以根據實際情況來調整),如果訂閱未能夠在72小時內同步的話,而且散發資料庫中還存在尚未傳遞到訂閱伺服器的更改,則訂閱作業將會被散發者上啟動並執行“清除分發”作業標記為停用。此時資料庫管理員如果要重新啟用這個訂閱功能的話,那麼就必須重新初始化訂閱。
而在資料庫中,主要是這個sp_addpublication過程來控制這個訂閱周期。在這個預存程序中,有一個@retention 屬性。這個屬性主要用來設定訂閱活動的保持期。預設情況下這個屬性的值為336小時。如果訂閱活動在保持期內不活動的話,則到期後系統就會將其自動刪除。一般來說,這個值可以大於發布服務期使用的散發資料庫的最大保持期。也就是說,他們具有一定的獨立性。如果資料庫管理員想讓訂閱永遠不到期的話,則只需要將這個參數設定為0即可。不過根據微軟的官方資料可以知道,這個參數的話在以後的版本中可能會被逐漸的淘汰。因為這個屬性如果設定不當的話,會給合併式複寫造成一系列的不利影響,影響合併式複寫作業的穩定性。為此資料庫管理員在部署複製作業時,最好不要使用這個參數,以免跟後續的資料庫版本不相容。
如果一定要使用這個參數的話,那麼最好能夠遵循下面的一些建議。
一是如果採用合併式複寫,那麼合并發布的保持期最好給一個寬限期。因為可能資料庫部署在不同的時區,如果沒有寬限期的話,那麼這些分布在不同時區中的訂閱伺服器,運行起來就可能會出現問題。為此筆者建議,通常情況下需要給其一個24小時的寬限期。即使現在企業用不到,但是隨著後續規模的擴大,很有可能要在不同的國家設定資料庫伺服器。如美國的企業,可能會在國內的辦事處設定一台訂閱伺服器,以提高辦公的效率。此時就應該為其設定24小時的寬限期。
二是盡量不要將這個參數設定為0。如果把這個參數設定為0,就表示沒有保持期的限制。雖然這從某個程度來講,可以簡化資料庫管理員的維護工作。但是將這個參數的值設定為0,可能會產生一系列的負面效應。如此時資料庫系統將無法刪除中繼資料等等。
為此,筆者的建議時,在實現複製服務時,最好不要採用這個參數。如果一定要用的話,那麼要給其設定一個合理的寬限期;並且最好不要將這個參數設定為0。雖然這不是強制性的規定,但是為了複製服務能夠穩定運行,各位元據庫管理員最好還是好好考慮筆者的這個建議。
二、 非SQL Server訂閱伺服器的處理。
SQL Server資料庫在橫向的相容性上表現還是不錯的。其不但可以支援SQL Server訂閱伺服器,還能夠支援非SQLServer的訂閱伺服器。如果企業需要採用非SQLServer的訂閱伺服器,那麼有兩個實現的渠道,分別為ODBC與OLE DB。不過由於ODBC其在效能、安全上都不如OLE DB介面,為此在後續的版本中,微軟資料庫可能不會再支援ODBC介面。所以在2008版本中實現訂閱伺服器的話,那麼最好不要再使用這個ODBC介面,而改用OLE DB介面。