資料庫要從SQL 2000搬到SQL 2005,我最慣用的手法是:

1) 將SQL 2000的DB Detach
2) MDF, LDF檔案Copy到SQL 2005主機
3) 在SQL 2005上Attach
4) 移除新Attach上去DB中的原User資料(不然建立User Mapping時會因為User已存在而失敗)
5) 建立新User並設好User Mapping就大功告成!

今天遇到一個比較棘手的狀況: SQL 2000資料庫中的Table Owner並不是dbo,而是特定的User(例如: blah),SQL 2005會自動為你建立名為blah的Schema,並將Table歸於該Schema下,上述的步驟4)會因為有Table掛在blah Schema下無法Drop blah這個User...

我試出兩種解決方法,第一種是先將所有的Table所屬Schema改為dbo,這樣就可以將Schema跟User移除,依上述步驟做完,再將Table Schema改回blah。改Table Owner可以用sp_changeobjectowner,以下的T-SQL可以產生批次修改所有Table Owner的Script:

   1:  select 'exec sp_changeobjectowner ''blah.'+name+''',''dbo''' 
   2:  from sysobjects where xtype='U'
   3:  and name<>'dtproperties'

 第二種方法只將新DB的User 'blah'移除,但保留Schema 'blah'(Schema 'blah'的Owner先改成'dbo',而SSMS問你要不要一併移除Schema時選No),這樣就可以順利完成步驟5)。但記得做完後,要將User 'blah'的Default Schema設成'blah',而Schema 'blah'的Owner也要改回'blah'。


Comments

Be the first to post a comment

Post a comment