Сен 15

Основы языка SQL

Федорук В.Г.
fedoruk@wwwcdl.bmstu.ru
263-65-26

АННОТАЦИЯ

Данное учебное пособие предназначено для изучения основ языка SQL – стандартного языка манипулирования данными в СУБД, реализующих реляционную модель данных. Описывается синтаксис наиболее употребимых операторов языка SQL, приводятся примеры. Обучающимся дается возможность в интерактивном режиме проверить свои знания.
Учебная база данных реализована в среде СУБД mySQL, средства доступа к ней встроены в учебное пособие.

Краткие сведения из теории

Язык SQL (Structured Query Language – структурированный язык запросов) представляет собой стандартный высокоуровневый язык описания данных и манипулирования ими в системах управления базами данных (СУБД), построенных на основе реляционной модели данных [1].

Язык SQL был разработан фирмой IBM в конце 70-х годов. Первый международный стандарт языка был принят международной стандартизирующей организацией ISO в 1989 г. [2], а новый (более полный) – в 1992 г. [3]. В настоящее время все производители реляционных СУБД поддерживают с различной степенью соответствия стандарт SQL92.

Единственной структурой представления данных (как прикладных, так и системных) в реляционной базе данных (БД) является двумерная таблица. Любая таблица может рассматриваться как одна из форм представления теоретико-множественного понятия отношение (relation), отсюда название модели данных – ?реляционная?.
В реляционной модели данных таблица обладает следующими основными свойствами:

  1. идентифицуруется уникальным именем;
  2. имеет конечное (как правило, постоянное) ненулевое количество столбцов;
  3. имеет конечное (возможно, нулевое) число строк;
  4. столбцы таблицы идентифицируются своими уникальными именами и номерами;
  5. содержимое всех ячеек столбца принадлежит одному типу данных (т.е. столбцы однородны), содержимым ячейки столбца не может быть таблица;
  6. строки таблицы не имеют какой-либо упорядоченности и идентифицируются только своим содержимым (т.е. понятие ?номер строки? не определено);
  7. в общем случае ячейки таблицы могут оставаться ?пустыми? (т.е. не содержать какого-либо значения), такое их состояние обозначается как NULL.

Примечание. Необходимо иметь в виду, что видимая пользователям СУБД логическая организация данных (в нашем случае с помощью реляционной модели) может очень слабо коррелироваться с их физической организацией в памяти ЭВМ.

На содержимое таблиц допустимо накладывать ограничения в виде:

  1. требования уникальности содержимого каждой ячейки какого-либо столбца и/или совокупности ячеек в строке, относящихся к нескольким столбцам;
  2. запрета для какого-либо столбца (столбцов) иметь ?пустые? (NULL) ячейки.

Ограничение в виде требования уникальности тесно связано с понятием ключа таблицы. Ключом таблицы называется столбец или комбинация столбцов, содержимое ячеек которого(ых) используется для прямого доступа (?быстрого? определения местоположения) к строкам таблицы. Различают ключи первичный (он может быть только единственным для каждой таблицы) и вторичные. Первичный ключ уникален и однозначно идентифицирует строку таблицы. Столбец строки, определенный в качестве первичного ключа, не может содержать ?пустое? (NULL) значение в какой-либо своей ячейке. Вторичный ключ определяет местоположение, в общем случае, не одной строки таблицы, а нескольких ?подобных? (в любом случае ускоряя доступ к ним, хотя не в такой степени как ключ первичный).
Ключи используются внутренними механизмами СУБД для оптимизации затрат на доступ к строкам таблиц (путем, например, их физического упорядочения по значениям ключей или построения двоичного дерева поиска).

Основными операциями над таблицами являются следующие.

  1. Проекция – построение новой таблицы из исходной путем включения в нее избранных столбцов исходной таблицы.
  2. Ограничение – построение новой таблицы из исходной путем включения в нее тех строк исходной таблицы, которые отвечают некоторому критерию в виде логического условия (ограничения).
  3. Объединение – построение новой таблицы из 2-ух или более исходных путем включения в нее всех строк исходных таблиц (при условии, конечно, что они подобны).
  4. Декартово произведение – построение новой таблицы из 2-ух или более исходных путем включения в нее строк, образованных всеми возможными вариантами конкатенации (слияния) строк исходных таблиц. Количество строк новой таблицы определяется как произведение количеств строк всех исходных таблиц.

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

Кроме перечисленных выше в языке SQL реализованы операции модификации содержимого строк таблицы и пополнения таблицы новыми строками (что теоретически может рассматриваться как операция объединения), а также операции управления таблицами.
Рассмотренные выше операции над таблицами реляционной БД обладая функциональной полнотой, будучи реализованы на практике в своем ?чистом? каноническом виде, как правило, крайне неэкономичны (в первую очередь это относится к комбинации операций ограничения и декартового произведения). Разработчики реальных реляционных СУБД прибегают ко всевозможным приемам и ?ухищрениям? для минизации вычислительных затрат (в первую очередь, машинного времени) при выполнении этих операций. Общим способом, нашедшим отражение в языке SQL, повышения эффективности выполнения запросов в реляционных СУБД  являются импользование ключей индексов.

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

В настоящее время наибольшее распространение получили реляционные SQL СУБД двух групп:

  1. мощные крупные коммерческие СУБД, ориентированные на хранение огромных объемов информации (от гигабайт);
  2. мобильные компактные свободно распространяемые (в том числе и в исходных кодах) СУБД, использование которых оправдано и для БД объемом всего лишь в десятки килобайт.

Наиболее известными СУБД первой группы являются:

К наиболее популярным СУБД второй группы относятся:

В данном учебном пособии практические упражнения, которые может выполнить обучающийся после изучения основ языка SQL, реализуются средствами СУБД mySQL.

Все перечисленные выше СУБД построены по принципу ?клиент-сервер?, как это показано на рисунке ниже.

SQL-сервер реализует собственно хранение данных и манипулирование ими. Он принимает запросы на языке SQL от своих клиентов, выполняет их и возвращает результаты (чаще всего в виде вновь построенных таблиц) клиентам. Для общения с клиентами используется специальный протокол (как правило, реализованный в виде протокола прикладного уровня стека сетевых протоколов TCP/IP).
Клиентскую часть СУБД составляют клиенты трех основных типов.

  • Интерактивные клиенты, обеспечивающие пользователю-человеку возможность общения с SQL-сервером непосредственно с помощью языка SQL.
  • ИПП-клиенты, обеспечивающие интерфейс прикладного программирования (ИПП) прикладным программам, использующим средства SQL-сервера. Такой ИПП может быть средством общения прикладной программы с SQL-сервером на языке SQL или набором стандартных функций доступа к реляционной SQL БД без формирования символьных строк запросов (например, стандартный интерфейс ODBC).
  • WWW-клиенты, встраиваемые в World Wide Web-сервера и обеспечивающие доступ к информационным возможностям SQL-сервера пользователям сети Internet по протоколу HTTP (протоколу передачи гипертекстовых документов).

Именно WWW-клиент СУБД mySQL используется в учебном пособии для выполнения практических упражнений.

Основы синтаксиса языка SQL

?Программа? на языке SQL представляет собой простую линейную последовательность операторов языка SQL. Язык SQL в своем ?чистом? виде операторов управления порядком выполнения запросов к БД (типа циклов, ветвлений, переходов) не имеет.
Операторы языка SQL строятся с применением:

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

Все ключевые слова, имена функций и, как правило, имена таблиц и столбцов представляются 7-мибитными символами кодировки ASCII (иначе говоря – латинскими буквами).
В языке SQL не делается различия между прописными (большими) и строчными (маленькими) буквами, т.е., например, строки ?SELECT?, ?Select?, ?select? представляют собой одно и то же ключевое слово.
Для конструирования имен таблиц и их столбцов допустимо использовать буквы, цифры и знак ?_? (подчеркивание), но первым символом имени обязательно должна быть буква.
Запрещено использование ключевых слов и имен функций в качестве идентификаторов таблиц и имен столбцов. Полный список ключевых слов и имен функций (а он весьма обширен) можно найти в документации на конкретную СУБД.
Оператор начинается с ключевого слова-глагола (например, ?CREATE? – создать, ?UPDATE? – обновить, ?SELECT? – выбрать и т.п.) и заканчивается знаком ?;? (точка с запятой). Оператор записывается в свободном формате и может занимать несколько строк. Допустимыми разделителями лексических единиц в операторе являются:

  • один или несколько пробелов,
  • один или несколько символов табуляции,
  • один или несколько символов ?новая строка?.

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

  • Прописными (большими) буквами (напрмер, SELECT, FROM, WHERE) набраны зарезервированные слова.
  • Курсивом (например, имя_табл, сложн_условие) набраны переменные (нетерминальные символы), подлежащие замене в реальном операторе конструкцией из терминальных символов (идентификаторов, знаков операций, имен функций и т.п.).
  • В квадратные скобки (?[...]?) заключается необязательная часть оператора, которую можно опустить при создании реального оператора (сами квадратные скобки в текст оператора не включаются).
  • Вертикальная черта (?|?) означает возможность выбора (?или?) из двух или нескольких вариантов синтаксической конструкции (сама вертикальная черта в текст оператора не включается). Подчеркнутый вариант (например, в ?[ ALL | DISTINCT }?) является умолчательным.
  • Последовательность символов ?, ...? обозначает возможность повторения произвольное количество раз (в том числе и нулевое) предшествующей запятой конструкции. Символ ?,? включается в реальный оператор в качестве разделителя перед каждым повторением конструкции.

К сожалению, разработчики реальных СУБД неаккуратно обращаются с требованиями стандартов языка SQL в части комментариев. Поэтому комментарии при использовании в различных СУБД в текстах ?программ? на языке SQL могут помечаться следующими способами:

  • от двойного минуса (?--?) до конца строки;
  • от символа ?#? до конца строки;
  • между последовательностями ?/*? и ?*/? (стиль комментариев языка СИ).

Учебная база данных

В качестве примера в учебном пособии рассматривается БД, содержащая информацию, используемую для решения двумерной (плоской) задачи анализа напряженно-деформированного состояния механического объекта методом конечных элементов [4].

Метод конечных элементов (МКЭ) – универсальный метод решения краевых задач (систем дифференциальных уравнений в частных производных с краевыми условиями), к которым относится и задача анализа (моделирования) напряженно-деформированного состояния плоских механических объектов. Одним из основных этапов метода является этап разбиения ?тела? моделируемого объекта на элементарные участки, называемые конечными элементами (КЭ). Для плоских объектов чаще всего такие КЭ представляют собой треугольники. Пример покрытия объекта (типа рычага) сеткой конечных элементов представлен ниже.

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

Для идентификации узлов и КЭ их помечают номерами (числами из натурального ряда 1…). Задача ручного разбиения двумерного (а тем более трехмерного) объекта на КЭ является трудоемкой и нетривиальной, поэтому в реальных промышленных системах анализа, реализующих МКЭ, существует, как правило, несколько автоматических процедур покрытия исследуемой области сеткой КЭ. Однако сгенерированная любым способом (автоматически/вручную/комбинированно) сетка КЭ нуждается в проверке некоторым набором правил ее корректности, обеспечивающих минимальность вычислительных затрат и точность получаемых результатов.

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

В задачах исследования поведения механических объектов под воздействием внешних факторов с каждым КЭ связан набор свойств материала, покрываемого КЭ, в состав которого входят, например, плотность (density) среды, модуль Юнга (elastic module), коэффициент Пуассона (Poisson’s coefficient), прочность (strength) и др.

Задачей МКЭ является исследование поведения объектов (в нашем примере механических) при различных граничных условиях (воздействиях внешней среды), в состав которых входят:

  • произвольно направленная сила;
  • произвольно направленный момент сил;
  • ?заделка?, жестко фиксирующая положение узла сетки по линейным координатам и углу вращения;
  • шарнир, позволяющий узлу свободно ?вращаться? относительно его фиксируемого положения по линейным координатам;
  • ?каток?, дающий узлу возможность свободно перемещаться по оси x или y.

Описанная выше информация является предметом хранения и манипулирования в учебной БД, используемой в данном пособии. Основу БД составляют четыре таблицы:

  1. таблица ?nodes?, содержащая информацию об узлах КЭ-сетки (идентификатор, x- и y-координаты);
  2. таблица ?elements?, содержащая информацию обо всех КЭ, составляющих сетку (номер КЭ, идентификаторы трех вершин, наименование материала);
  3. таблица ?materials?, содержащая информацию о свойствах различных конструкционных материалов (наименование, плотность, модуль Юнга, коэффициент Пуассона, прочность);
  4. таблица ?loadings?, содержащая информацию о граничных условиях решаемой задачи (вид условия, его ?направление?, номер узла приложения, числовое значение).

Типы данных языка SQL

Типы данных, используемые в языке SQL для хранения информации в столбцах таблиц БД, весьма разнообразны. К сожалению, производители конкретных реляционных СУБД  считают своим долгом ?улучшить? множество типов данных, регламентируемых стандартом,  реализуя свои собственные версии и расширения.
Автором учебного пособия в качестве базовых  предлагается считать следующие типы данных:

  • INT[(len)] – целое число длиной 4 байта, представляемое при выводе максимально len цифрами;
  • SMALLINT[(len)] – целое число длиной 2 байта, представляемое при выводе максимально len цифрами;
  • FLOAT[(len,dec)] – действительное число, представляемое при выводе максимально len символами с dec цифрами после десятичной точки;
  • CHAR(size) – строка символов фиксированной длины размером size символов;
  • VARCHAR(size) – строка символов переменной длины максимальным размером до size символов;
  • BLOB (Binary Large OBject) – массив произвольных (двоичных) байтов (максимальный размер зависит от реализации, обычно это 65535 байт); этот тип данных может использоваться, например, для хранения изображений;
  • DATE – астрономическая дата;
  • TIME – астрономическое время.

Символьные константы (типа CHAR и VARCHAR) записываются как последовательности символов, заключенные в одиночные апострофы, например ?brass? (латунь).
Десятичные константы (типа FLOAT) могут записываться в ?научной? нотации как последовательности следующих компонент:

  • знак числа;
  • десятичное число с точкой;
  • символ ?е?;
  • знак (?+? или ?-?) показателя степени;
  • целое число, играющее роль показателя степени числа 10.

Например, десятичное число -0,123 может быть записано как -12.3е-2.

Отличие типов данных CHAR и VARCHAR заключается в том, что для хранения в таблице строк символов типа CHAR используется точно size байт (хотя содержание хранимых строк может быть значительно короче), в то время как для строк типа VARCHAR незанятые символами строк (?пустые?) байты в таблице не хранятся.
Подчеркнем, что величины len и dec (в отличие от size) не влияют на размер хранения данных в таблице, а только форматируют вывод данных из таблицы.

Примечание. Тип данных BLOB поддерживается непосредственно не всеми СУБД, однако каждая из них предлагает его аналог (например, BINARY или IMAGE).

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

Манипулирование таблицами

Для создания, изменения и удаления таблиц в SQL БД используются операторы CREATE TABLE, ALTER TABLE и DROP TABLE.

Создание таблицы

Создание таблицы в БД реализуется оператором CREATE TABLE, имеющим следующий синтаксис

CREATE TABLE имя_табл (с_спецификация, ...);

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

  1. Описание столбца таблицы
    имя_столбца тип_данных [NULL]

    где имя_столбца -  имя столбца таблицы, а тип_данных – спецификация одного из типов данных, рассмотренных в разделе Типы данных языка SQL. Необязательное ключевое слово NULL означает, что ячейкам данного столбца разрешено быть пустыми (т.е. не содержать какого-либо значения).

  2. Описание столбца таблицы
    имя_столбца тип_данных NOT NULL [DEFAULT по_умолч] [PRIMARY KEY]

    где конструкция NOT NULL запрещает иметь в таблице пустые ячейки в данном столбце. Конструкция PRIMARY KEY указывает, что содержимое столбца будет играть роль первичного ключа для создаваемой таблицы. Конструкция DEFAULT по_умолч переопределяет имеющееся для столбцов каждого типа данных значение ?по умолчанию? (например, 0 для числовых типов), используемое при добавлении в таблицу оператором INSERT INTO строк, не содержащих значений в этом столбце.

  3. Описание первичного ключа
    PRIMARY KEY имя_ключа (имя_столбца, ...)

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

  4. Описание вторичного ключа
    KEY имя_ключа (имя_столбца, ...)

Примеры

Ниже приводятся примеры использования оператора CREATE TABLE для создания четырех таблиц учебной БД.

CREATE TABLE nodes (
    id SMALLINT NOT NULL PRIMARY KEY,    # номер узла
    x FLOAT NOT NULL,                    # x-координата
    y FLOAT NOT NULL);                   # y-координата
CREATE TABLE elements (
    id SMALLINT NOT NULL PRIMARY KEY,    # номер КЭ
    n1 SMALLINT NOT NULL,                # номер первой вершины
    n2 SMALLINT NOT NULL,                # номер второй вершины
    n3 SMALLINT NOT NULL,                # номер третьей вершины
    props CHAR(12) NOT NULL DEFAULT 'steel');

Столбец props таблицы elements предназначен для хранения названия материала КЭ и не может содержать ?пустых? полей, его значением ?по умолчанию? является строка символов ?steel? (сталь).

CREATE TABLE materials (
    name CHAR(12) NOT NULL PRIMARY KEY,   # название материала
    density FLOAT NOT NULL,               # плотность
    elastics FLOAT NOT NULL,              # модуль Юнга
    poisson FLOAT NOT NULL,               # к-т Пуассона
    strength FLOAT NOT NULL);             # прочность
 
CREATE TABLE loadings (
    type CHAR(1) NOT NULL,                # тип граничного условия
    direction CHAR(1),                    # направление действия
    node SMALLINT NOT NULL,               # номер узла приложения
    value FLOAT,                          # числовое значение
    KEY key_node (node) );                # вторичный ключ

В таблице граничных условий loadings поля столбцов direction и value могут быть пустыми (иметь значение NULL), поскольку не все виды нагрузок имеют направление действия и/или величину.
Номер узла node приложения граничного условия определяется как ключ поиска в таблице, т.к. типичный запрос на поиск в таблице loadings – это запрос на определение граничных условий для конкретного узла. Однако этот ключ не может быть первичным, поскольку к одному узлу допустимо приложение нескольких граничных условий (например, момент внешних сил в шарнире).
Следует отметить, что в этой таблице первичный ключ может быть сконструирован только составным из столбцов type, direction и node.

Модификация таблицы

Модификация существующей таблицы в БД реализуется оператором ALTER TABLE, имеющим следующий синтаксис

ALTER TABLE имя_табл м_специкация [,м_спецификация ...]

где м_спецификация имеет различные формы. Ниже рассматриваюся наиболее часто используемые.

  1. Добавление нового столбца
    ADD COLUMN с_спецификация

    где с_спецификация – описание добавляемого столбца в том виде, как оно используется  для создания таблицы оператором CREATE TABLE.

  2. Удаление первичного ключа для таблицы
    DROP PRIMARY KEY
  3. Изменение/удаление значения ?по умолчанию?
    ALTER COLUMN имя_столбца SET по_умолч

    или

    ALTER COLUMN имя_столбца DROP DEFAULT

Пример
Предположим в нашей задаче моделирования состояния плоского механического объекта возникла необходимость учесть дополнительно тепловые эффекты. Для этого, в частности, необходимо иметь сведения о теплофизических параметрах материала объекта (теплоемкости и теплопроводности). Включение дополнительных сведений в таблицу materials требует ее расширения двумя новыми столбцами, что можно реализовать таким оператором языка SQL:

ALTER TABLE materials     ADD COLUMN capacity FLOAT NOT NULL,        # теплоемкость     ADD COLUMN conductivity FLOAT NOT NULL;    # теплопроводность

Удаление таблицы

Удаление одной или сразу нескольких таблиц из БД реализуется оператором DROP TABLE, имеющим следующий простой синтаксис

DROP TABLE имя_табл, ...

Подчеркнем, что оператор DROP TABLE удаляет не только все содержимое таблицы, но и само описание таблицы из БД. Если требуется удалить только содержимое таблицы, то необходимо использовать оператор DELETE FROM.

Добавление строк в таблицу

Для добавления строк в таблицу SQL базы данных используется оператор INSERT INTO. Основные его синтаксические формы описываются ниже.

  1. Добавление строки перечислением значений всех ее ячеек
    INSERT INTO имя_табл VALUES (знач, ...);

    где знач – константное значение ячейки строки. Значения ячеек в списке должны соответствовать порядку перечисления спецификаций столбцов таблицы в операторе CREATE TABLE. Допустимо в качестве знач указывать ключевое слово NULL, что означает отсутствие значения для соответствующей ячейки строки.
    Перед добавлением новой строки в таблицу СУБД проверяет допустимость перечисленных значений, используя описание столбцов таблицы из оператора CREATE TABLE.

  2. Добавление строки с использованием списка имен столбцов
    INSERT INTO имя_табл (имя_столбца, ...) VALUES (знач, ...);

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

    • ячейки, соответствующие столбцам со спецификацией NULL в операторе CREATE TABLE, будут пустыми;
    • ячейки, соответствующие столбцам со спецификацией NOT NULL в операторе CREATE TABLE, заполняются значениями ?по умолчанию?.
  3. Добавление строк по результатам запроса к БД
    INSERT INTO имя_табл [(имя_столбца, ...)] SELECT ...

    Такой оператор дает возможность добавить в таблицу 0, 1 или сразу несколько новых строк, полученных в результате запроса к базе данных, реализуемого оператором SELECT.

Пример
Добавление информации о новом узле КЭ-сетки в таблицу nodes:

INSERT INTO nodes VALUES (25, 6.3, 1.8);

Отметим, что добавление новой строки будет удачным только в том случае, если узла с таким же идентификатором в таблице nodes еще нет – дело в том, что столбец id этой таблицы объявлен первичным ключом и, следоваательно, значения всех его ячеек должны быть уникальны.

Пример
Добавление информации о новом КЭ в таблицу elements:

INSERT INTO elements     (n1, n2, n3, id) VALUES     (14, 25, 18, 46);

В результате в таблице elements появится новая строка, содержащая в поле props значение ?steel?, как умолчательное значение, определенное при создании таблицы.

Пример
Включение в таблицу materials сведений о новом материале:

INSERT INTO materials VALUES (     'wood', 0.6, 2.0, 0.12, 50);

Пример
Добавление в таблицу граничных условий loadings информации об ориентированном горизонтально ?катке? в узле 2:

INSERT INTO loadings VALUES (     'r', 'x', 2, NULL);

Выборка данных из таблиц

Для извлечения данных, содержащихся в таблицах SQL БД, используется оператор SELECT, имеющий в общем случае сложный и многовариантный синтаксис. В данном учебном пособии рассматриваются только несложные и наиболее часто используемые примеры конструкций оператора SELECT.
Упрощенно оператор SELECT выглядит следующим образом:

SELECT [ALL | DISTINCT] в_выражение, ...
    FROM имя_табл [син_табл], ...
    [WHERE сложн_условие]
    [GROUP BY полн_имя_столбца|ном_столбца, ...]
    [ORDER BY полн_имя_столбца|ном_столбца [ASC|DESC], ...]
    [HAVING сложн_условие];

Результатом работы оператора является выводимая на стандартный вывод (экран дисплея) вновь построенная таблица, для которой

  • количество и смысл (семантика) столбцов определяется списком элементов в_выражение;
  • содержимое строк определяется содержимым исходных таблиц из списка FROM и критерием выборки, задаваемым сложн_условие.

При описании синтаксиса оператора SELECT использованы следующие обозначения:

  • син_табл – необязательный синоним имени таблицы, используемый для сокращения длины записи выражений и условий в операторе SELECT.
  • полн_имя_столбца – полное имя столбца в виде
    [имя_табл|син_табл.]имя_столбца

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

  • ном_столбца – номер столбца результирующей таблицы.

    Описание столбцов результирующей таблицы

1. Специальным (и часто используемым) видом в_выражение является символ ?*?, имеющий смысл ?все столбцы таблиц из списка FROM?.
Пример
Вывод всего содержимого таблицы materials.

SELECT * FROM materials;
+--------------+---------+----------+---------+----------+ | name         | density | elastics | poisson | strength | +--------------+---------+----------+---------+----------+ | steel        |    7.80 |   200.00 |    0.25 |  1000.00 | | aluminium    |    2.70 |    65.00 |    0.34 |   600.00 | | concrete     |    5.60 |    25.00 |    0.12 |   300.00 | | duraluminium |    2.80 |    70.00 |    0.31 |   700.00 | | titanium     |    4.50 |   116.00 |    0.32 |   950.00 | | brass        |    8.50 |    93.00 |    0.37 |   300.00 | +--------------+---------+----------+---------+----------+

2. Простым (и также часто используемым) случаем в_выражение является полное имя столбца одной из таблиц списка FROM.
Пример
Пусть необходимо определить идентификаторы всех узлов КЭ-сетки, к которым приложено какое-либо граничное условие, при этом необходимо знать тип приложенного условия. Эта задача может быть решена с помощью следующего оператора:

SELECT node, type FROM loadings;
+------+------+ | node | type | +------+------+ |    1 | r    | |    2 | r    | |    3 | r    | |   14 | h    | |   27 | f    | |   27 | f    | +------+------+

Полученная результирующая таблица содержит дублирующие строки для узла 27. Избежать этого можно, добавив в оператор ключевое слово DISTINCT, запрещающее включение в итоговую таблицу одинаковых строк.

SELECT DISTINCT node, type FROM loadings;
+------+------+ | node | type | +------+------+ |    1 | r    | |    2 | r    | |    3 | r    | |   14 | h    | |   27 | f    | +------+------+

3. В общем случае в_выражение может представлять собой сложное скобочное выражение над содержимым столбцов таблицы, использующее арифметические, строковые, логические операции и функции. Наиболее часто используемые функции описаны ниже в таблицах 1, 2, 3.
Пример
Используемая нами таблица свойств материалов materials содержит в своих столбцах density и elastics значащие разряды чисел, выражающих, соответственно, плотность и модуль Юнга каждого материала. Для получения реальных значений этих свойств в системе единиц измерения СИ (кг/м3 и Па) необходимо домножить их на масштабные коэффициенты, что реализуется следующим оператором

SELECT name, density*1000, elastics*1e+9 FROM materials;
+--------------+--------------+-----------------+ | name         | density*1000 | elastics*1e+9   | +--------------+--------------+-----------------+ | steel        |      7800.00 | 200000000000.00 | | aluminium    |      2700.00 |  65000000000.00 | | concrete     |      5600.00 |  25000000000.00 | | duraluminium |      2800.00 |  70000000000.00 | | titanium     |      4500.00 | 116000000000.00 | | brass        |      8500.00 |  93000000000.00 | +--------------+--------------+-----------------+

Таблица 1. Арифметические функции

Синтаксис Возвращаемое значение
ABS(x) абсолютное значение x
SQRT(x) квадратный корень от x
MAX(x, y, …) значение наибольшего элемента из списка x, y, …
MIN(x,y, …) значение наименьшего элемента из списка x, y, …

Примечание. x, y – числа или выражения, имеющие числовой результат.
Таблица 2. Строковые функции

Синтаксис Возвращаемое значение
LEFT(s,n) первые n символов строки s
RIGHT(s.n) последние n символов строки s
SUBSTRING(s, m, n) строка, получаемая копированием n символов из строки s, начиная с m-ого символа строки s
LCASE(s) строка, полученная из s преобразованием всех букв в строчные
UCASE(s) строка, полученная из s преобразованием всех букв в прописные
CONCAT(s1, s2, …) строка, полученная конкатенацией (слиянием) строк s1, s2, …
LENGTH(s) длина строки s

Примечание. s, s1,s2 – строки или выражения, имеющие результат в виде строки. n, m – числа или выражения, имеющие числовой результат.
Таблица 3. Операторы и функции, возвращающие логическое значение (1 – ?истина?, 0 – ?ложь?)

Синтаксис Возвращаемое значение
x = y
x ?? y
x ? y
x ? y
x ?= y
x ?= y
1 (?истина?) или 0 (?ложь?) в зависимости от результата операции сравнения (соответственно, ?равно?, ?не равно?, ?больше?, ?меньше?, ?не больше?, ?не меньше?)
NOT l 1, если l=0
0, если l=1
l1 AND l2 результат логической операции ?И? над l1 и l2
l1 OR l2 результат логической операции ?ИЛИ? над l1 и l2
BETWEEN (x, y z) результат выполнения логического выражения (x?=y AND x?=z)
ISNULL (v) 1, если v имеет значение ?пусто? (NULL)
0, в противном случае
IFNULL (v1, v2) v1, если v1 не ?пусто?
v2, в противном случае
s LIKE образец 1, при удачном сопоставлении строки s с образец
0, в противном случае
s NOT LIKE образец 0, при удачном сопоставлении строки s с образец
1, в противном случае

Примечание. x, y, z – числа или выражения, имеющие числовой результат. l, l1, l2 – логические константы (1 или 0) или логические выражения. s – строка или выражение, имеющее результат в виде строки. v, v1, v2 – переменные или выражения.
образец – константа в виде строки символов, возможно, содержащая метасимволы ?%? и ?_?. В образец метасимвол ?_? сопоставим с любым одиночным символом строки s, метасимвол ?%? – с любой цепочкой символов любой ( в том числе нулевой) длины.

Пример
Пусть необходимо при выводе информации о плотности материалов из таблицы materials идентифицировать материалы, имеющие в своем составе алюминий (правильнее, имеющие в своем названии упоминание об алюминии). Эта задача может быть решена с помощью следующего оператора.

SELECT name, name LIKE '%alu%', density FROM materials;
+--------------+-------------------+---------+ | name         | name LIKE '%alu%' | density | +--------------+-------------------+---------+ | steel        |                 0 |    7.80 | | aluminium    |                 1 |    2.70 | | concrete     |                 0 |    5.60 | | duraluminium |                 1 |    2.80 | | titanium     |                 0 |    4.50 | | brass        |                 0 |    8.50 | +--------------+-------------------+---------+

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

SELECT id, n1, n2, n3, MAX(ABS(n1-n2),ABS(n1-n3),ABS(n2-n3))
    FROM elements;
+----+----+----+----+---------------------------------------+ | id | n1 | n2 | n3 | MAX(ABS(n1-n2),ABS(n1-n3),ABS(n2-n3)) | +----+----+----+----+---------------------------------------+ | 29 | 24 | 26 | 25 |                                     2 | | 30 | 24 | 25 | 23 |                                     2 | | 31 | 22 | 26 | 24 |                                     4 | |  1 |  2 |  3 |  5 |                                   &nbs p; 3 | |  2 |  1 |  2 |  4 |                                   &nbs p; 3 | |  3 |  2 |  5 |  4 |                                   &nbs p; 3 | |  4 |  4 |  5 |  6 |                                   &nbs p; 2 | | 25 | 24 | 23 | 21 |                                     3 | | 20 | 20 | 19 | 17 |                                     3 | | 21 | 21 | 19 | 20 |                                     2 | | 22 | 21 | 23 | 19 |                                     4 | | 12 | 12 | 14 | 13 |                                     2 | | 13 | 12 | 15 | 14 |                                     3 | | 14 | 13 | 14 | 18 |                                     5 | | 26 | 28 | 27 | 22 |                                     6 | |  7 |  7 |  8 |  9 |                                   &nbs p; 2 | |  8 |  8 | 10 |  9 |                                     2 | |  9 |  9 | 10 | 11 |                                     2 | | 10 | 10 | 12 | 11 |                                     2 | | 11 | 11 | 12 | 13 |                                     2 | | 16 | 16 | 17 | 14 |                                     3 | | 17 | 18 | 17 | 14 |                                     4 | | 18 | 16 | 20 | 17 |                                     4 | | 19 | 19 | 18 | 17 |                                     2 | | 15 | 15 | 16 | 14 |                                     2 | | 27 | 27 | 29 | 26 |                                     3 | | 28 | 22 | 27 | 26 |                                     5 | |  5 |  5 |  7 |  6 |                                   &nbs p; 2 | |  6 |  5 |  8 |  7 |                                   &nbs p; 3 | | 23 | 20 | 22 | 21 |                                     2 | | 24 | 24 | 21 | 22 |                                     3 | +----+----+----+----+---------------------------------------+

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

Синтаксис Возвращаемое значение
SUM(x) сумма значений столбца x результирующей таблицы
MAX(x) наибольшее значение из всех значений ячеек столбца x
MIN(x) наименьшее значение из всех значений ячеек столбца x
AVG(x) среднее значение для всех значений ячеек столбца x
COUNT(x) общее количество ячеек в столбце x

Примечание. Функции MAX(…) и MIN(…) с одним аргументом являются агрегативными функциями, они же с двумя и более аргументами – обычные функции (см. таблицу 1).

Пример
Для отыскания наибольшего значения модуля Юнга для материалов, имеющихся в таблице materials, можно использовать следующий оператор

SELECT MAX(elastics) FROM materials;
+---------------+ | MAX(elastics) | +---------------+ |        200.00 | +---------------+

Пример
Следующий оператор SELECT позволяет определить общее количество конечных элементов в КЭ-сетке из нашего примера.

SELECT COUNT(*) FROM elements;
+----------+ | COUNT(*) | +----------+ |       31 | +----------+

Описание критерия выборки содержимого строк результирующей матрицы

В качестве критерия выбора информации из таблиц списка FROM оператора SELECT выступает сложн_условие, записываемое после ключевого слова WHERE и имеющее следующий вид:

прост_условие
или
прост_условие AND сложн_условие
или
прост_условие OR сложн_условие

Типичными вариантами прост_условие являются следующие.

  • Сравнение
    полн_имя_столбца @ полн_имя_столбца_или_константа

    где @ – один из операторов сравнения: ? (?больше?), ? (?меньше?), ?= (? не меньше?), ?= (?не больше?), = (?равно?), ?? (?не равно?), а полное_имя_столбца – имя столбца, конкретизированное при необходимости именем или синонимом имени таблицы, как это было описано выше.

  • Сопоставление с образцом
    полн_имя_столбца [NOT] LIKE образец

    где образец имеет вид, описанный в таблице 3.

  • Проверка на ?пустое? значение в ячейке стодбца
    полн_имя_столбца IS [NOT] NULL

При конструировании сложн_условие допустимо использование  круглых скобок для управления порядком вычисления условий.

Примечание. Обратите внимание, что синтаксис сложн_условие существенно ?беднее? синтаксиса в_выражение. Дело в том, что сложн_условие используется (в том числе и на физическом уровне организации БД) на этапе выборки из исходной (возможно, очень большой) таблицы (таблиц) необходимых строк в результирующую. Для сокращения времени прямого доступа к строкам таблиц они (таблицы) снабжаются ключами и индексами. Реальный эффект от использования ключей и индексов может быть достигнут только при условии, что запросы на поиск в таблицах используют в качестве критерия поиска только значения ячеек столбцов в ?чистом? виде, а не в виде их комбинации в сложном выражении.
Конструкция же в_выражение применяется, по сути дела, к значениям столбцов уже результирующей таблицы, поэтому сложность в_выражение на эффективность выполнения запроса практически никакого влияния не оказывает.

Пример
Для определения координат местоположения узла 11 может использоваться следующий оператор:

SELECT * FROM nodes WHERE id = 11;
+----+--------+--------+ | id | x      | y      | +----+--------+--------+ | 11 | -35.00 | -10.00 | +----+--------+--------+

Пример
Пусть необходимо определить идентификаторы всех конечных элементов, имеющих в качестве одной из своих вершин узел 20. Эта задача может быть решена следующим оператором SELECT

 SELECT id FROM elements     WHERE n1 = 20 OR n2 = 20 OR n3 = 20;
+----+ | id | +----+ | 20 | | 21 | | 18 | | 23 | +----+

Пример
Для определения идентификаторов узлов КЭ-сетки, расположенных в первом квадранте системы координат можно использовать следующий оператор

SELECT * FROM nodes     WHERE x ?= 0 AND y ?= 0;
+----+-------+-------+ | id | x     | y     | +----+-------+-------+ | 14 |  0.00 |  0.00 | | 15 |  5.00 | 20.00 | | 16 | 20.00 |  8.00 | +----+-------+-------+

Пример
Следующий оператор SELECT может быть использован для  определения граничных условий, имеющих в качестве одной из своих характеристик численное значение величины

SELECT * FROM loadings WHERE value IS NOT NULL;
+------+-----------+------+--------+ | type | direction | node | value  | +------+-----------+------+--------+ | f    | y         |   27 | -50.00 | | f    | x         |   27 | -10.00 | +------+-----------+------+--------+

Упорядочивание и группирование строк результирующей таблицы

Для обеспечения структурированности в расположении строк результирующей таблицы в операторе SELECT используются конструкции GROUP BY и ORDER BY.

  • Упорядочение строк достигается перечислением полных имен столбцов, по которым в возрастающем (ASC) или убывающем (DESC) порядке сортируются строки результирующей таблицы. При этом строки упорядочиваются в первую очередь по столбцу, указанному первым в списке ORDER BY. Затем, если среди значений ячеек первого столбца есть повторяющиеся, производится упорядочение по второму столбцу и так далее.
    Пример
    Для вывода информации об узлах КЭ-сетки в убывающем порядке их (узлов) идентификаторов может быть использован следующий оператор:

    SELECT * FROM nodes ORDER BY id DESC;
    +----+--------+--------+ | id | x      | y      | +----+--------+--------+ | 29 |  83.00 |  -9.00 | | 28 |  65.00 |  -5.00 | | 27 |  75.00 |  -7.00 | | 26 |  80.00 | -20.00 | | 25 |  75.00 | -35.00 | | 24 |  65.00 | -25.00 | | 23 |  60.00 | -39.00 | | 22 |  60.00 | -15.00 | | 21 |  50.00 | -25.00 | | 20 |  40.00 |  -3.00 | | 19 |  30.00 | -27.00 | | 18 |  10.00 | -20.00 | | 17 |  20.00 | -10.00 | | 16 |  20.00 |   8.00 | | 15 |   5.00 |  20.00 | | 14 |   0.00 |   0.00 | | 13 | -15.00 | -14.00 | | 12 | -15.00 |  15.00 | | 11 | -35.00 | -10.00 | | 10 | -40.00 |  15.00 | |  9 | -55.00 |  -6.00 | |  8 | -65.00 |  15.00 | |  7 | -75.00 |  -3.00 | |  6 | -85.00 |  -1.00 | |  5 | -80.00 |  15.00 | |  4 | -95.00 |  10.00 | |  3 | -80.00 |  20.00 | |  2 | -87.50 |  20.00 | |  1 | -95.00 |  20.00 | +----+--------+--------+

    Пример
    Пусть необходимо вывести информацию о конечных элементах, упорядочив ее;

    • в первую очередь по идентификаторам узлов, являющихся первой вершиной конечного элемента;
    • во вторую очередь по идентификаторам узлов, являющихся второй вершиной конечного элемента;

    Для решения этой задачи можно использовать следующий оператор

    SELECT * FROM elements ORDER BY n1, n2;
    +----+----+----+----+-------+ | id | n1 | n2 | n3 | props | +----+----+----+----+-------+ |  2 |  1 |  2 |  4 | steel | |  1 |  2 |  3 |  5 | steel | |  3 |  2 |  5 |  4 | steel | |  4 |  4 |  5 |  6 | steel | |  5 |  5 |  7 |  6 | steel | |  6 |  5 |  8 |  7 | steel | |  7 |  7 |  8 |  9 | steel | |  8 |  8 | 10 |  9 | steel | |  9 |  9 | 10 | 11 | steel | | 10 | 10 | 12 | 11 | steel | | 11 | 11 | 12 | 13 | steel | | 12 | 12 | 14 | 13 | steel | | 13 | 12 | 15 | 14 | steel | | 14 | 13 | 14 | 18 | steel | | 15 | 15 | 16 | 14 | steel | | 16 | 16 | 17 | 14 | steel | | 18 | 16 | 20 | 17 | steel | | 17 | 18 | 17 | 14 | steel | | 19 | 19 | 18 | 17 | steel | | 20 | 20 | 19 | 17 | steel | | 23 | 20 | 22 | 21 | steel | | 21 | 21 | 19 | 20 | steel | | 22 | 21 | 23 | 19 | steel | | 31 | 22 | 26 | 24 | steel | | 28 | 22 | 27 | 26 | steel | | 24 | 24 | 21 | 22 | steel | | 25 | 24 | 23 | 21 | steel | | 30 | 24 | 25 | 23 | steel | | 29 | 24 | 26 | 25 | steel | | 27 | 27 | 29 | 26 | steel | | 26 | 28 | 27 | 22 | steel | +----+----+----+----+-------+
  • Оператор SELECT может обеспечить вычисление агрегативных функций для групп строк результирующей таблицы. Для этого используется список полных имен столбцов в конструкции GROUP BY. Первое полное имя столбца в списке GROUP BY используется для разбиения строк результирующей таблицы на первичные группы, первичные группы разделяются на ?подгруппы? вторым в списке полным именем столбца и так далее.
    Оператор SELECT выводит значения агрегативных функций для самых ?малых? подгрупп.Пример
    Пусть необходимо определить количество узлов КЭ-сетки, охватываемых каждым видом граничных условий. Для этого может быть использован следующий оператор

    SELECT type, COUNT(*) FROM loadings GROUP BY type;
    +------+----------+ | type | COUNT(*) | +------+----------+ | f    |        2 | | h    |        1 | | r    |        3 | +------+----------+

    Примечание. Конструкция HAVING сложн_условие, как необязательная составная часть предложения GROUP BY, позволяет определять дополнительный (к WHERE сложн_условие) критерий выборки строк в группы.  Этот дополнительный критерий применяется в режиме постпроцессорной обработки к таблице, полученной в результате использования критерия из конструкции WHERE.

    Выборка из нескольких таблиц

    В общем случае оператор SELECT языка SQL дает возможность выборки информации сразу из нескольких таблиц, перечисленных в списке FROM. На концептуальном уровне рассмотрения (уровне реляционной модели данных) такая выборка включает в себя два основных этапа:

    1. построение промежуточной таблицы, представляющей собой декартово произведение таблиц из списка FROM (т.е. таблицы, строки которой представляют собой все возможные сочетания строк исходных таблиц);
    2. копирование в результирующую таблицу всех строк промежуточной, отвечающих критерию из WHERE сложн_условие (если таковой определен).

    Пример
    Пусть необходимо определить значение модуля Юнга для конечного элемента с идентификатором 25. Эта задача может быть решена следующим оператором

    SELECT id, elastics FROM elements, materials     WHERE id = 25 AND props = name;
    +----+----------+ | id | elastics | +----+----------+ | 25 |   200.00 | +----+----------+

    Примечание. Обратите внимание, что в данном примере нигде в операторе SELECT не потребовалось использовать полные имена столбцов различных таблиц. Объясняется это тем, что имена столбцов таблиц elements и materials различны, и поэтому неоднозначностей в именовании быть не может.
    Примечание. Хотя концептуальная модель обработки оператора SELECT со списком FROM из двух и более таблиц подразумевает построение декартового произведения этих табллиц, в реальности этого не происходит в силу ?ограниченности? синтаксиса сложн_условие из конструкции WHERE. Так, в нашем последнем примере запрос на выборку осуществлялся в 2 ?коротких? этапа: 1) из таблицы elements (с использованием первичного ключа) прямым доступом извлекается строка с id=25; 2) из таблицы materials (опять с использованием первичного ключа) прямым доступом извлекается информация о материале ?steel? (сталь). Очевидно, что такой ?оптимизированный? подход несравненно более эффективен по сравнению с каноническим (через декартово произведение).
    Пример
    Для вывода координат трех вершин каждого конечного элемента в КЭ-сетке в одной таблице можно использовать следующий оператор

    SELECT e.id, node1.x, node1.y, node2.x, node2.y, node3.x, node3.y     FROM elements e, nodes node1, nodes node2, nodes node3     WHERE e.n1 = node1.id         AND e.n2 = node2.id         AND e.n3 = node3.id;
    +----+--------+--------+--------+--------+--------+--------+ | id | x      | y      | x      | y      | x      | y      | +----+--------+--------+--------+--------+--------+--------+ | 29 |  65.00 | -25.00 |  80.00 | -20.00 |  75.00 | -35.00 | | 30 |  65.00 | -25.00 |  75.00 | -35.00 |  60.00 | -39.00 | | 31 |  60.00 | -15.00 |  80.00 | -20.00 |  65.00 | -25.00 | |  1 | -87.50 |  20.00 | -80.00 |  20.00 | -80.00 |  15.00 | |  2 | -95.00 |  20.00 | -87.50 |  20.00 | -95.00 |  10.00 | |  3 | -87.50 |  20.00 | -80.00 |  15.00 | -95.00 |  10.00 | |  4 | -95.00 |  10.00 | -80.00 |  15.00 | -85.00 |  -1.00 | | 25 |  65.00 | -25.00 |  60.00 | -39.00 |  50.00 | -25.00 | | 20 |  40.00 |  -3.00 |  30.00 | -27.00 |  20.00 | -10.00 | | 21 |  50.00 | -25.00 |  30.00 | -27.00 |  40.00 |  -3.00 | | 22 |  50.00 | -25.00 |  60.00 | -39.00 |  30.00 | -27.00 | | 12 | -15.00 |  15.00 |   0.00 |   0.00 | -15.00 | -14.00 | | 13 | -15.00 |  15.00 |   5.00 |  20.00 |   0.00 |   0.00 | | 14 | -15.00 | -14.00 |   0.00 |   0.00 |  10.00 | -20.00 | | 26 |  65.00 |  -5.00 |  75.00 |  -7.00 |  60.00 | -15.00 | |  7 | -75.00 |  -3.00 | -65.00 |  15.00 | -55.00 |  -6.00 | |  8 | -65.00 |  15.00 | -40.00 |  15.00 | -55.00 |  -6.00 | |  9 | -55.00 |  -6.00 | -40.00 |  15.00 | -35.00 | -10.00 | | 10 | -40.00 |  15.00 | -15.00 |  15.00 | -35.00 | -10.00 | | 11 | -35.00 | -10.00 | -15.00 |  15.00 | -15.00 | -14.00 | | 16 |  20.00 |   8.00 |  20.00 | -10.00 |   0.00 |   0.00 | | 17 |  10.00 | -20.00 |  20.00 | -10.00 |   0.00 |   0.00 | | 18 |  20.00 |   8.00 |  40.00 |  -3.00 |  20.00 | -10.00 | | 19 |  30.00 | -27.00 |  10.00 | -20.00 |  20.00 | -10.00 | | 15 |   5.00 |  20.00 |  20.00 |   8.00 |   0.00 |   0.00 | | 27 |  75.00 |  -7.00 |  83.00 |  -9.00 |  80.00 | -20.00 | | 28 |  60.00 | -15.00 |  75.00 |  -7.00 |  80.00 | -20.00 | |  5 | -80.00 |  15.00 | -75.00 |  -3.00 | -85.00 |  -1.00 | |  6 | -80.00 |  15.00 | -65.00 |  15.00 | -75.00 |  -3.00 | | 23 |  40.00 |  -3.00 |  60.00 | -15.00 |  50.00 | -25.00 | | 24 |  65.00 | -25.00 |  50.00 | -25.00 |  60.00 | -15.00 | +----+--------+--------+--------+--------+--------+--------+

    Примечание. Обратите внимание, что необходимая для выполнения данного запроса промежуточная таблица в виде декартового произведения (если бы она реально строилась) имеет размер в 31*29*29*29=756059 строк (31 строка в таблице elements и 29 строк в таблице nodes).

    Манипулирование строками таблиц

    Для удаления и изменения строк таблиц SQL БД применяются операторы DELETE и UPDATE.

    Удаление строк

    Удаление строк таблицы реализуется оператором DELETE FROM, имеющим следующий синтаксис

    DELETE FROM имя_табл [WHERE сложн_условие]

    где сложн_условие имеет описанный выше синтаксис. В результате выполнения оператора из таблицы удаляются все строки, удовлетворяющие критерию сложн_условие. Если в операторе DELETE FROM конструкция WHERE опущена, то удаляются все строки таблицы.

    Модификация строк

    Изменение содержимого строк таблицы реализуется оператором UPDATE, имеющим следующий синтаксис

    UPDATE имя_табл SET имя_столбца=выражение, ...
    [WHERE сложн_условие]

    где выражение – выражение (в простейшем случае – константа), согласующееся по результату с типом данных столбца. В выражение допустимо использование значений ячеек любых столбцов таблицы, рассмотренных ранее операций и функций (но не агрегативных), а также прежнего содержимого модифицуруемой ячейки. Обновлению подлежат столбцы строк, отвечающих критерию сложн_условие. Если конструкция WHERE в операторе отсутствует, то обновляются все строки таблицы.
    Пример
    Для изменения наименования материала, из которого выполнена механическая конструкция, для всех элементов КЭ-сетки можно использовать следующий оператор

    UPDATE elements SET props='brass'; SELECT * FROM elements;
    +----+----+----+----+-------+ | id | n1 | n2 | n3 | props | +----+----+----+----+-------+ | 29 | 24 | 26 | 25 | brass | | 30 | 24 | 25 | 23 | brass | | 31 | 22 | 26 | 24 | brass | |  1 |  2 |  3 |  5 | brass | |  2 |  1 |  2 |  4 | brass | . . . | 28 | 22 | 27 | 26 | brass | |  5 |  5 |  7 |  6 | brass | |  6 |  5 |  8 |  7 | brass | | 23 | 20 | 22 | 21 | brass | | 24 | 24 | 21 | 22 | brass | +----+----+----+----+-------+

    Пример
    В нашей КЭ-сетке элемент 22 имеет ?неправильную? форму. Ставится задача заменить его двумя новыми конечными элементами, имеющими форму, более близкую к равносторонней. Эта задача может быть решена следующей последовательностью операторов

    DELETE FROM elements WHERE id=22; INSERT INTO nodes VALUES (30, 45.0, -33.5); INSERT INTO elements VALUES (22, 21, 30, 19); INSERT INTO elements VALUES (32, 21, 23, 30);

    Пример
    Для решения предыдущей задачи можно также использовать и другой набор операторов

    INSERT INTO nodes VALUES (30, 45.0, -33.5); UPDATE elements SET n2 = 30 WHERE id = 22; INSERT INTO elements VALUES (32, 21, 23, 30);

    Литература

    1. Дж. Мартин. Организация баз данных в вычислительных системах. – М.;Мир,1980. – 662с.
    2. С.Д. Кузнецов. Стандарты языка реляционных баз данных SQL: краткий обзор. //СУБД,  1996, N2, сс. 6-36.
    3. С.Д. Некузнецов
    4. Зенкевич О., Морган К. Конечные элементы и аппроксимации. – М.:Мир, 1979. – 318с.

    Упражнения

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

    1. Определить наилучший материал по показателю ?прочность/плотность?.
    2. Получить таблицу, содержащую значения наибольших разностей идентификаторов узлов – вершин для каждого конечного элемента.Таблица должна быть упорядочена по убыванию значений разностей.
    3. Определить максимальное значение в таблице из предыдущего задания.
    4. Определить протяженность механического объекта вдоль оси x.
    5. Определить расстояние каждого узла КЭ-сетки до начала системы координат.
    6. Определить расстояние каждого узла КЭ-сетки до узла, в котором приложено граничное условие в виде горизонтальной силы (подчеркнем, не до узла с заданным идентификатором, а до узла с заданным типом граничного условия).
    7. Найти наибольшее расстояние между узлами КЭ-сетки.
    8. Получить таблицу длин сторон всех элементов КЭ-сетки в виде ?идентификатор элемента – длина стороны 1 – длина стороны 2 – длина стороны 3?.
    9. Получить таблицу расстояний между узлами КЭ-сетки, соединенных сторонами конечных элементов, в виде ?идентификатор узла 1 – идентификатор узла 2 – длина?.
    10. Получить таблицу площадей всех конечных элементов. Напомним, для вычисления площади треугольника можно использовать формулу
      s = SQRT(p*(p-a)*(p-b)*(p-c))

      где a, b, c – длины сторон треугольника, а p – его полупериметр.

    11. Определить общую массу механического объекта при условии, что его толщина (в направлении z) равна 5 мм.
    12. Получить таблицу значений отношения maxL/minL для каждого конечного элемента с указанием тех элементов, для которых это отношение превышает величину 1,4 (здесь maxL – наибольшая длина стороны конечного элемента, minL – наименьшая длина стороны конечного элемента).
    13. Получить таблицу ?степеней? узлов КЭ-сетки. Степенью узла в теории графов называется количество ребер, соединяющих данный узел с соседними.
    14. Определить для каждого узла КЭ-сетки количество ?подключенных? к нему конечных элементов.
    15. Получить список идентификаторов ?угловых? узлов КЭ-сетки (назовем унловыми узлы, являющиеся вершиной только одного элемента).
    16. Получить список идентификаторов конечных элементов, одна или более сторон которых образуют границу области.
    17. Предложить способ определения факта расположения узла КЭ-сетки на границе области. Выдать список всех таких узлов.

    Рекомендация. В СУБД mySQL синтаксис оператора SELECT выглядит следующим образом:

    SELECT [ALL|DISTINCT] в_выражение [AS син_столбца], ...
        FROM ... и т.д.

    где син_столбца – имя, назначаемое столбцу результирующей таблицы. Это имя используется при выводе результирующей таблицы (в ее ?шапке?) вместо текста в_выражение. Однако, более полезно то, что син_столбца можно использовать в в_выражение, расположенном правее в списке оператора SELECT. Это в ряде случаев позволяет существенно уменьшить сложность конструкции в_выражение. Необходимо также отметить, что аналогичные средства именования (введения синонимов) столбцов результирующей таблицы предлагают все СУБД, поддерживающие язык SQL.

Сен 09

Что не так с моим блогом?

Создать блог очень легко, но, увы, собрать круг читателей гораздо сложнее. Так какие же наиболее распространенные ошибки допускают начинающие блогеры.

Удостоверьтесь, что на блоге достаточно материалов

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

Сфокусируйтесь на одной тематике

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

Смиритесь с тем, что некоторые темы не очень популярны

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

Противоречивое содержание не лучший путь к популярности

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

Не используйте распространенную тему

«Kubrick» хорошая тема для WordPress, но эту тему используют тысячи блогов. Старайтесь выделяться из толпы, установите менее распространенную тему или, что лучше, создайте свою.

Создайте бренд

Если вам удастся объединить визуальное оформление и тематику блога, вы победитель. Создание бренда для блога позволит занять четкую нишу и собрать прочный круг читателей.

Обновляйте блог часто, но не в ущерб качеству

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

Проверьте ваши ссылки

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

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

Не перегружайте блог рекламой

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

Не забывайте о SEO

Я не призываю вас вникать в тонкости оптимизации, но знать основные правила стоит. Когда составляете заголовки, помните о поисковиках, они должны напоминать фразы, по которым вы бы стали искать, соответствующую информацию. Заголовки страниц должны использовать тег h1.

Терпение, терпение, терпение!

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

Stuart Brown, 2 мая 2007

Сен 08

Издательский Дом «КОМИЗДАТ»
Шум ПК часто мешает собраться с мыслями, раздражает – особенно при отсутствии других источников шума. К чести производителей ПК нужно отметить, что лучшие из них учитывают акустику при конструировании систем. Однако слишком много ПК до сих пор строится на дешевых охлаждающих компонентах, создающих источники шума
Главными источниками шума в компьютере являются моторы и вращающиеся детали, такие как жесткий диск, вентиляторы охлаждения корпуса, процессора и блока питания. Особенно много шума создают последние два. Кроме того, вентиляторы и жесткие диски являются источником вибрации, шум от которой усиливается конструкцией корпуса и поверхностью, на которой установлены устройства.
Чем выше быстродействие процессоров, жестких дисков и видеокарт, тем больше они выделяют тепла и тем сильнее нуждаются в охлаждении – а охлаждение, как правило, связано с шумом. Но есть ряд способов уменьшить шум, сохранив адекватное охлаждение. В этой статье мы предлагаем вам несколько вариантов решения проблемы – от простых и дешевых до сложных и дорогих.
Компоненты тишины
Существуют разные аппаратные решения для создания «тихих» ПК. Их можно применять как по отдельности, так и в комплексе. Перечислим некоторые из них.
Звукоизолирующая прокладка. Прокладка из звукопоглощающей пены, устанавливаемая внутри корпуса, заглушает практически все звуки, создаваемые компонентами ПК. Однако вместе со звуком затрудняется и отвод наружу тепла.
Оболочка для жесткого диска. Диск, заключенный в изолирующую оболочку, гудит тише, но такая конструкция устанавливается только в 5,25-дюймовый отсек.
Звукопоглощающий корпус. Если вы собираете ПК самостоятельно, возможно, имеет смысл приобрести корпус с тихими вентиляторами охлаждения как самого корпуса, так и блока питания, а также с расширенными вентиляционными отверстиями.
Вентиляторы охлаждения корпуса. Вентиляторы охлаждения корпуса, имеющие специальную конструкцию и термостатический контроль, с одной стороны, подают достаточно воздуха для охлаждения системы, а с другой – создают минимум шума.
Вентиляторы охлаждения блока питания. Самым шумным компонентом ПК часто является блок питания. В таких случаях для обретения спокойствия достаточно заменить его на более тихий.
Набор прокладок. Прокладки и изолирующие монтажные шайбы для блоков питания и вентиляторов значительно уменьшают вибрацию.
Вентиляторы процессора. Если кулер процессора гудит, как маленький пылесос, попробуйте поставить другой – с большей поверхностью теплоотвода и более тихим вращением лопастей. Кулер процессора должен работать практически неслышно.
7 советов
Передвиньте ПК в другое место
Простейшее решение: если системный блок стоит на столе у вас перед носом, поставьте его на пол (разумеется, если корпус рассчитан на вертикальную, а не горизонтальную установку). Вибрация ПК часто вызывает ответную вибрацию столешницы, отчего корпус превращается в резонатор. Переставив компьютер под стол, вы решите эту проблему.
Лучше всего поставить ПК на ковер. Если пол выложен плиткой или паркетом, подложите под системный блок кусок ковролина или поролона. Можно даже устроить почти «удаленное решение» – приобрести удлинители для мыши, клавиатуры и монитора, после чего отодвинуть системный блок куда подальше. Правда, для установки CD и DVD понадобятся длинные руки…
Долой вибрацию!
Иногда больше всего шума создают не столько его прямые источники, такие как вентиляторы и моторы, сколько вибрация различных компонентов ПК. Для решения этой проблемы часто бывает достаточно открыть корпус, снять крышку и методично подтянуть крепежные винты таких компонентов, как блок питания, дисководы, материнская плата и вентиляторы. Однако здесь требуется осторожность: лучше недокрутить, чем перестараться и сломать. В состав некоторых антишумовых компьютерных наборов входят винты с пластиковыми или резиновыми шайбами, которые еще больше снижают вибрацию.
Установка прокладок
Недорогие наборы пластиковых прокладок изолируют вентиляторы и другие источники вибраций от корпуса, снижая шум. Существуют такие наборы и для жестких дисков.
Установка вентиляторов с термодатчиками
Поскольку мощные процессоры и другие компоненты ПК выделяют много тепла, во многих корпусах устанавливаются специальные вентиляторы для отвода тепла. В дешевых моделях используются эти вентиляторы создают много шума. Однако, поскольку в режиме простоя ПК выделяет гораздо меньше тепла, чем при активной работе, вентиляторы корпуса не должны работать все время на максимальной мощности.
Вентиляторы с термостатическим управлением снабжены температурными датчиками: когда температура внутри корпуса падает, вращение вентилятора замедляется. Есть и другие модели вентиляторов: односкоростные, но сконструированные так, чтобы работать тихо. Устанавливаются они обычно просто, хотя для замены вентилятора иногда приходится временно снять привод диска или плату расширения.
Тихий блок питания
Главным источником шума в ПК часто является блок питания. Такие устройства нуждаются в мощных встроенных вентиляторах, которые «перемалывают» много воздуха. Замена блока питания на более тихий может значительно уменьшить шум ПК. Конструкции этих устройств могут быть разными, но в большинстве из них просто установлены вентиляторы большего размера, которые, вращаясь медленнее, передают то же количество воздуха. Есть модели с термодатчиками, где вентиляторы ускоряют или замедляют вращение в зависимости от температуры внутри корпуса. Главное при покупке вентилятора – проследить, чтобы его мощность соответствовала потребностям охлаждения.
Замена кулера процессора
Современные процессоры выделяют очень много тепла и нагреваются до 60-80 градусов, поэтому нуждаются в постоянном и эффективном теплоотводе (см. также «Истории о перегреве», «К+П» #12/2003). Процессор без кулера работает считанные секунды, после чего сгорает. Вентилятор стандартного кулера, приобретенного вместе с компьютером, скорее всего, создает слишком много шума. Большинство кулеров имеет большой и эффективный радиатор, на который можно установить более тизхий вентилятор.
Акустическая изоляция
Если после всех ухищрений ПК все-таки шумит больше, чем хотелось бы, попробуйте принять более серьезные меры – установите внутри корпуса специальные звукоизолирующие поролоновые прокладки. Процедура установки проста: прокладка вырезается по размеру внутренней поверхности стенки корпуса, защитная пленка удаляется, и прокладка приклеивается к корпусу. Для жестких дисков используются специальные звукоизолирующие оболочки. Однако при выполнении этой операции следует помнить, что поролон и другие прокладки не только заглушают звук, но и ухудшают теплоотвод из корпуса, и поэтому пользоваться ими следует в меру, тщательно соблюдая инструкции по установке.

Сен 08

Предисловие не по сути

Очень чаcто, желая похвастаться своим компьютером, говорят – у меня процессор такой-то (скажем AMD K7 700). И при этом искренне считают, что чем лучше процессор, тем лучше сам компьютер. Это, мягко говоря, заблуждение. Если уж сравнивать с человеком, то процессор – всего лишь сердце. Однако сердце у человека – не главный орган (хотя и важный). Однако главное – не сердце, а мозг ! Что же у компьютера его «мозги», то что определяет «личность» компьютера ? Это жёсткий диск, иначе говоря – винчестер. Вот об «воскрешении мозга» и поговорим.

Предисловие по сути

Приходит однажды такой день, когда прекрасно (или не очень) работающий винчестер внезапно отказывает Выглядеть это может по разному – от полного пропадания винчестера в системе, как физического устройства до пропадания отдельного раздела или диска. Вот тут и наступает время рвать на себе волосы и каяться в том, что вовремя не делали резервных копий (много таких ?). Но, может быть, и не всё так плохо на самом деле, как кажется …

Что делать ?

Сначала надо определить, что же произошло. А определить проще, когда знаешь, что же происходило до этого события. Краткий перечень – скачок напряжения, уронили винчестер или компьютер (в то время как он работал), сработал злобный вирус (Ещё помните 26-го апреля ? То ли ещё будет!). Могут быть и другие причины – их много …. В самом неприятном случае всё произошло внезапно и вы даже не догадываетесь, что же случилось

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

Может быть BIOS просто «забыл» тип вашего винчестера. Если у вас SCSI винчестер – то можете не беспокоится об отсутствии прописанного у вас в BIOS-е винчестера – этим занимается BIOS вашей SCSI платы, к которой подключен. Поэтому в главный BIOS прописан тип 0, т.е. отсутствие винчестера. Однако отсутствие винчестера в этом случае – более плохая ситуация. Но я отвлёкся. Так вот, случаются такие ситуации (резкий скачок напряжения питания во время работы компьютера (проявится во время следующей загрузки, т.к. данные об винчестере считываются только в процессе загрузки), неудачная модернизация, приведшая к обнулению BIOS, отхождение контактов питания батарейки CMOS или падения на ней напряжения ниже допустимой нормы, наконец просто статический разряд, произошедший или от молнии или просто от вашего кота, прошедшего рядом с вашим компьютером, который лежит уже месяц в полуразобранном виде и вам лень его собрать) то происходит обнуление некоторых (или всех) областей CMOS, где BIOS хранит свои данные, в том числе и о типе вашего винчестера IDE (или нескольких – до 4-х). явным признаком является подобного является, например, если компьютер с установленным паролем на вход внезапно перестаёт его спрашивать а дата в BIOS установлена на прошлый год или на 1980 – но не на текущее время и время при этом где-то несколько минут после полуночи. Если это так и сам винчестер не причём – то вам поможет процедура определения типа винчестера, помещённая в setup. Если она определила тип винчестера и после этого всё нормально – то вам просто на этот раз повезло – до следующего раза.

Допустим, что случилось худшее – и винчестер не виден вовсе – т.е. ни BIOS, ни программа не видят его. Сгорел винчестер ? Может быть. Однако откройте свой компьютер и посмотрите – не отошёл ли шлейф от разъёма ? Попробуйте прижать поплотнее … Появился ? Расслабьтесь … неприятности вас миновали … пока. Ещё может быть не подключено питание после того, как вы проводили эксперименты, это тоже классическая неприятность. Посмотрите, может быть в этом дело …

Если с контактами всё в порядке (значит вам не повезло …), то тогда дело скорее всего дело в 2-х причинах – либо неисправность контроллера винчестера (той платы, что располагается снизу компьютера) либо испорчена информация на так называемой «инженерной» дорожке винчестера. На этой дорожке расположена информация о самом винчестере и именно её читают программы определения типа винчестера. Если эту информацию стереть или заменить мусором, то винчестер будет полностью работоспособен физически, но ни одна из программ не сможет правильно определить его размер (количество цилиндров, поверхностей, дорожек) и считать другую служебную информацию. Это могло произойти от неправильной работы контроллера (например от сбоя питания) либо от деструктивного действия троянской программы или вируса. Затереть эту информацию можно и самому, проведя низкоуровневое форматирование винчестера с помощью процедур BIOS. НИКОГДА НЕ ДЕЛАЙТЕ ЭТО! МОЖЕТЕ ПОТЕРяТЬ ВСЕ ДАННЫЕ И НАВСЕГДА! (Хотя в случае со SCSI низкоуровневое форматирование часто является очень полезным – особенно когда вы переносите винчестер SCSI с одного контроллера на другой, причём иного типа и производителя. В этом случае низкоуровневое форматирование даже полезно, о чём некоторые контроллеры и предупреждают вас. Особенно это актуально в случае контроллеров фирмы Adaptec. Только не забудьте переписать с него данные :-) ). Хотя большинство винчестеров и игнорируют команды форматирования, которые подаёт им BIOS, может случится так, что форматирование всё-таки произойдёт. Эта процедура состоит в ПОЛНОМ переписывании данных и служебной информации на ВСЕХ дорожках винчестера, включая служебные. Поскольку в большинстве случаев эти куски BIOS писались ещё ДО появления винчестеров IDE, т.е. не имеют никакого представления о служебных областях, то, соответственно, форматируется ВСЁ. Производители, сталкиваясь с такими случаями, запретили такие операции и изменили коды команды низкоуровнего форматирования (причем у разных производителей коды команд скорее всего отличаются!). Но всё таки не рискуйте! Как же можно определить, что случился подобный случай ? Самым лучшим способом будет воспользоваться программой производителя винчестера, как правило они доступны на их сайтах. Единственное, что следует помнить, программы от других винчестеров, скорее всего вам не помогут – хотя вряд ли и испортят. С помощью этой программы можно провести безопасное форматирование форматирование вашего винчестера, прочитать инженерную дорожку, записать её же и некоторые другие функции – зависит от конкретной программы. Попробуйте прочитать с помощью этой программы инженерный цилиндр. Если у вас это получится – то значит с железом всё в порядке. Теперь можно посмотреть, верна ли находящаяся там информация. Вообще трудно сказать, верна информация или нет, если у вас в наличие только один винчестер такого вида. Необходимо отыскать ещё один винчестер подобной фирмы, размера и типа (а также, желательно, со временем выпуска близким к времени выпуска вашего винчестера) – особенно хорошо если винчестер будет из той же партии, что и ваш. Попробуйте прочитать на той машине, где тот винчестер работает, информацию с инженерного цилиндра. Если информация совпадает, но в то же время ваш винчестер не определяется, возможно проблема в материнской плате или BIOS вашего компьютера. Попробуйте проверьте свой винчестер на машине, где работает аналогичный. Если там он начинает работать без проблем, то вам придётся обратиться к фирме, продавшей вам материнскую плату для устранения проблем или воспользоваться аналогичным описанием решения проблем неработоспособности материнской платы. Если же он не работает и на том компьютере – то скорее всего у вас проблемы с контроллером. Что делать в этом случае мы рассмотрим ниже в этой же статье. Если же информация на инженерном цилиндре не совпадает у вашего и oбразцового винчестера, то вы можете, на свой страх и риск, прочитать эту информацию с инженерного цилиндра образцового винчестера и записать его на ваш инженерной цилиндр с помощью той же программы производителя винчестера – во всяком случае программы Western Digital и Quantum позволяют делать это. Если всё прошло успешно и винчестер заработал, можете рукоплескать сам себе и пить шампанское. Если же это не получается и информация записывается не та или вообще не записывается, то это означает, что инженерный цилиндр повреждён физически. В этом случае может помочь низкоуровневое форматирование инженерного цилиндра и ещё одна попытка записать данные. Если после нескольких таких попыток ничего не выходит – то единственное, что вам останется – поменять в фирме, где вы купили этот винчестер, на исправный (если гарантия ещё не кончилась).

Если случилось так, что, по вашему мнению, неисправен контроллер винчестера, то вам предстоят для точной проверки нетривиальные действия. Во-первых, вам необходим точно такой же винчестер с точно таким же контроллером. Во-вторых, вам нужно осторожно отвинтить контроллер от винчестера и осторожно снять его. Затем тоже самое проделать с исправным винчестером. Помните, что в этом случае вы теряете гарантию на оба винчестера! Затем подключить контроллер от исправного винчестера к вашему. Если всё заработало, то вы нашли решение проблемы, но вам ещё придётся поискать винчестер с неисправным носителем но с исправным контроллером (причём от винчестера вашего типа!). Только после того, как вы подключите исправный контроллер вы можете вздохнуть спокойно. Так что если вы не работаете где-либо в компьютерной фирме и не имеете возможности искать такие вещи то лучше сразу прекратить суетиться и возложить все остальные действия на какую либо вам знакомую компьютерные фирму – в конце концов они, как правило, знают по этому вопросу больше да и доступ к комплектующим у них имеется.

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

Всё, что я написал выше, относится к тому случаю, когда ваш винчестер не определяется. Если же он определяется, но BIOS не может найти загрузочного устройства, то у вас поврежден MBR (Master Boot Record) – то место, где находится информация о разбиении винчестера на разделы и первоначальный загрузчик. Самый лучший способ решить эту проблему – это заранее сохранить подобную информацию с помощью специальной программы. В частности Norton Utilites позволяют делать rescue диск (точнее – диски), с которых впоследствии можно восстановить работоспособность системы. Существуют и другие способы (например – воспользоваться сохраняемой программой adinf информацией) – но этот наилучший.

Если же ни один из способов не позволяет записать данные в MBR – то у вас, скорее всего, физическое повреждение. Как восстановить после этого данные – тема 2-й части этой статьи, в которой описывается восстановление данных при помощи программы Tiramisu. Другие случаи, когда вам следует воспользоваться этой программой – физические повреждения других служебных областей – например FAT или root dir. Эта программа позволяет восстанавливать данные и в других системах, не только DOS и Windows 9x – есть программы, восстанавливающие тома NTFS Windows NT, тома Novell Netware и даже данные повреждённых ZIP-дисков.

Сен 08

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

Непрофессионалы отличаются от профи тем что способны своими руками угробить вполне работоспособное устройство.

Обычно начинается со сбоев. Несколько плохих участков на жестком диске вызывают панику : «Диск начал сыпаться !» Из этого должно следовать : «Дефекты будут развиваться и усугубляться «. А уже наше суровое воспитание приводит к логичному выводу : «Надо его чайнику спихнуть». После чего диск начинает последнее путешествие – по рукам этих самых чайников. В итоге рынок оказывается захламлен битым железом. Десять лет назад размер жесткого диска не доходил до гигабайта, а о диске с предельным для 386-машины размером в 540 мБ многие только мечтали… Примерно в то время я начал заниматься ремонтом жестких дисков. Началось с книги Уинна Роша, где я раскопал простой и эффективный способ низкоуровневого форматирования MFM-диска с помощью команды debug : g=c800:5 (иногда – 6,8 – как повезет ). Купленные за миллион купонов каждый болгарские полномерные десятки я использовал для архивов – пожалуй, лучшее в то время применение для этих монстров трудно было найти.

Когда они окончательно состарились и перешли в разряд антиквариата, я начал эксперименты на них со столь же антикварными ОС – ДОС3,2 etc. и к своей безмерной радости обнаружил, что ДОС-2 был настолько наивен, что объявлял сбойным весь цилиндр, стоило ему обнаружить на нем хотя бы один сбойный сектор…

Но лучше всего помог мне изучить структуру жесткого диска как ни странно – вирус OneHalf, зашифровавший часть диска моей XT. Поскольку о потере данных не могло быть и речи – в зашифрованную область попали файлы, которые вся кафедра набирала руками в течение года, готовя к изданию новый учебник, – то передо мной встала альтернатива – расшифровать или быть с позором изгнанным. К счастью, завкафедрой был в зарубежной командировке, а один из друзей дал мне очень опасный по его словам, но столь же эффективный инструмент – программу de.exe из комплекта нортоновских утилит. Поскольку расшифровщик Данилова не работал на ХТ ( а в моих условиях, как выяснилось позднее – он не помог бы даже если б мог работать ), то я написал простую программу – 22 строки на Паскале, которая только и могла делать что пройтись указанным двухбайтным кодом по файлу, сделав с его данными сложение по модулю два с указанным кодом и записав результат в другой файл.

Моя задача заключалась лишь в том чтобы правильно определить требуемый код – которым вирус зашифровал данные на определенном цилиндре. ( Как известно – вторая обработка данных этой операцией приводит к их расшифровке, что и применяет OneHalf для своей маскировки ) Проблема состояла в том что в результате неправильного лечения диск оказался разбит на участки, каждый из которых был зашифрован своим кодом – однако я быстро сообразил что определить код можно обнаружив участок принадлежащий текстовому файлу – а они как известно изобилуют пробелами с кодом 20H (32D). То есть – обнаружив последовательнось которая в 16-ричном виде имела вид например : 34 6f 34 6f 34 6f 34 6f …. – я мог смело предполагать что это – результат шифрования последовательности пробелов кодом 14 4F. Так как вирус шифровал каждый раз определенное число физических цилиндров, то нужно было просто скрупулезно пройтись по ним, расшифровав каждый участок в отдельности и посадив его обратно уже в расшифрованном виде. Через две недели с момента обнаружения вируса вся работа была выполнена, а потери свелись к двум-трем EXE-файлам, в которых, как известно, трудно обнаружить строку пробелов. При этом диск-эдитор использовался для записи определенного количества физических секторов жесткого диска в файл на дискете, – и обратно – уже с другой дискеты, из расшифрованного файла – на свое место на диске.

Под занавес я набрался такого нахальства что решил оставить тело вируса на жестком диске в том же месте, где его обнаружил, справедливо рассудив что если снова его подловлю, то уже не увижу его при просмотре физического диска диск-эдитором, если только не загружу машину с чистой дискеты. Конечно, для страховки пару строк дампа вируса я затер своими, а бут-сектор был давно вылечен ( мне повезло обнаружить копию исходного, созданную ранее другой программой ). После этого настала пора опасных экспериментов с редактированием de.exe структуры жесткого диска – для безопасности я начал с дискет.

Еще не одному знакомому я вылечил жесткий диск от какого-нибудь трудноизлечимого вируса. (Один из моих друзей целый год грузился с чистой системной дискеты, – у него на жестком диске сидел вирус ЗАРАЗА, очень тонко подменявший IO.SYS ) И только когда мне надоело лечить дискеты подпорченные DIR-ами и прочей ерундой, которая наводняет машины в учебных классах, я взялся за более серьезные вещи – первым успешным экспериментом было переформатирование вручную под ДОС приобретенного по случаю 340-метрового WD с сохранением самой интересной информации на том же диске, ранее работавшим под WIN-95. Я разбил его на два раздела и удалил руками все каталоги с длинными и неправильными с точки зрения ДОС именами файлов. Потом сделал так чтобы диск мог грузиться с каждого из разделов – правда, для этого надо было запустить все тот же диск-эдитор и руками кое-что подправить. ( Один из таких дисков у меня мог грузиться поочередно либо в ДОС 6.22 либо – в ДОС 2.1 – правда в силу особенностей последнего при такой загрузке раздел 6.22 просто не был виден ) И наконец, я сделал самый интересный вариант загрузки – три раздела, на одном – ДОС, на другом – WINDOWS-95 (98 etc.), третий – под что-нибудь еще, а для двух первых он пока служил архивным. Этот диск был уже из новых – размер его превышал предел ДОС и WIN98 все время норовила сделать ему 32-хбитную FAT, на что я не соглашался, так как диск-эдитор для такой конструкции недостаточно приспособлен. Лишь после этого я был достаточно опытен для того чтобы лечить диски с запорченными физическими секторами, приходящимися на область FAT, извлекать информацию с диска с запорченной нулевой дорожкой и тому подобное.

Подходящий случай не заставил себя долго ждать. Небогатое банковское учреждение переходило по команде из управления на новую почтовую программу интернетовского типа и как раз накануне испытаний программы умер диск на моей сисадминовской машине. Я быстро поставил резервный диск вдвое меньшего размера, установив в авральном порядке на нем WIN95 с MS-Office-97, OutLook etc. и сразу после испытаний принялся за лечение диска. Картина была удручающей – не читалась область FAT и еще несколько десятков процентов общей площади диска. Для первого раза я еще сделал немного ошибок, основной из которых была все та же чайниковская – я попытался отформатировать его на низком уровне воспользовавшись программой форматирования, встроенной в биос машины ( у меня не самый плохой P-200 MMX ). Ничего ! – То есть диск исправно форматировался, но после этого вся информация на нем никуда не девалась – она оставалась в тех же секторах и сбойные сектора по-прежнему оставались недоступными. Складывалось впечатление что программа низкоуровневого форматирования просто не запускалась. За дополнительной информацией я обратился в Интернет на домашнюю страницу данного диска, адрес был написан прямо на нем. И обнаружил что он имеет еще и собственный биос со встроенной программой форматирования. Не буду уточнять которая из фирм додумалась до этого первой – их довольно много, скажу только что в названии диска присутствует слово «Medalist». К сожалению, мне не удалось на сайте фирмы раздобыть пароль для входа в эту программу форматирования. ( А по зрелом размышлении – это вряд ли и помогло бы, так как скорее всего на диске отказали две поверхности из пяти ). Во всяком случае, первый вариант ремонта прожил недолго, месяца два – так как я воспользовался возможностью альтернативного разбиения диска на чуть меньший формат, в данном случае – максимальный, поддерживаемый ДОС, то есть 2 ГБ. Никакого эффекта это не дало, я только потерял пару сотен мегабайт площади, а когда снова нашел временный диск, – переделал своего многострадального «Медалиста» на его максимальный размер – все тем же диск-эдитором, вручную находя наиболее целые области для построения системной зоны и прописывая вручную же бэды – просто как области занятые нечитаемыми файлами средним размером 10 МБ. Таким образом мне удалось заставить его работать без ежедневного выхода на SCANDISK, более того – при аварийном выключении машины scandisk просто не реагирует на эти бэды. Главное – не давать ему делать проверку качества поверхности, иначе бэды действительно начнут множиться. Программа эта не обладает чрезмерно развитым, мягко говоря, интерфейсом и отключить некоторые опции – надо еще постараться, однако если вы справитесь с этим, то она не доставит вам больше хлопот. ( Как ни странно, наибольшие неприятности в этом плане доставляют именно программы, которые по замыслу их создателей призваны лечить жесткие диски, и отсутствие удобного интерфейса плюс чрезмерная самонадеянность авторов и пользователей – тому виной ).

В конце концов месяца через три-четыре после аварии я получил диск с реальным размером 1,5 ГБ (плюс 1 ГБ бэдов ). В таком состоянии диск находится уже полгода, он по-прежнему работает на моей сисадминовской машине, с него я вхожу в Интернет и администрирую NetWare. Никаких проблем с этим диском я больше не имел и надеюсь – иметь не буду, так как стараюсь избегать даже намека на использование программ проводящих какое-либо периодическое обслуживание дисков – начиная со SCANDISK, NDD и кончая Norton AntiVirus`ом и AVP всеми уважаемых Нортона и Касперского. Я не посмею заявить что эти программы портят диски – но они точно написаны не для плохих дисков. А любой хороший диск проживет тем дольше чем меньше вы будете его дергать. Право, не стоит доверять судьбу столь нежного устройства даже самой профессиональной программе если она норовит непрерывно шарить по диску в поисках вирусов, – часто лечение последствий заражения обходится дешевле чем антивирусная профилактика, аналогично следует избегать чрезмерной оптимизации диска программами типа SPEEDISK. В число нерекомендуемых режимов следует также включить и режим «спящего» диска, – для электроники всегда был наиболее опасным момент включения- выключения. Если вы настроите свой диск «засыпать» через каждые три минуты отсутствия обращений к нему – можете начинать откладывать деньги на новый. Что касается программ низкоуровневого форматирования – то вряд ли фирмы- производители жестких дисков допустят чтобы их оборудование можно было починить таким простым способом, скорее всего – они и не должны работать. Поэтому – избегайте переделывать структуру диска без крайней на то необходимости. Выгоднее оставить его как есть, и приобрести еще один хороший диск, чем попытавшись переделать – угробить хорошее устройство. В конце концов, некоторые из типов дисков уже можно вносить в Красную книгу, – и в основном – в результате неправильных действий пользователей. В некоторых случаях виноваты производители дисков – например, вы попытались всего лишь перебить разделы. Вы не профессионал, и даже применение диск- эдитора представляет для вас серьезную проблему, все что вы умеете – запустить FDISK и следуя ее требованиям, удалить все разделы прежде чем установить новые. Вот тут-то вас и подстерегает главная опасность – как правило, после удаления разделов диск умирает раз и навсегда. Так он сделан – если биосу машины не за что зацепиться при начальном тестировании диска, то восстановить его работоспособность можно только в заводских условиях. Остается либо довериться профессионалу, который перебъет ваш диск вручную, либо попросить фирму Microsoft переписать FDISK.

Не меньшую опасность для целостности диска представляют новые программы и операционные системы – мне приходилось оживлять диски, на которых кто-то пытался запустить Линукс или просто лазил по Интернету, не особенно задумываясь о последствиях. Лучшей рекомендацией здесь может быть только одна – общая площадь диска должна быть на порядок выше той, которая требуется для установки операционной системы. То есть если вы ставите WIN95 – то 400-700 МБ будет в самый раз, а лучше – больше, иначе ваш диск долго не протянет, еще более жесткие требования предъявляют современные версии WIN98, WIN2000, NT и LINUX. Наибольшие же проблемы с физической целостностью жесткого диска возникают при использовании его в условиях многооперационных сред – имеется в виду одновременная работа например в NetWare и Windows, когда каждая система по-своему обращается к диску ( и по-своему ошибается ). Особое внимание при работе в таких условиях следует уделять правильной настройке параметров среды и выбору наиболее надежных сетевых драйверов. Если вам так уж не терпится использовать программы, которые взаимоисключают друг друга, то хотя бы попробуйте настроить разные варианты загрузки машины. В заключение – два слова об искусстве прописывать бэды вручную. Наиболее удобной для этой цели представляется стратегия использования заранее подготовленного набора файлов с выровненной на размер кластера длиной. Одной из программ, способных создавать такие файлы является прилагаемая утилита BALON.COM – создав с ее помощью (и лучше – на живом диске ) несколько файлов разного размера, вы просто начинаете копировать их на опустошенный только что отформатированный вручную диск ( как это сделать если программа FORMAT сделать этого просто не может – тема для отдельной статьи ). Поскольку ваш диск имеет нечитабельные зоны, то ясно что для обнаружения их вы должны просто использовать каждый скопированный на диск файл как источник для создания нового файла, – проверку записи необходимо отключить, разумеется. Если область, занимаемая данным файлом – читабельна, то он без проблем скопируется в новый файл, занимающий уже новую область, если – нет, то вам придется на время перенести его в каталог, созданный заранее в чистой зоне. И так – до конца диска, пока он не будет забит хорошими и плохими файлами до предела. Потом остается лишь вытереть хорошие, а области принадлежащие плохим прописать в FAT вручную как бэдовые. Если диск слишком большого размера, то стоит попытаться провести несколько этапов такого лечения, вытирая в этом случае плохие файлы и заполняя их зоны на порядок меньшего размера файлами. Разумным представляется вариант когда минимальный размер здоровой зоны попавшей между двумя плохими превышает 1% от общей площади диска. Иногда наиболее мелкими зонами приходится жертвовать во имя повышения скорости работы с тем что осталось.

В целом – ориентироваться в стратегии лучше применительно к условиям, выбирая оптимальный вариант. Такую работу гораздо легче проделывать каждый раз вручную, чем писать программу – поскольку предусмотреть все возможные варианты неполадок просто нельзя. ОСНОВНЫМ правилом при таком лечении должно быть : исключить возможность обращения файловой системы к плохим участкам диска . Радикальным средством является исключение одной большой бэд-зоны из обращения путем ручной разбивки разделов ( в некоторых случаях, если повезет ) Конечно, диск можно просто выбросить и купить новый – но где гарантия что с ним не произойдет аналогичная трагедия ? А попытавшись, хотя бы и безуспешно, вылечить ваш диск, вы по крайней мере приблизитесь на шаг к пониманию причин аварии, что само по себе позволит избежать новых.

Сен 08

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

Несколько общих слов о строении и терминологии жестких дисков.

Жесткий Диск (винчестер) представляет собой блок из нескольких дисков/блинов (Disks) по поверхностям (Sides) которых перемещаются (плавают в воздушном потоке) головки (Heads). Позиционируются головки по концентрическим дорожкам/трекам/цилиндрам (Cilinders), каждый из которых разделен на сектора (Sectors). Сектор является минимальным адресуемым блоком данных для диска и его размер равен 512 байтам. Логическое строение жесткого диска отличается от его настоящей (физической) геометрии и это необходимо учитывать при восстановлении информации. Как правило, современные диски (в режиме адресации LBA) представляют собой несколько сот цилиндров имеющих 63-254 поверхностей по 63 сектора данных на каждой.

В самом начале диска (в секторе 0/0/1) находитсяPT (Partition Table) – таблица разделов и MBR (Master Boot Record) – главная загрузочная запись.

На следующем треке в первом(ых) секторе(ах) (начиная с 0/1/1) расположена BA (Boot Area) – загрузочная область операционной системы и BR (Boot Record) – загрузочная запись OC.

Далее на этом же треке расположена 1-я копия FAT(File Allocation Table) – таблица размещения файлов. Сразу за ней – 2-я копия FAT. Размер копии FAT (в секторах) определяется размером раздела диска.

После 2-й копии FAT расположены сектора ROOT (Root directory) – корневого каталога, за которой начинается DA (Data Area) – область данных.

PT – состоит из 4-х строк описывающих 4-е возможных раздела диска. Описание каждого раздела диска содержит информацию о типе файловой системы, признаке того, что раздел является загрузочным, о первых и последних головках, дорожках, секторах раздела, количестве секторов смещения начала раздела от начала диска и об общем количестве секторов в разделе.

MBR – находится в том же секторе что и PT. Данные в MBR представляют собой код процессора необходимый для дальнейшей загрузки операционной системы. В последних двух байтах сектора MBR находится сигнатура 55AAh, которую можно использовать как маску при поиске PT и MBR.

BR – содержит массу данных и служит для описания параметров файловой системы. В отличие от диска, минимальным адресуемым блоком данных для операционной системы служит кластер, объединяющий определенное количество секторов. В BR нам интересны такие данные как размер кластера, размер и количество копий FAT. BR для раздела FAT16 размещается в одном секторе, в случае FAT32 Boot Record состоит из нескольких секторов.

FAT – Состоит из 12, 16 или 32 битных элементов, описывающих номера кластеров или их признаки (BAD). Количество элементов соответствует количеству кластеров раздела диска. Из этих элементов образуются цепочки номеров кластеров, описывающих расположение файлов на диске.

ROOT – Корневой каталог диска. Содержит записи описывающие файлы (дескрипторы файлов) в корневом каталоге. Такая запись описывает имя, тип, дату создания, размер, атрибуты файла, и т.п., а так же содержит указатель на первый кластер файла.

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

ВОССТАНОВЛЕНИЕ ИНФОРМАЦИИ:

Для восстановления потерянных (поврежденных) данных постарайтесь вспомнить или получить информацию о:

a. Вероятном разбиении диска на разделы и количестве логических дисков.

b. Размерах и истории создания логических дисков. История создания подразумевает под собой возможные искусственные изменения размеров разделов диска. Эта информация может иметь значение для точного определения места расположения ROOT.

c. Особенностях файловой системы FAT16 или FAT32. Остальные типы файловых систем в этом документе не рассматриваются.

d. Типе и версии Операционной Системы (DOS, Win95/98) использовавшейся на диске.

e. Уникальные имена директорий и файлов, находившихся в корневом каталоге диска С, имя каталога с данными, подлежащими приоритетному восстановлению и уникальные имена файлов и поддиректорий, находившихся в этой директории.

Для восстановления данных можно воспользоваться следующими утилитами:

1. DiskEdit из комплекта Norton Utilities версии 3.0х (или аналогичный ему).

2. Tiramisu (http://www.recovery.de/) или Hard Drive Mechanic.

Утилита TIRAMISU существует в различных модификациях, соответствующих разным типам файловых систем (FAT16/FAT32/NTFS/Novell/ZIP). Данная программа позволяет УвытащитьФ Ваши данные с УбольногоФ диска, необходимо только чтобы диск определялся BIOS-ом и был физически исправен. Обращаю внимание еще раз, что эта программа не лечит диск, она позволяет скопировать ваши данные на другой носитель.

3. UnFormat (из того же комплекта Norton Utilities).

4. NDD – Norton DiskDoctor (опять из того же комплекта Norton Utilities).

Возможно, применение и других утилит, но, как правило, они ограничиваются частными случаями или не учитывают всевозможных особенностей логического строения дисков.

1. ДИАГНОСТИКА ПОВРЕЖДЕНИЙ.

1.1. Запустите DiskEditor и, переведя его в режим просмотра поврежденного диска на физическом уровне, последовательно проверьте целостность РТ, MDR, FAT-ов, ROOT и DA. На этом этапе постарайтесь выяснить (если это достоверно неизвестно) тип файловой системы первого раздела диска (FAT16 или FAT32).

В стандартных случаях диски объемом менее 528 Mb, или разбитые на разделы при помощи системных утилит ДОС 7.10 и более ранних – имеют FAT16.

Операционные системы Windows 95 OSR2 и Windows 98 базирующиеся на ДОС 7.10а на дисках и разделах объемом больше 528 Mb, как правило, используются с файловой системой FAT32.

1.2. В случае целостности каких-либо элементов дисковой структуры сохраните их в виде файлов на резервном диске.

Например: MBR.HEX, BR1.HEX, FAT01.HEX, FAT02.HEX, ROOT0.HEX.

1.3 Дальнейшее восстановление диска зависит от степени и характера повреждений.

Если у Вас осталась неповрежденной (или хотя бы частично) какая-либо копия FAT на первом разделе диска – восстановление информации возможно почти в полном объеме.

2. Временное РЕЗЕРВИРОВАНИЕ данных.

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

В DiskEditor-е выделите режим просмотра первых 500-1000 физических секторов диска и сохраните их в виде файла на резервном диске. Более точный размер можно определить как сумму секторов: MBR трека + BR + 2FAT + ROOT + разумный резерв.

Возьмите дискету с зарегистрированной программой TIRAMISU, соответствующую типу файловой структуры восстанавливаемого диска. Руководствуясь инструкцией к этой программе, выполните предварительное восстановление данных на резервный диск.

Следует иметь в виду, что данная программа не затрагивает УбольнойФ диск, т.е. не правит на нем никакие данные. При некоторых особенностях УмусораФ в системных областях диска отмечены случаи сбоя программы TIRAMISU, что исправляется очисткой (обнулением) ошибочных данных (см. ниже).

3. ВОССТАНОВЛЕНИЕ Partition Table.

При восстановлении PT необходимо учитывать объем диска и особенности файловых систем диска FAT16 или FAT32.

Не пытайтесь создавать какой-либо раздел на диске с помощью программы Fdisk. При сканировании доступного дискового пространства fdisk прописывает в первый сектор на каждом треке код F6, что приводит к потере информации в этих секторах.

3.1. Если первый цилиндр (0/0/1) заполнен УмусоромФ – обнулите его (заполните нулями) для снижения возможных ошибок при восстановлении. Обнуление можно выполнить DiskEditor-ом.

3.2. Если Вы не знаете точно количество и размеры существовавших разделов диска или заведомо знаете о наличии дополнительного раздела диска, но не знаете размер основного раздела восстановите их, используя следующий способ: DiskEditor-ом скопируйте MBR и PT (сектор 0/0/1) с любого исправного диска на восстанавливаемый диск. Затем, очистив все записи кроме первой, отредактируйте ее, внеся заведомо искаженную информацию о конечном размещении раздела (например: 9999-й цилиндр) и общем количестве секторов (например: 99999999).
Начало размещения Конец размещения Смешение Количество
Систем Загр Стор Цилиндр Сектор Стор Цилиндр Сектор Секторов Секторов
BIGDOS Да 1 0 1 999 999 63 9999999 999999999

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

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

Если Вы все проделали правильно, без ошибок и характер дисковых ошибок оказался не фатальным – первая задача выполнена, т.е. PT восстановлена.

3.4. Если вы уверены в существовании дополнительного раздела диска или какого-либо NON-DOS раздела (NTFS, Linux, …), но NDD не смог его восстановить остаются еще способы ручного поиска.

3.4.1. Воспользуйтесь DiskEditor-ом (от PhysTechSoft), позволяющем осуществлять поиск различных NON-DOS разделов. И в случае нахождения подобных разделов на основании полученных номеров физических секторов вручную внесите информацию в PT.

3.4.2. Можно воспользоваться поиском PT в файлах резервирования. Различные системные программы типа менеджеров загрузки, утилит резервного сохранения и т.п. (о существовании которых пользователь иногда и не подозревает) выполняют операцию сохранения различной системной информации в файл. Воспользовавшись этим предположением, можно задать DiskEditor-у в режиме доступа к секторам физического диска маску поиска PT (55AAh или иную уникальную запись) и если повезет найти информацию о нем.

4. Восстановление BR, FAT и ROOT.

4.1. Восстановление BR, копий FAT и ROOT проще выполнить УавтоматическимФ способом, но это не исключает возможность УручногоФ восстановления с помощью карандаша, бумаги и редактора дисков. Как уже упоминалось выше, если на восстанавливаемом диске есть неповрежденные (или хотя бы частично поврежденные) элементы логической структуры сохраните их в виде файлов на резервном диске.

4.2. Выполните стандартное форматирование основного раздела диска, т.е. командой format С:. При этом формируется файловая структура форматируемого раздела диска с воссозданием BR, чистых FAT и ROOT, область данных при этом не затрагивается, т.е. информация в DA не изменяется.

4.3. Проверьте правильность местоположения корневой директории ROOT. Для этого DiskEditor-ом в режиме просмотра кластеров вновь созданного раздела, задав поиск объекта УПодкаталогФ, проверьте совпадение номеров физического кластера и номера кластера в первой записи найденных подкаталогов. В случае несовпадения номеров, необходимо подкорректировать значение числа секторов FAT в загрузочной записи BR. Корректировка осуществляется увеличением секторов на число кратное половине числа секторов в кластере. Как правило, такая корректировка необходима в случаях нестандартной разбивки диска или после изменений размеров разделов искусственным путем.

4.4. Если Вам повезло, и у Вас имеются зарезервированные в виде файлов уцелевшие образы FAT и/или ROOT следует, воспользовавшись DiskEditor-ом восстановить их на диске. Если у Вас уцелела вторая копия FAT, а первая нет, следует скопировать вторую копию и на место первой копии.

Если у Вас уцелела одна из копий FAT и корневой каталог ROOT, после выполнения всех пунктов 4.1 Ц 4.4 полноценный доступ к информации на диске будет восстановлен.

5. Восстановление DA (области данных).

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

Упрощенно говоря, алгоритм восстановления данных подобными программами основан на поиске кластеров раздела диска с информацией о подкаталогах, анализе их содержания на предмет определения места расположения каталогов, определения номеров начальных кластеров каждого файла и анализе даты создания или стирания файлов. На базе этой информации строится дерево каталогов на логическом диске и расположение файлов по подкаталогам. Эта информация восстановима с большой степенью точности. В случае разрушения корневого каталога (ROOT) информация и файлах в корневом каталоге не восстанавливается, а имена директорий заменяются условными именами (типа DIR001).

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

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

Для попытки хотя бы частичного восстановления FAT можно воспользоваться особенностью работы ОС Windows 9x с виртуальной памятью, т.е. наличием на диске своп-файла. В этом файле могут находиться куски корневой директории ROOT и отдельные фрагменты, а подчас и полные копии FAT. Поиск этих фрагментов осуществляется в режиме просмотра секторов диска по уникальным маскам.

В качестве начальной маски поиска FAT может быть применен идентификатор F8 FF FF FF. В дальнейший поиск можно осуществлять по произвольным группам, состоящим из пяти последовательных 16-ти или 32-ти разрядных (FAT16 или FAT32) номеров кластеров, которые могут принадлежать какому-либо файлу. Поиск занимает довольно продолжительное время, но, меняя маски поиска, его стоит повторить несколько раз. Следует иметь в виду, что информация в своп-файле чаще всего располагается со смещением от начала секторов, что требует определенной коррекции при просмотре и дальнейшем применении. Основная задача отыскать максимальное число фрагментов, выбрать из них наиболее УсвежиеФ и составить из них подобие полной копии FAT. После проведения подобной операции возможно применение утилит типа UnErase для более полного (но возможно некорректного) восстановления файлов и DiskDoctor для коррекции дисковых ошибок.

Удачи, терпения и везения Вам!

ВНИМАНИЕ! Если информация на жестком диске УжизненноФ необходима, а Вы не уверены в своих знаниях и/или не исключаете возможной ошибки в своих действиях, не предпринимайте сами никаких восстанавливающих действий. Даже незначительная неточность в Ваших действиях может значительно осложнить или даже сделать невозможным дальнейшее восстановление информации.

СОВЕТ тем, кто САМ не сможет справиться с навалившейся на него проблемой. Обратитесь за помощью в технический центр к специалистам, которые возьмутся за решение Вашей проблемы.

Сен 08

Какие существуют способы воccтановления ваших данных? Ответ на этот вопроc завиcит от вида повреждения и типа данных, которые нужно воccтановить, и еще от того, каким образом данные хранилиcь на диcке перед тем, как произошла авария. Все перечисленное выше определяет инcтрументы, которые потребуютcя для работы c диcком. Хорошие cредcтва для воccтановления поcтрадавших данных предлагают пакеты Norton Utilites Advanced Edition, Mace Gold и Disk Technican Advanced, да и cама MS-DOS имеет неcколько cкромных cредcтв, cпоcобных помочь нам в беде. Жеcткий диcк может отказать по трем оcновным причинам:

- Из-за поломки аппаратной чаcти. К ней относятся: плата контроллера диcков (диcка), электроника, головки и двигатели накопителя, а также кабели, cоединяющие контроллер и накопитель между cобой.

- Из-за повреждения поверхноcти диcка – cлоя кристаллов ферромагнитного материала, покрывающего диcки. Эта пленка настолько тонкая, что некоторые кристаллы со временем могли выкрошиться, или же головка накопителя могла в буквальном cмыcле слова упаcть на диcк и повредить магнитный cлой.

- Из-за того, что какая-то вызванная вами программа оказалаcь «ненормальной» и запиcала что-то в облаcть, доcтуп к которой запрещен. Это, например, облаcть диcка, откуда начинаетcя загрузка cиcтемы или облаcть, cодержащая таблицу раcположения файлов (FAT), хранящую информацию о секторах, в которых записаны вcе оcтальные данные. Многие вируcы поcтупают как раз как такая «ненормальная» программа. Кроме того, возможны комбинации этих трех причин. Методы воccтанoвления данных завиcят от каждого конкретного cлучая, и шаги, опиcанные ниже, помогают в большинcтве cитуаций.

Первые признаки отказа

Лучший cпоcоб защиты от подобных неприятноcтей – cвоевременно реагировать на первые признаки повреждения. Прежде чем обнаружатcя cерьезные неиcправноcти диcка, как правило появляютcя характерные симптомы. Вот наиболее типичные из них:

- Отcутcтвие доcтупа к отдельному файлу, или появление в файлах поcторонних cимволов.

- Увеличение времени доcтупа к файлу. Вдобавок, при чтении и запиcи информации вы можете cлышать звук, напоминающий фырканье наcоcа.

- Иногда загрузка cиcтемы c жеcткого диcка не проходит до конца.

Еcли появилcя любой из этих cимптомов, прежде чем предпринимать что-либо еще, cледует cделать резервную копию вашей информации. Затем запуcтите программу, выполняющую неразрушающий контроль диcка, для того, чтобы найти и отметить появившиеся на нем сбойные cектора. Такая программа еcть и в Norton Utilites (DT.EXE), и в Mace Gold (REMEDY.EXE), но наиболее чувcтвительную деликатную программу вы найдете в пакете Disk Technican Advanced. Программы любого из этих трех пакетов блокируют дефектные cекторы и cохраняют данные, находящиеcя на cомнительных секторах, переноcя информацию на рабочие (по результатам проверки) cекторы. Еcли опиcанный метод cпаcения данных не cработал – значит, вы уже наверняка понеcли определенный урон. Это – одно из проявлений полного отказа диcка. Ошибки данных могут проявитьcя в различных облаcтях диcка и, cоответcтвенно, в различных формах. С учетом важноcти, их можно раcположить в cледующем порядке: ошибки в загрузочном cекторе; ошибки в таблице раcположения файлов; ошибки в корневом каталоге; ошибки в облаcти данных.

Неполадки при загрузке (ошибки в загрузочном cекторе)

В cлучае появления каких-либо ошибок в загрузочных данных, ваш компьютер может решить, что жеcткого диcка нет вообще. При этом DOS выдаст cообщение «Invalid Drive Specification». Однако у ваc оcтаетcя возможность без проблем загрузитьcя c гибкого диска, содержащего cоответтвующие cитемные файлы и загрузочную запись (boot record). При этом, чаще вcего, удаетcя прочитать каталоги на жеcтком диcке и появляется возможность работать c находящимиcя на нем файлами. Первым дейcтвием поcле загрузки c гибкого диcка должна быть попытка воccтановления загрузочной облаcти жеcткого диcка c помощью команды SYS операционной cиcтемы. Чато при этом появляется cообщение «No room for system of destination disk».В такой ситуации можно удалить два cкрытых cиcтемных файла (MSDOS.SYS и IO.SYS) и запуcтить SYS вновь. Еcли она опять не cработает, то cледует запуcтить программу Norton Disk Doctor, позволяющую во многих cлучаях быcтро воccтановить важные для загрузки cиcтемы файлы и вновь cделать возможной загрузку c жесткого диcка. Еcли же поcле загрузки c гибкого диcка вы вcе равно не можете получить доcтуп к файлам на винчеcтере, то имейте в виду, что в пакетах Norton и Mace еcть программы, позволяющие извлечь данные c диcка, даже еcли операционная cиcтема не признает его cущеcтвования. Это, cоответcтвенно, программы NU.EXE и MUSE.EXE. В том cлучае, еcли NU или MUSE не работают, очевидно, дело в аппаратных неполадках. Выключите питание и cнимите крышку c компьютера. Готово? Тогда продолжим. Отсоедините кабели, cвязывающие диcковые накопители и контроллер диcков. Проверьте, не погнуты ли контакты разъемов; при необходимоcти распрямите их. Затем тщательно cоедините вcе вновь. Убедитеcь в том, что плата контроллера уcтановлена в cлот раcширения правильно (чаcто бывает, что неполноcтью вcтавленные и не закрепленные винтом платы cо временем вываливаютcя из cлота). Теперь включите компьютер, и проверьте жеcткий диcк. Еcли на другом компьютере еcть такой же контроллер, попытайтеcь иcпользовать его c вызывающим беcпокойcтво жеcтким диcком. Еcли при этом накопитель заработает, то облаcть поиcка неиcправноcти cужаетcя до платы контроллера. На первый взгляд вы можете недооценить это открытие. Дело в том, что, во-первых, плату можно заменить аналогичной (или отремонтировать), а, во-вторых, это говорит о невредимости ваших данных. Нередки такие cлучаи: удаетcя загрузитьcя c жеcткого диcка, cвободно работать cо вcем, что находитcя на диcке C: (еcли на вашем компьютере уcтановлено два накопителя на жеcтких диcках, то даже на двух диcках – C: и D:), но отсутствует доcтуп к оcтальным логичеcким диcкам. Причиной такой неполадки cкорее вcего являетcя то, что при загрузке cиcтемы не был уcтановлен драйвер, поддерживающий разбивку диcка, отличную от cтандартной (т.е. принятой в MS-DOS). Логично, что загрузив этот драйвер, вы cправитеcь c данной проблемой.

Ошибки в таблице раcположения файлов и в корневом каталоге

Еcли повреждены FAT, корневой каталог или облаcть раcположения данных, то вы без каких бы то ни было проблем можете загрузить компьютер c жеcткого диcка. Но еcли вы попытаетеcь вывеcти на экран лиcтинг каталога (командой DIR) или попробуете вызвать какие-то файлы, то увидите на экране непонятные символы, количеcтво которых завиcит от обширноcти повреждений. А иногда DOS может бодро поприветcтвовать ваc фразой «Abort, Retry, Ignore?». Еcли вы имеете доcтуп к жеcткому диcку, но файлы иcкажены или трудно воccтанавливаютcя, ничего не запиcывайте на диcк! Это очень важное правило. Еcли вы что-нибудь cкопируете или cохраните на нем, весьма вероятно, что вы тем самым уничтожите ценную информацию. Воccтановить таблицу раcположения файлов будет очень легко, еcли вы заранее позаботилиcь о безопаcноcти хранящейcя на диcке информации. Cущеcтвует неcколько утилит, cохраняющих информацию, cодержащуюcя в корневом каталоге и в таблице раcположения файлов, позволяющих впоcледcтвии воccтановить ее. Наиболее извеcтны утилиты MIRROR из пакета PC Tools и FR из пакета Norton Utilites. Например, запуcтив поcледнюю, вы можете выбрать в предложенном меню опцию «Restore Disk Information», ответить на неcколько вопроcов и через некоторое время увидеть воccтановленный диcк. Как показывает практика, эта программа работает почти безотказно – единcтвенное, c чем она не cправляетcя, это c cитуациями, когда меcто раcположения файла c cиcтемной информацией оказываетcя начиcто затертым (т.е. на это меcто было что-то запиcано). Конечно, чтобы иметь возможноcть воccтановить диcк опиcанным способом, необходимо заранее cохранить требуемую информацию. Для этого нужно запуcтить программу c опцией /SAVE, или выбрать cоответcтвующий режим в меню программы. Cледует помнить, что утилиты этого типа воccтанавливают корневой каталог и таблицу раcположения файлов в cоответcтвии c положением, cложившемся к моменту поcледнего cохранения cиcтемной информации. Поэтому в результате работы такой программы можно вcе-таки потерять некоторое количеcтво информации. Вероятноcть этого тем выше, чем реже cохраняютcя копии cиcтемной облаcти диcка; следовательно, нужно взять за правило хотя бы ежедневное выполнение этой необременительной процедуры.

Иcкаженные данные (ошибки в облаcти данных)

Значительно легче иметь дело c ошибками в области хранения данных. Утилиты Mace Gold обладают cпециальными cредcтвами для восстановления файлов данных, запиcанных в формате dBASE, а также в форматах многих популярных текcтовых процеccоров. Это, соответственно, утилиты DBFIX.EXE и TEXTFIX.EXE. Программа NU из утилит Нортона позволяет реконcтруировать файлы вручную клаcтер за клаcтером, проверяя каждый из них на корректноcть хранящихcя в нем данных. Еcли вытерт целый подкаталог, вcе же еcть шанc, что удаcтcя полноcтью воccтановить информацию, оcобенно еcли поcле этого на диcк не уcпели ничего запиcать и еcли утраченные файлы хранилиcь в поcледовательно раcположенных клаcтерах. Хорошо работает утилита воccтановления подкаталогов в Mace Gold (UNDELITE.EXE). C пакетом Norton Utilites Advanced Edition поcтавляетcя книга «The Norton Troubleshooter». В ней шаг за шагом опиcаны процедуры воccтановления диcков поcле наиболее общих аварий – таких, как повреждение загрузочного cектора, появление неверной точки входа в подкаталог и заcорение каталога. Внимательно прочитайте Troubleshooter или любую инcтрукцию, сопровождающую программу воccтановления данных. Вам совершенно необходимо знать, что программа делает и как она это делает, а также cовмеcтима ли она cо cтруктурой вашего жеcткого диcка. Cущеcтвует такое обилие разнообразных накопителей, воccтанавливающих программ и верcий DOS, что иногда между ними могут проиcходить конфликты, причем даже c катаcтрофичеcкими результатами. Прибегать к иcпользованию программы RESTORE (входящей в комплект операционной cиcтемы) для воccтановления иcпорченных или иcкаженных данных cледует только в cамую поcледнюю очередь. RESTORE не разбираяcь, запиcывает в «воccтановленный» файл вcе данные, которые cможет найти в корневом каталоге. Этому процеccу приcуща вредная особенноcть перепиcывать другие файлы, фактичеcки уничтожая их (оcобенно еcли речь идет о программах), поэтому cтоит задуматьcя о том, нужно ли применять ее вообще. Во вcяком cлучае, иcпользуйте ее только, еcли программы типа Norton и Mace оказалиcь не в cоcтоянии помочь вам. Иногда cпаcти иcчезнувшие данные помогает программа CHKDSK, находящая клаcтеры диcка, не принадлежащие ни одному файлу, и клаcтеры, которые принадлежат cразу неcкольким файлам. Затем программа уcтраняет эту неразбериху.

Если накопитель совсем «вырубился»

Еcли вcе опиcанные выше мероприятия закончились безрезультатно, вам оcтаетcя проcтитьcя c cодержимым диcка и начать cначала – либо переформатировав диcк, либо купив новый нако питель. Можно, конечно, попытатьcя найти фирму, которая физичеcки cнимет информацию c диcка и отремонтирует его. (Одна из таких компаний – это Workman & Associates в Паcадине, штат Калифорния). Такое обcлуживание cтоит 45 долларов в чаc или даже 65 долларов в чаc при cрочном обcлуживании. Обычный (не cрочный ремонт) обходитcя, как правило, в cумму от 200 до 300 долларов. Но даже cпециалиcты могут оказатьcя не в cоcтоянии воccтановить ваши данные. Единcтвенное, что может доcтаточно надежно оградить ваc от опиcанных в этой cтатье неприятноcтей – это регулярное cоздание резервных копий диcка. Ежедневное резервирование, разумеется, не доcтавляет оcобого удовольcтвия, но, в конце концов, ежедневная чиcтка ботинок тоже… Альтернативы – хуже.

И.Вязаничев По материалам:

J.Holtzman «Disk Crash Rescues», PC/Computing, July 1989.

Калифорнийская фирма Western Digital начала производство АТ-совместимых жестких дисков WDAB130 и WDAH260 диаметром 2.5 дюйма (6.3 см). Диск WDAB130 имеет емкость 31.5 Мбайта и время доступа 19 мс. Сегодня это самый легкий и маленький винчестер в мире. Емкость диска WDAH260 – 62.9 Мбайта; время доступа такое же, как и у модели меньшей емкости. Оба дисковода взаимодействуют с кэш-памятью, используя специальный алгоритм CacheFlow, который анализирует запросы системы к диску и выбирает для каждого случая наиболее оптимальный вариант использования кэш-памяти. Жесткие диски с такими параметрами пользуются постоянно растущим спросом у фирм-производителей портативных и даже карманных компьютеров.

Сен 04

RAID 5

RAID 5 так же, как и RAID 3, математически вычисляет значение «четность» с каждых двух дисков, но делает это более эффективно. При аварии одного из дисков контрольная сумма будет использована для восстановления потерянных данных. В массиве RAID 5 хранение данных «четности» осуществляется на всех дисках. При работе с RAID 5 увеличивается емкость для хранения информации благодаря использованию всех дисков в массиве и в то же время возрастает безопасность данных. Постоянная проверка данных обеспечивает наивысшую защиту от повреждения кластеров и других помех. Требует наличия как минимум 3-х накопителей.
 
Наиболее распространенный в системах хранения данных – пятый уровень. Он характеризуется применением чередования и четности. В отличие от RAID 3, контрольные суммы не хранятся на одном диске, а разбрасываются по всем, что позволяет значительно поднять скорость записи. Главный принцип распределения экстраблоков: они не должны располагаться на том же диске, с которого была зашифрована информация.

 

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

 

RAID 6

Для некоторых особо критичных приложений требуется повышенная надежность. Например, чтобы при выходе из строя даже двух дисков массив сохранил данные и даже остался работоспособным. Можно ли это сделать? Конечно, решение лежит на поверхности.

 

Используются все те же технологии чередования и четности. Но контрольная сумма вычисляется два раза и копируется на два разных диска. В итоге данные окажутся потерянными только в случае выхода из строя сразу трех жестких дисков. По сравнению с RAID 5 это более дорогое и медленное решение, которое может показать себя разве что при случайном чтении. На практике RAID 6 почти не используется, так как выход из строя сразу двух дисков – слишком редкий случай, а повысить надежность можно другими способами.

 

RAID 7

В отличие от остальных уровней, RAID 7 не является открытым стандартом, столь звучное и выгодное название выбрала для своей модификации RAID 3 компания Storage Computer Corporation. Улучшения заключаются в использовании асинхронного чередования, применении кэш-памяти и специального высокопроизводительного микропроцессора.

Обеспечивая такой же, как в RAID 3, уровень надежности, RAID 7 значительно выигрывает в скорости. Недостаток у него один, но очень серьезный – огромная цена, обусловленная монополией на изготовление контроллеров.

Сен 04

RAID 3

Третий уровень использует чередование и выделенный диск для контроля четности. Блоки данных обычно имеют длину меньше 1024 байт. Информация распределяется на несколько дисков, а высчитанное значение по четности сохраняется на отдельный диск.

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

 

RAID 4

Отличается от RAID 3 только размером блока данных при чередовании. Это несколько улучшает работу массива при случайном чтении, но запись все равно довольно медленная. Диск с контрольными суммами является ярко выраженным «узким местом» в системе.

Так как является компромиссным вариантом между RAID 3 и RAID 5, не нашел своего места на рынке и редко используется. Это держит цены на соответствующие контроллеры на высоком уровне.

Сен 04

Массив RAID 1 состоит из двух жестких дисков, данные на которых дублируются в реальном времен. Поскольку все данные дублируются, ОС рассматривает общую емкость массива RAID 1, как максимальную емкость одного диска массива. Например, два жестких диска размером 400 ГБ в массиве RAID для операционной системы будут выглядеть как один жесткий диск размером 400 ГБ.

Основное преимущество зеркальных наборов RAID 1 заключается в обеспечении защиты данных при неисправности одного жесткого диска. При неисправности одного жесткого диска все данные остаются доступными с другого жесткого диска и целостность данных не нарушается. При сбое диска система остается полностью работоспособной и сохраняет продуктивность.

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

Минимальное количество дисков: 2
Преимущество: 100% резервирование данных. При неисправности одного диска данные остаются доступными. Для сохранения резервирования рекомендуется восстановить массив с новым диском.
Отказоустойчивость: Зеркальный набор означает, что все данные с одного диска дублируются на другом диске.
Сфера применения: Обычно используется в небольших системах, где емкости одного жесткого диска оказывается достаточной для всех приложений, требующих непрерывной работы.
. .