SYBASE8 (988810), страница 2
Текст из файла (страница 2)
1) БД master, model и tempdb инсталлируются на главном диске d_master.
2) БД sybsystemprocs инсталлируется на диске, который вы выбираете во время инсталляции.
3) В каждой БД создаются 3 сегмента: system, default и logsegment.
4) d_master - это диски памяти по умолчанию для всех пользовательских БД.
5) Если вы инсталлируете контрольную БД subsecurity, то вы записываете ее на свой собственный диск.
Системные таблицы, управляющие памятью
1) таблица SYSDEVICES;
2) таблица SYSUSAGES;
3) таблица SYSSEGMENTS;
-
таблица SYSINDEXES.
SYSUSAGES SYSDEVICES
Одна запись . . Одна запись
для каждого . . для каждого
фрагмента . N 1 . диска
БД N segmap
master
N segment
SYSSEGMENTS SYSINDEXES
Одна запись Одна запись
для каждого . 1 N . для каждой
сегмента . segment segment . таблицы,
. . индекса или
таблицы с
текстом
Рис. 1.
В таблице sysdevices для каждого диска хранятся два имени:
1) "логическое имя" (или "имя диска"), используемое во всех последующих командах управления памятью и хранимое в колонке name.
2) "физическое имя" - это имя диска в операционной системе, которое используется только в команде disk init.
Вы располагаете БД или журнал транзакций на одном или более дисках путем задания логического имени диски в командах create database или alter database. Структура log on в команде create database размещает журнал транзакций БД на отдельном диске (это должно обеспечить полное восстановление БД). Диск журнала также должен иметь запись в таблице sysdevices до использования структуры log on.
БД может располагаться на одном и более дисках, и на диске может хранится одна или более БД.
В таблице sysusages содержатся записи обо всех областях памяти, используемых для всех БД SQL-сервера. Команды create database и alter database выделяют новую память для БД путем добавления записи в таблицу sysusages каждого диска БД или фрагмента диска. Фрагмент - это порция памяти, выделяемая этими командами. Системные процедуры sp_addsegment, sp_dropsegment и sp_extendsegment изменяют значения колонки segmap для диска, который устанавливает соответствие с сегментом или уничтожает это соответствие.
В каждой БД есть таблица syssegments, содержащая список сегментов этой БД. Сегмент - это множество дисков БД и(или) фрагментов, доступных БД. Таблицы и индексы могут быть заданы в определенном сегменте, т.е. на определенном физическом диске, или на множестве физических дисков.
Команда create database заносит записи в syssegments по умолчанию. Системные процедуры sp_addsegment и sp_dropsegment добавляют и удаляют записи из syssegments.
Таблица sysindexes содержит список таблиц и индексов, а также сегмент, в котором хранятся эти таблицы, групповые и негрупповые индексы и все последовательности текстовых страниц.
Новые записи заносятся в sysindexes при выполнении команд create table и create index.
Инициализация дисков БД
Инициализацию дисков БД выполняет системный администратор с помощью команды disk init.
По этой команде происходит следующее:
1) определенному физическому дисковому устройству или файлу операционной системы назначается имя "database device";
2) заносится новый диск в master... sysdevices;
3) подготавливается диск для хранения БД.
Команда disk init разбивает диски БД на доступные участки объемом 256 страниц по 2 Кб (всего 0,5 Мб). В каждом таком участке команда disk init инициализирует первую страницу, как страницу, содержащую информацию о БД, расположенной на этом участке.
Замечание. После выполнения команды disk init нужно использовать команду dump database для дампирования БД master. Это делает восстановление более легким и надежным в случае выхода из строя БД master. Если вы добавляете диск и неудачно копируете master, вы можете восстановить изменения с помощью команды disk reinit.
Синтаксис команды disk init:
disk init name="<имя диска>",
physname="<физическое_имя>",
vdevno=<номер виртуального диска>,
size=<количество блоков>
[,vstart=<виртуальный адрес>,
cntrltype=<номер_контроллера>]
[,contiguous] (только в VMS)
Примеры команды disk init:
1) в системе UNIX: disk init
name="user_disk",
physname="/dev/rxyla",
vdevno=2, size=5120
2) в системе VMS: disk init
name="user_disk",
physname="disk$rose_1:[dbs]user.dbs",
vdevno=2, size=5120,
contiguous
Параметр vdevno определяет номер диска БД. Он должен быть уникальным среди номеров дисков SQL-сервера. Номер 0 соответствует диску d_master, на котором хранятся системные каталоги. Номер может принимать значения от 1 до 255, но наибольший номер должен быть меньше количества дисков БД в конфигурации вашей системы. Посмотреть это количество можно с помощью запуска процедуры: sp_configure devices, которая выдает таблицу, содержащую в последней колонке с именем run_value это значение. А посмотреть количество уже используемых номеров в vdevno можно с помощью процедуры sp_helpdevice.
Если команда disk init не выполнилась успешно по какой-либо причине, а вам нужно перезапустить disk init, вы должны либо изменить значение vdevno, либо перезапустить SQL-сервер.
Значение параметра size задается в блоках размером по 2 К. Чтобы задать 1 Мб, необходимо указать 512 таких блоков. Если вы планируете использовать новый диск для создания новой БД, то минимальное значение size больше, чем:
1) размера БД model (это 2 Мб или 1024 блока);
2) значение параметра конфигурации database size.
Для уничтожения диска БД необходимо использовать процедуру sp_dropdevice:
sp_dropdevice <имя диска>
Проектирование дисков по умолчанию
Для того, чтобы создать пул дисков БД по умолчанию, необходимо использовать команду sp_diskdefault после инициализации дисков с помощью disk init. Синтаксис этой команды:
sp_diskdefault <имя диска>, {defaulton | defaultoff}
Например: sp_diskdefault sprocdev, defaulton создает диск sprocdev, содержащее БД sybsystemprocs. Обычно SQL-сервер может иметь множество дисков по умолчанию.
Диски, которые должны создаваться не по умолчанию:
1) master диск;
2) диск для sybsecurity (защиты данных);
3) диск для журналов транзакций;
4) диски для больших БД, возможно имеющих сегменты.
Копирование дисков
Команда disk mirror копирует всю информацию на диске на другой физический диск. В случае выхода из строя одного диска, другой содержит копию всех транзакций.
Замечание. Нельзя копировать диск дампирования.
При выходе из строя диска копирования SQL-сервер делает этот диск некопируемым и выдает сообщения об ошибках. Системный администратор должен восстановить копируемость некопируемого диска.
Системному администратору необходимо решить, что копировать:
-
только журналы транзакций;
Пользовательская Диск
БД master
Журналы Копия журналов
транзакций транзакций
2) все диски на сервере;
3) выборочные диски.
В первом случае используется минимум физической дисковой памяти:
Если выходит из строя диск с пользовательской БД, то вы можете восстановить эту БД на другом диске, используя свои копии БД и копию журнала транзакций.
Если выходит из строя диск с master, то вы можете восстановить master с дампа БД master и восстановить копируемость журнала транзакций пользовательской БД.
Но эта конфигурация не обеспечивает непрерывное восстновление, потому что отсутствуют диски - копии БД master и пользовательской БД, и эти БД восстанавливаются с резервных копий.
Во втором случае все три диска: master, пользовательские БД и журналы транзакций имеют копии на аналогичных физических дисках, что обеспечивает непрерывное восстановление, т.е. в случае выхода из строя любого из трех дисков работа пользователя SQL-сервера не прервется.
master копия
диск à master-диска
пользовательская копия пользо-
БД à вательской БД
журнал à копия журнала
транзакций транзакций
В третьем случае все три диска также имеют свои копии, но в конфигурации используются не 2 диска, а 4. В этой конфигурации быстрее выполняется запись транзакций, так как журнал и пользовательская БД находятся на разных дисках.
master копия
диск à master-диска
журнал копия журнала
транзакций à транзакций
пользовательская à копия пользо-
БД вательской БД
Команды, используемые для дисков-копий:
1) disk mirror;
2) disk unmirror;
3) disk remirror.
Инициализация дисков-копий:
disk mirror
name="<имя диска>",
mirror="<физическое имя>"
[, writes={serial | noserial}]
[,contiguous] только в VMS
где <имя диска> - это имя диска, который вы хотите копировать (имя из команды disk init). Физическое имя - это полное имя диска-копии, который еще не инициализировался.
Пример:
disk mirror
name="tranlog",
mirror="/dev/rxyle"
По команде disk mirror добавляется запись в таблицу sysdevices в колонку mirrorname и изменяются значения статус-битов в вашей конфигурации системы.
Диск-копия автоматически перестает быть диском-копией при физическом сбое. Если вы хотите сменить диск-копию, то необходимо использовать команду:
disk unmirror
name="<имя диска>"
[,side={primary | secondary}]
[,mode={retain | remove}]