Hier ist ein SQL-Skript, das eine Datenbank wiederherstellen kann, ohne dass eine Interaktion erforderlich ist. Geben Sie einfach Ihre "Quelldatenbank" und Ihre "Zieldatenbank" ein - das Skript erledigt den Rest :)
SET NOCOUNT ON;
DECLARE
@MySourceDatabase NVarchar(1000),
@MyDestinationDatabase NVarchar(100),
@DeviceFrom NVarchar(1000),
@DeviceTo NVarchar(1000),
@LogicalName NVarchar(1000),
@PhysicalName NVarchar(1000),
@SQL NVarchar(MAX),
@RowsToProcess integer,
@CurrentRow integer,
@Comma NVarchar(25);
--SOURCE DATABASE (DATABASE TO RESTORE)
SET @MySourceDatabase = 'D:\Backups\backup_db.bak';
--DESTINATION DATABASE (DATABASE TO RESTORE TO)
SET @MyDestinationDatabase = 'mydatabase_db';
SELECT @DeviceFrom = SUBSTRING(physical_name, 1,
CHARINDEX(@MyDestinationDatabase + '.mdf',
physical_name) - 1)
FROM master.sys.master_files
WHERE name = @MyDestinationDatabase AND FILE_ID = 1;
SET @SQL = 'RESTORE DATABASE ' + @MyDestinationDatabase + ' FROM DISK = ''' + @MySourceDatabase + ''' WITH ';
SET @CurrentRow = 0;
SET @Comma = ',';
DECLARE @FileList TABLE (
RowID int not null primary key identity(1,1)
,LogicalName NVARCHAR(128)
,PhysicalName NVARCHAR(260)
,Type CHAR(1)
,FileGroupName NVARCHAR(128)
,Size numeric(20,0)
,MaxSize numeric(20,0)
,FileId BIGINT
,CreateLSN numeric(25,0)
,DropLSN numeric(25,0)
,UniqueId uniqueidentifier
,ReadOnlyLSN numeric(25,0)
,ReadWriteLSN numeric(25,0)
,BackupSizeInBytes BIGINT
,SourceBlockSize BIGINT
,FilegroupId BIGINT
,LogGroupGUID uniqueidentifier
,DifferentialBaseLSN numeric(25)
,DifferentialBaseGUID uniqueidentifier
,IsReadOnly BIGINT
,IsPresent BIGINT
,TDEThumbprint VARBINARY(32) -- Remove this line for SQL Server 2005
);
INSERT INTO @FileList
EXEC('RESTORE FILELISTONLY FROM DISK = ''' + @MySourceDatabase + '''')
SET @RowsToProcess = @@RowCount;
WHILE @CurrentRow < @RowsToProcess
BEGIN
SET @CurrentRow= @CurrentRow + 1;
BEGIN
IF @CurrentRow = @RowsToProcess
SET @Comma = ',REPLACE';
END
SELECT @LogicalName = LogicalName,@PhysicalName = PhysicalName FROM @FileList WHERE RowID=@CurrentRow;
SET @PhysicalName = Replace(@PhysicalName,@LogicalName,@MyDestinationDatabase);
SET @SQL = @SQL + 'MOVE ''' + @LogicalName + ''' TO ''' + @PhysicalName + '''' + @Comma + '';
END
--PREVIEW THE GENERATED QUERY
SELECT @SQL;
--EXECUTE THE GENERATED QUERY
--EXEC(@SQL);
Es wird automatisch eine Abfrage wie diese erstellt:
RESTORE DATABASE mydatabase_db
FROM DISK = 'D:\Backups\backup_db.bak'
WITH
MOVE 'backup_db'
TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\mydatabase_db.mdf',
MOVE 'backup_db_log'
TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\mydatabase_db.LDF',
REPLACE
0 Stimmen
Teilen Sie dies bitte in Frage und Antwort auf. Ansonsten danke!