今天遇到要修改當(dāng)前正在運行的數(shù)據(jù)庫的名稱的問題,因為是老板提出來的,大家以前也都沒用到過這種方式,所以找花了點時間研究了一下,發(fā)現(xiàn)網(wǎng)上關(guān)于修改
數(shù)據(jù)加名的需求還真不少,最后在 SQL Server 的幫助文件中找了答案,現(xiàn)將代碼給出并給出相應(yīng)解釋,方便大家和自己后面用到時方便查找。 Use master EXEC sp_dboption 'OldDbName', 'Single User', 'TRUE' EXEC sp_renamedb 'OldDbName', 'NewDbName' EXEC sp_dboption 'NewDbName', 'Single User', 'FALSE' GO EXEC sp_dboption 'OldDbName', 'Single User', 'TRUE' EXEC sp_dboption 'NewDbName', 'Single User', 'FALSE' 這兩條語句的意思是將數(shù)據(jù)庫轉(zhuǎn)換為單用戶模式和非單用戶模式,這樣可以避免在重命名數(shù)據(jù)庫的時候有其它用戶對數(shù)據(jù)庫進行操作,造成死鎖。 當(dāng)在修改時一定要確定沒有用戶連接到要修改的數(shù)據(jù)庫,如果有用戶連接到數(shù)據(jù)庫的話會造成數(shù)據(jù)庫重命名失敗,解決這個問題也很簡單,只要運行一下下面的代碼就可以查看當(dāng)前的連接情況。 select spid from master.dbo.sysprocesses where dbid=db_id('OldDbName') 結(jié)果集中顯示的是當(dāng)前連接到數(shù)據(jù)庫 OldDbName 的連接,比如結(jié)果是 79 81 當(dāng)然啦,實際值應(yīng)該不是這兩個。然后執(zhí)行 kill 79 kill 81 關(guān)閉已建立的連接,再執(zhí)行上面的三行代碼就可以完成數(shù)據(jù)庫的重命名。 注:這種方式修改數(shù)據(jù)庫名稱只能修改邏輯名稱,對于數(shù)據(jù)庫的物理文件名稱是沒有辦法修改的,如果要修改物理文件的名稱,可以進行分離和附加操作進行修改。想必大家都知道如何去操作,這里就不多啰嗦了! 例如:在數(shù)據(jù)庫中有一個名為1的數(shù)據(jù)庫要更改為名為2,則可以進行如下操作:
use master
select spid
from master.dbo.sysprocesses where dbid=db_id('1') go 會查詢出連接:如51
再執(zhí)行KILL 51;
再執(zhí)行use master
EXEC sp_dboption '1','Single User','TRUE' EXEC sp_renamedb '1','2' EXEC sp_dboption '2','Single User','FALSE' GO 本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/lxiron/archive/2009/10/24/4723559.aspx |
|