Монопольно ли запущена база 7.7 для SQL. Снятие single user в sql
T-SQL скрипт, позволяющий определить монопольно ли запущена база на сервере SQL, а также перевести базу в multi user
- Описание
- Подробнее
Описание
Когда имеется целый зоопарк баз на SQL (да и в других случаях) бывает необходимо определить запущена база монопольно или нет из другой программы (будь то 1С или скрипт автоматического обмена)
Как известно 7-ка при монопольном режиме ставит SQL базу в single user. Получив значение этой переменной SQL Server для базы можно определить монопольно ли кто-либо в ней или нет (хотя конечно single user может быть включен и другими средствами, но опустим это как частный случай). Получить значение данного свойства от SQL Server можно выполнив запрос:
EXEC sp_dboption ‘BASE’, ‘single user’
Для этого для SQL версии можно воспользоваться следующим кодом 1С 7.7:
Запрос = СоздатьОбъект("ODBCRecordset");
ТекстЗапроса = "EXEC sp_dboption 'BASE', 'single user'";
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
Попытка Если СокрЛП(Врег(ТЗ.ПолучитьЗначение(1, 2))) = "ON" Тогда
Сообщить("Монопольно");
Иначе Сообщить("Не монопольно");
КонецЕсли; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Манипулируя этой переменной можно из запущенной 1С снять single user для текущей базы данных, при этом 1С при запуске будет воспринимать базу как запущенную монопольно и не даст войти другим пользователям. Это возможно сделать используя следующий T-SQL скрипт:
declare @CurDBName sysname
set @CurDBName = db_name()
exec sp_dboption @CurDBName, ‘single user’, ‘false’
В 1С это выглядит так:
Если МонопольныйРежим() = 1 Тогда
ТекстЗапроса = «
|declare @CurDBName sysname
|set @CurDBName = db_name()
|exec sp_dboption @CurDBName, ‘single user’, ‘false’
|»;
ЗапросТекущаяБаза = СоздатьОбъект(«ODBCRecordset»);
Если ЗапросТекущаяБаза.Выполнить(ТекстЗапроса) = 0 Тогда
Сообщить(«Не удалось снять Single User Mode» + РазделительСтрок + ЗапросТекущаяБаза.ПолучитьОписаниеОшибки(), «!»);
СтатусВозврата(0);
Возврат;
КонецЕсли;
КонецЕсли;

