SQL server Agent - Integrity Check.

СергейМ
Дата: 13.10.2003 12:26:58
Доброе время суток. Обращаюсь с проблемой, которая здесь уже поднималась (правда немножко не в том разрезе).
На входе: W2003 операционка, SQL2000 сервер, SQL server Agent - Integrity Check.
Для нормальной отработки работа ставится в скобки:
alter database RBU_SQL set SINGLE_USER with rollback immediate
alter database RBU_SQL set MULTI_USER

Суть проблемы: существует вероятность входа в систему клиентского USER-а до перевода ее в MULTI_USER.
Кроме тупого организационного «запретить вход с… по…» ничего пока в голову не приходит.
Заранее благодарен за любые идеи.
Glory
Дата: 13.10.2003 12:32:44
Кроме тупого организационного «запретить вход с… по…» ничего пока в голову не приходит.

Почему тупого ??? По-моему вполне номальное решение.

Кроме того чем пользователю будет непонятно сообщение о том, что соединение невозможно из-за того, что база находится в однопользовательском режиме ?? Если он не разумеет англиийский, то отчего бы приложению не перехватить эту ошибку и не перевести ее пользователю ???
СергейМ
Дата: 13.10.2003 12:45:59
to Glory.

Да нет, пока система в однопользовательском, всё хорошо. Проблема возникает после отработки Integrity Check -а, но до момента перехода в многопользовательский режим. USER со стороны может войти раньше, и скрипт по переходу в MULTI_USER не отрабатывает.
Glory
Дата: 13.10.2003 12:58:33
Ничего не понял - как пользователь может использовать базу, если она еще не многопользовательском режиме ???
И что конкретно у вас происходит с пользовательским коннектом ? Оишбка выдается ?
СергейМ
Дата: 13.10.2003 13:19:43
to Glory.

Из истории работы:
Первый шаг (single_user) отработал с диагностикой:
Executed as user: UAALAN01\MSSQLServer. Nonqualified transactions are being rolled back. Estimated rollback completion: 100%. [SQLSTATE 01000] (Message 5060). The step succeeded.
Второй шаг (Ontegrity Check):
Executed as user: UAALAN01\MSSQLServer. output
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

(null)
Microsoft (R) SQLMaint Utility (Unicode), Version 8.00.760


Copyright (C) Microsoft Corporation, 1995 - 1998. The step succeeded.

Третий шаг (multi_user):
Executed as user: UAALAN01\MSSQLServer. Changes to the state or options of database 'RBU_SQL' cannot be made at this time. The database is in single-user mode, and a user is currently connected to it. [SQLSTATE 42000] (Error 5064) ALTER DATABASE statement failed. [SQLSTATE 42000] (Error 5069). The step failed.

Выписки из логов:
Из SecurityLog сервера:
Special privileges assigned to new logon:
User Name: UAASQL04$
Domain: UAALAN01
Logon ID:
Privileges: SeBackupPrivilege
SeRestorePrivilege
SeDebugPrivilege
SeChangeNotifyPrivilege

For more information, see Help and Support Center at

Successful Network Logon:
User Name: UAASQL04$
Domain: UAALAN01
Logon ID:
Logon Type: 3
Logon Process: Kerberos
Authentication Package: Kerberos
Workstation Name:
Logon GUID:
Caller User Name: -
Caller Domain: -
Caller Logon ID: -
Caller Process ID: -
Transited Services: -
Source Network Address: -
Source Port: -


User Logoff:
User Name: UAASQL04$
Domain: UAALAN01
Logon ID:
Logon Type: 3

User Logoff:
User Name: KosykN
Domain: UAALAN01
Logon ID:
Logon Type: 3

Special privileges assigned to new logon:
User Name: BaranovaN
Domain: UAALAN01
Logon ID:
Privileges: SeChangeNotifyPrivilege

Successful Network Logon:
User Name: BaranovaN
Domain: UAALAN01
Logon ID:
Logon Type: 3
Logon Process: Kerberos
Authentication Package: Kerberos
Workstation Name:
Logon GUID:
Caller User Name: -
Caller Domain: -
Caller Logon ID: -
Caller Process ID: -
Transited Services: -
Source Network Address:
Source Port: 0

Special privileges assigned to new logon:
User Name: BaranovaN
Domain: UAALAN01
Logon ID:
Privileges: SeChangeNotifyPrivilege


Из ApplicationLog сервера:
SQL Server Scheduled Job 'Integrity Checks Job for DB Maintenance Plan 'DB Maintenance Plan1'' (0xF681A37D5FBCAE4DB270A498D9ED212E) - Status: Failed - Invoked on: 2003-10-12 00:00:00 - Message: The job failed. The Job was invoked by Schedule 35 (Schedule 1). The last step to run was step 3 (multi_user).

Скопировано один к одному, за исключением адресов и ID, которые я опустил.
Glory
Дата: 13.10.2003 13:42:39
Так вы же не можете перевести базу в MULTI_USER !!!
Потому как Integrity Check это наверняка запуск Maintenance Plan-а через xp_cmdshell ???

Может быть 3-ему шагу установить несколько попыток выполнения? Через 30 сек например ?
И еще - в контексте какой базы запускается 3-ий шаг ??
СергейМ
Дата: 13.10.2003 13:50:20
Ну да, естественно, что не могу. Я думал, это понятно. Сорри, конечно, что не подчеркнул.
Насчет повторных попыток идея хорошая. Спасибо, попробую.
Третий шаг запускается в контексте базы master, если Вы это имеете ввиду.
Glory
Дата: 13.10.2003 13:55:34
Теперь понял - вы боитесь, что между вторым и третьим шагом какой-нибудь пользователь, которому вздумается поработать, станет тем единственным SINGLE_USER-ом ??
СергейМ
Дата: 13.10.2003 13:59:59
Именно.
Правда боюсь уже постфактум.
Еще раз спасибо за идею с повторами. Вот если бы еще и отстреливать при этом автоматически процессы...
Гнездин Петр
Дата: 13.10.2003 14:03:43
А если вместо SINGLE_USER переводить в RESTRICTED_USER?