林建設使用SQL Server 2012的系統,它包含相同的數據類型,但它爲每個用戶的特異性目的web應用程序,所以我們每個用戶使用一個數據庫,每一個數據庫有相同結構,並且在用戶點擊確認帳戶電子郵件時被創建並且生活。恢復通用數據庫中的每個新用戶
的問題是創建數據庫正在恢復一個名爲DB_GENERIC.bak其花費比我預期更多的時間數據庫的腳本。我正在尋找優化這種方法,並最終創建一個全新的數據庫,但減少了所需的時間。 (現在使用15秒來創建數據庫),而通用數據庫恢復其小(aprox 5mb,和600kb壓縮),所有表都是空的。
有沒有實現這一點,而不是還原完整數據庫備份的任何其他方式?我可以在t-sql上編寫整個通用數據庫並執行更改數據庫名稱嗎?它會更快嗎? 或者是壓縮或產生較低的資源消費備份的任何其他方式,事情是,我不需要數據或者什麼,只是表,過程,功能和模式。
在此先感謝
UDPATE:
感謝大家,回答我的問題,答案都是偉大的和有益的。我結束了使用@ Love2Learn答案,我嘗試了detach-copy-attach方法。
只爲你想象這是如何實現的,我有一個存儲過程是這樣的一個負責的複製,粘貼,從具有以下一個數據庫模板新的數據庫:
--executing bat that copies the database-1-template.mdf and database-2-template.mdf (as well as log files) to the DATA folder in my sql instance
--and renames them (then they'll be attached)
DECLARE @BATCopy VARCHAR(MAX) = 'C:\helpers\copyMDFAndLogFiles.bat'
--building command for xp_cmdshell with parameters (new databases names)
DECLARE @command varchar(500) = @BATCopy + ' ' + @database1Name + ' ' + @database2Name
--PRINT @command
EXEC xp_cmdshell @command, no_output
--attaching new databases
SET @SQL = ' USE [master]
CREATE DATABASE ' + @database1Name + '
ON (FILENAME = ''' + @SQLDATAPath + @database1Name + '.mdf''),
(FILENAME = ''' + @SQLDATAPath + @database1Name + '_log.ldf'')
FOR ATTACH;
CREATE DATABASE ' + @database2Name+ '
ON (FILENAME = ''' + @SQLDATAPath + @database2Name+ '.mdf''),
(FILENAME = ''' + @SQLDATAPath+ @database2Name+ '_log.ldf'')
FOR ATTACH;'
EXECUTE(@SQL)
--renaming logical files
SET @SQL = '
ALTER DATABASE '[email protected] +'
MODIFY FILE (NAME = Database1_Generic, NEWNAME = '[email protected] +')
ALTER DATABASE '[email protected] +'
MODIFY FILE (NAME = Database1_Generic_Log, NEWNAME = '[email protected] +'_log)
ALTER DATABASE '[email protected]+'
MODIFY FILE (NAME = Database2_Generic, NEWNAME = '[email protected]+')
ALTER DATABASE '[email protected]+'
MODIFY FILE (NAME = Database2_Generic_Log, NEWNAME = '[email protected]+'_log)
'
EXECUTE (@SQL)
我希望這幫助任何需要做同樣事情的人,我感謝大家的回答。
朱利安。
您是否想過可擴展性?是否有一個很好的理由讓每個用戶擁有一個數據庫?您可能無法利用連接池。 – 2013-03-06 15:12:20
@JayWalker關於爲每個用戶創建數據庫的決定不是我的,所以必須有一個原因,但我不完全確定爲什麼。這個想法是要有儘可能多的數據庫作爲服務器可以處理(並保持穩定),並且如果需要更多的數據庫,則將新的服務器添加到系統中。 – Julian 2013-03-26 19:09:06