Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Это тоже будет пост из серии «Вводный курс молодого бойца» подобно конфигурированию SQL Server для сетевого доступа, тоже с семинара по SQL Server. В данном случае неважно, на какую тему. Слушатели приступили к выполнению лабораторки. Из-за одного компьютера тянется рука - у меня не работает SQL Server.
На лабораторных машинах SQL Serverу была сконфигурирована фиксированная память буфер пула. Человек решил вернуть динамическое выделение.
Рис.1
Он не знал, а может быть, забыл, что по умолчанию max server memory = 2147483647, и поставил ее в 0, решив, что это та же бесконечность. В соответствии с документацией SQL Server поставил себе max server memory = 16 (МБ), после чего сделался грустным, молчаливым и задумчивым.
Рис.2
Увидев, что SQL Server еле ворочается, слушатель испугался и перезапустил сервис mssqlserver. При штатном гашении SQL Server должен скинуть закоммиченные данные с кэша на диск и проставить чекпойнты в базах. 16-ти метров не хватило, чтобы нормально в разумное время застопить сервис. Понаблюдав минуты 3 сервис в состоянии Stopping, слушатель запросил подмоги.
Рис.3
Я прихлопнул процесс sqlservr.exe из Task Manager. Сказал добавить в стартовые параметры -f, например, через SQL Server Configuration Manager, перезапустить машину, зайти на SQL Server и вернуть на место установки памяти. Через минуту-другую слушатель вновь позвал на помощь и сказал, что машина перестартовала, но SQL Server не хочет запускаться. Посмотрели, что при этом пишется в Event Log:
Рис.4
Страсть какая. Главное - не теряться. В самом деле, кто ж не знает эту ошибку! Ее знают все по памяти среди ночи. На всякий случай решил прoверить на предмет правильности стартовые параметры сервиса. Открыл SQL Server Configuration Manager -> SQL Server Services -> SQL Server (имя инстанса) -> закладка Advanced -> Startup Parameters.
Рис.5
Так и есть. Попросил слушателя поставить после -f точку с запятой и вернулся читать семинар. Не успел сообразить, на чем мы, бишь, остановились, как товарищ снова тянет руку и говорит, что SQL Server все равно не стартует с той же ошибкой в системном журнале. Я проверил - точка с запятой стоит. Что за черт? Запустил сервис. Не стартует. Стали подтягиваться соседние слушатели. Срамиться перед честным народом не хотелось. Проверил ошибку. Вернулся на Рис.5. Инстанс тот самый. Пути к базам не менялись. Стартовый эккаунт тот же, права те же. master он не трогал, закорруптить не мог. С умным видом открыл regedit. Посмотрел, как там отразились стартовые параметры:
Рис.6
Вот, где собака порылась. После -f; товарищ влепил пробел, а я на Рис.5 его сослепу не заметил. Убрал пробел, стартовал SQL Serverный сервис. Наконец-то. Открыл Books On-Line на странице «Запуск SQL Server в однопользовательском режиме», объяснил, что делать, пошел вещать дальше. Не дошел. Не может он присоединить экземпляр SQL Server в Object Browser SSMS. Тот говорит, что раз я запущен в однопользовательском режиме, то больше одного соединения у меня не собираться.
Рис.7
Товарищ чересчур буквально воспринял слова насчет SQL Agenta в Books On-Line. SQL Agent, действительно, запущен не был (Рис.3). Зато была запущена репортинговая служба, которая имела свой антирес к SQL Server, т.к. держала на ем свои базы. Почуяв, что SQL Server поднялся, она к нему моментом законнектилась. После того, как сервис SQL Server Reporting Services был застоплен, SQL Server дал себя законнектить из Object Browser и с чувством глубокого морального удовлетворения воспринял 2147483647 в качестве max server memory. После чего идем в Рис.5, убираем ключ -f и снова перезапускаем SQL Server, возобновив нормальную многопользовательскую работу.
Алексей Шуленин
Comments
Anonymous
January 01, 2003
О, для этого необходима энциклопедическая эрудиция, многолетний опыт работы с SQL Server и настолько нетривиальная работа мысли, что я даже сейчас не вспомню, откуда. Скорее всего, посмотрел на стартовые параметры -d, -l, -e и увидел, что они разделены ;, а не, к примеру, //.Anonymous
August 18, 2011
>>Попросил слушателя поставить после -f точку с запятой Вот это - откуда следует? Почему именно ; а не, к примеру, // ?