SQL Server 2012를 사용하여 시스템을 구축한다는 것은 동일한 데이터 유형을 포함하지만 각 사용자마다 고유 한 웹 응용 프로그램이므로 사용자 당 하나의 데이터베이스를 사용하므로 모든 데이터베이스가 동일합니다. 구조이며 사용자가 확정 된 계정 이메일을 클릭하면 동적으로 생성되어 게재됩니다.각 새 사용자에 대한 일반 데이터베이스 복원
문제는 데이터베이스를 만드는 스크립트가 DB_GENERIC.bak라는 데이터베이스를 복원하고 예상보다 많은 시간이 걸리는 것입니다. 임을 최적화 할 수있는 방법을 모색하고 새로운 데이터베이스를 만들었지 만 시간이 절약되었습니다. (지금은 데이터베이스를 만드는 데 15 초를 사용하고 있습니다), 일반 데이터베이스는 작은 (aprox 5MB 및 600kb 압축)을 복원하고 모든 테이블은 비어 있습니다.
전체 데이터베이스 백업을 복원하는 대신 다른 방법으로이 작업을 수행 할 수 있습니까? t-sql에서 전체 generic 데이터베이스를 스크립팅하고 데이터베이스 이름을 변경하여 실행할 수 있습니까? 더 빨라지겠습니까? 아니면 리소스가 적은 백업을 생성하거나 압축하는 다른 방법이 있습니다. 데이터 나 기타 테이블, 프로 시저, 함수 및 스키마가 필요하지 않습니다. 사전에
덕분에
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)
나는이 희망 내가해야 할 일과 똑같은 일을해야하는 사람을 돕고, 답장을 보내 주셔서 감사합니다.
줄리안.
확장성에 대해 생각해 보셨습니까? 사용자 당 데이터베이스를 보유해야하는 정말 좋은 이유가 있습니까? 연결 풀링을 활용하지 못할 수도 있습니다. –
@JayWalker 사용자 당 데이터베이스를 만드는 것에 대한 결정은 내 것이 아니므로 이유가 있어야하지만 이유는 분명하지 않습니다. 아이디어는 서버가 처리 할 수있는만큼의 데이터베이스를 보유하고 (그리고 안정적으로 유지하는 것), 더 많은 데이터베이스가 필요하다면 새로운 서버가 시스템에 추가됩니다. – Julian