Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
ivikasrana
Starting Member
3 Posts |
Posted - 2014-07-14 : 09:22:15
|
I'm creating a module for our testing team to copy/database without having access to the complete server. I do not want them to access the sql server or any wizard but to give them a webpage where they can copy live database to a testing database on the same server without bugging up the development team.We are using SQL 2012 DevloperAny help would be appreciated...-----------------------USE MASTERGODECLARE @Folder VARCHAR(MAX) = 'E:\MSSQLBackup\'DECLARE @PathFile VARCHAR(MAX) = @Folder + 'SomeDB.bak'DECLARE @PathDB VARCHAR(MAX) = @Folder + 'SomeDBTest.mdf'DECLARE @PathLog VARCHAR(MAX) = @Folder + 'SomeDBTest_Log.ldf'BACKUP DATABASE SomeDB TO DISK = @PathFile WITH FORMAT, COMPRESSION Alter Database SomeDBTest SET SINGLE_USER With ROLLBACK IMMEDIATE RESTORE FILELISTONLY FROM DISK = @PathFile --found this online but its uselessRESTORE DATABASE SomeDBTest FROM DISK = @PathFile WITH NORECOVERY,MOVE 'SomeDBTest' TO @PathDB,MOVE 'SomeDBTest_Log' TO @PathLogALTER DATABASE SomeDBTest SET MULTI_USER;------------------------Processed 257943 pages for database 'SomeDB', file 'SomeDB' on file 1.Processed 2 pages for database 'SomeDB', file 'SomeDB_log' on file 1.BACKUP DATABASE successfully processed 257945 pages in 1.255 seconds (1716.994 MB/sec).(2 row(s) affected)Msg 3154, Level 16, State 4, Line 13The backup set holds a backup of a database other than the existing 'SomeDBTest' database.Msg 3013, Level 16, State 1, Line 13RESTORE DATABASE is terminating abnormally. |
|
MichaelJSQL
Constraint Violating Yak Guru
252 Posts |
Posted - 2014-07-14 : 11:27:58
|
I made some minor changes and tested. I usually kill connections when I restore a database, so I am including a kill spid proc which you can create in master. CREATE PROC [Dba].[KillConnectionsForDatabase]@Dbname varchar(50)ASBEGIN DECLARE @SPIDs TABLE(killSpid nvarchar(20))DECLARE @Rows intINSERT INTO @SPIDsSELECT DISTINCT 'KILL ' + CAST(SPID as varchar(5)) FROM Master..sysprocesses where dbid = db_id(@Dbname) DECLARE SpidKill CURSOR READ_ONLY FOR SELECT killSpid FROM @SPIDs DECLARE @killSpid nvarchar(20) OPEN SpidKill FETCH NEXT FROM SpidKill INTO @killSpid WHILE (@@fetch_status <> -1) BEGIN IF (@@fetch_status <> -2) BEGIN EXECUTE Sp_executesql @killSpid END FETCH NEXT FROM SpidKill INTO @killSpid END CLOSE SpidKill DEALLOCATE SpidKill ENDDECLARE @Folder VARCHAR(MAX) = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVERLOCAL\MSSQL\'DECLARE @BackupDb varchar(50) = 'DEV'DECLARE @LogicalBackupDbDataName varchar(50) = 'DEV'DECLARE @LogicalBackupDbLofName varchar(50) = 'DEV_Log'DECLARE @RestoreDB varchar(50) = 'SomeDB'DECLARE @PathFile VARCHAR(MAX) = @Folder + 'Backup\' + 'DEV.bak'DECLARE @PathDB VARCHAR(MAX) = @Folder + 'Data\' + 'SomeDBTest.mdf'DECLARE @PathLog VARCHAR(MAX) = @Folder + 'Data\' + 'SomeDBTest_Log.ldf'BACKUP DATABASE Dev TO DISK = @PathFile WITH INIT,COMPRESSION EXEC [Dba].[KillConnectionsForDatabase] 'SomeDB'RESTORE DATABASE @RestoreDB FROM DISK = @PathFile WITH MOVE @LogicalBackupDbDataName TO @PathDB,MOVE @LogicalBackupDbLofName TO @PathLog,REPLACE,RECOVERY |
|
|
tkizer
Almighty SQL Goddess
38200 Posts |
Posted - 2014-07-14 : 12:11:19
|
You just need the REPLACE option added to your WITH.Tara KizerSQL Server MVP since 2007http://weblogs.sqlteam.com/tarad/ |
|
|
ivikasrana
Starting Member
3 Posts |
Posted - 2014-07-14 : 13:24:13
|
quote: Originally posted by tkizer You just need the REPLACE option added to your WITH.Tara KizerSQL Server MVP since 2007http://weblogs.sqlteam.com/tarad/
See, let me clear here.. I want to replace SomeDBTest files not SomeDB files, I am taking backup of SombDB and want to restore it in SomeDBTest, why would I take backup of SomeDB and restore it back since I wanted to restore it into a new test database.Is there any possible way to copy SomeDB to SomeDBTest ? Here is my Code after using WITH REPLACE:RESTORE DATABASE SomeDBTest FROM DISK = 'E:\MSSQLBackup\SomeDB.bak'WITH RECOVERY, REPLACE,MOVE 'SomeDBTest' TO 'E:\MSSQLBackup\SomeDBTest.mdf',MOVE 'SomeDBTest_Log' TO 'E:\MSSQLBackup\SomeDBTest_log.ldf'------------------------------Msg 3234, Level 16, State 2, Line 2Logical file 'SomeDBTest' is not part of database 'SomeDBTest'. Use RESTORE FILELISTONLY to list the logical file names.Msg 3013, Level 16, State 1, Line 2RESTORE DATABASE is terminating abnormally. |
|
|
tkizer
Almighty SQL Goddess
38200 Posts |
Posted - 2014-07-14 : 13:28:22
|
Your MOVE is incorrect. The logical files need to reflect SomeDB and not SomeDBTest. You can run RESTORE FILELISTONLY to verify which logical files to use or check the source database's properties. RESTORE DATABASE SomeDBTest FROM DISK = 'E:\MSSQLBackup\SomeDB.bak'WITH RECOVERY, REPLACE,MOVE 'SomeDB' TO 'E:\MSSQLBackup\SomeDBTest.mdf',MOVE 'SomeDB_Log' TO 'E:\MSSQLBackup\SomeDBTest_log.ldf'Tara KizerSQL Server MVP since 2007http://weblogs.sqlteam.com/tarad/ |
|
|
ivikasrana
Starting Member
3 Posts |
Posted - 2014-07-14 : 13:37:23
|
quote: Originally posted by tkizer Your MOVE is incorrect. The logical files need to reflect SomeDB and not SomeDBTest. You can run RESTORE FILELISTONLY to verify which logical files to use or check the source database's properties. RESTORE DATABASE SomeDBTest FROM DISK = 'E:\MSSQLBackup\SomeDB.bak'WITH RECOVERY, REPLACE,MOVE 'SomeDB' TO 'E:\MSSQLBackup\SomeDBTest.mdf',MOVE 'SomeDB_Log' TO 'E:\MSSQLBackup\SomeDBTest_log.ldf'Tara KizerSQL Server MVP since 2007http://weblogs.sqlteam.com/tarad/
thanks, its working |
|
|
tkizer
Almighty SQL Goddess
38200 Posts |
|
|
|
|
|
|