2012-09-05 56 views
1

我有一個名爲MyStaging的SQL Server 2005中的數據庫,並且我創建了一個名爲MyStaging_bk的空白數據庫。我去了備份MyStaging,然後嘗試恢復到MyStaging_bk。但它說我無法恢復,因爲備份集是不同的。將SQL Server數據庫複製到另一個數據庫

如何複製數據庫和它們在同一個數據庫服務器上?

回答

3

我在考慮你可以用高級用戶登錄sql server。

-- go for master 
use master 

-- backup the old database 
backup database olddatabasename 
to disk = 'c:\backup.bak' 

-- create a new database 
create database newdatabasename 
on 
(
    name = newdatabasenamedata, 
    filename = 'c:\newdatabasenamedata.mdf', 
    size = 500mb, 
    maxsize = unlimited, 
    filegrowth = 25mb 
) 
log on 
(
    name = newdatabasenamelog, 
    filename = 'c:\newdatabasenamelog.ldf', 
    size = 5mb, 
    filegrowth = 5mb 
) 

-- put it in single user mode 
alter database newdatabasename 
set single_user 
with rollback immediate 

-- get the backup logical names and write it down 
restore filelistonly 
from disk = 'c:\backup.bak' 

-- restore the database from the backup using the logical names 
restore database newdatabasename 
from disk = 'c:\backup.bak' 
with 
    move 'olddatabasenamelogicalnamedata' to 'c:\newdatabasenamedata.mdf', 
    move 'olddatabasenamelogicalnamelog' to 'c:\newdatabasenamelog.ldf', 
    replace 

-- rename the logical names if you want (do it =p) 
alter database newdatabasename 
modify file 
(
    name = 'olddatabasenamelogicalnamedata', 
    newname = 'newdatabasenamedata' 
) 

alter database newdatabasename 
modify file 
(
    name = 'olddatabasenamelogicalnamelog', 
    newname = 'newdatabasenamelog' 
) 

我敢肯定,從備份還原數據庫會自動將它在多用戶,但:

alter database newdatabasename 
set multi_user 

的newdatabase沒有任何用戶添加到它。所以:

use newdatabasename  

create user someuser from login anexistentloginname 

sp_addrolemember 'db_owner', 'someuser' 
sp_addrolemember 'db_datareader', 'someuser' 
sp_addrolemember 'db_datawriter', 'someuser' 

UPDATE1:

你必須單獨運行每個塊或每個塊添加go關鍵字。

UPDATE2:

我的壞在這裏,newdatabase將得到所有從備份數據庫用戶。

+0

@chris請看我最近的更新。 – lolol

相關問題