|   |   | 
| 
 | MS SQL: дополнительная копия во время бэкапа | ☑ | ||
|---|---|---|---|---|
| 0
    
        extrim-style 03.06.13✎ 16:50 | 
        Настраиваю планы обслуживания на SQL для бэкапов. После выполнения бэкапа нужно сохранить его отдельную копию в другую папку. Можно это штатно сделать? WS2008     | |||
| 1
    
        Fragster гуру 03.06.13✎ 16:50 | 
        можно делать бэкап средствами командной строки уиндоус     | |||
| 2
    
        Ёпрст гуру 03.06.13✎ 16:51 | 
        да, простейшим скриптом копирования файлов по маске. Его тоже в план обслуживания пихаешь     | |||
| 3
    
        extrim-style 03.06.13✎ 16:52 | 
        (1) а можно и не можно. Как доп. копию сохранить после создания? Видимо только отдельным запросом?     | |||
| 4
    
        Лефмихалыч 03.06.13✎ 16:52 | 
        добавить в план задание-скрипт, который скопирует, куда надо     | |||
| 5
    
        Fragster гуру 03.06.13✎ 16:52 | 
        (3) а?     | |||
| 6
    
        Lionee 03.06.13✎ 16:53 | 
        (0)Эффектор сэйвер , делает , по времени куда и сколько захочешь     | |||
| 7
    
        ptiz 03.06.13✎ 16:54 | ||||
| 8
    
        extrim-style 03.06.13✎ 16:54 | 
        (4) я понял. ответ на вопрос в (0) - штатно никак. Под "штатно" я подразумевал обойтись без скриптов.     | |||
| 9
    
        Лефмихалыч 03.06.13✎ 16:56 | 
        (8) WSH - это штатно     | |||
| 10
    
        rs_trade 03.06.13✎ 16:57 | 
        ssis в помощь     | |||
| 11
    
        Jump 03.06.13✎ 16:57 | 
        (8)Хм, а зачем?
  Обычно штатные средства делают копию на тот же компьютер, а уже отдельный скрипт, гонит на фтп, облако. | |||
| 12
    
        ptiz 03.06.13✎ 16:58 | 
        Дожили, уже t-sql в ms sql - это "нештатно" :)     | |||
| 13
    
        Лефмихалыч 03.06.13✎ 16:59 | 
        (11) ну, как?.. чтобы гарантировать, что индексы не перестроятся и статистика не обновится, если бэкап не удалось слить на второй вспомогательный резервный сервер богом забытой файлопомойки     | |||
| 14
    
        extrim-style 03.06.13✎ 17:00 | 
        (12) пример запроса есть?     | |||
| 15
    
        Лефмихалыч 03.06.13✎ 17:03 | 
        (14) да это не sql запрос должен быть, а
  // JScript var fso = WScript.CreateObject("Scripting.FileSystemObject"); fso.CopyFile("c:\path\to\fresh\sql.dump","\\failopomojka\raznoe\prochee\vazhnie_fajli\"); | |||
| 16
    
        Лефмихалыч 03.06.13✎ 17:04 | 
        или тупо xcopy.exe
  всё просто | |||
| 17
    
        extrim-style 03.06.13✎ 17:04 | 
        (15) судя по сабжу мне нужно скопировать вновь созданный, т.е. последний. А где тут поиск последнего?     | |||
| 18
    
        extrim-style 03.06.13✎ 17:07 | 
        (15) а как к T-SQL прикрутить JScript. Он его переваривает?     | |||
| 19
    
        Лефмихалыч 03.06.13✎ 17:09 | 
        (18) ты только форум читаешь, а в манагемент студию даже не смотрел? У задания в плане бослуживания есть тип, его смотри     | |||
| 20
    
        extrim-style 03.06.13✎ 17:09 | 
        (2) а куда скрипт прикручивать?     | |||
| 21
    
        extrim-style 03.06.13✎ 17:10 | 
        (19) я сегодня еще ни разу форум не читал...     | |||
| 22
    
        extrim-style 03.06.13✎ 17:20 | 
        (19) В Back Up Database Task тип или где?     | |||
| 23
    
        extrim-style 03.06.13✎ 17:27 | 
        (19) через Jobs чтоли?     | |||
| 24
    
        extrim-style 03.06.13✎ 17:41 | 
        Скопировал файл бэкапа в другой каталог, а на значке файла появляется замочек. Что это значит?     | |||
| 25
    
        extrim-style 03.06.13✎ 17:48 | 
        (24) http://antonov-sergey.blogspot.ru/2011/04/windows-server-2008-r2.html
  видимо, это с правами связано, т.к. копирую файл созданный бэкап-пользователем | |||
| 26
    
        extrim-style 03.06.13✎ 18:06 | 
        Добавил джобс на основе вот этого:
  @echo off setlocal pushd "x:\in" for /f "tokens=*" %%i in (' dir /b *.txt ') do ( for /f "tokens=1" %%j in ( "%%~ti" ) do if "%%j"=="%date%" set "file=%%i" ) copy "%file%" "x:\out" popd http://forum.oszone.net/thread-205784.html отдельно в батнике работает, а в плане обслуживания не сработал. Пишет: [136] Job ... reported: The process could not be created for step 1 of job 0xC2A95A6062992C49AD3111E8DABCAB9E (reason: The system cannot find the file specified) Может ему задержка нужна? Телепаты есть? | |||
| 27
    
        Slon747 03.06.13✎ 18:13 | 
        (26) Права на папку для пользователя MSSQLUser..... ?     | |||
| 28
    
        Jaap Vduul 03.06.13✎ 18:14 | 
        (26)
  У пользователя, под которым job выполняется, диск X не примаплен. | |||
| 29
    
        Slon747 03.06.13✎ 18:15 | 
        У меня такой скрипт работает.
  Находит последний полный бекап и копирует куда указано. Могу скинуть. | |||
| 30
    
        Slon747 03.06.13✎ 18:17 | 
        +(29) последний бекап беру из записей msdb     | |||
| 31
    
        extrim-style 03.06.13✎ 18:18 | 
        (29) кидай     | |||
| 32
    
        Slon747 03.06.13✎ 18:20 | 
        (31)
  DECLARE @DatabaseName VARCHAR(100) -- имя базы данных DECLARE Name VARCHAR(255) -- путь к файлу бэкапа DECLARE cmd VARCHAR(300) -- результат команды который выполняет xp_cmdshell DECLARE @PathIn VARCHAR(255) DECLARE @PathOut VARCHAR(255) SET @DatabaseName = 'My_Base_Name' SET @PathIn='H:\\MSSQL_Backup\\' + @DatabaseName SET @PathOut='F:\\Long_Time_Backup\\' + @DatabaseName --выбираем из базы msdb последний бэкап Select Name=name From [msdb].[dbo].[backupset] where database_name=@DatabaseName and type='D' order by backup_finish_date SET Name = SUBSTRING(Name,1,LEN(Name)) SET cmd='copy /Y ' + @PathIn + '\\' + Name + '.bak ' + @PathOut + '\\' + Name + '.bak' EXEC master.dbo.xp_cmdshell cmd | |||
| 33
    
        Slon747 03.06.13✎ 18:21 | 
        +(32)
  Для работы ф-ции xp_cmdshell нужно выставить параметры: use master -- To allow advanced options to be changed. EXEC sp_configure 'show advanced options', 1 GO -- To update the currently configured value for advanced options. RECONFIGURE GO -- To enable the feature. EXEC sp_configure 'xp_cmdshell', 1 GO -- To update the currently configured value for this feature. RECONFIGURE GO | |||
| 34
    
        extrim-style 03.06.13✎ 18:31 | 
        (33) спасибо, но что-то сложно. Пока попробую завести (26)
  (27) права на папку есть у MSSQLSERVER, он в неё и бэкапит. Попробовал еще дать права для SQLSERVERAGENT - безрезультатно. | |||
| 35
    
        extrim-style 03.06.13✎ 18:34 | 
        менял owner'a у джобса на MSSQLSERVER и SQLSERVERAGENT - толку нет     | |||
| 36
    
        Slon747 03.06.13✎ 18:34 | 
        (34) Ниче сложного. Большая часть кода - установка переменных, а (33) нужно выполнить 1 раз после установки MSSQL     | |||
| 37
    
        extrim-style 03.06.13✎ 18:36 | 
        (36) да я понял. вот как раз из-за (33) не хочется.     | |||
| 38
    
        Slon747 03.06.13✎ 18:39 | 
        может добавить права для "NETWORK SERVICE" ?     | |||
| 39
    
        Speshuric 03.06.13✎ 21:23 | 
        (0) Нафига что-то городить? Зачем копировать после? Процитирую себя же:
  http://infostart.ru/public/173494/ .... Часто удобно делать сразу не одну резервную копию, а две. Например, одна может лежать локально на сервере (чтобы была под рукой), а вторая сразу формируется в физически удалённое и защищённое от неблагоприятных воздействий хранилище: BACKUP DATABASE [mydb] TO DISK = N'C:\Backup\mydb.bak', MIRROR TO DISK = N'\\safe-server\backup\mydb.bak' WITH INIT, FORMAT ... | |||
| 40
    
        extrim-style 04.06.13✎ 09:16 | 
        (40) смотри, т.е. я настраиваю план обслуживания, добавляю бэкап, смотрю его код, чтобы добавить mirror to:
  BACKUP DATABASE [MYBASE] TO  DISK = N'D:\MSSQL\Backup\MYBASE\month\MYBASE_backup_2013_06_04_083644_4918130.bak' WITH NOFORMAT, NOINIT,  NAME = N'MYBASE_backup_2013_06_04_083644_4918130', SKIP, REWIND, NOUNLOAD, COMPRESSION,  STATS = 10
 но здесь, и у тебя тоже, сразу имя файла указывается на основе даты, которое в плане обслуживания формируется самостоятельно. Как дату прикрутить в таком формате? | |||
| 41
    
        Speshuric 04.06.13✎ 11:49 | 
        (40)Так?
  <CODE>DECLARE @DatabaseName AS SYSNAME; DECLARE @DateStyle AS SMALLINT; DECLARE @CurrentDateTime AS DATETIME; DECLARE @CurrentDateTimeString AS NVARCHAR(MAX); DECLARE @LocalBackup AS NVARCHAR(MAX); DECLARE @RemoteBackup AS NVARCHAR(MAX); SET @CurrentDateTime = GETDATE(); SET @DateStyle = 126; --ISO 8601 - мне нравится этот формат, можно использовать ODBC (120 и 121), можно вообще самому сконструировать SET @CurrentDateTimeString = REPLACE(CONVERT(NVARCHAR(MAX), @CurrentDateTime, @DateStyle), ':', ''); --форматируем, удаляем двоеточия SET @DatabaseName = N'mydb'; SET @LocalBackup = N'C:\Backup\' + @DatabaseName + @CurrentDateTimeString + N'.bak'; SET @RemoteBackup = N'\\safe-server\backup\' + @DatabaseName + @CurrentDateTimeString + N'.bak'; BACKUP DATABASE @DatabaseName TO DISK = @LocalBackup MIRROR TO DISK = @RemoteBackup WITH INIT, FORMAT;</CODE> | |||
| 42
    
        extrim-style 04.06.13✎ 11:59 | 
        (41) ну тут не нижние подчеркивания. Кроме этого дополнительного бэкапа у меня всё остальное настроено по стандартной схеме, поэтому хотелось бы единообразия. Но тут, видимо, только выбирать дату по частям и приводить к нужной строке...
  Поэтому пока буду пробовать (26) завести. | |||
| 43
    
        rs_trade 04.06.13✎ 12:01 | 
        в плане обслуживания насколько я помню можно сколько угодно мест назначения добавлять     | |||
| 44
    
        rs_trade 04.06.13✎ 12:09 | 
        (40) Автор, внимательно посмотри еще на этот синатксис  BACKUP DATABASE [AdventureWorks2012] TO DISK = N'D:\B1\b1.bak', DISK = N'D:\B2\b2.bak' WITH NOFORMAT, NOINIT, NAME = N'AdventureWorks2012_backup_2013_06_04_120550_2635966', SKIP, REWIND, NOUNLOAD, STATS = 10 | |||
| 45
    
        extrim-style 04.06.13✎ 12:11 | 
        (44) посмотрел. не проникся. что там?     | |||
| 46
    
        rs_trade 04.06.13✎ 12:13 | 
        (45) TO  DISK = N'D:\B1\b1.bak',  DISK = N'D:\B2\b2.bak  через запятую перечисляются ресурсы куда положить бекап. | |||
| 47
    
        Lama12 04.06.13✎ 12:15 | 
        У нас примерно так же как в (32)(33)     | |||
| 48
    
        rs_trade 04.06.13✎ 12:18 | ||||
| 49
    
        extrim-style 04.06.13✎ 12:24 | 
        (48) ссылка в (39) говорит, что: 
  "BACKUP DATABASE [mydb] TO
 Если не указать MIRROR TO, то это будет не 2 зеркальных копии, а одна копия, разбитая на 2 файла, по принципу чередования. И каждая из них в отдельности будет бесполезна." А мне нужно 2 копии. | |||
| 50
    
        Speshuric 04.06.13✎ 12:30 | 
        (44)(46) Отличный совет. 2 файла копии и оба по отдельности бесполезны.
  (42) Я думаю, что подчёркивания разместить достаточно легко и очевидно. | |||
| 51
    
        rs_trade 04.06.13✎ 12:40 | 
        (50) хех. да, они только оба нужны при восстановлении.     | |||
| 52
    
        extrim-style 05.06.13✎ 11:09 | 
        Сделал (26) - MS SQL: Не отрабатывает jobs     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |