Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
soljo_ua
Member

Откуда: Киев
Сообщений: 369
85sergu,
а сделать какуюто таблицу history и писать туда все имена баз, которые бэкапятся в плане или что то типа того
3 мар 09, 12:32    [6880764]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
85sergu
Member

Откуда: Винница
Сообщений: 137
Более усовершенствованное решение! идет привязка к полю [msdb].[dbo].[backupset].[backup_finish_date]
--Универсальный скрипт по копированию бэкапов на сетевой диск 
DECLARE @Name VARCHAR(255) -- путь к файлу бэкапа
DECLARE @cmd VARCHAR(300)  -- результат команды который выполняет xp_cmdshell 
DECLARE @PathOut VARCHAR(255)
SET @PathOut='\\10.13.3.31\SWBackUp'
--использовал соединения двух талиц [msdb].[dbo].[backupmediafamily] и [msdb].[dbo].[backupset] по общему полю [media_set_id]
SELECT @Name=physical_device_name
FROM [msdb].[dbo].[backupset], [msdb].[dbo].[backupmediafamily]
WHERE [msdb].[dbo].[backupset].[media_set_id]=[msdb].[dbo].[backupmediafamily].[media_set_id]
AND [msdb].[dbo].[backupset].[backup_finish_date] IN (SELECT max ([msdb].[dbo].[backupset].[backup_finish_date])
FROM [msdb].[dbo].[backupset])
--print @Name
SET @cmd='copy /Y ' + @Name +' '+@PathOut+rtrim(SUBSTRING(@Name,9,100))+char(10)
--print @cmd
EXEC master.dbo.xp_cmdshell @cmd
4 мар 09, 16:29    [6887438]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
85sergu
Member

Откуда: Винница
Сообщений: 137
Хочу сделать так....
При каждом добавлении новой строки в таблицу [msdb].[dbo].[backupset] срабатывал TRIGGER который запускал предыдущий скрипт...как это реализовать?
4 мар 09, 16:39    [6887513]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
Glory
Member

Откуда:
Сообщений: 104760
85sergu
Хочу сделать так....
При каждом добавлении новой строки в таблицу [msdb].[dbo].[backupset] срабатывал TRIGGER который запускал предыдущий скрипт...как это реализовать?

Написать триггер ?
4 мар 09, 16:41    [6887525]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
gang
Member

Откуда:
Сообщений: 1394
имхо, не лучший вариант - обвешивать самописными тригерами системные таблицы пусть даже агента, а не семого сервера. В принципе, уже предложенные Вам варианты вполне жизнеспособны. Нужно только слегка "отлипнуть" от уже видимо написанного, судя по исходному посту, скрипта и сделать честное, "кандовое" решение пусть и без использования уже имеющегося куска кода.
Вариант 1, предложенный изначально dbnadm:
Бекап в отельную папку с последующим копированием. Установив разрешение, на запись только для учетки скуль агента, вы устраните возможность попадания в копируемый набор бекапов "рукодельного" экземпляра. Установкой параметров длительности хранения бекапов в мейнтинанс плане можете свести к минимуму вероятность наличия в бекапной папке дублирующихся бекапов. В джоб сгенеренный майнт. планом добавите степ копирования и вот, пожалуй, и все. Имхо самый адекватный вариант.
Вариант 2. Проверка списка бекапов до и после мейнт. плана:
Создаете табличку под перечень бекапов.
В созданный мейнт. планом джоб перед основным степом добавляете степ фиксирующий состаяние
списка бекапов "ДО". После рабочего степа добавляете степ копирования на основаниии сравнения списка "ДО" и текущего состояния. В отфильтровывании ненужных (сделанных кем-то еще) можно использовать помимо уже предложенного варианта с именем пользователя, анализ имени файла бекапа. Мейнт план генерит имена бекапов формата DBNAME_db_yyyymmddhhmi.bak. Расширение "*.bak" общепринятое, но может быть и другим - настраивается в майнт. плане. Вот Вам кстати и Вариант №3:
Делать бекап с нестандартным расширением, которое никто кроме майнт. плана для бекапа использовать небудет, хоть "*.xyj" и фильтровать по нему.
5 мар 09, 10:13    [6889680]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
85sergu
Member

Откуда: Винница
Сообщений: 137
Варианты 1, 2 и 3 ОЧЕНЬ интересны...но они(кроме первого) не универсальны, в них идет привязка к плану и будет выполняться копирование бэкапов которые прописаны в плне...А я хоту сделать TRIGGER который копировал любой сделаный бэкап...
5 мар 09, 17:14    [6893057]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
85sergu
Member

Откуда: Винница
Сообщений: 137
Варианты 1, 2 и 3 ОЧЕНЬ интересны...но они(кроме первого) не универсальны, в них идет привязка к плану и будет выполняться копирование бэкапов которые прописаны в плне...А я хоту сделать TRIGGER который копировал любой сделаный бэкап...
5 мар 09, 17:15    [6893062]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
GlebZ
Member

Откуда: USA
Сообщений: 284
ROBOCOPY
Скопирует только новые и изменённые файлы
5 мар 09, 22:51    [6894164]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
GlebZ
Member

Откуда: USA
Сообщений: 284
Собственно XCOPY тоже
5 мар 09, 22:52    [6894171]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
85sergu
Member

Откуда: Винница
Сообщений: 137
Нужна помощ при написпнии тригера!!!
При добавлении строки в [msdb].[dbo].[backupset], срабатывал тригер, который копировал бы бэкапи на сетевой диск!
10 мар 09, 13:09    [6904788]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
Glory
Member

Откуда:
Сообщений: 104760
85sergu
Нужна помощ при написпнии тригера!!!
При добавлении строки в [msdb].[dbo].[backupset], срабатывал тригер, который копировал бы бэкапи на сетевой диск!

И в чем проблема поместить ваш скрипт в конструкцию CREATE TRIGGER ?
10 мар 09, 13:14    [6904825]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
85sergu
Member

Откуда: Винница
Сообщений: 137
ПОХОЖЕ НА ПРАВДУ?
CREATE TRIGGER BackUpSetIns ON [msdb].[dbo].[backupset]
FOR INSERT
AS
BEGIN
if (not exists (select * from inserted)) return
DECLARE @st char(50)
DECLARE @Name VARCHAR(255) -- путь к файлу бэкапа
DECLARE @cmd VARCHAR(300)  -- результат команды который выполняет xp_cmdshell 
DECLARE @PathOut VARCHAR(255)
SET @PathOut='\\10.13.3.31\SWBackUp'
--использовал соединения двух талиц [msdb].[dbo].[backupmediafamily] и [msdb].[dbo].[backupset] по общему полю [media_set_id]
SELECT @Name=physical_device_name
FROM [msdb].[dbo].[backupset], [msdb].[dbo].[backupmediafamily]
WHERE [msdb].[dbo].[backupset].[media_set_id]=[msdb].[dbo].[backupmediafamily].[media_set_id]
AND [msdb].[dbo].[backupset].[backup_finish_date] IN (SELECT max ([msdb].[dbo].[backupset].[backup_finish_date])
FROM [msdb].[dbo].[backupset])
--print @Name
SET @cmd='copy /Y ' + @Name +' '+@PathOut+rtrim(SUBSTRING(@Name,9,100))+char(10)
--print @cmd
EXEC master.dbo.xp_cmdshell @cmd
10 мар 09, 13:21    [6904888]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
Glory
Member

Откуда:
Сообщений: 104760
85sergu
ПОХОЖЕ НА ПРАВДУ?

Вы предлагаете всем протестировать ваши скрипты или как ?
10 мар 09, 13:23    [6904906]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
85sergu
Member

Откуда: Винница
Сообщений: 137
посмотреть структуру написания...
10 мар 09, 13:36    [6905027]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
Glory
Member

Откуда:
Сообщений: 104760
85sergu
посмотреть структуру написания...

В QA есть такая кнопочка - Parse query - как раз для синтаксической проверки скриптов.
10 мар 09, 13:38    [6905039]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
85sergu
Member

Откуда: Винница
Сообщений: 137
Если выполнить етот скрипт
CREATE TRIGGER BackUpSetIns ON [msdb].[dbo].[backupset]
FOR INSERT
AS
BEGIN
if (not exists (select * from inserted)) return

DECLARE @Name VARCHAR(255) -- путь к файлу бэкапа
DECLARE @cmd VARCHAR(300)  -- результат команды который выполняет xp_cmdshell 
DECLARE @PathOut VARCHAR(255)
SET @PathOut='\\10.13.3.31\SWBackUp'
--использовал соединения двух талиц [msdb].[dbo].[backupmediafamily] и [msdb].[dbo].[backupset] по общему полю [media_set_id]
SELECT @Name=physical_device_name
FROM [msdb].[dbo].[backupset], [msdb].[dbo].[backupmediafamily]
WHERE [msdb].[dbo].[backupset].[media_set_id]=[msdb].[dbo].[backupmediafamily].[media_set_id]
AND [msdb].[dbo].[backupset].[backup_finish_date] IN (SELECT max ([msdb].[dbo].[backupset].[backup_finish_date])
FROM [msdb].[dbo].[backupset])
--print @Name
SET @cmd='copy /Y ' + @Name +' '+@PathOut+rtrim(SUBSTRING(@Name,9,100))+char(10)
--print @cmd
EXEC master.dbo.xp_cmdshell @cmd
то получим следующее
Msg 102, Level 15, State 1, Procedure BackUpSetIns, Line 20
Incorrect syntax near '@cmd'.
10 мар 09, 14:12    [6905375]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
Glory
Member

Откуда:
Сообщений: 104760
Потому что BEGIN без END - это ошибка
10 мар 09, 14:14    [6905393]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
85sergu
Member

Откуда: Винница
Сообщений: 137
исправил...и получил следующее

Msg 2108, Level 15, State 1, Procedure BackUpSetIns, Line 20
Cannot create trigger on 'msdb.dbo.backupset' as the target is not in the current database.
10 мар 09, 14:16    [6905428]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
Glory
Member

Откуда:
Сообщений: 104760
85sergu
исправил...и получил следующее

Msg 2108, Level 15, State 1, Procedure BackUpSetIns, Line 20
Cannot create trigger on 'msdb.dbo.backupset' as the target is not in the current database.

И что непонятного в этом сообщении ?
10 мар 09, 14:17    [6905433]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
85sergu
Member

Откуда: Винница
Сообщений: 137
...триггер нельзя создавать для системной БД!?
тогда как вариант создать DB в которой будет таблица T, в которую будут вставляться(при добавлении строки) данные из сис таблиц [msdb].[dbo].[backupset], [msdb].[dbo].[backupmediafamily], и потом с этой таблицой работать?!!?
10 мар 09, 14:28    [6905516]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
efes
Member

Откуда: Москва/Тверь
Сообщений: 94
85sergu,

вы скрипт в какой базе то создаете?)))

USE MSDB
10 мар 09, 14:30    [6905529]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
Glory
Member

Откуда:
Сообщений: 104760
85sergu
...триггер нельзя создавать для системной БД!?

Вы вообще прочитали сообщение то ? Если да, то где вы в нем увидели слова про системную базу ?
10 мар 09, 14:31    [6905535]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
85sergu
Member

Откуда: Винница
Сообщений: 137
спс всем
10 мар 09, 14:46    [6905638]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
85sergu
Member

Откуда: Винница
Сообщений: 137
Окончательный результат...
CREATE TRIGGER BackUpSetIns ON [msdb].[dbo].[backupset]
FOR INSERT
AS
BEGIN
if (not exists (select * from inserted)) return

DECLARE @Name VARCHAR(255) -- путь к файлу бэкапа
DECLARE @cmd VARCHAR(300)  -- результат команды который выполняет xp_cmdshell 
DECLARE @PathOut VARCHAR(255)
SET @PathOut='\\10.13.3.31\SWBackUp'
--использовал соединения двух таблиц [msdb].[dbo].[backupmediafamily] и [msdb].[dbo].[backupset] по общему полю [media_set_id]
SELECT @Name=physical_device_name
FROM [msdb].[dbo].[backupset], [msdb].[dbo].[backupmediafamily]
WHERE [msdb].[dbo].[backupset].[media_set_id]=[msdb].[dbo].[backupmediafamily].[media_set_id]
AND [msdb].[dbo].[backupset].[backup_finish_date] IN (SELECT max ([msdb].[dbo].[backupset].[backup_finish_date])
FROM [msdb].[dbo].[backupset])
--print @Name
SET @cmd='copy /Y ' + @Name +' '+@PathOut+rtrim(SUBSTRING(@Name,12,100))
print @cmd
EXEC master.dbo.xp_cmdshell @cmd
END
Решение можно щитать "универсальным"!....изменяеться только втрой параметр команды rtrim(SUBSTRING(@Name,12,100) , который обрезает n- символов (в данном случае 12) в имени папки @Name
10 мар 09, 17:02    [6906831]     Ответить | Цитировать Сообщить модератору
 Re: Универсальный скрипт для копирования BackUp-ов на сетевой диск  [new]
Александр Гладченко
Member

Откуда:
Сообщений: 10716
Блог
alexeyvg

Я думаю, это зашито в бинарниках плана. Куда катится SQL Server :-(


Скорее всего, это лежит в соответсвующем плану пакете. Можно выгузить и поковырять этот пакет... Как выгрузить написано тут: http://msmvps.com/blogs/gladchenko/archive/2008/12/05/1655885.aspx
11 мар 09, 13:37    [6910716]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить