![]() |
|
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 утра. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |