|
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
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |