SQL Server 2012 を使用してシステムを構築しています。これは同じデータ型を含む Web アプリですが、ユーザーごとに固有であるため、ユーザーごとに 1 つのデータベースを使用しています。すべてのデータベースは同じ構造を持ち、ユーザーがクリックすると動的に作成され、ライブになります。アカウントの確認メールで。
問題は、データベースを作成するスクリプトが DB_GENERIC.bak というデータベースを復元していて、予想以上に時間がかかることです。これを最適化する方法を探しており、最終的に作成された新しいデータベースになりますが、所要時間は短縮されます。(現在、データベースの作成に 15 秒ほど使用しています)、汎用データベースは小さいサイズ (約 5 MB、600 KB 圧縮) を復元しており、すべてのテーブルは空です。
データベースの完全バックアップを復元する代わりに、これを達成する他の方法はありますか? t-sql で汎用データベース全体のスクリプトを作成し、それを実行してデータベース名を変更できますか? それはもっと速くなるでしょうか?または、リソース消費量の少ないバックアップを圧縮または生成する他の方法ですか。データなどは必要なく、テーブル、プロシージャ、関数、およびスキーマだけが必要です。
前もって感謝します
更新:
私の質問に答えてくれたすべての人に感謝します。答えはどれも素晴らしく、役に立ちました。@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 '+@database1Name +'
MODIFY FILE (NAME = Database1_Generic, NEWNAME = '+@database1Name +')
ALTER DATABASE '+@database1Name +'
MODIFY FILE (NAME = Database1_Generic_Log, NEWNAME = '+@database1Name +'_log)
ALTER DATABASE '+@database2Name+'
MODIFY FILE (NAME = Database2_Generic, NEWNAME = '+@database2Name+')
ALTER DATABASE '+@database2Name+'
MODIFY FILE (NAME = Database2_Generic_Log, NEWNAME = '+@database2Name+'_log)
'
EXECUTE (@SQL)
これが、私がしなければならなかったのと同じことをする必要がある人の助けになることを願っています。あなたの答えに感謝します。
ジュリアン。