Ключи запуска сервера из командной строки

From SunFlurry wiki
Jump to: navigation, search

Сервер базы данных является консольным приложением, которое может быть запущено в трех режимах:

  • В режиме сервиса операционной системы. Обычный рабочий режим, в котором сервер принимает подключения пользователей).
  • В режиме приложения. Режим может использоваться для отладки разработчиком, в этом режиме сервер также будет принимать подключения пользователей и даже принимать обновления из Студии, однако, для работы такой режим не должен использоваться, так как он не дает гарантии запуска сервера при случайном завершении сеанса на нем или ошибке администратора.
  • В режиме выполнения команды из командной строки. В таком режиме, сервер запускается как приложение и передает команду из командной строки рабочему экземпляру сервера (обычно в режиме сервиса). Таким образом администратор может общаться с сервером без необходимости его перезапуска.

При запуске в режиме сервиса, командная строка сервера должна содержать ключ login и может также содержать имя сервиса, если оно отличается от стандартного sfsrv. Таким образом обычная командная строка для запуска в режиме сервиса выглядит следующим образом: <Путь с образу сервера>\sfsrv.exe login sfsrv. После указания на имя сервиса (второй параметр) можно добавить любое количество описанных ниже дополнительных ключей. При запуске в режиме приложения, командная строка сервера должна содержать ключ locallogin. После этого ключа, можно добавить любое количество описанных ниже дополнительных ключей. Если командная строка не содержит ни ключа login и ключа locallogin сервер запускается в режиме выполнения команды из командной строки.

Основные ключи и команды для запуска сервера из командной строки делятся на две категории: изменение параметров запуска сервера (при этом сервер запускается в рабочем режиме), и получение информации или изменение параметров уже рабочего сервера (при этом сервер запускается для передачи команды рабочему экземпляру сервера, получает от него ответ и завершает работу). Ниже дано описание для ключей из обеих групп:

  • Ключи, используемые для изменения параметров запуска сервера:
    • Ключ -FORCENOHASHMETA запускает сервер в режиме игнорирования хэш суммы в файле MetaDB.ini. Обычно при запуске сервер проверяет контрольную сумму файла, которая должна совпадать с переменной FileHash, располагающейся в начале файла. Если контрольная сумма и значение переменной не совпадают, сервер отказывается запускаться и выдает ошибку. Такая защита сделана, чтобы при модификации файла вручную или порче файла по каким-либо другим причинам сервер, руководствуясь неверным содержимым файла, не удалил какие-либо реквизиты таблиц, или не сделал какие-либо другие непоправимые изменения в базе данных, повлекшие за собой порчу данных. В реальном мире может произойти ситуация, однако, когда файл необходимо изменить вручную (что строго не рекомендуется), либо файл уже был изменен, а его оригинальная копия отсутствует. В этом случае, чтобы форсировать запуск сервера, к его командной строке можно добавить указанный ключ. Обычно такой запуск нужно совершить один раз в режиме приложения (после ключа locallogin). После запуска и проведения аудита, сервер обновит содержимое файла MetaDB.ini, и запишет туда корректную контрольную сумму, после этого сервер можно остановить и запустить в обычном рабочем режиме.
    • Ключ -NOUPDATES запускает сервер в режиме игнорирования входящих обновлений из Студии. Обновления по-прежнему будут приниматься, однако, не будут выполняться, а останутся в каталоге UpdateQueue каталога файлов проекта. Если в этом каталоге уже хранятся обновления, оставшиеся после неудачной попытки обновления (см. Заметки по возможным ошибкам обновления и методам их устранения, данный ключ позволит запустить сервер, который будет игнорировать содержимое каталога обновления. Ключ может использоваться разработчиком для отладки или в исключительных ситуациях.
    • Ключ -CFG=<Путь>\<Имя файла инициализации> запускает сервер с использованием основного файла инициализации, отличного от файла по умолчанию sfsrv.ini. Обычно такой подход удобен для разработчика, когда можно использовать текущий каталог и исполняемый файл сервера для запуска разных баз данных. В рабочей среде, использование одного исполняемого файла для запуска нескольких баз данных (файл будет загружен в память более одного раза с разными установками) строго не рекомендуется, так как в этом случае сервер будет вести один файл логов sfsrv.log для всех баз данных, но самое главное, невозможно будет произвести обновление исполняемого файла сервера или библиотеки из Студии, так как при остановке одного образа сервера, остальные останутся в памяти компьютера, что приведет к невозможности выполнить обновление.
    • Ключ -DUMPDATABASE=<Путь>\<Имя файла дампа базы данных> запускает сервер в режиме создания дампа содержимого базы данных, создает указанный дамп в эксклюзивном режиме (режиме одного пользователя), после чего завершает выполнение сервера. Рабочий режим с указанием данного ключа не инициируется. Для дополнительной информации, см. статью Дамп содержимого базы данных.
    • Ключ -RESTOREDATABASEDUMP=<Путь>\<Имя файла дампа базы данных> запускает сервер в режиме разворачивания дампа содержимого базы данных, очищает содержимое базы данных и загружает указанный дамп в базу данных в эксклюзивном режиме (режиме одного пользователя), после чего завершает выполнение сервера. Рабочий режим с указанием данного ключа не инициируется. Для дополнительной информации, см. статью Дамп содержимого базы данных.
    • Ключ -NOERASEDATABASE может использоваться совместно с ключом RESTOREDATABASEDUMP для указания на то, что серверу нет необходимости очищать базу данных перед ее восстановлением из дампа. Для некоторых СУБД (MySQL, MariaDB и т.д.), это может ускорить процесс восстановления базы данных. Если этот ключ будет применяться для восстановления в базу данных, в которой уже имеются записи, результатом станет база данных с неверными движениями, ошибкой непротиворечивости данных, либо процесс восстановления может завершиться с ошибкой.
  • Команды для управления установкой сервера (при запуске сервера с этими командами, формат запуска обычно следующий: sfsrv.exe <Команда> [<Компьютер>] [<Имя сервиса>], где <Компьютер> (по умолчанию локальный компьютер) -- DNS имя машины локальной сети для выполнения команды, <Имя сервиса> -- имя сервиса, под которым работает образ исполняемого файла сервера, обращение к которому требуется осуществить. Последние два параметра можно опустить.):
    • Команда INSTALL позволяет установить текущий исполняемый файл сервера в режиме сервиса, если он уже не установлен в этом режиме. Команда принимает произвольное количество дополнительных аргументов, которые включаются в командную строку вызова при запуске сервиса. Таким образом, к примеру, можно установить сервис с другим файлом инициализации: SFSRV.exe install . sfretail -cfg=sfsrvRetail.ini. Также это позволяет работать с несколькими серверами с помощью одного исполняемого файла sfsrv.exe. Однако, в этом случае нужно понимать, что при наличии обновления исполняемых файлов из Студии, программа установки обновления остановит только сервис, для которого происходят обновления, другие сервисы останутся работать, что не позволит выполнить замену исполняемого файла и обновление завершится с ошибкой. Поэтому, конфигурация, когда один исполняемый файл используются для нескольких сервером баз данных не рекомендуется к использованию (кроме как на машине разработчика).
    • Команда DEINSTALL позволяет отменить установку текущего исполняемого файла сервера в режиме сервиса.
    • Команда START позволяет запустить текущий исполняемый файл сервера в режиме сервиса (он должен быть предварительно установлен в этом режиме).
    • Команда STOP позволяет остановить текущий исполняемый файл сервера, установленный в режиме сервиса.
    • Команда RESTART позволяет остановить текущий исполняемый файл сервера, установленный в режиме сервиса, после чего запустить его снова.
    • Команда STATUS позволяет вывести статус текущего исполняемого файла сервера. Возможны три статуса:
      • Сервис запущен (started) -- если сервер установлен в режиме сервиса и сейчас находится в памяти.
      • Сервис установлен, но не запущен (installed) -- если сервер установлен в режиме сервиса и но в данный момент остановлен.
      • Сервис не установлен (not found) -- если сервер не установлен в режиме сервиса.
  • Команды для получения информации или изменения параметров работающего в данный момент сервера:
    • Команда LOGSTATE инициирует создание файла описания текущего состояния и отказа сервера. Обычно такой файл называется sfsrv.exe.ExceptionLog и создается в корне папки исполняемого файла сервера. Файл содержит логи стека всех потоков рабочего сервера, его внутреннее состоянии и прочее. Информация необходима разработчику для исправление найденной ошибки при работе сервера, часто такие ошибки очень трудно воспроизвести, поэтому, необходима информация именно из рабочего экземпляра сервера. Для полноты информации, файл sfsrv.map с именами функций должен находиться в каталоге запускаемого файла сервера.
    • Команда USERLIST выводит в командную строку список текущих пользователей сервера, запись о каждом пользователе начинается с новой строки, столбики разделены с помощью знака табуляции. Дается информация по правам пользователя, идентификаторе его сессии, его имени, его компьютере, времени его входа. Информация может использоваться администраторами, но обычно удобнее работать с такой информацией в визуальном клиенте.
    • Команда BACKUP должна сопровождаться наименованием задачи резервного копирования ("BACKUP <TaskName>"), см. статью Установки сервера. Команда инициирует выполнение задачи резервного копирования, а также ожидает ее завершения и выводит информацию по ее выполнению. Важно: команда с наименованием задачи должна быть помещена в двойные кавычки!