Имя: Пароль:
1C
 
1cv77.SQL. Невозможно запустить базу в монопольном (State cannot be changed).
Ø
0 Eugene G
 
07.07.05
06:41
Проблема следующая: имеется локальная база разработчика, локальный СКЛ сервер, с некоторого момента 1с стала отказываться запускать базу в монопольном режиме.
Выдаются сообщения:
1. Database state cannot be changed while other users are using the database
2. Alter Database statement failed.
3. sp_dboption command failed.
.
Выполнение скрипта:
use master
select * from master..sysprocesses
ехес sp_who
Показывает, что нет ни одного коннекта к данной базе.
.
Другие пользователи не работают по сети с этой базой, нет никаких процессов бекапа etc, база только для разработки, SQL Server Agent остановлен.
.
Самое интересное, что если запустить базу в разделенном режиме, закрыть запущенный сеанс, затем эта база спокойно открывается монопольно.
Релиз 1с 25, SQL Server 2000 SP4, WinXP SP2.
.
Надоела уже эта ошибка, подскажите, что подкрутить.
1 Eugene G
 
07.07.05
08:37
Случай клинический :(
2 101
 
07.07.05
08:47
http://search.rambler.ru/srch?words=Alter+Database+statement+failed+SQL+1%D1&where=1
ЗЫ вроде не маленький
3 Eugene G
 
07.07.05
09:18
(2) Во всех этих ветках советуют воспользоваться sp_who, но я же говорю коннектов к этой базе нет, правда есть коннекты к базе NULL, может они мешают?
Сейчас обнаружил еще одну замечательрную особенность: стоп/старт СКЛ сервера не решают проблему, база все равно не открывается монопольно :))
Проблема начинает появлятся после сохранения БД.
4 МуМу
 
07.07.05
09:24
То 3.
select * from master..sysprocesses
ехес sp_who
не дают гарантии того что у тебя именно на момент монопольного захвата базы никто в ней не сидит.
Включи в профайрере события логин,логаут - это будет наверняка.
У меня в одной из баз например web клиенты обращаются и при этом время обращения и жизни сессии может быть очень маленьким.
5 toypaul
 
07.07.05
09:26
Жень, зайди в свойства базы и глянь закладку Options. убери ограниченный доступ если стоит.
6 Eugene G
 
07.07.05
09:27
(4) Нет-нет, к базе никто не может обращаться, говорю же я дописываю конфу.
Работаю на буке, иногда с отключенным сетевым интерфейсом.
login, logout сейчас попробую включить, может чего и поймаю :)
А могут быть еще варианты?
7 Eugene G
 
07.07.05
09:34
(5) Галочка Restict Acsess не стоит.
Видно плохи наши дела :(
8 Gloom
 
07.07.05
09:53
У меня такая фигня была, вылечил корректировкой процедуры sp_dboption - в случае, если эта процедура вызывается из 1цэ, отключал опцию WITH NO_WAIT в команде ALTER DATABASE...
9 Eugene G
 
07.07.05
12:10
(8) Блин, никак не могу отредактировать system stored procedures :(
Скрипт
sp_configure 'allow updates','1'
RECONFIGURE WITH OVERRIDE
не помагает.
.
На мои запросы MSDN мне не дал ответа :(
10 Gloom
 
07.07.05
12:18
(9)В таблице sysobjects в поле status поставь единичку для sp_dboption. Только старое значение запомни, чтоб потом обратно вернуть...
11 Eugene G
 
07.07.05
12:34
(10) Одни из последних строчек:
select @ехес_stmt = 'ALTER DATABASE ' + quotename(@dbname) +' SET ' + @alt_optname + ' ' + @alt_optvalue + ' WITH NO_WAIT'
ехес (@ехес_stmt)
Т.е. уже стоит WITH NO_WAIT, или я не туда смотрю?
12 Gloom
 
07.07.05
12:37
(11)Дык, наоборот, отключить надо:
if app_name() = '1CV7'
  select @ехес_stmt = 'ALTER DATABASE ' + quotename(@dbname) +' SET ' + @alt_optname + ' ' + @alt_optvalue
else
  select @ехес_stmt = 'ALTER DATABASE ' + quotename(@dbname) +' SET ' + @alt_optname + ' ' + @alt_optvalue + ' WITH NO_WAIT'
13 Eugene G
 
07.07.05
12:54
(12) Здорово, пока работает без проблем.
Только парсер у меня попросил объявить переменную @ехес_stmt, чего я и сделал char(100). И еще имя приложения, все-таки наверное '1cv7s', а не '1cv7'?
14 Gloom
 
07.07.05
12:59
(13)Вообще-то объявление ехес_stmt уже есть:
declare @ехес_stmt nvarchar(550) -- так что похоже ты чего-то наворотил
А имя приложения именно 1CV7.
15 Eugene G
 
07.07.05
13:04
(14) Похоже, что описание переменной я случайно прибил.
А поповоду имени приложения непонял, почему оно так называется, где посмотреть? Ведь диспетчер задач говорит другое...
16 Gloom
 
07.07.05
13:10
(15)Task manager тут ни причём. В данном случае это то, что 1цэ передаёт серверу в параметре APP при подключении:
Name of the application calling SQLDriverConnect (optional). If specified, this value is stored in the master.dbo.sysprocesses column program_name and is returned by sp_who and the Transact-SQL APP_NAME function.
17 Eugene G
 
07.07.05
13:15
(16) Понял, thanks.