Имя: Пароль:
1C
1C 7.7
v7: Можно ли с пом SQLDMO узнать уровень польовательского допуска (MULTI_USER/SINGL?
0 trdm
 
29.05.17
13:03
Можно ли с пом SQLDMO узнать уровень польовательского допуска (MULTI_USER/SINGLE_USER) и как?
Полагаю надо создать сервер:
Set oServer = CreateObject("SQLDmo.SqlServer")
'используем аутентификацию Windows
oServer.LoginSecure = True
oServer.Connect "localhost"
For Each oDatabase In oServer.Databases

        WScript.Echo oDatabase.Name & " " & oDatabase.SpaceAvailableInMB
        ' А вот тут спросить у oDatabase. уровень. Только не могу найти в какой проперти/методе это сидит.

Next
oServer.DisConnect
Set oServer = Nothing
1 Вафель
 
29.05.17
13:05
а через запрос?
2 trdm
 
29.05.17
13:05
как?
3 Вафель
 
29.05.17
13:07
if (SELECT user_access_desc FROM sys.databases WHERE name = 'YourDb')
                                                            = 'SINGLE_USER'
    begin
       print 'It is in single user mode!'
    end
4 trdm
 
29.05.17
13:08
Короче, мне надо из vbs скрипта поймать момент когда БД в мультиюзере, что-бы автоматически запустить перепроведение.
Если я запускаю перепроведение из скрипта, а БД в синглеюзере я получаю:
ALTER DATABASE failed because a lock could not be placed on database
5 trdm
 
29.05.17
13:10
Фишка в том что SQLDMO может меня послать подальше, если БД в синглеюзере.
6 Вафель
 
29.05.17
13:11
так можно же set single user что-то там сразу и всех остальных выгнать
7 Вафель
 
29.05.17
13:11
ALTER DATABASE ERP_TEST
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
8 trdm
 
29.05.17
13:12
а если 1С-ку пытаешся стартовать не проверив тип доступа, то получаешь блокировку входа, сообщение "ALTER DATABASE failed because a lock could not be placed on database" и висячее окно в сеансе терминала. А утром вопли.
9 trdm
 
29.05.17
13:15
(6) А если архивация еще не кончилась?
10 trdm
 
29.05.17
13:16
(7) то же самое. т.е. (9)
Мне надо уловить момент, когда архивация отработает и БД перейдет в мультиюзер.
11 1dvd
 
29.05.17
14:02
Вроде, v7 не умеет коннектиться через домен. не?
12 Вафель
 
29.05.17
14:13
(10) Запускай отдельный таск по завершению этого
13 trdm
 
29.05.17
14:20
(12) Конечно. Запускаю. Получаю: http://prntscr.com/fdcsp4
14 Вафель
 
29.05.17
14:23
(13) Через агента запускаешь?
Можно еще делать бэкап батником, а после выполнения запускать дальше.
Типа такого
https://gist.github.com/a-sitnikov/85a870b2375fd253e7657e8ba45f5552
15 trdm
 
29.05.17
14:25
Пока БД не отпустило, sp_helpdb не отдает строку с нужной БД.
Фактически, если спросить:
sp_helpdb 'НужнаяБд'
и если придет пустой скульрезульт, то значит БД в синглеюзере и нефиг пока соваться.

(14) бекап делается по расписанию vbs-скриптом, который много чего делает.
16 Вафель
 
29.05.17
14:26
(15) скрипт ждет завершения бэкапа?
Если да, то пусть по окончании запускает нужное
17 trdm
 
29.05.17
14:27
(16) Ясное дело ждет, ему ведь еще dat-файл архивировать.
18 Вафель
 
29.05.17
14:30
ты бэкап через 1с делаешь чтоли?
19 trdm
 
29.05.17
14:39
да
20 Вафель
 
29.05.17
14:41
(19) но зачем????
21 Вафель
 
29.05.17
14:42
тогда можно еще делать
set multi user
22 trdm
 
29.05.17
15:30
Родил такую функцию:
function dbIsBusy(psBdName)
    dbIsBusy = false
    Set oServer = CreateObject("SQLDmo.SqlServer")
    oServer.LoginSecure = True  'используем аутентификацию Windows

'stop
    oServer.Connect "(local)"
    Set oResult = oServer.ExecuteWithResults("sp_helpdb '"+psBdName+"'")
    if oResult.Rows = 0 Then
        dbIsBusy = true
    End if
    
    oServer.DisConnect

    Set oServer = Nothing
end function

если БД в синглюзере - возвращается true, иначе false
23 Вафель
 
29.05.17
15:40
(22) и в цикле запускаешь?
24 trdm
 
29.05.17
15:43
(23) Одна БД архивируется. Я этот прикол знаю...
25 Вафель
 
29.05.17
15:48
(24) Я имею ввиду, что в цикле опрос делашь
26 trdm
 
29.05.17
16:06
(25) Скрипт запускается с интервалом в 20 минут. Определяет есть ли уже архив, если есть, идет на перепроведение, если нет, делает архив, и потом запускает сеанс с перепроведением.
27 Вафель
 
29.05.17
16:14
(26) А что нельзя сделать архив и запустить перепроведение последовательно?
28 trdm
 
29.05.17
16:25
(27) тогда получаю: (13)
29 trdm
 
29.05.17
16:27
Не знаю, чем там БД занимается, но получаю ошибку "ALTER DATABASE failed because a lock could not be placed on database"  если все последовательно.
Не спасает даже слип. 5-ти минутный.
Ну и пару заданий на обслуживание БД в районе 5 утра.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.