Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 выбор из N . Резервное копирование.  [new]
deHiska
Member

Откуда:
Сообщений: 4
Добрый день.

Имеется резервный сервер на котором периодически накатывается копия из этого :

select @n = N'V:\1C\ '+REPLACE(CONVERT(VARCHAR, getdate(), 2), '.', '') +'.bak'
BACKUP DATABASE [*****] TO DISK = @n WITH NOFORMAT, NOINIT, NAME = N'*****', NORECOVERY , NOUNLOAD, REPLACE

В самой папке копии хранятся 10 дней, подскажите начальный кусок запроса , для выбора из N числа копий последней дате .
16 янв 18, 10:08    [21109645]     Ответить | Цитировать Сообщить модератору
 Re: выбор из N . Резервное копирование.  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
SELECT *
FROM (
    SELECT
          s.database_name
        , s.[type]
        , s.backup_finish_date
        , backup_size =
                    CAST(CASE WHEN s.backup_size = s.compressed_backup_size
                                THEN s.backup_size
                                ELSE s.compressed_backup_size
                    END / 1048576.0 AS DECIMAL(18,2))
        , RowNum = ROW_NUMBER() OVER (PARTITION BY s.database_name, s.[type] ORDER BY s.backup_finish_date DESC)
    FROM msdb.dbo.backupset s
    WHERE s.[type] = 'D'
) t
WHERE t.RowNum = 1
16 янв 18, 10:21    [21109696]     Ответить | Цитировать Сообщить модератору
 Re: выбор из N . Резервное копирование.  [new]
deHiska
Member

Откуда:
Сообщений: 4
Спасибо , далее найденному файлу присвоить имя или же он подтянет имя из найденного для вставки в запрос RESTORE DATABASE [tedt_db] FROM DISK = N'V:\\123123\*.bak ' ?
16 янв 18, 14:33    [21110814]     Ответить | Цитировать Сообщить модератору
 Re: выбор из N . Резервное копирование.  [new]
Col
Member

Откуда: Торонто
Сообщений: 177
deHiska
Лень двигатель прогресса, когда давно делал что-то подобное:

-- 1 - Variable declaration 
DECLARE @dbName sysname 
DECLARE @backupPath NVARCHAR(500) 
DECLARE @cmd NVARCHAR(500) 
DECLARE @fileList TABLE (backupFile NVARCHAR(255)) 
DECLARE @lastFullBackup NVARCHAR(500) 
DECLARE @lastDiffBackup NVARCHAR(500) 
DECLARE @backupFile NVARCHAR(500) 

-- 2 - Initialize variables 
SET @dbName = 'MyDatabase' 
SET @backupPath = 'C:\\backup\' 

-- 3 - get list of files 
SET @cmd = 'DIR /b ' + @backupPath 

INSERT INTO @fileList(backupFile) 
EXEC master.sys.xp_cmdshell @cmd 

-- 4 - Find latest full backup 
SELECT @lastFullBackup = MAX(backupFile)  
FROM @fileList  
WHERE backupFile LIKE '%.BAK'  
   AND backupFile LIKE @dbName + '%' 

SET @cmd = 'RESTORE DATABASE ' + @dbName + ' FROM DISK = '''  
       + @backupPath + @lastFullBackup + ''' WITH NORECOVERY, REPLACE' 
PRINT @cmd 
16 янв 18, 19:26    [21111917]     Ответить | Цитировать Сообщить модератору
 Re: выбор из N . Резервное копирование.  [new]
deHiska
Member

Откуда:
Сообщений: 4
Благодарю за идею.
Дальше буду под свою задачу копать.
17 янв 18, 11:25    [21113168]     Ответить | Цитировать Сообщить модератору
 Re: выбор из N . Резервное копирование.  [new]
deHiska
Member

Откуда:
Сообщений: 4
Подскажите долепил скрипт , но при его выполнении ничего не происходит
USE Master;
GO
SET NOCOUNT ON

DECLARE @DBName sysname
DECLARE @RestoredDBName sysname
DECLARE @BackupPath NVARCHAR(1000)
DECLARE @TSQL NVARCHAR(1000)
DECLARE @FileList TABLE (BackupFile NVARCHAR(255))
DECLARE @LastFullBackup NVARCHAR(500)
DECLARE @LastDifferentialBackup NVARCHAR(500)
DECLARE @BackupFile NVARCHAR(500)

SET @DBName = 'test_db'
SET @RestoredDBName =@DBName + '_Restored'
SET @BackupPath = 'E:\DataSql\backup_test\' +@DBName + '\'

SET @TSQL = 'DIR /b "' + @BackupPath + '"'

INSERT INTO @FileList(BackupFile)
EXEC master.sys.xp_cmdshell @TSQL

SET @LastFullBackup = (SELECT TOP 1 BackupFile FROM @FileList
WHERE BackupFile LIKE '%.BAK' AND BackupFile LIKE @DBName + '%'
ORDER BY BackupFile DESC)

SET @TSQL = 'RESTORE DATABASE ' +@RestoredDBName + ' FROM DISK = N'''
+ @BackupPath + @LastFullBackup + ''' WITH REPLACE,NORECOVERY, NOUNLOAD, MOVE N''' +@DBName + ''' TO N''' +
@BackupPath +@RestoredDBName + '.mdf'', MOVE N''' + @DBName + '_log'' TO N''' +
@BackupPath +@RestoredDBName + '.ldf'''
PRINT @TSQL

SET @TSQL = 'RESTORE DATABASE ' +@RestoredDBName + ' WITH NORECOVERY, NOUNLOAD, REPLACE, STATS = 10'
PRINT @TSQL

Dыдает сообщение :
RESTORE DATABASE test_db_Restored WITH NORECOVERY, NOUNLOAD, REPLACE, STATS = 10

Но по сути ничего не происходит , база остается на месте . без изменений.....
Куда смотреть?
18 янв 18, 13:16    [21116314]     Ответить | Цитировать Сообщить модератору
 Re: выбор из N . Резервное копирование.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
deHiska,

а EXEC где?
18 янв 18, 13:20    [21116333]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить