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

Откуда:
Сообщений: 15
Доброго времени суток.
Подскажите по такому вопросу, есть бэкап, его нужно восстанавливать ежедневно на резервный сервер. Написал скриптец, который по моему глубокому убеждению должен:
1) Перевести базу в "сингл мод" тем самым отключить все подключения кроме текущего, от которого проходит скрипт
2) восстановить базу из бэкапа
3) вернуть базу в "мульти мод"
alter database [NAS1] set SINGLE_USER
---
RESTORE DATABASE [NAS1] FROM  DISK = N'G:\NAS1.bak' WITH  FILE = 1,  NOUNLOAD ,  STATS = 10,  RECOVERY ,  REPLACE ,  MOVE N'NAS1$Data' TO N'F:\NAS1.mdf',  MOVE N'NAS1$' TO N'F:\NAS1_log.LDF'
---
alter database [NAS1] set MULTI_USER


но база не восстанавливается, в ошибке пишет, что база занята и к ней подключен один пользователь

перевод в мульти юзер тоже не происходит, пишет что пользователь уже подключен.
Помогает рестарт SQL + alter database [NAS1] set MULTI_USER при этом база остается не восстановленной.

Что я делаю не так?
Спасибо.
12 дек 11, 15:20    [11750212]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт авосстановления БД, где ошибка?  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 901
str07str,

после alter database [NAS1] set SINGLE_USER

нужно go
затем команда восстановления
12 дек 11, 15:27    [11750260]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт авосстановления БД, где ошибка?  [new]
str07str
Member

Откуда:
Сообщений: 15
После команды восстановления тоже GO и после перевода в мульти юзер тоже GO пробовал, эффекта нет.

Перевожу BOL и неикса понять не могу, alter database [NAS1] set SINGLE_USER сбрасывает активные подключения или нет.
В моем понимание выполнение этой команды от имени, например, USER1, отключит всех юзеров кроме USER1
или я ошибаюсь?
12 дек 11, 16:14    [11750679]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт авосстановления БД, где ошибка?  [new]
--------------------------------
Guest
Там должно быть чтото вроде
alter database ... with npwait
или что-то вроде. См. BOL
12 дек 11, 16:20    [11750753]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт авосстановления БД, где ошибка?  [new]
Glory
Member

Откуда:
Сообщений: 104751
str07str
Перевожу BOL и неикса понять не могу

Все уже переведено
http://msdn.microsoft.com/ru-ru/library/ms174269.aspx
Ваш вопрос о <termination> ::
12 дек 11, 16:46    [11751020]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт авосстановления БД, где ошибка?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
str07str
alter database [NAS1] set SINGLE_USER

alter database [NAS1] set SINGLE_USER ROLLBACK IMMEDIATE 
go
12 дек 11, 16:53    [11751096]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт авосстановления БД, где ошибка?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
alter database [NAS1] set SINGLE_USER WITH ROLLBACK IMMEDIATE 
go
12 дек 11, 16:57    [11751136]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт авосстановления БД, где ошибка?  [new]
str07str
Member

Откуда:
Сообщений: 15
Если я правильно понял то получаем следующий скрипт:
alter database [NAS1] set with NO_WAIT
alter database [NAS1] set SINGLE_USER
---
RESTORE DATABASE [NAS1] FROM  DISK = N'G:\NAS1.bak' WITH  FILE = 1,  NOUNLOAD ,  STATS = 10,  RECOVERY ,  REPLACE ,  MOVE N'NAS1$Data' TO N'F:\NAS1.mdf',  MOVE N'NAS1$' TO N'F:\NAS1_log.LDF'
---
alter database [NAS1] set MULTI_USER


тогда вопрос нужно ли ставить команду обратную NO_WAIT (и что этоза команда) перед alter database [NAS1] set MULTI_USER
12 дек 11, 17:46    [11751601]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт авосстановления БД, где ошибка?  [new]
Haramambaru
Member

Откуда:
Сообщений: 31
alexeyvg
alter database [NAS1] set SINGLE_USER WITH ROLLBACK IMMEDIATE 
go


+1
13 дек 11, 09:08    [11754183]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт авосстановления БД, где ошибка?  [new]
str07str
Member

Откуда:
Сообщений: 15
[src]
alter database [NAS1] set SINGLE_USER with NO_WAIT
---
RESTORE DATABASE [NAS1] FROM  DISK = N'G:\NAS1.bak' WITH  FILE = 1,  NOUNLOAD ,  STATS = 10,  RECOVERY ,  REPLACE ,  MOVE N'NAS1$Data' TO N'F:\NAS1.mdf',  MOVE N'NAS1$' TO N'F:\NAS1_log.LDF'
---
alter database [NAS1] set MULTI_USER

[/code]

Похоже так работает...
13 дек 11, 09:14    [11754194]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт авосстановления БД, где ошибка?  [new]
str07str
Member

Откуда:
Сообщений: 15
еще как вариант из powershell, рестарт sql-сервиса, удаление базы, и запуск готового скрипта из файла, в котором только строка
RESTORE DATABASE [NAS1] FROM DISK = N'G:\NAS1.bak' WITH FILE = 1, NOUNLOAD , STATS = 10, RECOVERY , REPLACE , MOVE N'NAS1$Data' TO N'F:\NAS1.mdf', MOVE N'NAS1$' TO N'F:\NAS1_log.LDF'
13 дек 11, 09:37    [11754266]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт авосстановления БД, где ошибка?  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
str07str
еще как вариант из powershell, рестарт sql-сервиса, удаление базы, и запуск готового скрипта из файла, в котором только строка
RESTORE DATABASE [NAS1] FROM DISK = N'G:\NAS1.bak' WITH FILE = 1, NOUNLOAD , STATS = 10, RECOVERY , REPLACE , MOVE N'NAS1$Data' TO N'F:\NAS1.mdf', MOVE N'NAS1$' TO N'F:\NAS1_log.LDF'
Ага. А еще можно Windows переустановить. Ну так, для надежности.

Вам alexeyvg написал, что нужно делать.
13 дек 11, 09:54    [11754367]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт авосстановления БД, где ошибка?  [new]
str07str
Member

Откуда:
Сообщений: 15
Спасибо всем откликнувшимся, все работает как нужно.
13 дек 11, 10:55    [11754734]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт авосстановления БД, где ошибка?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Я надеюсь, вы ваш код не в контексте базы NAS1 выполняете?
13 дек 11, 11:15    [11754839]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить