Инициализация серверных устройств

Итак, мы научились разбивать физические диски на разделы и распределять серверные устройства по разным дисковым контроллерам. Теперь можно начинать знакомиться с процессом инициализации раздела физического диска, в результате которого в этом разделе создается серверное устройство и он становится доступным для использования сервером.

Команда сервера disk init

Прежде чем любое новое серверное устройство станет доступным серверу, его необходимо инициализировать командой disk init вне зависимости от того, что представляет собой данное устройство: неформатированный раздел диска или файл операционной системы. Ниже приводится формат команды disk init.

disk init
name = "device_name",
physname = "physical_name",
vdevno = vlrtual_device_number,
size = number_of_blocks

Название устройства (device_name)

Рассмотрим функции всех параметров команды disk init. Название устройства (device_name) используется сервером для обозначения создаваемого устройства, в то время как физический адрес устройства (physical_name) определяет назначаемый устройству небуферизованный раздел диска или файл операционный системы, тем самым указывая, как это устройство будет выглядеть с точки зрения операционной системы.

Таким образом, команда disk init устанавливает взаимосвязь между серверным устройством, известным серверу, и соответствующей областью физического диска, так или иначе известной операционной системе. В свою очередь, параметр virtual_device_number является номером данного устройства, однозначно определяющим его среди других серверных устройств.

Наконец, параметр number_of_blocks устанавливает размер создаваемого серверного устройства и указывается в виде количества 2 Кбайт страниц. Как отмечалось ранее, серверному устройству может быть установлен любой размер, не превышающий размер назначенного ему небуферизованного дискового раздела.

Итак, название устройства используется для его адресации сервером и указывается в таких, например, командах, как create database, alter database и др. Администратору сервера следует придерживаться определенной схемы именования серверных устройств.

Рекомендуется следующий простейший подход. Войдите в серверную машину под именем привилегированного пользователя “root” и выдайте командой format список всех имеющихся в системе дисковых накопителей, после чего при создании логических дисковых устройств сервера добавляйте к системным названиям дисков номера соответствующих разделов.

К примеру, команда format сообщает вам, что в системе имеются дисковые накопители с именами c0t0d0 и c0t0d1 — c0t0d6. Тогда при инициализации раздела 8 физического диска cOtOdl в качестве названия создаваемого устройства следует указать name = “c0t0d1s3″. Хотя то же самое название уже содержится в имени специального системного файла /dev/rdsk/c0t0d1s3, используемого для обращения к данному разделу диска, при назначении названий устройств необходимо руководствоваться именно результатами работы команды format.

При назначении серверным устройствам файлов операционной системы нет необходимости следовать какой-либо фиксированной схеме выбора названий таких устройств, поскольку при возникновении ошибок сервер всегда сообщает полное имя файла, назначенного серверному устройству.

По этому имени нетрудно определить, на каком физическом диске находится данный файл (серверное устройство).

Адрес устройства (physical_name)

Физический адрес устройства определяет его местонахождение в операционной системе. Для небуферизованного раздела диска физическим адресом является имя специального системного файла, используемого при доступе к этому разделу. Напомним, что доступ к диску может осуществляться в одном из двух режимов: блоковом или побайтовом, каждому из которых соответствует отдельный системный файл.

При задании адреса устройства SQL Server, находящегося на небуферизованном разделе физического диска, необходимо указывать имя системного файла, задающего побайтовый доступ к этому разделу.

Это имя зависит от конкретной платформы, и его необходимо уточнить у системного администратора. В нашем случае такие файлы находятся в каталоге /dev/rdsk файловой системы, где буква “г” в названии каталога указывает на побайтовый доступ к соответствующим дисковым разделам. Таким образом, побайтовый доступ к разделу 1 диска cOtOdO осуществляется через файл /dev/rdsk/cOtOdOs1.

Именно это имя и следует задать в качестве физического адреса серверного устройства, находящегося в данном разделе. При назначении серверному устройству файла операционной системы в качестве адреса указывается полное имя файла (/<полный путь>/<имя_файла>), однозначно определяющее файловую систему, к которой принадлежит данный файл.

Номер виртуального устройства (vdevno)

Назначение номера виртуального устройства выглядит не вполне очевидным, а ошибочное значение этого параметра может заблокировать создание нового серверного устройства. С точки зрения сервера каждое подобное устройство состоит из определенного числа N дисковых 2 Кбайт страниц с номерами от 0 до N1.

Однако серверу необходимо иметь возможность индивидуально адресовать каждую страницу каждого серверного устройства. Именно здесь сервер и использует значение параметра vdevno в комбинации с номером страницы в пределах данного устройства.

Таким образом, в действительности параметр vdevno играет очень важную роль, и при каждом вызове команды disk init
сервер проверяет, не совпадает ли указанное значение параметра vdevno с номером одного из уже существующих устройств, список которых (с указанием номеров) можно распечатать командой sp_helpdevice . Серверное устройство создать невозможно, если имеет место любая из перечисленных ниже ситуаций:

• указанное значение vdevno
• уже используется другим серверным устройством
• задавалось в одной из предыдущих попыток выполнить команду disk init, которая завершилась неудачей
• использовалось ранее удаленным серверным устройством
• превышает максимально допустимое число серверных устройств (определяемое параметром конфигурации devices)

Указано уже используемое значение vdevno
Для вывода используемых значений номеров виртуальных устройств используйте команду sp_helpdevice (без дополнительных аргументов). Кстати, номера устройств не хранятся в системной таблице sysdevices, а специально вычисляются в процессе выполнения процедуры sp_helpdevice , поэтому их нельзя получить непосредственной выборкой записей из таблицы sysdevices.

Предыдущая команда disk init закончилась неудачей
Значение параметра vdevno не может быть повторно использовано вплоть до следующего перезапуска сервера, если оно было указано в одном из предыдущих вызовов команды disk init, завершившихся неудачей (например, из”за слишком большого размера устройства, превышающего объем раздела диска).

Значение vdevno совпадает с виртуальным номером ранее удаленного устройства
ЕСЛИ после последнего перезапуска сервера вы удалили серверное устройство, его номер не может быть использован до следующего перезапуска сервера. Хотя серверные устройства создаются командой сервера disk init, их удаление производится с помощью хранимой процедуры sp_dropdevice.

Превышение допустимого числа серверных устройств
Максимально допустимое число серверных устройств определяется параметром конфигурации сервера devices, значение которого можно узнать с помощью команды sp_configure. По умолчанию параметр devices имеет значение, равное 10, что позволяет создавать устройства с виртуальными номерами от 0 до 9 включительно. К сожалению, даже если команда disk init завершается неудачей из-за выхода значения параметра vdevno из допустимого диапазона, сервер выдает сообщение об отсутствии в указанном физическом разделе диска достаточного пространства для размещения создаваемого устройства.

При получении подобного сообщения в первую очередь проверьте, не указано ли слишком большое значение параметра vdevno.

Для увеличения максимально допустимого числа устройств после выполнения команды sp_c on figure произведите перезапуск сервера. Помните, что увеличение параметра devices одновременно увеличивает объем оперативной памяти, необходимой серверу. Кроме того, максимальное значение параметра vdevno на единицу меньше величины параметра devices, причем устройству master всегда соответствует vdevno = 0.

Наконец, в максимальное число серверных устройств, задаваемое параметром devices, не входят устройства вывода дампов. Так что при их создании можно не беспокоиться о значениях параметров devices или vdevno.

Количество блоков (number_of_blocks)

Параметр number_of_blocks указывает размер создаваемого серверного устройства, задаваемый в виде числа 2 Кбайт страниц. При работе с сервером используются различные единицы измерения дискового пространства: блоки, 2 Кбайт страницы, а также кластеры (allocation units).

Они представляют собой область диска, распределяемую сервером за один прием (и равную 256 страницам). При работе с командой disk init блок равен одной 2 Кбайт странице.

Для определения максимально возможного размера серверного устройства с помощью команды prtvtoc /dev/rdsk/ узнайте размер соответствующего раздела физического диска. В команде указывается название диска в том виде, как оно известно операционной системе, например prtvtoc /dev/rdsk/cOtOdOs1.

Фактически параметр команды prtvtoc совпадает с полным именем системного файла, используемого для доступа к одной из секций физического диска. Разумеется, администратор сервера (пользователь с именем Sybase) должен иметь необходимые полномочия на доступ к этому файлу. Команда prtvtoc выдает список всех разделов соответствующего физического диска с указанием количества секторов и цилиндров, выделенных каждому разделу.

В первую очередь нас интересует количество секторов в разделе, назначаемом создаваемому серверному устройству. Для определения размера раздела в байтах количество его секторов необходимо умножить на 512 байт, после чего результат перевести в мегабайты делением на величину 1024*1024 (которая в точности равна 1 Мбайт).

Скорее всего, размер раздела не будет равен целому числу мегабайт, поэтому у него необходимо отбросить дробную часть и затем преобразовать полученный ответ в количество 2 Кбайт страниц, указываемых в команде disk init. При задании размеров серверного устройства необходимо представлять себе, каким образом сервер распределяет дисковое пространство в процессе выполнения команд create database и alter database.

При создании или расширении базы данных сервер выделяет из свободного пространства устройства необходимое число 0,5 Мбайт кластеров — единиц размещения (allocation units). Каждый из них содержит 256 2 Кбайт страниц. Поскольку команды create database и alter database позволяют указывать в качестве размера базы данных только целое число мегабайт, существование 0,5 Мбайт кластеров редко проявляется на практике.

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

В подобном случае сервер выделяет место на других устройствах, используя все имеющееся в них свободное пространство (с точностью до одного кластера). Если при создании какого”либо из этих устройств в команде disk init было указано количество страниц, равное дробному числу мегабайт (хх.уу Мбайт), и дробная часть .уу превышает 0,5 Мбайт, то сервер сможет распределить в этом разделе один дополнительный кластер в дополнение к целому числу доступных мегабайт.

Может быть, вы никогда этого и не заметите, но выделение базе данных дополнительного кластера грозит потерей данных при восстановлении базы данных из дампа (после сбоя сервера или при переносе базы данных на новый сервер). Дело в том, что перед загрузкой дампа необходимо заново создать восстанавливаемую базу данных, причем здесь ее размер указывается только в виде целого числа мегабайт.

Однако загрузка дампа эквивалентна физическому копированию страниц базы данных с сохранением последовательности, в которой они находились в прежней базе данных. В рассматриваемом примере никто не может гарантировать точного соблюдения этой последовательности, поскольку в новую базу данных невозможно включить дополнительный 0,5 Мбайт кластер. Поэтому при задании размеров серверных устройств в команде disk init необходимо указывать количество страниц, всегда равное максимальному целому числу мегабайт, имеющемуся в определяемом разделе.

При назначении серверному устройству файла операционной системы необходимо выяснить общий объем файловой системы и определить, не нужно ли зарезервировать в этой файловой системе свободное пространство для других файлов. Затем размер всей области файловой системы, распределяемой создаваемому устройству, следует преобразовать в количество 2 Кбайт страниц и указать полученный результат в команде disk init.

Общий объем файловой системы и размер свободного пространства легко узнать с помощью системной команды dfk.

Сложнее выяснить, какие еще файлы понадобится включить в эту же файловую систему. Проще всего выделить отдельную файловую систему для каждого серверного устройства, которому назначается файл операционной системы, и затем указать в команде disk init количество страниц, соответствующее всему объему этой файловой системы (точнее, максимальному целому числу мегабайт, которое можно разместить в этом объеме).

Заключительные замечания по команде disk init

Прежде всего запомните, что команда disk init никогда не применяется для создания серверного устройства master, содержащего одноименную системную базу данных. Для этого в комплект поставки SQL Server включена отдельная программа buildmaster. Она автоматически вызывается программой установки sybinit при инсталляции сервера.

Кроме того, команда disk init никогда не должна применяться по отношению к разделу, уже содержащему серверное устройство master, поскольку это приведет к полному уничтожению сервера. Самое опасное в подобной ситуации то, что после разрушения серверного устройства master сервер еще некоторое время продолжает функционировать.

При каждом вызове команды disk init необходимо проверять, в каком разделе находится устройство master, чтобы убедиться, что выполняемая команда не затронет этот раздел. В принципе, сервер не должен позволить вам повторно
инициализировать устройство master.

Тем не менее не следует всецело полагаться на механизмы безопасности сервера. Наконец, команда disk init также не применяется при инициализации раздела, назначаемого зеркальной копии какого-нибудь серверного устройства. Для этой цели используется команда disk mirror.

После успешного завершения команды disk init новое серверное устройство не включается автоматически в набор серверных устройств, используемых по умолчанию. Подобные устройства служат для размещения объектов баз данных, при создании которых не указывается какое-то определенное серверное устройство.

В большинстве случаев вообще не следует предусматривать на сервере используемые по умолчанию устройства, поскольку для оптимизации производительности сервера и обеспечения целостности информации каждая база данных должна располагаться как минимум на одном определенном серверном устройстве. Если вам все же потребуется сделать устройство используемым по умолчанию, то после выполнения команды disk init вызовите хранимую процедуру sp_diskdefault.

Успешное выполнение команды disk init невозможно при отсутствии достаточных прав доступа к специальным системным файлам, контролирующим побайтовый ввод/вывод в соответствующие небуферизованные разделы физического диска. К примеру, для создания серверного устройства в разделе 1 физического диска cOtOdO файл /dev/rdsk/cOtOdOs1 должен принадлежать администратору сервера (обычно он входит в систему в качестве пользователя с именем “sybase”).

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100