Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
Мордор Держимордов
Member

Откуда:
Сообщений: 939
SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO





ALTER      PROCEDURE RESTORE_BD_BY_BACKUP
   @basename  [nvarchar] (200)
 , @path_to_restore [nvarchar] (4000)
 , @backup_path_and_file [nvarchar] (4000)
 , @Nt_UserName [nvarchar] (50) = NULL
as
if right(@path_to_restore,1) <> '\' or right(@path_to_restore,1) <> '/'
 set  @path_to_restore = @path_to_restore + '\'
declare @SQL [nvarchar] (4000)
declare @Log_LogicalName [nvarchar](128)
declare @Data_LogicalName [nvarchar](128)
/*Вытаскиваем логические имена*/
create table #t
		(
		LogicalName nvarchar(128)
		, PhysicalName nvarchar(260)
		, Type char(1)
		, FileGroupName nvarchar(128)
		, [Size] numeric(20,0)
		, [MaxSize] numeric(20,0)
		)
set @SQL = N'RESTORE FILELISTONLY from DISK = N''' + @backup_path_and_file + ''''
insert	#t exec(@SQL)
select @Log_LogicalName = LogicalName from #t where Type = 'L'
select @Data_LogicalName = LogicalName from #t where Type = 'D'
drop table #t
/*Вытаскиваем логические имена*/
 set @SQL = 
 'RESTORE DATABASE [' + @basename + ']'
 + ' FROM  DISK = N''' + @backup_path_and_file + ''''
 + ' WITH  FILE = 1,  NOUNLOAD ,  STATS = 10,  RECOVERY , REPLACE '
 + ', MOVE N''' + @Log_LogicalName + ''' TO N''' + @path_to_restore + @basename + '_log.ldf'''
+ ', MOVE N''' + @Data_LogicalName + ''' TO N''' + + @path_to_restore + @basename + '.mdf'''
exec(@SQL)
set @SQL = @basename 
+ ': Востановлена из бэкапа - ' + @backup_path_and_file

exec p_insert_t_event_log  @SQL

if not(@Nt_UserName is NULL) 
 BEGIN
  set @SQL = ' exec master..xp_cmdshell N''net send ' + @Nt_UserName + ' " ' + 'База ' 
  + @basename + ' востановлена из бэкапа : ' + @backup_path_and_file + ' "'''
exec(@SQL)
 END

/*
exec PAM_WORK_..RESTORE_BD_BY_BACKUP 
'Bd_cont90'
,'D:\DATA\'
,'F:\BackUp\EMPTY_BASE\BDCont240.bk'
,'user0700_11'
/*

(2 row(s) affected)

Server: Msg 3101, Level 16, State 2, Line 1
Exclusive access could not be obtained because the database is in use.
Server: Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

(1 row(s) affected)


(3 row(s) affected)


*/
*/
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

Запускаю процедуру:
exec PAM_WORK_..RESTORE_BD_BY_BACKUP 
'Bd_cont90'
,'D:\DATA\'
,'F:\BackUp\EMPTY_BASE\BDCont240.bk'
,'user0700_11'

Результат:

Server: Msg 3101, Level 16, State 2, Line 1
Exclusive access could not be obtained because the database is in use.
Server: Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

(1 row(s) affected)


(3 row(s) affected)

Каким образом отключить всех пользователей от БД перед восстановлением?
23 янв 09, 03:50    [6724407]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
Установить базу в SINGLE_USER mode

IF  EXISTS (SELECT name FROM sys.databases WHERE name = N'DB_NAME')
	ALTER DATABASE [DB_NAME] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

DB_NAME - имя ВАШЕЙ базы.
23 янв 09, 03:58    [6724413]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
Да, а еще убедиться, что скрипт восстановления запускается не на той базе, которую восстанавливаете, а на базе master, например.
23 янв 09, 04:02    [6724417]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
Мордор Держимордов
Member

Откуда:
Сообщений: 939
Кудряшка
Да, а еще убедиться, что скрипт восстановления запускается не на той базе, которую восстанавливаете, а на базе master, например.


exec PAM_WORK_..RESTORE_BD_BY_BACKUP 
'Bd_cont90'
,'D:\DATA\'
,'F:\BackUp\EMPTY_BASE\BDCont240.bk'
,'user0700_11'

То есть Процедура RESTORE_BD_BY_BACKUP запускается с БД PAM_WORK_, а имя восстанавливаемой базы - Bd_cont90.
23 янв 09, 04:26    [6724421]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
Мордор Держимордов
Member

Откуда:
Сообщений: 939
Я вот в профайлере посмотрел как он делает ЭТО:

sp_MSget_current_activity 1228,1 
KILL 106

где 106 это ProcessID, а 1228 откуда берётся?
из sp_MSget_current_activity наковырял:

set @locktab = N'##lockinfo' + rtrim(convert(nvarchar(5), @id))
    set @stmt = N'select [Process ID], [User], [Database], [Status], [Open Transactions], [Command], [Application], [Wait Time], [Wait Type], [Wait Resource], [CPU], [Physical IO], [Memory Usage], [Login Time], [Last Batch], [Host], [Net Library], [Net Address], [Blocked By], [Blocking], [Execution Context ID] from ' + @proctab + ' order by [Process ID],[Execution Context ID]'
exec(@stmt)
То есть всё смотрим из  временной таблицы ##lockinfo1228
Как узнать какой свой ID?
23 янв 09, 04:36    [6724424]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
Мордор Держимордов
Member

Откуда:
Сообщений: 939
Угу, а прога которая заливает в БД инфу запускается под другим юзером...
23 янв 09, 04:40    [6724425]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
--Как узнать какой свой ID?

ID в смысле ID процесса?
SELECT @@SPID

--Я вот в профайлере посмотрел как он делает ЭТО:

Он - это кто?:) Профаилер? :)

И ваще что вы страдаете... перед RESTORE DATABASE напишите:

set @SQL = 'ALTER DATABASE [' + @basename + ']' SET SINGLE_USER WITH ROLLBACK IMMEDIATE'
exec(@SQL)

23 янв 09, 05:01    [6724427]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
Ковычка лишняя...

set @SQL = 'ALTER DATABASE [' + @basename + '] SET SINGLE_USER WITH ROLLBACK IMMEDIATE'
exec(@SQL)

После восстановления можно в Мульти-юзер на всякий случай обратно установить.

П.С.: вышенаписанное надо вставить в процедуру RESTORE_BD_BY_BACKUP
перед кодом:

 set @SQL = 
 'RESTORE DATABASE [' + @basename + ']'
 + ' FROM  DISK = N''' + @backup_path_and_file + ''''
 + ' WITH  FILE = 1,  NOUNLOAD ,  STATS = 10,  RECOVERY , REPLACE '
 + ', MOVE N''' + @Log_LogicalName + ''' TO N''' + @path_to_restore + @basename + '_log.ldf'''
+ ', MOVE N''' + @Data_LogicalName + ''' TO N''' + + @path_to_restore + @basename + '.mdf'''
exec(@SQL)

23 янв 09, 05:05    [6724431]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
Мордор Держимордов
Угу, а прога которая заливает в БД инфу запускается под другим юзером...


А это и неважно...
23 янв 09, 05:07    [6724432]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
Мордор Держимордов
Member

Откуда:
Сообщений: 939
Мож у кого ещё какие идеи?
23 янв 09, 08:09    [6724535]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23904
Мордор Держимордов
Мож у кого ещё какие идеи?
Идеи чего?
23 янв 09, 08:15    [6724541]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
Мордор Держимордов
Member

Откуда:
Сообщений: 939
tpg
Мордор Держимордов
Мож у кого ещё какие идеи?
Идеи чего?


...SET SINGLE_USER WITH ROLLBACK ...
...SET MULTI_USER WITH ROLLBACK ...

Я вот думаю....это оптимальный вариант?
23 янв 09, 08:49    [6724605]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23904
Мордор Держимордов
tpg
Мордор Держимордов
Мож у кого ещё какие идеи?
Идеи чего?


...SET SINGLE_USER WITH ROLLBACK ...
...SET MULTI_USER WITH ROLLBACK ...

Я вот думаю....это оптимальный вариант?
Вполне.
23 янв 09, 08:56    [6724618]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
greenfox
Member

Откуда:
Сообщений: 30
Вопрос по рестру: 2008 сиквел, соот-но так же столкнулся с траблой при ресторе БД: "the database is in use"
Интересует как сделать рестор с отключениями в графической оболочке (mangnt studio)?

PS сорри если вопрос глупый :)
1 апр 09, 12:44    [7004969]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 56942
greenfox
Интересует как сделать рестор с отключениями в графической оболочке (mangnt studio)?


Есть утилита командной строки sqlcmd.exe.
1 апр 09, 12:49    [7005016]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
greenfox
Member

Откуда:
Сообщений: 30
а прямо в окне студии никак не посмотреть кто БД изает (и не дропнуть)?

+ ещё вопрос, на БД есть права owner, но при попытке сделать её ofline (для рестора скажем через студию) она зависает... (к БД есть коннекты сторонние и такое ощущение что он их закрыть не может) Куда капнуть?
1 апр 09, 13:20    [7005311]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 56942
greenfox
а прямо в окне студии никак не посмотреть кто БД изает (и не дропнуть)?


У Вас же она была отключена? Как посмотреть: Activity Monitor на тулбаре, вкладка Processes. Удалить - правую педаль на бд в Object explorer и Delete.

greenfox
+ ещё вопрос, на БД есть права owner, но при попытке сделать её ofline (для рестора скажем через студию) она зависает... (к БД есть коннекты сторонние и такое ощущение что он их закрыть не может) Куда капнуть?


ALTER DATABASE <DBNAME> SET OFFLINE WITH ROLLBACK IMMEDIATE

???
1 апр 09, 13:33    [7005463]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
greenfox
Member

Откуда:
Сообщений: 30
pkarklin
У Вас же она была отключена?
что отключена? БД при попытке рестора в онлайне, хочу ресторить :) Ругается что мол коннекты есть и т.д. (см.выше) как вариант пытаюсь в офлайн перевести (всё из студии)
pkarklin
Как посмотреть: Activity Monitor на тулбаре, вкладка Processes.
да, точно, что блочит видно, спс! А в 2005 сиквеле что-н похожее тоже?
pkarklin
Удалить - правую педаль на бд в Object explorer и Delete.
это БД удалить? Мне это не надо пока :) Или я вас не понял...
ALTER DATABASE <DBNAME> SET OFFLINE WITH ROLLBACK IMMEDIATE
работает, спасибо (только наск я понял сначала она перкл на другую БД что бы текущий коннект QA сбросить?)
1 апр 09, 14:20    [7005922]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
greenfox
Member

Откуда:
Сообщений: 30
PS а при бэкапе из студии можно как указать стквелу что бы при необходимости отключил все соеденения от нужной БД?
1 апр 09, 14:25    [7005960]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
Glory
Member

Откуда: Estonia
Сообщений: 94705
greenfox
PS а при бэкапе из студии можно как указать стквелу что бы при необходимости отключил все соеденения от нужной БД?

Для бэкапа пользователей не надо отключать
1 апр 09, 14:27    [7005975]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
greenfox
Member

Откуда:
Сообщений: 30
Glory
greenfox
PS а при бэкапе из студии можно как указать стквелу что бы при необходимости отключил все соеденения от нужной БД?

Для бэкапа пользователей не надо отключать
так пишет тогда, что " the database is in use." с соот-м вылетом из бэкапа :(
1 апр 09, 14:47    [7006112]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
Glory
Member

Откуда: Estonia
Сообщений: 94705
greenfox
Glory
greenfox
PS а при бэкапе из студии можно как указать стквелу что бы при необходимости отключил все соеденения от нужной БД?

Для бэкапа пользователей не надо отключать
так пишет тогда, что " the database is in use." с соот-м вылетом из бэкапа :(

Команда BACKUP не может такого писать. Такое пишет команда RESTORE
1 апр 09, 14:49    [7006121]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
greenfox
Member

Откуда:
Сообщений: 30
о господи, заработался :)
Рестор конечно, т.е. вопрос будет:
а при ресторе из студии можно как указать стквелу что бы при необходимости отключил все соеденения от нужной БД?
1 апр 09, 15:09    [7006267]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
Glory
Member

Откуда: Estonia
Сообщений: 94705
greenfox
о господи, заработался :)
Рестор конечно, т.е. вопрос будет:
а при ресторе из студии можно как указать стквелу что бы при необходимости отключил все соеденения от нужной БД?

Никак. Сначала отключаете. Потом запускаете восстановление
1 апр 09, 15:14    [7006299]     Ответить | Цитировать Сообщить модератору
 Re: RESTORE BD:Exclusive access could not be obtained because the database is in use.  [new]
greenfox
Member

Откуда:
Сообщений: 30
а если там коннектов сотни и всё время рекконект? Только скриптом?
1 апр 09, 16:44    [7007218]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить