Повторитесь после меня:
НИКОГДА не выполняйте веб-сервер как корень.
НИКОГДА не выполняйте веб-сервер как корень.
НИКОГДА не выполняйте веб-сервер как корень.
НИКОГДА не выполняйте веб-сервер как корень.
Как отъезд Вашего разблокированного дома и ехать в отпуск в течение 6 месяцев.
Как, туда, где поместить Ваш веб-корень. Я рекомендую где-нибудь, что это имеет смысл Вам. Я - большой поклонник помещения его где-нибудь НЕСТАНДАРТНЫЙ просто, потому что это помогает защитить от всех различных деточек сценария там. (Все еще не делает Вас в безопасности, но это помогает.)
Нет никаких способов указать набор резервных копирований журнала транзакций (oк папка) для восстановления в студии управления SQL Server.
Но можно найти всю информацию об операциях резервного копирования SQL Server в базе данных MSDB (таблица backupset и связанный).
Вот сценарий для генерации команд SQL Server для базы данных восстановления от резервного копирования и применения всех резервных копирований журналов транзакций, выполненных от последнего полного резервного копирования базы данных. Я думаю, что это должно помочь Вам.
DECLARE @databaseName sysname
DECLARE @backupStartDate datetime
DECLARE @backup_set_id_start INT
DECLARE @backup_set_id_end INT
-- set database to be used
SET @databaseName = '<your_database_name_here>'
SELECT @backup_set_id_start = MAX(backup_set_id)
FROM msdb.dbo.backupset
WHERE database_name = @databaseName AND type = 'D'
SELECT @backup_set_id_end = MIN(backup_set_id)
FROM msdb.dbo.backupset
WHERE database_name = @databaseName AND type = 'D'
AND backup_set_id > @backup_set_id_start
IF @backup_set_id_end IS NULL SET @backup_set_id_end = 999999999
SELECT backup_set_id, 'RESTORE DATABASE ' + @databaseName + ' FROM DISK = '''
+ mf.physical_device_name + ''' WITH NORECOVERY'
FROM msdb.dbo.backupset b,
msdb.dbo.backupmediafamily mf
WHERE b.media_set_id = mf.media_set_id
AND b.database_name = @databaseName
AND b.backup_set_id = @backup_set_id_start
UNION
SELECT backup_set_id, 'RESTORE LOG ' + @databaseName + ' FROM DISK = '''
+ mf.physical_device_name + ''' WITH NORECOVERY'
FROM msdb.dbo.backupset b,
msdb.dbo.backupmediafamily mf
WHERE b.media_set_id = mf.media_set_id
AND b.database_name = @databaseName
AND b.backup_set_id >= @backup_set_id_start AND b.backup_set_id < @backup_set_id_end
AND b.type = 'L'
UNION
SELECT 999999999 AS backup_set_id, 'RESTORE DATABASE ' + @databaseName + ' WITH RECOVERY'
ORDER BY backup_set_id
Вам просто нужен список sql операторов как...
RESTORE LOG AdventureWorks FROM DISK = 'C:\AdventureWorks_1.TRN' WITH NORECOVERY
GO
RESTORE LOG AdventureWorks FROM DISK = 'C:\AdventureWorks_2.TRN'
GO
Таким образом, можно сделать сценарий VB, который легко генерирует этот SQL для Вас от данной папки. Вот является пример http://blogs.lessthandot.com/index.php/DataMgmt/DBAdmin/MSSQLServerAdmin/restoring-multiple-transaction-log-backu
После того как это создало SQL, просто необходимо проверить, что это выглядит правильным и выполняет его.
Вот пример о том, как Вы можете автоматический генерировать сценарий восстановления SQL Server от файлов резервных копий в каталоге с помощью TSQL:
Автоматический генерируют сценарий восстановления SQL Server от файлов резервных копий в каталоге
Автоматический генерируют сценарии восстановления базы данных SQL Server
Я не хотел использовать основанный на SQL подход принятого ответа, потому что не хотел включать расширенные хранимые процедуры. Поэтому я написал для этого скрипт Powerhell.
Вы направляете его в папку, и он генерирует скрипт на основе последней полной резервной копии, а также всех последующих резервных копий журнала транзакций.
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")
$foldername = New-Object System.Windows.Forms.FolderBrowserDialog
$foldername.rootfolder = "MyComputer"
$foldername.ShowNewFolderButton = $false
$foldername.SelectedPath = "E:\DatabaseBackups"
if($foldername.ShowDialog() -eq "OK") {
$backupPath = Get-Item($foldername.SelectedPath)
$databaseName = $backupPath.Name
Write-Host($backupPath)
Write-Host($databaseName)
$transactionLogFiles = New-Object System.Collections.ArrayList;
$outputFile = "Restore Database - Script.sql"
$backupFile;
foreach ($file in get-childitem ($backupPath) | sort-object LastWriteTime -descending)
{
if ($file.Extension -eq '.trn')
{
[void]$transactionLogFiles.Add($file);
}
elseif ($file.Extension -eq '.bak')
{
$backupFile = $file;
break;
}
}
Set-Content $outputFile ""
Add-Content $outputFile "USE master"
Add-Content $outputFile "ALTER DATABASE $databaseName SET SINGLE_USER WITH ROLLBACK AFTER 5"
Add-Content $outputFile "RESTORE DATABASE $databaseName FROM DISK = '$($backupFile.FullName)' WITH NORECOVERY";
foreach ($file in $transactionLogFiles | sort-object LastWriteTime)
{
Add-Content $outputFile "RESTORE LOG $databaseName FROM DISK = '$($file.FullName)' WITH NORECOVERY";
}
Add-Content $outputFile "RESTORE DATABASE $databaseName WITH RECOVERY";
Add-Content $outputFile "ALTER DATABASE $databaseName SET MULTI_USER";
Add-Content $outputFile "USE $databaseName"
Write-Host("Script generated at $outputFile");
Write-Host "Press any key to continue ..."
$host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Invoke-Item $outputFile
}