Каталог решений - Монопольно ли запущена база 7.7 для SQL. Снятие single user в sql

Монопольно ли запущена база 7.7 для SQL. Снятие single user в sql

Монопольно ли запущена база 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);
        Возврат;
    КонецЕсли;
КонецЕсли;

 

has been added to your cart:
Оформление заказа