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

Посдкажите, пжл. Реализовано воостановление БД из full backup каждый день ночью.
Какой бы придумать механизм, чтобы текущие пользователи не теряли права доступа.
19 июл 16, 15:32    [19427649]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление БД из full backup на ежедневной основе  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
ппп-пп,

создать логины с использованием их SID с исходного сервера.
19 июл 16, 15:42    [19427688]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление БД из full backup на ежедневной основе  [new]
ппп-пп
Guest
Владислав Колосов
ппп-пп,

создать логины с использованием их SID с исходного сервера.


Спасибо это понятно. У меня на копии с full backup-а появляются совсем новые пользователи, которых в source DB нет.
Пока что придумал просто накатывать скрипт после backup restore. Интересно что и как другие делают, чтобы было удобно.
19 июл 16, 15:45    [19427701]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление БД из full backup на ежедневной основе  [new]
komrad
Member

Откуда:
Сообщений: 5252
ппп-пп
У меня на копии с full backup-а появляются совсем новые пользователи, которых в source DB нет.
Пока что придумал просто накатывать скрипт после backup restore. Интересно что и как другие делают, чтобы было удобно.

для решения этой проблемы в свое время просто написал генератор рестор-скрипта, который делает следующие вещи:
1) принудительный вывод базы в оффлайн
2) сама команда по рестору базы (удобно бывает, когда у базы файлов больше 2-3 - в моем случае я видел около 900-ста)
3) смотрит на пользователей в базе до рестора и генерирует команды на добавление их обратно после рестора с существовавшими правами (роли)
4) и по мелочи - возврат оригинальной модели восстановления, прежнего владельца базы и т.п.

в итоге получаю скрипт который и выполняю, внося коррективы по месту
19 июл 16, 21:10    [19429056]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление БД из full backup на ежедневной основе  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31437
ппп-пп
Пока что придумал просто накатывать скрипт после backup restore. Интересно что и как другие делают, чтобы было удобно.
Ну а чего может быть удобнее? Тем более если восстановление делается ночью, в джобе - ну и добавьте туда этот скрипт. Галочки копирования логинов в команде бакапа нет, если вы про это.
19 июл 16, 21:35    [19429101]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление БД из full backup на ежедневной основе  [new]
Павел-П
Member

Откуда:
Сообщений: 234
[quot komrad]
ппп-пп

3) смотрит на пользователей в базе до рестора и генерирует команды на добавление их обратно после рестора с существовавшими правами (роли)


А не поделитесь вот этим. Ну или ссылку, где можно что-нибудь для себя подсмотреть. И спасибо за ответ.
19 июл 16, 23:48    [19429401]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление БД из full backup на ежедневной основе  [new]
komrad
Member

Откуда:
Сообщений: 5252
Павел-П
komrad

3) смотрит на пользователей в базе до рестора и генерирует команды на добавление их обратно после рестора с существовавшими правами (роли)



А не поделитесь вот этим. Ну или ссылку, где можно что-нибудь для себя подсмотреть. И спасибо за ответ.

Это простая вещь - см выдержку из скрипта ниже.
Поскольку это было написано на скорую руку, то не стоит проверка на сиквельные логины - подразумевается, что все пользователи имеют виндовые логины.
Поэтому, просматриваю финальный скрипт перед выполнением.
Как руки дойдут (или надоест), допилю его :)


+

/*check and add logins*/
select @cmd='
use '+quotename(@db)+';
select 
		''if suser_sid(''''''+suser_sname(dp.sid)+'''''') is NULL create login ''+quotename(suser_sname(dp.sid))+ '' from windows;''
from sys.database_principals dp
left join sys.database_role_members drm on dp.principal_id=drm.member_principal_id
join sys.database_principals dp2 on isnull(drm.role_principal_id,0)=dp2.principal_id
where dp.sid in (select sid from sys.server_principals)
and dp.name<>''dbo''
order by 1'
insert into @script (txt)
exec(@cmd)


/*check and add users*/
insert into @script (txt)
select 'go'
union all
select 'use '+quotename(@db)+''
union all
select 'go'

select @cmd='
use '+quotename(@db)+';
select 
		''if user_id(''''''+dp.name+'''''') is NULL create user ''+quotename(dp.name)+'' for login ''+quotename(suser_sname(dp.sid))+'';''
from sys.database_principals dp
left join sys.database_role_members drm on dp.principal_id=drm.member_principal_id
join sys.database_principals dp2 on isnull(drm.role_principal_id,0)=dp2.principal_id
where dp.sid in (select sid from sys.server_principals)
and dp.name<>''dbo''
order by 1'
insert into @script (txt)
exec(@cmd)

/*check and add groups*/
select @cmd='
use '+quotename(@db)+';
select 
		case when dp2.name=''public'' then ''/*public access only*/'' else  ''exec sp_addrolemember ''''''+dp2.name+'''''', ''''''+dp.name+'''''';'' end [users]
from sys.database_principals dp
left join sys.database_role_members drm on dp.principal_id=drm.member_principal_id
join sys.database_principals dp2 on isnull(drm.role_principal_id,0)=dp2.principal_id
where dp.sid in (select sid from sys.server_principals)
and dp.name<>''dbo''
order by 1'
insert into @script (txt)
exec(@cmd)

insert into @script (txt) 
select 'go'
union all
select 'use master'
union all
select 'go'


/*BEGIN OF FULL RESTORE SCRIPT*/
/*put db into emergency mode*/
select 'use master'
union all
select 'go'
union all
select 'alter database '+QUOTENAME(@db)+' set emergency with rollback immediate' [--Restore Script] 
union all
select 'go'

/*restore script & amend access*/
select txt [--Restore Script]
from @script 
order by i asc

20 июл 16, 12:55    [19430766]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление БД из full backup на ежедневной основе  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33959
Блог
Можно интегрировать пользователей в базы.
20 июл 16, 13:02    [19430794]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление БД из full backup на ежедневной основе  [new]
komrad
Member

Откуда:
Сообщений: 5252
Критик
Можно интегрировать пользователей в базы.

можно
но у автора проблема в том, что при ресторе удаляются пользователи, которым был выдан дополнительный доступ и которых нет в исходной БД

например: перенос продакшен базы в UAT/TEST, где к базе имеют доступ аналитики/разрабы и т.п.
20 июл 16, 13:42    [19430989]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление БД из full backup на ежедневной основе  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Если все так страшно и грустно, то ALTER USER после восстановления бэкапа.
20 июл 16, 13:51    [19431046]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление БД из full backup на ежедневной основе  [new]
ппп-пп
Guest
komrad,

Спасибо. Обязательно изучу.
20 июл 16, 14:16    [19431177]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление БД из full backup на ежедневной основе  [new]
ппп-пп
Guest
Вот нашел очень интересный подход.
2 авг 16, 16:45    [19488172]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление БД из full backup на ежедневной основе  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31437
ппп-пп
Вот нашел очень интересный подход.
Ну да, первый ответ темы, собственно :-)
Только скрипт нужно было написать/найти...
2 авг 16, 16:47    [19488188]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление БД из full backup на ежедневной основе  [new]
komrad
Member

Откуда:
Сообщений: 5252
ппп-пп
Вот нашел очень интересный подход.

тогда уж v4
2 авг 16, 17:00    [19488276]     Ответить | Цитировать Сообщить модератору
 Re: Восстановление БД из full backup на ежедневной основе  [new]
ппп-пп
Guest
komrad,

О, спасибо и за 4 версию. Сразу не заметил, но жизнь облегчила статья очень сильно.
3 авг 16, 20:32    [19495474]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить