SQL Server 2000

Создание баз данных

Разбить на страницы
Показывать лекцию целиком

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

Структура базы данных

Каждая база данных SQL Server состоит из набора файлов операционной системы. Эти файлы могут группироваться в группы файлов, что облегчает их администрирование, помогает в размещении данных и повышает производительность. В данном разделе вы познакомитесь с файлами и группами файлов SQL Server и узнаете об их значении для создания баз данных.

Файлы

Как мы уже сказали, база данных SQL Server состоит из набора файлов операционной системы. Файл базы данных может быть либо файлом данных, либо файлом журнала. Файлы данных служат для хранения данных и объектов, таких как таблицы, индексы, представления, триггеры и хранимые процедуры. Имеется два типа файлов данных: первичные и вторичные. Файлы журналов служат только для хранения информации из журналов транзакций. Место на диске, отводимое для файлов журналов всегда должно администрироваться отдельно от места, отводимого для данных, и никогда не должно быть частью файла данных.

Каждая база данных должна создаваться хотя бы с одним файлом данных и с одним файлом журнала; файлы не могут быть использованы более чем в одной базе данных – т.е., базы данных не могут разделять файлы (использовать файлы совместно). В приведенном ниже перечне указаны три типа файлов, которые могут быть использованы в базах данных:

  • Первичные файлы данных. Первичные файлы данных содержат всю информацию для запуска базы данных и ее системных таблиц и объектов. Они указывают на другие файлы, созданные в базе данных. Они могут также содержать таблицы и объекты, задаваемые пользователем, хотя это и не обязательно. Каждая база данных может иметь ровно один первичный файл. Для этих файлов рекомендуется применять расширение .mdf.
  • Вторичные файлы данных. Вторичные файлы данных не являются обязательными. Они могут хранить данные и объекты, которые отсутствуют в первичном файле. База данных может вообще не иметь ни одного вторичного файла (если все ее данные хранятся в первичном файле). Можно иметь ноль, один или несколько вторичных файлов. Для некоторых баз данных требуется иметь несколько вторичных файлов, чтобы размещать данные по нескольким отдельным дискам. (Это не RAID-массивы дисков, как вы увидите из следующего раздела). Для этих файлов рекомендуется применять расширение .ndf.
  • Файлы журналов транзакций. Файлы журналов транзакций хранят всю информацию из журнала транзакций, служащую для восстановления базы данных. Каждая база данных должна иметь хотя бы один файл журнала, а может иметь и несколько файлов журналов. Для этих файлов рекомендуется применять расширение .ldf.
  • Примечание. Максимальный размер файлов базы данных SQL Server составляет 32 терабайта для файлов данных и 4 терабайта для файлов журналов.

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

    Но как же данные смогут размещаться по многим файлам данных? А вот для этого и применяются группы файлов.

    Группы файлов

    При помощи групп файлов можно группировать файлы, это нужно для администрирования и размещения данных. (Группы файлов похожи на сегменты в Microsoft SQL Server 6.5 и в более ранних версиях.) Применение групп файлов позволяет повысить производительность базы данных, т.к. становится возможным создание базы данных, размещенной на многих дисках, на многих контроллерах и на RAID-массивах. (Про RAID-массивы см. лекцию 5.) При помощи групп файлов можно создавать таблицы и индексы, размещаемые на заданных физических дисках, контроллерах и массивах дисков. В данной лекции мы рассмотрим некоторые примеры такой работы.

    Имеются три типа групп файлов со следующими основными свойствами:

  • Первичные группы файлов. Содержат первичный файл данных и все остальные файлы, не помещенные в другие группы файлов. К первичной группе файлов базы данных отнесены системные таблицы, задающие пользователей, объекты и полномочия для этой базы данных. SQL Server автоматически создает эти системные таблицы всякий раз, когда вы создаете базу данных.
  • Пользовательские группы файлов. Все группы файлов, заданные пользователем в процессе создания (или последующего изменения) базы данных. Создавая таблицу или индекс, вы можете задать, чтобы они помещались в заданную пользовательскую группу файлов.
  • Стандартная группа файлов. Содержит все страницы для таблиц и индексов, у которых при создании не была задана конкретная группа файлов. По умолчанию, стандартной группой файлов является первичная группа файлов. Члены роли db_owner могут менять стандартную группу файлов, делая стандартной ту либо иную группу файлов. В каждый момент времени стандартной может быть лишь какая-то одна группа файлов, и, повторим, если стандартная группа файлов не была задана явно, то первичная группа файлов автоматически будет стандартной. Чтобы изменить стандартную группу файлов, воспользуйтесь следующей командой Transact SQL (T-SQL):
    ALTER DATABASE имя_базы_данных MODIFY FILEGROUP имя_группы_файлов DEFAULT
    (Применять T-SQL вы научитесь в последних лекциях данного курса.) Вы можете пожелать изменить стандартную группу файлов так, чтобы ею стала одна из ваших пользовательских групп файлов, тогда все объекты, создаваемые в вашей базе данных, будут автоматически создаваться в указанной вами группе файлов, и вам не придется всякий раз задавать это.
  • Чтобы повысить производительность, вы можете управлять размещением данных, создавая таблицы и индексы в разных группах файлов. Так, вы можете пожелать поместить таблицу, доступ к которой бывает часто, в группу файлов на большом массиве дисков (например, составленным из 10 дисков), а другую таблицу, доступ к которой бывает реже, поместить в другую группу файлов, расположенную на отдельном, меньшем массиве дисков (например, из 4 дисков). Таким образом, можно размещать таблицы, доступ к которым происходит чаще, по большему количеству дисков, позволяя этим дискам осуществлять параллельный ввод-вывод. Если вы не применяете массивы RAID и у вас имеется несколько дисковых накопителей, то у вас остается возможность применения групп файлов. Например, вы можете создать по отдельному файлу для каждого дискового накопителя, разместив каждый файл в отдельную пользовательскую группу файлов. Тогда вы сможете поместить каждую таблицу или индекс в отдельный файл (и на отдельный диск), назначив группу файлов при создании этой таблицы или индекса. Пример размещения файлов показан на рис. 9.1: один первичный файл данных размещен в первичной группе файлов на диске C, по одному вторичному файлу данных размещено в каждой из пользовательских групп файлов (FG1 и FG2) на дисках E и F и один файл-журнал размещен на диске G. После этого вы можете создавать таблицы и индексы в каждой из пользовательских групп файлов – FG1 или FG2.

    (рис 9.1) Применение групп файлов для управления размещением данных

    А может быть, вы будете применять пользовательскую группу файлов для распределения данных по нескольким дискам. На рис. 9.2 показана пользовательская группа файлов FG1, состоящая из двух вторичных файлов данных, один из которых находится на диске E, а другой – на диске F (диске G размещен файл-журнал, а на C – первичный файл). В этом примере мы снова предполагаем, что каждый файл базы данных создан на отдельном физическом дисковом накопителе, и у нас нет аппаратной реализации RAID. Таблицы и индексы, созданные в этой пользовательской группе файлов, будут размещены сразу на двух дисках, потому что SQL Server применяет стратегию пропорционального расходования ресурсов.

    (рис 9.2) Применение одной группы файлов для распределения данных по нескольким дискам

    Если вы применяете RAID-систему, то вам может потребоваться распределить данные из большой таблицы по нескольким логическим дискам-массивам, сконфигурированным на двух или на нескольких RAID-контроллерах. Для этого вам надо будет создать пользовательскую группу файлов, с файлами, соответствующими каждому из этих контроллеров. Допустим, вы создали два вторичных файла данных, каждый – на своем массиве дисков, а каждый логический массив состоит из восьми физических дисков и сконфигурирован как RAID 5. Эти два массива обслуживаются двумя отдельными RAID-контроллерами. Чтобы создать таблицу или индекс, располагающуюся на обоих этих контроллерах (т.е. на всех 16 дисковых накопителях), создайте одну пользовательскую группу файлов, в которую поместите оба файла, а затем создайте таблицу или индекс в этой группе файлов. Пользовательская группа файлов FG1 распределена по 16 физическим дискам (двум логическим дискам – RAID-массивам) (см. рис. 9.3). Там также показаны первичный файл данных на другом контроллере (с RAID 1) и файл журнала еще на одном контроллере (с RAID 10).

    SQL Server позволяет оптимизировать распределение ваших данных по дисковым накопителям, за счет автоматического пропорционального расслоения (распределения) данных по всем файлам группы файлов. "Расслоение" (striping) – это термин, применяемый для описания распределения данных по нескольким файлам базы данных. Расслоение файлов SQL Server работает независимо от расслоения дисков RAID-массивов и, как вы видели из наших примеров, может применяться как в сочетании с RAID, так и самостоятельно.

    Чтобы обеспечить расслоение данных, SQL Server записывает данные в файлы в объемах, пропорциональных свободному месту, остающемуся в файлах (относительно свободному месту в других файлах). Место для таблиц и индексов распределяется в виде экстентов (extents). Экстент – это единица для измерения места на диске, один экстент состоит из 8 страниц, а одна страница состоит из 8 Кб, так что один экстент состоит из 64 Кб. Допустим, нужно распределить 5 экстентов на файл F1, в котором свободно 400 Мб, и на файл F2, в котором свободно 100 Мб; тогда 4 экстента будут распределены на файл F1 и один экстент распределен на файл F2. Оба файла заполнятся до конца примерно одновременно, благодаря чему операции ввода-вывода будут распределяться по дискам более равномерно. Пропорциональное заполнение будет применяться и для пользовательских, и для первичных групп файлов. Если задать все файлы в группе файлов имеющими одинаковый начальный размер, то данные, по мере их загрузки, будут распределяться по файлам равномерно. Этот метод, когда в группах создаются файлы одинакового начального размера, можно порекомендовать для равномерного распределения данных по дисковым накопителям и, одновременно с этим, для равномерного распределения операций ввода-вывода.

    (рис 9.3) Распределение пользовательской группы файлов по нескольким RAID-контроллерам

    Другая польза от применения групп файлов состоит в том, что SQL Server может выполнять резервные копирования базы данных файлами или группами файлов. Если ваша база данных слишком велика, чтобы ее можно было скопировать за один раз, то вы можете копировать ее по частям. (О методике такого резервного копирования см. лекцию 32.)

    Правила и рекомендации

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

  • Файлы и группы файлов не могут использоваться более чем одной базой данных.
  • Каждый файл может быть членом только одной группы файлов.
  • Данные и информация из журнала транзакций не могут размещаться в одном и том же файле. Работа с дисковой памятью для журнала транзакций и с дисковой памятью для данных производится по-разному.
  • Журнал транзакций никогда не является частью группы файлов.
  • Если создать файл, который будет являться частью базы данных, то его нельзя будет переместить в другую группу файлов. Если вы хотите переместить файл, то его придется уничтожить и создать снова.
  • В дополнение к этим правилам имеются методики работы с файлами и группами файлов, про которые известно, что они дают хорошие результаты. Ниже приведены несколько рекомендаций общего характера, которые помогут спроектировать вашу базу данных:

  • Большинство из баз данных обладает высокой производительностью, имея лишь первичный файл данных и один файл журнала транзакций. Такая конструкция базы данных рекомендуется для баз данных, не требующих особенно интенсивного ввода-вывода. Если же ваша система требует интенсивного ввода-вывода и ей нужно много дисковых накопителей, то вам, вероятно, понадобится применять пользовательские группы файлов, при помощи которых вы сможете распределить данные по нескольким дискам или массивам дисков, что обеспечит параллельный ввод-вывод.
  • Всегда размещайте файлы журналов на отдельных физических дисках, а не на дисках, содержащих файлы данных (см. лекцию 5).
  • Если вам нужно применять много файлов с данными, то используйте первичный файл данных только для системных таблиц и объектов, а для пользовательских данных и объектов создайте один или несколько вторичных файлов данных.
  • Создавайте файлы и группы файлов так, чтобы они охватывали как можно больше физических дисков – это повысит возможности параллельной работы ввода-вывода для дисков и максимизирует производительность.
  • Размещайте некластеризованные индексы интенсивно используемых таблиц в отдельных группах файлов не на тех же самых физических дисках, в которых содержатся сами данные из таблиц. Эта методика тоже позволяет осуществлять параллельный ввод-вывод для дисков. (Про индексы см.лекцию 17.)
  • Разные таблицы, которые применяются в общих для них запросах, нужно по возможности размещать на разных физических дисках, тогда станет возможен параллельный ввод-вывод для дисков при работе алгоритма поиска данных.
  • Последние две рекомендации могут оказаться неверными для систем, применяющих тома RAID с большим количеством дисковых накопителей. Если у вас имеется много дисковых накопителей, то может оказаться, что таким же или лучшим решением станет распределение индексов и таблиц по максимально возможному количеству дисковых накопителей, чтобы обеспечить максимально большую параллельность ввода-вывода, допустимую для всех таблиц и индексов.

    Автоматический рост файлов

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

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

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

    Максимальный размер файла означает именно это – максимальный размер, до которого разрешается расти файлу. Эта величина тоже задается при создании файла, но может быть изменена впоследствии при помощи Enterprise Manager или команды ALTER DATABASE. Если максимальный размер файла не задан, то SQL Server будет увеличивать размер файла до тех пор, пока не заполнится все место на диске. Чтобы не истратить все место на диске (а в этом случае произойдет ошибка в работе SQL Server), задавайте максимальный размер для каждого файла. Если даже файл дорастет до максимального размера, вы сможете увеличить этот максимальный размер при помощи оператора ALTER DATABASE. Вы также можете создать еще один файл на том же (если там имеется свободное место) или на другом диске. Новый файл должен обязательно быть в той же самой группе файлов, что и первоначальный файл. Если позволить файлу расти без ограничений, как это задано по умолчанию, то вам придется создавать файл на другом диске, имеющем свободное место.

    Как правило, нужно задавать автоматический рост файлов и максимальные размеры файлов. При создании базы данных максимальные размеры файлов задавайте такими, до которых, по вашему мнению, они окажутся способными вырасти. Несмотря на возможность автоматического роста файлов, все равно нужно регулярно следить за ростом базы данных – ежедневно или еженедельно, возможно лишь для того, чтобы вам самому быть в курсе. Информацию о росте базы данных можно хранить, например, в электронной таблице; вы сможете экстраполировать эту информацию и предсказать, например, сколько места на дисках понадобится через месяц, через год, через пять лет и так далее. Следя за заполнением дисков, вы узнаете, подвергались ли ваши файлы автоматическому росту, и если да, то когда, и сможете понять, когда потребуется добавить в базу данных дополнительные файлы. Такое наблюдение за заполнением дисков поможет вам избежать таких явлений, как достижение максимального размера файла или расходование всего свободного места на диске.

    Системные базы данных

    При инсталляции SQL Server создаются четыре системных базы данных: master (главная), tempdb (временная), model (модель) и msdb.

  • master. Хранит информацию уровня всей системы, информацию инициализации SQL Server и настройки конфигурации SQL Server. Эта база данных также хранит все учетные записи для входа в систему, информацию о наличии всех остальных баз данных и о местоположении первичного файла для всех пользовательских баз данных. Всегда имейте свежую копию базы данных master – главной базы данных.
  • tempdb. Хранит временные таблицы и временные хранимые процедуры. Эта базы данных используется также для хранения прочей временной информации, нужной для работы SQL Server, например для сортировки данных. При каждом запуске SQL Server создается новая чистая копия базы данных tempdb. Затем, если нужно, эта база данных растет автоматически. Если для хранения ваших временных данных требуется много места, то можно увеличить стандартный размер этой базы данных, применив команду ALTER DATABASE.
  • model.Служит образцом (шаблоном) для всех остальных баз данных, создаваемых на данной системе, в том числе и для tempdb. При создании базы данных ее начало создается как копия содержимого базы данных model, а всё остальное заполняется пустыми страницами. База данных model обязательно должна иметься в системе, потому что она применяется для воссоздания базы данных tempdb при каждом запуске SQL Server. Вы можете изменять базу данных model, добавляя туда пользовательские (определяемые пользователем) типы данных, таблицы и т.д. Если вы измените базу данных model, то каждая созданная вами база данных будет иметь измененные атрибуты.
  • msdb. Содержит таблицы, которые SQL Server Agent применяет для планирования заданий и оповещений и для записи операторов (здесь операторы – это люди, которые отвечают за работу заданий и оповещений). Эта база данных также хранит таблицы, применяемые для репликации.
  • Каждая из этих системных баз данных имеет свои собственные первичный файл данных и файл журнала. Системные базы данных хранятся в папке для хранения системных файлов, назначенной вами при инсталляции SQL Server.

    Создание баз данных

    SQL Server предлагает три метода для создания баз данных: воспользоваться мастером Create Database Wizard, создать базу данных при помощи SQL Server Enterprise Manager или применить команду CREATE DATABASE, которую можно сохранить в файле и запускать как сценарий. Эти три метода будут описаны ниже, в следующих трех подразделах. Вы должны знать, что мастер Create Database Wizard обладает некоторыми ограничениями. Так, он помещает все созданные им файлы данных на один дисковый накопитель, в одну заданную вами папку. При использовании этого мастера вы не сможете поместить файлы данных в другое физическое местоположение (ни на другие дисковые накопители, ни в другие папки). Вы можете поместить файлы журналов на диск или в папку, отличающуюся от диска или папки для файлов данных, но, опять таки, только в одно физическое местоположение. Нельзя задать пользовательские группы файлов, и все файлы получат одинаковые настройки для роста. Из-за этих ограничений мастер Create Database Wizard является наилучшим решением, когда вам нужно создать в базе данных только один первичный файл данных и один файл для журнала транзакций. (С другой стороны, в дальнейшем вы всегда можете добавить в базу данных файлы и группы файлов, если они вам понадобятся.)

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

    Применение мастера Create Database Wizard

    Для тех, кто еще не имеет достаточного опыта, применение мастера Create Database Wizard может оказаться наиболее простым способом создания баз данных. Если его ограничения, о которых говорилось выше, не влияют на требования вашей задачи то, конечно, следует пользоваться этим методом создания баз данных. Для создания базы данных при помощи мастера Create Database Wizard, выполните следующие действия.

  • Запустите SQL Server Enterprise Manager и выберите сервер, на котором вы хотите создать базу данных. Чтобы выбрать сервер, сначала раскройте папку Microsoft SQL Servers (для этого нажмите на значок "+" слева от имени папки). Раскройте папку SQL Server Group, а затем нажмите на имя нужного вам сервера. В меню Tools выберите Wizards. Раскройте Database (см. рис 9.4(рис 9.4) Экран Select Wizard (Выбор мастера)
  • Чтобы запустить мастер Create Database Wizard, дважды щелкните на Create Database Wizard. Откроется стартовый экран мастера (рис 9.5(рис 9.5) Стартовый экран мастера Create Database Wizard
  • Нажмите на Next, и вы перейдете к экрану Name the Database and Specify its Location (Дайте имя для базы данных и укажите ее местоположение) (рис 9.6(рис 9.6) Экран Name the Database and Specify its Location (Дайте имя для базы данных и укажите ее местоположение)Примечание. На остальных рисунках этого раздела показано создание базы данных с именем MyDB, имеющей первичный файл данных в C:\mssql2k\MSSQL\data и один файл журнала в F:\mssql2k\MSSQL\data.
  • Появится экран Name the Database Files (Дайте имена файлам базы данных) (рис. 9.7). В этом экране вы можете ввести с клавиатуры имена и начальные размеры для каждого из файлов вашей базы данных. Первичный файл базы данных создается автоматически и получает в качестве префикса своего имени имя базы данных. Вы можете либо согласиться с этим именем, либо ввести с клавиатуры другое имя. Первичный файл данных имеет расширение .mdf. Если вы имеете какое-либо представление о будущем размере вашей базы данных, то введите сейчас этот размер в поле для задания начального размера (Initial Size). Если вы не знаете будущий размер вашей базы данных, то оставьте размер, указанный по умолчанию; вы сможете изменить его позднее при помощи команды ALTER DATABASE. Любые файлы, которые вы создадите в дополнение к первому файлу (первичному), будут являться вторичными файлами и автоматически получат расширения .ndf. Все созданные здесь файлы будут помещены в первичную группу файлов. Пользуясь мастером Create Database Wizard, пользовательские группы файлов создавать невозможно.(рис 9.7) Экран Name the Database Files (Дайте имена файлам базы данных)В нашем примере мы оставили заданный по умолчанию первичный файл MyDB_Data и добавили вторичный файл, MyDB_Data2. Оба этих файла будут помещены в одно и то же место, которое вы указали на шаге 3. (Если вы не хотите, чтобы все файлы данных размещались на одном диске и в одной и той же папке и группе файлов, не продолжайте работу мастера, а создайте базу данных одним из методов, описанных в следующих разделах.) Для продолжения работы мастера нажмите на Next.
  • Появится экран Define the Database File Growth (Настройте рост файлов базы данных) (рис 9.8(рис 9.8) Экран Define the Database File Growth (Настройте рост файлов базы данных)
  • Появится экран Name the Transaction Log Files (Дайте имена файлам журнала транзакций). Этот экран выглядит так же, как и экран Name the Database Files, но он относится к файлу журнала. (Помните, что журнал транзакций хранит записи обо всех изменениях базы данных, которые понадобятся при восстановлении базы данных при отказе системы.) Первый файл журнала транзакций создается автоматически и получает в качестве префикса имени имя, заданное для базы данных. Вы можете согласиться с этим именем, а можете ввести с клавиатуры и другое. Данные журнала транзакций хранятся в файле с расширением .ldf. Если надо, вы можете добавить дополнительные файлы журналов. Если вы имеете какое-либо представление о будущем размере журнала транзакций, то введите сейчас этот размер, а если не знаете, то оставьте размер, указанный по умолчанию (вы сможете изменить его позднее при помощи команды ALTER DATABASE ). Для продолжения нажмите на Next.
  • Появится экран Define the Transaction Log File Growth (Настройте рост файлов журнал транзакций). Этот экран выглядит так же, как и экран Define the Database File Growth, но в нем задаются настройки роста для файла журнала. Как и в шаге 5, вы можете выбрать автоматический рост файлов и, если хотите, задать настройки роста и максимальный размер файла. Для продолжения нажмите на Next.
  • Появится экран Completing the Create Database Wizard (Завершение работы мастера Create Database Wizard) (рис 9.9(рис 9.9) Экран Completing the Create Database Wizard (Завершение работы мастера Create Database Wizard)
  • Как только ваша база данных будет создана, появится информационное окно мастера Create Database Wizard, с сообщением, что база данных была успешно создана. Нажмите на OK, чтобы закрыть это окно.
  • Появится еще одно информационное окно с вопросом, не желаете ли вы создать план обслуживания (maintenance plan) для новой базы данных. Рекомендуется создать план обслуживания, потому что благодаря ему обеспечивается хорошая производительность вашей базы данных, регулярное резервное копирование в случае отказа системы и проверки базы данных на непротиворечивость. Но планы обслуживания мы рассмотрим только в лекции 30, поэтому пока что нажмите на No, чтобы завершить создание базы данных.
  • Применение Enterprise Manager

    При помощи SQL Server Enterprise Manager вы можете создавать более сложные базы данных, чем те, которые можно создать с помощью мастера Create Database Wizard. Вы можете задать разные настройки роста для каждого из создаваемых файлов, а не одинаковые для всех файлов. Вы также можете создавать пользовательские группы файлов. Для создания базы данных при помощи Enterprise Manager выполните последовательность шагов, которые будут перечислены ниже. В нашем примере мы создадим базу данных с именем MyDB, имеющую первичный файл данных, три вторичных файла данных (находящихся в той же самой пользовательской группе файлов) и один файл-журнал.

  • Откройте Enterprise Manager. В левой панели раскройте группу SQL Server, в которой находится имя сервера, на котором вы хотите создать базу данных, а затем раскройте узел самого этого сервера. Затем нажмите правой кнопкой мыши на папку Databases и выберите New Database.
  • Откроется окно свойств базы данных (Database Properties) с открытой вкладкой General (Общие) (рис. 9.10). Введите с клавиатуры имя базы данных в поле Name.
  • Откройте вкладку Data Files (см. рис 9.11(рис 9.11) Вкладка General окна свойств базы данных(рис 9.10) Вкладка Data Files окна свойств базы данныхПо умолчанию, каждый файл располагается на диске в папке, в которой инсталлирован SQL Server. Вы можете изменить эту настройку, задав другой путь с клавиатуры или при помощи экранной кнопки для его поиска ("...").
  • В области File Properties (Свойства файла) в нижней части окна вы можете задать настройки автоматического роста для отдельных файлов. Выделите имя файла, для которого вы хотите задать настройки роста. Чтобы разрешить автоматический рост этого файла, установите флажок Automatically grow file. Затем вы можете задать приращение файла, выраженное в мегабайтах или в процентах от свободного места, оставшегося в файле. Нажав на селективную кнопку Restrict file growth (Ограничить рост файла), вы также можете задать максимальный размер файла, указав предел роста, выраженный в мегабайтах, а можете и не ограничивать рост файла. Эти настройки можно задавать при создании каждого из файлов, а можете оставить настройки, применяемые по умолчанию, и задать их позднее при помощи окна Enterprise Manager Database Properties. Если вам понадобится удалить файл из списка, то выделите имя этого файла и нажмите на экранную кнопку Delete.
  • Завершив конфигурацию всех файлов данных, откройте вкладку Transaction Log и сконфигурируйте файлы журнала транзакций. Файлы журнала конфигурируются точно так же, как и файлы данных, за исключением того, что вы не сможете задать для них группу файлов, потому что они не принадлежат ни одной из групп файлов. Задайте с клавиатуры имя файла (логическое имя), местоположение (физическое имя) и начальный размер для одного или нескольких файлов журнала. Кроме того, задайте настройки автоматического роста файлов журнала, так же как это было описано в п.4 для файлов данных.
  • После того как вы настроите все файлы так, как вам это нужно, нажмите на OK, и SQL Server создаст базу данных. Вернитесь в Enterprise Manager и нажмите на папку Databases сервера, в который вы только что добавили новую базу данных. Вы увидите в правой панели Enterprise Manager, что SQL Server добавил значок-иконку для этой базы данных.
  • Применение операторов T-SQL

    Возможно, вы пожелаете создавать или изменять свои базы данных при помощи операторов T-SQL, не пользуясь графическим пользовательским интерфейсом (GUI). Вы можете создавать свои собственные сценарии, которые пригодятся при создании баз данных. Допустим, вы создали базу данных, а потом обнаружили, что задали неверное местоположение какого-либо файла. Можно уничтожить эту базу данных и начать все снова. Если для создания базы данных вы применяете сценарий T-SQL, то вы сможете быстро его поправить и запустить снова, а не задавать повторно все данные в графическом пользовательском интерфейсе. Если вам надо создать такую же базу данных на другом компьютере (например, на "горячем" резервном компьютере), то вы можете запустить на нем тот же самый сценарий.

    С другой стороны, Enterprise Manager можно применить для генерации сценариев T-SQL, применяемых для создания баз данных (а также сценариев для создания любых объектов баз данных), но только после того, как база данных будет создана. Сценарии, сгенерированные Enterprise Manager, будут содержать все настройки текущей базы данных, что может быть полезно, поэтому вы можете захотеть пользоваться сгенерированным сценарием. Но независимо от того, будете ли вы писать свои сценарии или пользоваться сгенерированными, это окажется полезным для понимания кода T-SQL, применяемого для создания баз данных. В данном разделе мы рассмотрим операторы T-SQL для создания баз данных. Эти команды можно набрать с клавиатуры в файл и создать сценарий. (О создании и запуске сценариев см. лекцию 13.)

    Практические советы.

    Простая база данных

    В данном примере мы создадим базу данных с именем MyDB, содержащую: первичный файл данных (MyDB_root); один вторичный файл данных (MyDB_data1), который по умолчанию останется в первичной группе файлов и один файл журнала транзакций (Log_data1). Ниже показаны операторы SQL, которые создадут базу данных MyDB:

    CREATE DATABASE MyDB 
    ON 
    (NAME = MyDBroot,  --Первичный файл данных 
    FILENAME = 'c:\mssql2k\MSSQL\data\mydbroot.mdf', 
    SIZE = 8MB, 
    MAXSIZE = 9MB, 
    FILEGROWTH = 100KB), 
    (NAME = MyDBdata1,   --Вторичный файл данных
    FILENAME = 'c:\mssql2k\MSSQL\data\mydbdata1.ndf', 
    SIZE = 1000MB, 
    MAXSIZE = 1500MB, 
    FILEGROWTH = 100MB) 
    LOG ON 
    (NAME = Logdata1, --Файл журнала
    FILENAME = 'e:\log_files\logdata1.ldf', 
    SIZE = 1000MB, 
    MAXSIZE = 1500MB, 
    FILEGROWTH = 100MB)

    Обратите внимание, что в приведенном выше примере первичный и вторичный файлы данных оба расположены на диске C, а файл журнала расположен на диске E. Мы уже говорили, что файлы данных и файлы журналов нужно всегда размещать на физически разных устройствах, чтобы повысить производительность ввода-вывода при доступе к дискам. Кроме того, обратите внимание, что были использованы рекомендуемые расширения имен файлов – .mdf, .ndf, и .ldf. Настройки SIZE (Размер), MAXSIZE (Максимальный размер) и FILEGROWTH (Рост файла) могут быть заданы в Кб либо в Мб (по умолчанию применяются Мб).

    Дополнительная информация. Более подробное описание оператора CREATE DATABASE вы найдете в Books Online, в теме "Create Database" (Создание базы данных). Практические советы.

    Этот пример базы данных относится к системе с несколькими дисковыми накопителями или с несколькими массивами дисков в RAID-системе. Мы будем употреблять термин "диск", когда будем говорить и об отдельных дисковых накопителях, и о массивах дисковых накопителей, работающих как том RAID. Будут созданы несколько файлов, каждый на своем отдельном диске. Каждый файл помещается в одну из двух групп файлов. Наша база данных получит имя Sales и будет содержать следующие файлы:

  • первичный файл данных, Sales_root.mdf;
  • три вторичных файла данных customer_data1.ndf, customer_data2.ndf и customer_data3.ndf, в группе файлов customers_group;
  • два вторичных файла данных product_data1.ndf и product_data2.ndf, в группе файлов products_group;
  • один файл журнала транзакций, log_data1.ldf.
  • Ниже показан текст скрипта, который создаст базу данных Sales. Так как будут создаваться пользовательские группы файлов, то в команде CREATE DATABASE будет содержаться ключевое слово FILEGROUP.

    CREATE DATABASE Sales 
    ON PRIMARY             	     --Явное задание первичной
                                         --группы файлов (не обязательно) 
    (NAME = Sales_root,       --Первичный файл данных
    FILENAME = 'c:\mssql2k\MSSQL\data\salesroot.mdf', 
    SIZE = 8MB, 
    MAXSIZE = 10MB, 
    FILEGROWTH = 1MB), 
    FILEGROUP customers_group    --Группа файлов для следующих файлов 
    (NAME = customerdata1,          --Вторичный файл данных
    FILENAME = 'd:\mssql2k\MSSQL\data\customerdata1.ndf', 
    SIZE = 800MB, 
    MAXSIZE = 1000MB, 
    FILEGROWTH = 100MB), 
    (NAME = customerdata2,           --Вторичный файл данных
    FILENAME = 'e:\mssql2k\MSSQL\data\customerdata2.ndf', 
    SIZE = 800MB, 
    MAXSIZE = 1000MB, 
    FILEGROWTH = 100MB), 
    (NAME = customerdata3,           --Вторичный файл данных
    FILENAME = 'f:\mssql2k\MSSQL\data\customerdata3.ndf', 
    SIZE = 800MB,
    MAXSIZE = 1000MB, 
    FILEGROWTH = 100MB), 
    FILEGROUP products_group   	--Группа файлов для следующих файлов 
    (NAME = productdata1,            	--Вторичный файл данных
    FILENAME = 'g:\mssql2k\MSSQL\data\productdata1.ndf', 
    SIZE = 500MB, 
    MAXSIZE = 700MB, 
    FILEGROWTH = 100MB), 
    (NAME = productdata2,           	--Вторичный файл данных
    FILENAME = 'h:\mssql2k\MSSQL\data\productdata2.ndf', 
    SIZE = 500MB, 
    MAXSIZE = 700MB, 
    FILEGROWTH = 100MB) 
    LOG ON 
    (NAME = logdata1,                    	--Файл журнала
    FILENAME = 'i:\log_files\logdata1.ldf', 
    SIZE = 800MB, 
    MAXSIZE = 1000MB, 
    FILEGROWTH = 200MB)

    Из комментариев к этому примеру видно, что перед заданием первичного файла можно в явном виде задать первичную группу файлов. Но явное задание не обязательно, т.к. по умолчанию считается, что происходит задание первичной группы файлов. Две другие группы файлов, customers_group и products_group, задаются непосредственно перед определениями размещаемых в них файлов. Все файлы, перечисленные после определения группы файлов, будут помещаться в эту группу файлов до тех пор, пока не появится определение новой группы файлов или не появится предложение LOG ON.

    Обратите внимание на обозначения дисков для файлов. Каждый из файлов создается на своем диске, чтобы при создании таблиц и индексов в группах файлов данные могли бы равномерно распределяться по многим дискам. Например, данные из таблицы, созданной в группе файлов customers_group разместятся на нескольких дисках, на которых будут располагаться файлы customer_data1.ndf, customer_data2.ndf и customer_data3.ndf. Файл журнала тоже располагается на отдельном диске, на котором не располагаются никакие файлы данных, благодаря чему становится возможной запись файла журнала с последовательным вводом-выводом (перемещением записывающих головок дискового накопителя только на соседние дорожки).

    Если вы не хотите, чтобы SQL Server производил автоматический рост файла, то задайте FILEGROWTH=0, тогда файлу будет разрешено заполнять только первоначально отведенное для него пространство. Эту настройку можно задать, когда происходит работа со статическими таблицами, т.е. с таблицами, которые не растут. В этом случае в операторе не требуется задавать MAXSIZE, максимальный размер файла будет совпадать с начальной настройкой SIZE.

    Примечание. Те, кто хорошо знаком с SQL Server версии 6.5 или более ранними версиями, заметят, что перед созданием базы данных больше не применяется команда DISK INIT для создания логических устройств. Вместо логических устройств теперь используются файлы.

    Просмотр баз данных

    После того как вы создали базу данных, вы можете применять Enterprise Manager для поиска и просмотра имеющихся в ней объектов. Вы также можете просматривать информацию о базе данных, исполняя команды SQL из средства OSQL с интерфейсом командной строки. Сейчас мы расскажем вам об обоих этих способах просмотра баз данных.

    Применение Enterprise Manager

    Для просмотра информации в базе данных при помощи Enterprise Manager, выполните следующие действия:

  • Находясь в Enterprise Manager, нажимая на значки-плюсы, раскройте списки для группы SQL Server, имя сервера, на котором находится база данных, и папку Databases (см. рис 9.12(рис 9.12) Enterprise Manager с раскрытой папкой Databases
  • Нажмите на имя нужной базы данных, и тогда отобразятся находящиеся в ней объекты (см. рис 9.13(рис 9.13) Объекты из базы данных Northwind
  • Применение команд SQL

    Информацию о базах данных можно просматривать, также запуская команды T-SQL, при помощи окна с приглашением командной строки или из Query Analyzer. Чтобы посмотреть информацию о базе данных при помощи команды SQL, выдаваемой из командной строки, откройте окно с приглашением командной строки и осуществите соединение с SQL Server через OSQL, при помощи, например, такой команды:

    OSQL   -U<имя_пользователя>   -P<пароль>   -S<имя_сервера>

    Когда вы будете набирать эту команду, подставьте в нее вместо слов в угловых скобках свои имя пользователя, пароль и имя сервера (сами угловые скобки вводить не надо).

    Для применения Query Analyzer нажмите на экранную кнопку Start, укажите на Programs, укажите на Microsoft SQL Server, а затем выберите Query Analyzer.

    Теперь вводите команды T-SQL либо в окне Query Analyzer, либо в командной строке OSQL. Для просмотра информации о базах данных запустите такие команды:

    Use MyDB--Задает контекст используемой базы данных
    GO 
    Sp_helpfile--Показывает информацию для всех файлов базы данных
    GO--Чтобы посмотреть информацию только для некоторого файла, укажите его имя 
    Sp_helpdb MyDB--То же самое, но выдается также информация о месте на диске, 
        выделенном  для базы данных 
    GO 
    Sp_helpfilegroup--Показывает информацию о группах файлов данной базы данных 
    GO--Чтобы посмотреть информацию только о некоторой группе файлов, --укажите ее имя
    Sp_helpdb--Показывает информацию обо всех базах данных
    GO
    Дополнительная информация.Подробности об использовании этих команд и о том, как расшифровывать выдаваемую ими информацию, вы найдете в SQL Server Books Online.

    Удаление баз данных

    Когда-нибудь вам может понадобиться удалить какую-либо базу данных. Помните, что это – "дорога в одну сторону"; удалив базу данных, вы сможете восстановить ее только из резервной копии. Поэтому безопаснее всего будет перед удалением базы данных выполнить ее резервное копирование, на случай, если эта база данных снова понадобится в будущем. Базы данных можно удалять как при помощи Enterprise Manager, так и командами T-SQL.

    Применение Enterprise Manager

    Как уже говорилось в лекции 8, при помощи Enterprise Manager можно не только просматривать информацию, но и администрировать базы данных. Чтобы полностью удалить базу данных и все ее файлы, выполните следующие действия.

  • Находясь в Enterprise Manager, раскройте группу SQL Server, а затем раскройте имя сервера, на котором установлена база данных.
  • Раскройте папку Databases, чтобы стали видны имеющиеся базы данных.
  • Нажмите правой кнопкой мыши на имя удаляемой базы данных, а затем выберите Delete в контекстном меню. Появится сообщение Delete Database об удалении базы данных (рис 9.14(рис 9.14) Окно сообщения Delete Database
  • Примечание. Вы не сможете удалить базу данных master (главную системную базу данных).

    Применение команд SQL

    Администрировать базы данных можно и при помощи команд T-SQL. Как мы уже говорили ранее, команды T-SQL можно запускать из Query Analyzer или из окна с приглашением командной строки. Чтобы удалить базу данных при помощи команды T-SQL, откройте или Query Analyzer (мы уже объясняли, как это сделать), или окно с приглашением командной строки, и осуществите соединение с SQL Server через OSQL, при помощи такой команды:

    OSQL   -U<имя_пользователя>   -P<пароль>   -S<имя_сервера>

    Помните, что удаление базы данных является неотменяемым действием. Для удаления баз данных применяется T-SQL-команда DROP DATABASE. Ниже показаны команды, которые удалят базу данных MyDB и все ее файлы:

    USE master--Для запуска команды DROP DATABASE вы должны 
    GO  --применять базу данных master 
    DROP DATABASE MyDB --Единственным параметром этой команды является имя удаляемой базы данных. 
    GO

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

    Заключение

    Прочитав эту лекцию, вы приобрели более широкие знания о файлах данных, файлах журналов и о группах файлов SQL Server 2000, а также об автоматическом росте файлов. Теперь вы знаете, как создать базу данных, применяя мастер Create Database Wizard, SQL Server Enterprise Manager и команды T-SQL. Вы также знаете два способа для просмотра информации о базах данных и о файлах и знаете, как удалять базы данных. Теперь вы можете начать создавать таблицы внутри своих баз данных – этой теме посвящена лекция 10.

    Страницы:

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

    Структура базы данных

    Каждая база данных SQL Server состоит из набора файлов операционной системы. Эти файлы могут группироваться в группы файлов, что облегчает их администрирование, помогает в размещении данных и повышает производительность. В данном разделе вы познакомитесь с файлами и группами файлов SQL Server и узнаете об их значении для создания баз данных.

    Файлы

    Как мы уже сказали, база данных SQL Server состоит из набора файлов операционной системы. Файл базы данных может быть либо файлом данных, либо файлом журнала. Файлы данных служат для хранения данных и объектов, таких как таблицы, индексы, представления, триггеры и хранимые процедуры. Имеется два типа файлов данных: первичные и вторичные. Файлы журналов служат только для хранения информации из журналов транзакций. Место на диске, отводимое для файлов журналов всегда должно администрироваться отдельно от места, отводимого для данных, и никогда не должно быть частью файла данных.

    Каждая база данных должна создаваться хотя бы с одним файлом данных и с одним файлом журнала; файлы не могут быть использованы более чем в одной базе данных – т.е., базы данных не могут разделять файлы (использовать файлы совместно). В приведенном ниже перечне указаны три типа файлов, которые могут быть использованы в базах данных:

  • Первичные файлы данных. Первичные файлы данных содержат всю информацию для запуска базы данных и ее системных таблиц и объектов. Они указывают на другие файлы, созданные в базе данных. Они могут также содержать таблицы и объекты, задаваемые пользователем, хотя это и не обязательно. Каждая база данных может иметь ровно один первичный файл. Для этих файлов рекомендуется применять расширение .mdf.
  • Вторичные файлы данных. Вторичные файлы данных не являются обязательными. Они могут хранить данные и объекты, которые отсутствуют в первичном файле. База данных может вообще не иметь ни одного вторичного файла (если все ее данные хранятся в первичном файле). Можно иметь ноль, один или несколько вторичных файлов. Для некоторых баз данных требуется иметь несколько вторичных файлов, чтобы размещать данные по нескольким отдельным дискам. (Это не RAID-массивы дисков, как вы увидите из следующего раздела). Для этих файлов рекомендуется применять расширение .ndf.
  • Файлы журналов транзакций. Файлы журналов транзакций хранят всю информацию из журнала транзакций, служащую для восстановления базы данных. Каждая база данных должна иметь хотя бы один файл журнала, а может иметь и несколько файлов журналов. Для этих файлов рекомендуется применять расширение .ldf.
  • Примечание. Максимальный размер файлов базы данных SQL Server составляет 32 терабайта для файлов данных и 4 терабайта для файлов журналов.

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

    Но как же данные смогут размещаться по многим файлам данных? А вот для этого и применяются группы файлов.

    Группы файлов

    При помощи групп файлов можно группировать файлы, это нужно для администрирования и размещения данных. (Группы файлов похожи на сегменты в Microsoft SQL Server 6.5 и в более ранних версиях.) Применение групп файлов позволяет повысить производительность базы данных, т.к. становится возможным создание базы данных, размещенной на многих дисках, на многих контроллерах и на RAID-массивах. (Про RAID-массивы см. лекцию 5.) При помощи групп файлов можно создавать таблицы и индексы, размещаемые на заданных физических дисках, контроллерах и массивах дисков. В данной лекции мы рассмотрим некоторые примеры такой работы.

    Имеются три типа групп файлов со следующими основными свойствами:

  • Первичные группы файлов. Содержат первичный файл данных и все остальные файлы, не помещенные в другие группы файлов. К первичной группе файлов базы данных отнесены системные таблицы, задающие пользователей, объекты и полномочия для этой базы данных. SQL Server автоматически создает эти системные таблицы всякий раз, когда вы создаете базу данных.
  • Пользовательские группы файлов. Все группы файлов, заданные пользователем в процессе создания (или последующего изменения) базы данных. Создавая таблицу или индекс, вы можете задать, чтобы они помещались в заданную пользовательскую группу файлов.
  • Стандартная группа файлов. Содержит все страницы для таблиц и индексов, у которых при создании не была задана конкретная группа файлов. По умолчанию, стандартной группой файлов является первичная группа файлов. Члены роли db_owner могут менять стандартную группу файлов, делая стандартной ту либо иную группу файлов. В каждый момент времени стандартной может быть лишь какая-то одна группа файлов, и, повторим, если стандартная группа файлов не была задана явно, то первичная группа файлов автоматически будет стандартной. Чтобы изменить стандартную группу файлов, воспользуйтесь следующей командой Transact SQL (T-SQL):
    ALTER DATABASE имя_базы_данных MODIFY FILEGROUP имя_группы_файлов DEFAULT
    (Применять T-SQL вы научитесь в последних лекциях данного курса.) Вы можете пожелать изменить стандартную группу файлов так, чтобы ею стала одна из ваших пользовательских групп файлов, тогда все объекты, создаваемые в вашей базе данных, будут автоматически создаваться в указанной вами группе файлов, и вам не придется всякий раз задавать это.
  • Чтобы повысить производительность, вы можете управлять размещением данных, создавая таблицы и индексы в разных группах файлов. Так, вы можете пожелать поместить таблицу, доступ к которой бывает часто, в группу файлов на большом массиве дисков (например, составленным из 10 дисков), а другую таблицу, доступ к которой бывает реже, поместить в другую группу файлов, расположенную на отдельном, меньшем массиве дисков (например, из 4 дисков). Таким образом, можно размещать таблицы, доступ к которым происходит чаще, по большему количеству дисков, позволяя этим дискам осуществлять параллельный ввод-вывод. Если вы не применяете массивы RAID и у вас имеется несколько дисковых накопителей, то у вас остается возможность применения групп файлов. Например, вы можете создать по отдельному файлу для каждого дискового накопителя, разместив каждый файл в отдельную пользовательскую группу файлов. Тогда вы сможете поместить каждую таблицу или индекс в отдельный файл (и на отдельный диск), назначив группу файлов при создании этой таблицы или индекса. Пример размещения файлов показан на рис. 9.1: один первичный файл данных размещен в первичной группе файлов на диске C, по одному вторичному файлу данных размещено в каждой из пользовательских групп файлов (FG1 и FG2) на дисках E и F и один файл-журнал размещен на диске G. После этого вы можете создавать таблицы и индексы в каждой из пользовательских групп файлов – FG1 или FG2.

    (рис 9.1) Применение групп файлов для управления размещением данных

    А может быть, вы будете применять пользовательскую группу файлов для распределения данных по нескольким дискам. На рис. 9.2 показана пользовательская группа файлов FG1, состоящая из двух вторичных файлов данных, один из которых находится на диске E, а другой – на диске F (диске G размещен файл-журнал, а на C – первичный файл). В этом примере мы снова предполагаем, что каждый файл базы данных создан на отдельном физическом дисковом накопителе, и у нас нет аппаратной реализации RAID. Таблицы и индексы, созданные в этой пользовательской группе файлов, будут размещены сразу на двух дисках, потому что SQL Server применяет стратегию пропорционального расходования ресурсов.

    (рис 9.2) Применение одной группы файлов для распределения данных по нескольким дискам

    Если вы применяете RAID-систему, то вам может потребоваться распределить данные из большой таблицы по нескольким логическим дискам-массивам, сконфигурированным на двух или на нескольких RAID-контроллерах. Для этого вам надо будет создать пользовательскую группу файлов, с файлами, соответствующими каждому из этих контроллеров. Допустим, вы создали два вторичных файла данных, каждый – на своем массиве дисков, а каждый логический массив состоит из восьми физических дисков и сконфигурирован как RAID 5. Эти два массива обслуживаются двумя отдельными RAID-контроллерами. Чтобы создать таблицу или индекс, располагающуюся на обоих этих контроллерах (т.е. на всех 16 дисковых накопителях), создайте одну пользовательскую группу файлов, в которую поместите оба файла, а затем создайте таблицу или индекс в этой группе файлов. Пользовательская группа файлов FG1 распределена по 16 физическим дискам (двум логическим дискам – RAID-массивам) (см. рис. 9.3). Там также показаны первичный файл данных на другом контроллере (с RAID 1) и файл журнала еще на одном контроллере (с RAID 10).

    SQL Server позволяет оптимизировать распределение ваших данных по дисковым накопителям, за счет автоматического пропорционального расслоения (распределения) данных по всем файлам группы файлов. "Расслоение" (striping) – это термин, применяемый для описания распределения данных по нескольким файлам базы данных. Расслоение файлов SQL Server работает независимо от расслоения дисков RAID-массивов и, как вы видели из наших примеров, может применяться как в сочетании с RAID, так и самостоятельно.

    Чтобы обеспечить расслоение данных, SQL Server записывает данные в файлы в объемах, пропорциональных свободному месту, остающемуся в файлах (относительно свободному месту в других файлах). Место для таблиц и индексов распределяется в виде экстентов (extents). Экстент – это единица для измерения места на диске, один экстент состоит из 8 страниц, а одна страница состоит из 8 Кб, так что один экстент состоит из 64 Кб. Допустим, нужно распределить 5 экстентов на файл F1, в котором свободно 400 Мб, и на файл F2, в котором свободно 100 Мб; тогда 4 экстента будут распределены на файл F1 и один экстент распределен на файл F2. Оба файла заполнятся до конца примерно одновременно, благодаря чему операции ввода-вывода будут распределяться по дискам более равномерно. Пропорциональное заполнение будет применяться и для пользовательских, и для первичных групп файлов. Если задать все файлы в группе файлов имеющими одинаковый начальный размер, то данные, по мере их загрузки, будут распределяться по файлам равномерно. Этот метод, когда в группах создаются файлы одинакового начального размера, можно порекомендовать для равномерного распределения данных по дисковым накопителям и, одновременно с этим, для равномерного распределения операций ввода-вывода.

    (рис 9.3) Распределение пользовательской группы файлов по нескольким RAID-контроллерам

    Другая польза от применения групп файлов состоит в том, что SQL Server может выполнять резервные копирования базы данных файлами или группами файлов. Если ваша база данных слишком велика, чтобы ее можно было скопировать за один раз, то вы можете копировать ее по частям. (О методике такого резервного копирования см. лекцию 32.)

    Правила и рекомендации

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

  • Файлы и группы файлов не могут использоваться более чем одной базой данных.
  • Каждый файл может быть членом только одной группы файлов.
  • Данные и информация из журнала транзакций не могут размещаться в одном и том же файле. Работа с дисковой памятью для журнала транзакций и с дисковой памятью для данных производится по-разному.
  • Журнал транзакций никогда не является частью группы файлов.
  • Если создать файл, который будет являться частью базы данных, то его нельзя будет переместить в другую группу файлов. Если вы хотите переместить файл, то его придется уничтожить и создать снова.
  • В дополнение к этим правилам имеются методики работы с файлами и группами файлов, про которые известно, что они дают хорошие результаты. Ниже приведены несколько рекомендаций общего характера, которые помогут спроектировать вашу базу данных:

  • Большинство из баз данных обладает высокой производительностью, имея лишь первичный файл данных и один файл журнала транзакций. Такая конструкция базы данных рекомендуется для баз данных, не требующих особенно интенсивного ввода-вывода. Если же ваша система требует интенсивного ввода-вывода и ей нужно много дисковых накопителей, то вам, вероятно, понадобится применять пользовательские группы файлов, при помощи которых вы сможете распределить данные по нескольким дискам или массивам дисков, что обеспечит параллельный ввод-вывод.
  • Всегда размещайте файлы журналов на отдельных физических дисках, а не на дисках, содержащих файлы данных (см. лекцию 5).
  • Если вам нужно применять много файлов с данными, то используйте первичный файл данных только для системных таблиц и объектов, а для пользовательских данных и объектов создайте один или несколько вторичных файлов данных.
  • Создавайте файлы и группы файлов так, чтобы они охватывали как можно больше физических дисков – это повысит возможности параллельной работы ввода-вывода для дисков и максимизирует производительность.
  • Размещайте некластеризованные индексы интенсивно используемых таблиц в отдельных группах файлов не на тех же самых физических дисках, в которых содержатся сами данные из таблиц. Эта методика тоже позволяет осуществлять параллельный ввод-вывод для дисков. (Про индексы см.лекцию 17.)
  • Разные таблицы, которые применяются в общих для них запросах, нужно по возможности размещать на разных физических дисках, тогда станет возможен параллельный ввод-вывод для дисков при работе алгоритма поиска данных.
  • Последние две рекомендации могут оказаться неверными для систем, применяющих тома RAID с большим количеством дисковых накопителей. Если у вас имеется много дисковых накопителей, то может оказаться, что таким же или лучшим решением станет распределение индексов и таблиц по максимально возможному количеству дисковых накопителей, чтобы обеспечить максимально большую параллельность ввода-вывода, допустимую для всех таблиц и индексов.

    Автоматический рост файлов

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

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

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

    Максимальный размер файла означает именно это – максимальный размер, до которого разрешается расти файлу. Эта величина тоже задается при создании файла, но может быть изменена впоследствии при помощи Enterprise Manager или команды ALTER DATABASE. Если максимальный размер файла не задан, то SQL Server будет увеличивать размер файла до тех пор, пока не заполнится все место на диске. Чтобы не истратить все место на диске (а в этом случае произойдет ошибка в работе SQL Server), задавайте максимальный размер для каждого файла. Если даже файл дорастет до максимального размера, вы сможете увеличить этот максимальный размер при помощи оператора ALTER DATABASE. Вы также можете создать еще один файл на том же (если там имеется свободное место) или на другом диске. Новый файл должен обязательно быть в той же самой группе файлов, что и первоначальный файл. Если позволить файлу расти без ограничений, как это задано по умолчанию, то вам придется создавать файл на другом диске, имеющем свободное место.

    Как правило, нужно задавать автоматический рост файлов и максимальные размеры файлов. При создании базы данных максимальные размеры файлов задавайте такими, до которых, по вашему мнению, они окажутся способными вырасти. Несмотря на возможность автоматического роста файлов, все равно нужно регулярно следить за ростом базы данных – ежедневно или еженедельно, возможно лишь для того, чтобы вам самому быть в курсе. Информацию о росте базы данных можно хранить, например, в электронной таблице; вы сможете экстраполировать эту информацию и предсказать, например, сколько места на дисках понадобится через месяц, через год, через пять лет и так далее. Следя за заполнением дисков, вы узнаете, подвергались ли ваши файлы автоматическому росту, и если да, то когда, и сможете понять, когда потребуется добавить в базу данных дополнительные файлы. Такое наблюдение за заполнением дисков поможет вам избежать таких явлений, как достижение максимального размера файла или расходование всего свободного места на диске.

    Системные базы данных

    При инсталляции SQL Server создаются четыре системных базы данных: master (главная), tempdb (временная), model (модель) и msdb.

  • master. Хранит информацию уровня всей системы, информацию инициализации SQL Server и настройки конфигурации SQL Server. Эта база данных также хранит все учетные записи для входа в систему, информацию о наличии всех остальных баз данных и о местоположении первичного файла для всех пользовательских баз данных. Всегда имейте свежую копию базы данных master – главной базы данных.
  • tempdb. Хранит временные таблицы и временные хранимые процедуры. Эта базы данных используется также для хранения прочей временной информации, нужной для работы SQL Server, например для сортировки данных. При каждом запуске SQL Server создается новая чистая копия базы данных tempdb. Затем, если нужно, эта база данных растет автоматически. Если для хранения ваших временных данных требуется много места, то можно увеличить стандартный размер этой базы данных, применив команду ALTER DATABASE.
  • model.Служит образцом (шаблоном) для всех остальных баз данных, создаваемых на данной системе, в том числе и для tempdb. При создании базы данных ее начало создается как копия содержимого базы данных model, а всё остальное заполняется пустыми страницами. База данных model обязательно должна иметься в системе, потому что она применяется для воссоздания базы данных tempdb при каждом запуске SQL Server. Вы можете изменять базу данных model, добавляя туда пользовательские (определяемые пользователем) типы данных, таблицы и т.д. Если вы измените базу данных model, то каждая созданная вами база данных будет иметь измененные атрибуты.
  • msdb. Содержит таблицы, которые SQL Server Agent применяет для планирования заданий и оповещений и для записи операторов (здесь операторы – это люди, которые отвечают за работу заданий и оповещений). Эта база данных также хранит таблицы, применяемые для репликации.
  • Каждая из этих системных баз данных имеет свои собственные первичный файл данных и файл журнала. Системные базы данных хранятся в папке для хранения системных файлов, назначенной вами при инсталляции SQL Server.

    Создание баз данных

    SQL Server предлагает три метода для создания баз данных: воспользоваться мастером Create Database Wizard, создать базу данных при помощи SQL Server Enterprise Manager или применить команду CREATE DATABASE, которую можно сохранить в файле и запускать как сценарий. Эти три метода будут описаны ниже, в следующих трех подразделах. Вы должны знать, что мастер Create Database Wizard обладает некоторыми ограничениями. Так, он помещает все созданные им файлы данных на один дисковый накопитель, в одну заданную вами папку. При использовании этого мастера вы не сможете поместить файлы данных в другое физическое местоположение (ни на другие дисковые накопители, ни в другие папки). Вы можете поместить файлы журналов на диск или в папку, отличающуюся от диска или папки для файлов данных, но, опять таки, только в одно физическое местоположение. Нельзя задать пользовательские группы файлов, и все файлы получат одинаковые настройки для роста. Из-за этих ограничений мастер Create Database Wizard является наилучшим решением, когда вам нужно создать в базе данных только один первичный файл данных и один файл для журнала транзакций. (С другой стороны, в дальнейшем вы всегда можете добавить в базу данных файлы и группы файлов, если они вам понадобятся.)

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

    Применение мастера Create Database Wizard

    Для тех, кто еще не имеет достаточного опыта, применение мастера Create Database Wizard может оказаться наиболее простым способом создания баз данных. Если его ограничения, о которых говорилось выше, не влияют на требования вашей задачи то, конечно, следует пользоваться этим методом создания баз данных. Для создания базы данных при помощи мастера Create Database Wizard, выполните следующие действия.

  • Запустите SQL Server Enterprise Manager и выберите сервер, на котором вы хотите создать базу данных. Чтобы выбрать сервер, сначала раскройте папку Microsoft SQL Servers (для этого нажмите на значок "+" слева от имени папки). Раскройте папку SQL Server Group, а затем нажмите на имя нужного вам сервера. В меню Tools выберите Wizards. Раскройте Database (см. рис 9.4(рис 9.4) Экран Select Wizard (Выбор мастера)
  • Чтобы запустить мастер Create Database Wizard, дважды щелкните на Create Database Wizard. Откроется стартовый экран мастера (рис 9.5(рис 9.5) Стартовый экран мастера Create Database Wizard
  • Нажмите на Next, и вы перейдете к экрану Name the Database and Specify its Location (Дайте имя для базы данных и укажите ее местоположение) (рис 9.6(рис 9.6) Экран Name the Database and Specify its Location (Дайте имя для базы данных и укажите ее местоположение)Примечание. На остальных рисунках этого раздела показано создание базы данных с именем MyDB, имеющей первичный файл данных в C:\mssql2k\MSSQL\data и один файл журнала в F:\mssql2k\MSSQL\data.
  • Появится экран Name the Database Files (Дайте имена файлам базы данных) (рис. 9.7). В этом экране вы можете ввести с клавиатуры имена и начальные размеры для каждого из файлов вашей базы данных. Первичный файл базы данных создается автоматически и получает в качестве префикса своего имени имя базы данных. Вы можете либо согласиться с этим именем, либо ввести с клавиатуры другое имя. Первичный файл данных имеет расширение .mdf. Если вы имеете какое-либо представление о будущем размере вашей базы данных, то введите сейчас этот размер в поле для задания начального размера (Initial Size). Если вы не знаете будущий размер вашей базы данных, то оставьте размер, указанный по умолчанию; вы сможете изменить его позднее при помощи команды ALTER DATABASE. Любые файлы, которые вы создадите в дополнение к первому файлу (первичному), будут являться вторичными файлами и автоматически получат расширения .ndf. Все созданные здесь файлы будут помещены в первичную группу файлов. Пользуясь мастером Create Database Wizard, пользовательские группы файлов создавать невозможно.(рис 9.7) Экран Name the Database Files (Дайте имена файлам базы данных)В нашем примере мы оставили заданный по умолчанию первичный файл MyDB_Data и добавили вторичный файл, MyDB_Data2. Оба этих файла будут помещены в одно и то же место, которое вы указали на шаге 3. (Если вы не хотите, чтобы все файлы данных размещались на одном диске и в одной и той же папке и группе файлов, не продолжайте работу мастера, а создайте базу данных одним из методов, описанных в следующих разделах.) Для продолжения работы мастера нажмите на Next.
  • Появится экран Define the Database File Growth (Настройте рост файлов базы данных) (рис 9.8(рис 9.8) Экран Define the Database File Growth (Настройте рост файлов базы данных)
  • Появится экран Name the Transaction Log Files (Дайте имена файлам журнала транзакций). Этот экран выглядит так же, как и экран Name the Database Files, но он относится к файлу журнала. (Помните, что журнал транзакций хранит записи обо всех изменениях базы данных, которые понадобятся при восстановлении базы данных при отказе системы.) Первый файл журнала транзакций создается автоматически и получает в качестве префикса имени имя, заданное для базы данных. Вы можете согласиться с этим именем, а можете ввести с клавиатуры и другое. Данные журнала транзакций хранятся в файле с расширением .ldf. Если надо, вы можете добавить дополнительные файлы журналов. Если вы имеете какое-либо представление о будущем размере журнала транзакций, то введите сейчас этот размер, а если не знаете, то оставьте размер, указанный по умолчанию (вы сможете изменить его позднее при помощи команды ALTER DATABASE ). Для продолжения нажмите на Next.
  • Появится экран Define the Transaction Log File Growth (Настройте рост файлов журнал транзакций). Этот экран выглядит так же, как и экран Define the Database File Growth, но в нем задаются настройки роста для файла журнала. Как и в шаге 5, вы можете выбрать автоматический рост файлов и, если хотите, задать настройки роста и максимальный размер файла. Для продолжения нажмите на Next.
  • Появится экран Completing the Create Database Wizard (Завершение работы мастера Create Database Wizard) (рис 9.9(рис 9.9) Экран Completing the Create Database Wizard (Завершение работы мастера Create Database Wizard)
  • Как только ваша база данных будет создана, появится информационное окно мастера Create Database Wizard, с сообщением, что база данных была успешно создана. Нажмите на OK, чтобы закрыть это окно.
  • Появится еще одно информационное окно с вопросом, не желаете ли вы создать план обслуживания (maintenance plan) для новой базы данных. Рекомендуется создать план обслуживания, потому что благодаря ему обеспечивается хорошая производительность вашей базы данных, регулярное резервное копирование в случае отказа системы и проверки базы данных на непротиворечивость. Но планы обслуживания мы рассмотрим только в лекции 30, поэтому пока что нажмите на No, чтобы завершить создание базы данных.
  • Применение Enterprise Manager

    При помощи SQL Server Enterprise Manager вы можете создавать более сложные базы данных, чем те, которые можно создать с помощью мастера Create Database Wizard. Вы можете задать разные настройки роста для каждого из создаваемых файлов, а не одинаковые для всех файлов. Вы также можете создавать пользовательские группы файлов. Для создания базы данных при помощи Enterprise Manager выполните последовательность шагов, которые будут перечислены ниже. В нашем примере мы создадим базу данных с именем MyDB, имеющую первичный файл данных, три вторичных файла данных (находящихся в той же самой пользовательской группе файлов) и один файл-журнал.

  • Откройте Enterprise Manager. В левой панели раскройте группу SQL Server, в которой находится имя сервера, на котором вы хотите создать базу данных, а затем раскройте узел самого этого сервера. Затем нажмите правой кнопкой мыши на папку Databases и выберите New Database.
  • Откроется окно свойств базы данных (Database Properties) с открытой вкладкой General (Общие) (рис. 9.10). Введите с клавиатуры имя базы данных в поле Name.
  • Откройте вкладку Data Files (см. рис 9.11(рис 9.11) Вкладка General окна свойств базы данных(рис 9.10) Вкладка Data Files окна свойств базы данныхПо умолчанию, каждый файл располагается на диске в папке, в которой инсталлирован SQL Server. Вы можете изменить эту настройку, задав другой путь с клавиатуры или при помощи экранной кнопки для его поиска ("...").
  • В области File Properties (Свойства файла) в нижней части окна вы можете задать настройки автоматического роста для отдельных файлов. Выделите имя файла, для которого вы хотите задать настройки роста. Чтобы разрешить автоматический рост этого файла, установите флажок Automatically grow file. Затем вы можете задать приращение файла, выраженное в мегабайтах или в процентах от свободного места, оставшегося в файле. Нажав на селективную кнопку Restrict file growth (Ограничить рост файла), вы также можете задать максимальный размер файла, указав предел роста, выраженный в мегабайтах, а можете и не ограничивать рост файла. Эти настройки можно задавать при создании каждого из файлов, а можете оставить настройки, применяемые по умолчанию, и задать их позднее при помощи окна Enterprise Manager Database Properties. Если вам понадобится удалить файл из списка, то выделите имя этого файла и нажмите на экранную кнопку Delete.
  • Завершив конфигурацию всех файлов данных, откройте вкладку Transaction Log и сконфигурируйте файлы журнала транзакций. Файлы журнала конфигурируются точно так же, как и файлы данных, за исключением того, что вы не сможете задать для них группу файлов, потому что они не принадлежат ни одной из групп файлов. Задайте с клавиатуры имя файла (логическое имя), местоположение (физическое имя) и начальный размер для одного или нескольких файлов журнала. Кроме того, задайте настройки автоматического роста файлов журнала, так же как это было описано в п.4 для файлов данных.
  • После того как вы настроите все файлы так, как вам это нужно, нажмите на OK, и SQL Server создаст базу данных. Вернитесь в Enterprise Manager и нажмите на папку Databases сервера, в который вы только что добавили новую базу данных. Вы увидите в правой панели Enterprise Manager, что SQL Server добавил значок-иконку для этой базы данных.
  • Применение операторов T-SQL

    Возможно, вы пожелаете создавать или изменять свои базы данных при помощи операторов T-SQL, не пользуясь графическим пользовательским интерфейсом (GUI). Вы можете создавать свои собственные сценарии, которые пригодятся при создании баз данных. Допустим, вы создали базу данных, а потом обнаружили, что задали неверное местоположение какого-либо файла. Можно уничтожить эту базу данных и начать все снова. Если для создания базы данных вы применяете сценарий T-SQL, то вы сможете быстро его поправить и запустить снова, а не задавать повторно все данные в графическом пользовательском интерфейсе. Если вам надо создать такую же базу данных на другом компьютере (например, на "горячем" резервном компьютере), то вы можете запустить на нем тот же самый сценарий.

    С другой стороны, Enterprise Manager можно применить для генерации сценариев T-SQL, применяемых для создания баз данных (а также сценариев для создания любых объектов баз данных), но только после того, как база данных будет создана. Сценарии, сгенерированные Enterprise Manager, будут содержать все настройки текущей базы данных, что может быть полезно, поэтому вы можете захотеть пользоваться сгенерированным сценарием. Но независимо от того, будете ли вы писать свои сценарии или пользоваться сгенерированными, это окажется полезным для понимания кода T-SQL, применяемого для создания баз данных. В данном разделе мы рассмотрим операторы T-SQL для создания баз данных. Эти команды можно набрать с клавиатуры в файл и создать сценарий. (О создании и запуске сценариев см. лекцию 13.)

    Практические советы.

    Простая база данных

    В данном примере мы создадим базу данных с именем MyDB, содержащую: первичный файл данных (MyDB_root); один вторичный файл данных (MyDB_data1), который по умолчанию останется в первичной группе файлов и один файл журнала транзакций (Log_data1). Ниже показаны операторы SQL, которые создадут базу данных MyDB:

    CREATE DATABASE MyDB 
    ON 
    (NAME = MyDBroot,  --Первичный файл данных 
    FILENAME = 'c:\mssql2k\MSSQL\data\mydbroot.mdf', 
    SIZE = 8MB, 
    MAXSIZE = 9MB, 
    FILEGROWTH = 100KB), 
    (NAME = MyDBdata1,   --Вторичный файл данных
    FILENAME = 'c:\mssql2k\MSSQL\data\mydbdata1.ndf', 
    SIZE = 1000MB, 
    MAXSIZE = 1500MB, 
    FILEGROWTH = 100MB) 
    LOG ON 
    (NAME = Logdata1, --Файл журнала
    FILENAME = 'e:\log_files\logdata1.ldf', 
    SIZE = 1000MB, 
    MAXSIZE = 1500MB, 
    FILEGROWTH = 100MB)

    Обратите внимание, что в приведенном выше примере первичный и вторичный файлы данных оба расположены на диске C, а файл журнала расположен на диске E. Мы уже говорили, что файлы данных и файлы журналов нужно всегда размещать на физически разных устройствах, чтобы повысить производительность ввода-вывода при доступе к дискам. Кроме того, обратите внимание, что были использованы рекомендуемые расширения имен файлов – .mdf, .ndf, и .ldf. Настройки SIZE (Размер), MAXSIZE (Максимальный размер) и FILEGROWTH (Рост файла) могут быть заданы в Кб либо в Мб (по умолчанию применяются Мб).

    Дополнительная информация. Более подробное описание оператора CREATE DATABASE вы найдете в Books Online, в теме "Create Database" (Создание базы данных). Практические советы.

    Этот пример базы данных относится к системе с несколькими дисковыми накопителями или с несколькими массивами дисков в RAID-системе. Мы будем употреблять термин "диск", когда будем говорить и об отдельных дисковых накопителях, и о массивах дисковых накопителей, работающих как том RAID. Будут созданы несколько файлов, каждый на своем отдельном диске. Каждый файл помещается в одну из двух групп файлов. Наша база данных получит имя Sales и будет содержать следующие файлы:

  • первичный файл данных, Sales_root.mdf;
  • три вторичных файла данных customer_data1.ndf, customer_data2.ndf и customer_data3.ndf, в группе файлов customers_group;
  • два вторичных файла данных product_data1.ndf и product_data2.ndf, в группе файлов products_group;
  • один файл журнала транзакций, log_data1.ldf.
  • Ниже показан текст скрипта, который создаст базу данных Sales. Так как будут создаваться пользовательские группы файлов, то в команде CREATE DATABASE будет содержаться ключевое слово FILEGROUP.

    CREATE DATABASE Sales 
    ON PRIMARY             	     --Явное задание первичной
                                         --группы файлов (не обязательно) 
    (NAME = Sales_root,       --Первичный файл данных
    FILENAME = 'c:\mssql2k\MSSQL\data\salesroot.mdf', 
    SIZE = 8MB, 
    MAXSIZE = 10MB, 
    FILEGROWTH = 1MB), 
    FILEGROUP customers_group    --Группа файлов для следующих файлов 
    (NAME = customerdata1,          --Вторичный файл данных
    FILENAME = 'd:\mssql2k\MSSQL\data\customerdata1.ndf', 
    SIZE = 800MB, 
    MAXSIZE = 1000MB, 
    FILEGROWTH = 100MB), 
    (NAME = customerdata2,           --Вторичный файл данных
    FILENAME = 'e:\mssql2k\MSSQL\data\customerdata2.ndf', 
    SIZE = 800MB, 
    MAXSIZE = 1000MB, 
    FILEGROWTH = 100MB), 
    (NAME = customerdata3,           --Вторичный файл данных
    FILENAME = 'f:\mssql2k\MSSQL\data\customerdata3.ndf', 
    SIZE = 800MB,
    MAXSIZE = 1000MB, 
    FILEGROWTH = 100MB), 
    FILEGROUP products_group   	--Группа файлов для следующих файлов 
    (NAME = productdata1,            	--Вторичный файл данных
    FILENAME = 'g:\mssql2k\MSSQL\data\productdata1.ndf', 
    SIZE = 500MB, 
    MAXSIZE = 700MB, 
    FILEGROWTH = 100MB), 
    (NAME = productdata2,           	--Вторичный файл данных
    FILENAME = 'h:\mssql2k\MSSQL\data\productdata2.ndf', 
    SIZE = 500MB, 
    MAXSIZE = 700MB, 
    FILEGROWTH = 100MB) 
    LOG ON 
    (NAME = logdata1,                    	--Файл журнала
    FILENAME = 'i:\log_files\logdata1.ldf', 
    SIZE = 800MB, 
    MAXSIZE = 1000MB, 
    FILEGROWTH = 200MB)

    Из комментариев к этому примеру видно, что перед заданием первичного файла можно в явном виде задать первичную группу файлов. Но явное задание не обязательно, т.к. по умолчанию считается, что происходит задание первичной группы файлов. Две другие группы файлов, customers_group и products_group, задаются непосредственно перед определениями размещаемых в них файлов. Все файлы, перечисленные после определения группы файлов, будут помещаться в эту группу файлов до тех пор, пока не появится определение новой группы файлов или не появится предложение LOG ON.

    Обратите внимание на обозначения дисков для файлов. Каждый из файлов создается на своем диске, чтобы при создании таблиц и индексов в группах файлов данные могли бы равномерно распределяться по многим дискам. Например, данные из таблицы, созданной в группе файлов customers_group разместятся на нескольких дисках, на которых будут располагаться файлы customer_data1.ndf, customer_data2.ndf и customer_data3.ndf. Файл журнала тоже располагается на отдельном диске, на котором не располагаются никакие файлы данных, благодаря чему становится возможной запись файла журнала с последовательным вводом-выводом (перемещением записывающих головок дискового накопителя только на соседние дорожки).

    Если вы не хотите, чтобы SQL Server производил автоматический рост файла, то задайте FILEGROWTH=0, тогда файлу будет разрешено заполнять только первоначально отведенное для него пространство. Эту настройку можно задать, когда происходит работа со статическими таблицами, т.е. с таблицами, которые не растут. В этом случае в операторе не требуется задавать MAXSIZE, максимальный размер файла будет совпадать с начальной настройкой SIZE.

    Примечание. Те, кто хорошо знаком с SQL Server версии 6.5 или более ранними версиями, заметят, что перед созданием базы данных больше не применяется команда DISK INIT для создания логических устройств. Вместо логических устройств теперь используются файлы.

    Просмотр баз данных

    После того как вы создали базу данных, вы можете применять Enterprise Manager для поиска и просмотра имеющихся в ней объектов. Вы также можете просматривать информацию о базе данных, исполняя команды SQL из средства OSQL с интерфейсом командной строки. Сейчас мы расскажем вам об обоих этих способах просмотра баз данных.

    Применение Enterprise Manager

    Для просмотра информации в базе данных при помощи Enterprise Manager, выполните следующие действия:

  • Находясь в Enterprise Manager, нажимая на значки-плюсы, раскройте списки для группы SQL Server, имя сервера, на котором находится база данных, и папку Databases (см. рис 9.12(рис 9.12) Enterprise Manager с раскрытой папкой Databases
  • Нажмите на имя нужной базы данных, и тогда отобразятся находящиеся в ней объекты (см. рис 9.13(рис 9.13) Объекты из базы данных Northwind
  • Применение команд SQL

    Информацию о базах данных можно просматривать, также запуская команды T-SQL, при помощи окна с приглашением командной строки или из Query Analyzer. Чтобы посмотреть информацию о базе данных при помощи команды SQL, выдаваемой из командной строки, откройте окно с приглашением командной строки и осуществите соединение с SQL Server через OSQL, при помощи, например, такой команды:

    OSQL   -U<имя_пользователя>   -P<пароль>   -S<имя_сервера>

    Когда вы будете набирать эту команду, подставьте в нее вместо слов в угловых скобках свои имя пользователя, пароль и имя сервера (сами угловые скобки вводить не надо).

    Для применения Query Analyzer нажмите на экранную кнопку Start, укажите на Programs, укажите на Microsoft SQL Server, а затем выберите Query Analyzer.

    Теперь вводите команды T-SQL либо в окне Query Analyzer, либо в командной строке OSQL. Для просмотра информации о базах данных запустите такие команды:

    Use MyDB--Задает контекст используемой базы данных
    GO 
    Sp_helpfile--Показывает информацию для всех файлов базы данных
    GO--Чтобы посмотреть информацию только для некоторого файла, укажите его имя 
    Sp_helpdb MyDB--То же самое, но выдается также информация о месте на диске, 
        выделенном  для базы данных 
    GO 
    Sp_helpfilegroup--Показывает информацию о группах файлов данной базы данных 
    GO--Чтобы посмотреть информацию только о некоторой группе файлов, --укажите ее имя
    Sp_helpdb--Показывает информацию обо всех базах данных
    GO
    Дополнительная информация.Подробности об использовании этих команд и о том, как расшифровывать выдаваемую ими информацию, вы найдете в SQL Server Books Online.

    Удаление баз данных

    Когда-нибудь вам может понадобиться удалить какую-либо базу данных. Помните, что это – "дорога в одну сторону"; удалив базу данных, вы сможете восстановить ее только из резервной копии. Поэтому безопаснее всего будет перед удалением базы данных выполнить ее резервное копирование, на случай, если эта база данных снова понадобится в будущем. Базы данных можно удалять как при помощи Enterprise Manager, так и командами T-SQL.

    Применение Enterprise Manager

    Как уже говорилось в лекции 8, при помощи Enterprise Manager можно не только просматривать информацию, но и администрировать базы данных. Чтобы полностью удалить базу данных и все ее файлы, выполните следующие действия.

  • Находясь в Enterprise Manager, раскройте группу SQL Server, а затем раскройте имя сервера, на котором установлена база данных.
  • Раскройте папку Databases, чтобы стали видны имеющиеся базы данных.
  • Нажмите правой кнопкой мыши на имя удаляемой базы данных, а затем выберите Delete в контекстном меню. Появится сообщение Delete Database об удалении базы данных (рис 9.14(рис 9.14) Окно сообщения Delete Database
  • Примечание. Вы не сможете удалить базу данных master (главную системную базу данных).

    Применение команд SQL

    Администрировать базы данных можно и при помощи команд T-SQL. Как мы уже говорили ранее, команды T-SQL можно запускать из Query Analyzer или из окна с приглашением командной строки. Чтобы удалить базу данных при помощи команды T-SQL, откройте или Query Analyzer (мы уже объясняли, как это сделать), или окно с приглашением командной строки, и осуществите соединение с SQL Server через OSQL, при помощи такой команды:

    OSQL   -U<имя_пользователя>   -P<пароль>   -S<имя_сервера>

    Помните, что удаление базы данных является неотменяемым действием. Для удаления баз данных применяется T-SQL-команда DROP DATABASE. Ниже показаны команды, которые удалят базу данных MyDB и все ее файлы:

    USE master--Для запуска команды DROP DATABASE вы должны 
    GO  --применять базу данных master 
    DROP DATABASE MyDB --Единственным параметром этой команды является имя удаляемой базы данных. 
    GO

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

    Заключение

    Прочитав эту лекцию, вы приобрели более широкие знания о файлах данных, файлах журналов и о группах файлов SQL Server 2000, а также об автоматическом росте файлов. Теперь вы знаете, как создать базу данных, применяя мастер Create Database Wizard, SQL Server Enterprise Manager и команды T-SQL. Вы также знаете два способа для просмотра информации о базах данных и о файлах и знаете, как удалять базы данных. Теперь вы можете начать создавать таблицы внутри своих баз данных – этой теме посвящена лекция 10.

    Вернуться к учебному плану