Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

КонспектЛекций

.pdf
Скачиваний:
15
Добавлен:
14.05.2015
Размер:
1.73 Mб
Скачать

выделяемых постранично.

Некоторые функции для работы с текстовыми полями: SUBSTRING(…) – возвращает подстроку текстового поля; READTEXT(…) – считывает данные из текстового поля;

DATALENGTH(…) – возвращает количество байт, занимаемых данными;

4.Целочисленные: следует учитывать, что результат вычисления выражения приводится к типу данных, имеющих максимальный размер из всех участвующих в выражении. Результатом деления целого на целое будет целое с отброшенной дробной частью. tinyint – диапазон данных от 0 до 255 (длина поля 1 байт).

smallint – диапазон данных от -215 до 215-1 (длина поля 2 байта).

int или integer – диапазон данных от -231 до 231-1 (длина поля 4 байта). bigint – диапазон данных от -263 до 263-1 (длина поля 8 байт).

5.Нецелочисленные: с фиксированной и плавающей точкой.

dec или decimal [(p[,s])] или numeric [(p[,s])] – диапазон от –(1038-1) до (1038-1).

Содержит фиксированное количество знаков до и после точки: p – общее число знаков, s

– число знаков после точки (0 <= s <= p <= 38). Длина поля от 5 до 17 байт.

float [(n)] – число в виде мантиссы и порядка. Максимальный диапазон от -1.79308 до 1.79308. Значение n определяет количество бит, используемых для хранения мантиссы (n<=53). Длина поля 4 или 8 байт.

double precision – частный случай float(53).

real – частный случай float(24). Диапазон данных от -3.438 до 3.438.

Примеры:

DECLARE @VR real SET @VR=1.23E4

SELECT @VR, DATALENGTH(@VR)

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

DECLARE @VR float, @VS varchar(20) SET @VR=3.14

SET @VS=STR(@VR,4,2)+'15' – простая функция преобразования типов

SELECT @VS

SET @VS=CAST($123.45 AS varchar(10)) – универсальная функция преобразования

SELECT @VS

SELECT CAST ('$54321' AS money)

Взаимозаменяемой для функции CAST является функция CONVERT Некоторые функции для работы с числовыми типами:

ISNUMERIC(…) – проверяет, имеет ли выражение числовой тип данных (1, если да); RAND() – вычисляет случайное число с плавающей точкой в диапазоне [0…1]; POWER(…) – возведение числа в степень (SELECT power(2,8) );

PI(…) – возвращает значение Пи.

6.Даты и времени: типы данных позволяют одновременно хранить время и дату. datetime – В первых 4 байтах хранится смещение относительно 1 января 1753 г. (до этого летоисчисление шло по Григорианскому и Юлианскому календарям) до

31

31.12.9999. Последние 4 байта – время после полуночи с точностью 3.33 мс. smalldatetime – диапазон от 1.01.1900 до 6.06.2079 с точностью до 1 мин.

Дополнительные возможности для ввода и вывода дат предоставляет команда

SET DATEFORMAT xxx, где xxx может быть: mdy, dmy, ymd, ydm, myd, dym.

Примеры:

SET LANGUAGE 'русский' DECLARE @DV datetime

SET @DV='21 октябрь 2003 23:19' SELECT @DV

Функция ISDATE(<выражение>) возвращает 1, если <выражение> может быть правильно конвертировано в дату, и 0 в противном случае.

Некоторые функции для работы с датой и временем: GETDATE() – возвращает текущее системное время; YEAR(…) – возвращает год из указанной даты;

DATEADD(…) – добавляет к дате указанный временной интервал

SELECT year(getdate())

DECLARE @Str1 char(10)

IF DAY(GETDATE())<15 SET @Str1='первая'

ELSE SET @Str1='вторая'

SELECT 'Сейчас '+RTRIM(@Str1)+' половина месяца'

7.Денежные: поддерживается точность 4 знака после десятичной точки.

money – диапазон от -922 337 203 685 477.5808 до +922 337 203 685 477.5807, длина 8

байт.

smallmoney – диапазон от -214 748.3648 до +214 748.3647, длина 4 байта.

Примеры:

CREATE TABLE MyMoney (

ID bigint IDENTITY (1,1) PRIMARY KEY, Value money NULL

)

INSERT MyMoney VALUES ($127.35) SELECT * FROM MyMoney

Специальные:

bit – данные принимают значения 0 / 1 / NULL. Память выделяется побайтно. timestamp – счетчик-идентификатор записей, уникальный в пределах одной базы данных (не имеет ничего общего с меткой времени). Длина 8 байт. Не может использоваться для объявления переменных. Не должен использоваться в составе первичного ключа.

uniqueidentifier – глобально уникальный идентификатор записи (GUID). Идентификатор уникален в масштабе планеты. Представляет собой 16-байтовую последовательность, составляющуюся с помощью функции NEWID() из MAC-адреса сетевой карты и внутреннего таймера процессора.

sysname – предназначен для хранения имён объектов баз данных SQL Server – столбцов, таблиц, индексов, представлений, хранимых процедур и др.

sql_variant – позволяет в одном и том же столбце хранить значения любого другого доступного типа данных (за исключением text, ntext, image, timestamp, cursor, table и самого sql_variant)

32

Пример:

DECLARE @Var1 int, @Var2 nvarchar(15), @Var3 datetime, @VA sql_variant SET @Var1=10

SET @Var2='Просто строка'

SET @Var3='23.08.1969' SET @VA=@Var1+5 SELECT @VA

SET @VA=@Var2 SELECT @VA SET @VA=@Var3 SELECT @VA

Функция SQL_VARIANT_PROPERTY возвращает информацию о природе данных, хранящихся под типом sql_variant.

cursor – ссылка на объект базы данных – курсор. Подробнее о курсорах см. далее. table – временная таблица (массив). Может использоваться только для переменных и значений, возвращаемых функциями пользователя.

Пример:

DECLARE @VarTable TABLE (

Col1 int NOT NULL IDENTITY (1,1) PRIMARY KEY, Col2 nvarchar(15)

)

INSERT INTO @VarTable (Col2) VALUES ('Первая строка') SELECT * FROM @VarTable

8.Пользовательские типы данных: также возможно создавать в MS SQL Server. Для этих целей предусмотрена специальная хранимая процедура sp_addtype. Первым параметром при вызове этой процедуры указывается имя пользовательского типа, вторым – имя системного типа, на основе которого строится пользовательский. Третий параметр указывает, разрешены или запрещены значения NULL. Пример:

sp_addtype nvc15, ’nvarchar(15)’, NONULL

Управляющие конструкции Transact-SQL

Их весьма мало. К ним относятся:

1)Блок BEGIN … END. Выполняет группировку двух и более TSQL команд. Используется в конструкциях ветвлений, условий и циклов. Допускаются вложенные друг в друга блоки.

2)Конструкция IF … ELSE. Переход по условию. Допускается в каждой ветви исполнять одну команду или использовать блок BEGIN…END. Пример:

PRINT GetDate()

IF Day(GetDate())=1 AND Month(GetDate())=1

BEGIN

PRINT 'Сегодня Новый Год!'

IF CURRENT_USER='dbo'

PRINT 'Администратор СУБД - это судьба...'

END

ELSE PRINT 'Сегодня точно не Новый Год.'

33

3)Конструкция CASE … END. Реализует множественное ветвление. Особенностью конструкции является то, что её можно использовать непосредственно в выражениях, например, при выполнении запроса. Пример:

SELECT au_lname, au_fname,

CASE state

WHEN ‘CA’ THEN ‘Калифорния’

WHEN ‘UT’ THEN ‘Юта’

ELSE state

END

FROM authors

WHERE au_lname LIKE ’O%’

4)Конструкция COALESCE возвращает первое значение, не равное NULL, из перечня аргументов функции. Пример:

DECLARE @I1 int, @C1 char, @C2 char, @C3 char SET @I1 = 10

SET @C1 = 'A'

SET @C2 = @C1 + @C3 PRINT COALESCE(@C2,@I1)

Так как конкатенацией любой строки со значением NULL является NULL, то результатом выполнения этой последовательности команд будет значение 10.

5)Конструкция WHILE… . Организует циклы в TSQL. Это единственный способ организовать циклы в этом языке. Цикл можно принудительно остановить, если в его теле выполнить команду BREAK, и перезапустить из любого места внутри тела цикла с помощью команды CONTINUE.

DECLARE @I1 int

SET @I1 = 1

WHILE @I1 < 8

BEGIN

PRINT 'Квадрат числа '+Str(@I1)+' есть '+Str(Square(@I1))

SET @I1 = @I1 + 1

END

Дополнительные предикаты.

К уже отмеченным ранее предикатам условных конструкций в TSQL добавляются операторы ALL и ANY. C помощью ALL выполняется сравнение скалярного выражения со всеми значениями, возвращаемыми подзапросом. Если логическое условие выполняется для всех возвращаемых подзапросом значений, тогда результат выполнения условия TRUE.

IF 1 = ALL (SELECT contract FROM authors) PRINT ‘Все авторы подписали контракт’

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

IF 0 = ANY (SELECT contract FROM authors) PRINT ‘Не все авторы подписали контракт’

Комментарии.

Для переменных TSQL не определено понятие «массив», следовательно все операции, характерные для него, следует выполнять во временных или постоянных таблицах.

34

3. Объекты баз данных и работа с ними.

Временные таблицы (Temporary tables): бывают локальные и глобальные.

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

Названия глобальных таблиц начинаются с символов ##. Существуют эти таблицы так же, как и локальные, однако во время своего существования являются видимыми и из любого другого соединения с сервером. Имя глобальной таблицы должно быть уникальным для сервера.

Представления (Views):

Представление для пользователей базы данных выглядит как таблица, однако на самом деле его содержимое формируется запросом. Физически данные, виртуально принадлежащие представлению, находятся в таблицах, к которым обращается этот запрос. Однако для клиентов MS SQL Server запросы на выборку данных из представления выполняются как для полноценной таблицы. Представление может быть использовано: (1) для защиты конфиденциальной информации; (2) для упрощения доступа к информации и (3) сокращения времени доступа. Для таких целей представление может быть проиндексировано.

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

Недостатки: (1) представление не может ссылаться на временные таблицы, и невозможно создать временные представления; (2) в запросе, определяющим представление, нельзя использовать разделы ORDER BY и INTO; (3) имеется ряд ограничений на изменение, добавление и удаление данных в представлении, созданном для нескольких таблиц.

Команды TSQL, используемые для работы с представлениями:

CREATE VIEW <имя представления> AS <SELECT-запрос> – создание представления.

CREATE VIEW My_view AS SELECT au_lname, au_fname, address

FROM authors WHERE state=’CA’

ALTER VIEW <имя представления> AS <SELECT-запрос> – изменение представления (может потребоваться, например, в случае, если нежелательно изменять права доступа к уже существовавшему представлению.

DROP VIEW <имя представления>, …– удаление представлений (одного или нескольких)

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

Курсоры (Cursors):

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

35

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

(1)курсоры позволяют работать со строками таблицы посредством указания их порядкового номера в наборе данных;

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

Жизненный цикл курсора:

Создание курсора: DECLARE <имя курсора> [INSENSITIVE] [SCROLL] CURSOR FOR <SELECT-оператор> FOR {READ ONLY | UPDATE}

Здесь ключевое слово INSENSITIVE означает, что курсор будет статическим (слепок с данных), в то время как по умолчанию курсор создаётся динамическим (выборка осуществляется каждый раз при обращении к строке). Ключевое слово SCROLL означает, что курсор можно прокручивать в любом направлении, иначе курсор создаётся «последовательным».

Открытие курсора: OPEN [GLOBAL] <имя курсора>. Курсор, указанный как GLOBAL, не удаляется автоматически при завершении работы той процедуры или пакета, из которых он был вызван.

Считывание данных: FETCH [[ NEXT | PRIOR | FIRST | LAST | ABSOLUTE n | RELATIVE n ] FROM ] [GLOBAL] <имя курсора> [INTO @variable_name, …]. SQL Server 2000

позволяет считывать из курсора всего одну строку. Ключевое слово FIRST – возвратить первую строку курсора; LAST – последнюю строку курсора; NEXT – следующую строку за текущей, возвращённая строка становится текущей; PRIOR – предыдущую перед текущей; ABSOLUTE n – возвращает строку по её абсолютному порядковому номеру в курсоре; RELATIVE – через n строк после текущей. Данные столбцов будут сохраняться в каждую из указанных переменных в порядке их перечисления.

Изменение данных: выполняет команда UPDATE с синтаксисом, предназначенным для работы с курсорами.

Удаление данных: выполняет команда DELETE с синтаксисом, предназначенным для работы с курсорами.

Закрытие курсора: CLOSE [GLOBAL] <имя курсора> Освобождение курсора: DEALLOCATE [GLOBAL] <имя курсора>

Пример использования курсора:

DECLARE fo_curs CURSOR STATIC FOR

SELECT name_rus from fo ORDER BY name_rus

DECLARE @name varchar(50)

OPEN fo_curs

FETCH FIRST FROM fo_curs INTO @name

WHILE @@FETCH_STATUS=0

BEGIN

PRINT @name

FETCH NEXT FROM fo_curs INTO @name

END

CLOSE fo_curs

DEALLOCATE fo_curs

36

Хранимые процедуры (Stored Procedures): являются основным механизмом, с помощью которого регулируются вся работа с базами данных на сервере. Хранимая процедура – это именованный набор команд TSQL, хранящийся непосредственно на сервере и представляющий собой самостоятельный объект базы данных.

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

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

Создание хранимой процедуры:

CREATE PROC[EDURE] <имя> [;<число>] [{@<переменная-параметр> <тип данных>} [VARYING] [= <значение по умолчанию>] [OUTPUT] ,…] [WITH {RECOMPILE | ENCRIPTION}] AS <набор выполняемых SQL-инструкций> [RETURN]

Здесь <число> – возможность указать идентификационный номер хранимой процедуры; OUTPUT – наличие этого ключевого слова будет означать, что соответствующий параметр предназначается для возвращения данных из хранимой процедуры (при этом параметр может быть использован и для передачи данных в хранимую процедуру); VARYING – ключевое слово, которое используется совместно с параметром OUTPUT, имеющим тип данных Cursor, которое определяет, что в качестве выходного параметра будет представлено результирующее множество; RECOMPILE – план выполнения процедуры создаётся при каждом её вызове. ENCRIPTION – выполняется кодирование хранимой процедуры при записи в системные таблицы. Для возврата из хранимой процедуры можно использовать команду RETURN.

Запуск хранимой процедуры осуществляется указанием её имени и, если необходимо, со списком значений параметров. При вызове процедуры из тела другой процедуры используется следующий синтаксис: EXEC[UTE] <имя процедуры> {[[@<имя параметра> =] <значение> | @<имя переменной> [OUTPUT] | DEFAULT],…}.

Пример пакета:

--описываем хранимую процедуру

CREATE PROCEDURE MyProc

@lastname char(64), @firstname char(64) AS SELECT a.au_lname, a.au_fname, t.title FROM authors a, titles t, titleauthors ta

WHERE a.au_lname = @lastname AND a.au_fname = @firstname AND a.au_id = ta.au_id AND t.title_id = ta.title_id

--создаём хранимую процедуру

GO

-- вызываем только что созданную хранимую процедуру MyProg ’Иван’,’Бездомный’

37

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

Процедура как результат своей работы может возвратить (1) выборку из таблиц (RecordSet), (2) значения параметров, заданных как OUTPUT, (3) код завершения, который может генерироваться командой RETURN n. Просмотр кода процедуры выполняется с помощью системной процедуры sp_helptext, а контрольную информацию о ней можно вывести с помощью процедуры sp_help <имя процедуры>.

Удаление хранимой процедуры осуществляется командой DROP PROCEDURE <имя процедуры>, …

Изменение имени хранимой процедуры осуществляется системной процедурой sp_rename.

Для модификации хранимой процедуры используется команда ALTER PROCEDURE <имя процедуры>. Фактически эта команда аналогична CREATE PROCEDURE, только сделанные ранее административные разрешения сохраняются. Для редактирования хранимой процедуры лучше использовать средства, предоставляемые центром управления MS Access Enterprise Manager.

Триггеры (Triggers):

Триггером в SQL Server называется специальная хранимая процедура, привязанная к конкретной таблице (представлению) и запускаемая сервером автоматически при обращении к этой таблице. Когда пользователь, например, успешно изменил данные в таблице, сервер автоматически запускает триггер, причём если произойдёт откат триггера, то это повлечёт и отмену пользовательских изменений данных. Триггеры могут использоваться (1) для нестандартного контроля целостности данных, (2) для вычисления значений в полях таблицы по значениям других полей, (3) для ограничения действий различных групп пользователей. Существует три типа триггеров – соответственно для команд INSERT, UPDATE и DELETE. Внутри триггера допускается использование практически любых команд TSQL, включая вызовы хранимых процедур и обращение к функциям пользователя.

Пример: триггер для таблицы authors, который будет запрещать вставку новых строк в таблицу, выдавая при этом сообщение «Вставка строк запрещена».

CREATE TRIGGER auth_tr ON authors FOR INSERT AS

PRINT ”Вставка строк запрещена”

ROLLBACK TRAN

Команды ALTER TRIGGER и DROP TRIGGER используются соответственно для изменения и удаления триггера

Пользовательские функции (User-defined functions): появились только в SQL Server 2000.

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

38

Функции не могут возвращать данные непосредственно клиенту, как это может делать хранимая процедура. То есть, не разрешается использование в теле функции команды PRINT, а также команды SELECT для непосредственного возвращения данных.

Пример создания и вызова функции вида inline (всегда возвращающей RecordSet):

CREATE FUNCTION MyFunc ( @State char(2) ) RETURNS TABLE AS

RETURN SELECT au_id, au_lname, au_fname FROM authors

WHERE state = @state

GO

SELECT * FROM MyFunc(’CA’) ORDER BY au_lname, au_fname

Команды ALTER FUNCTION и DROP FUNCTION используются соответственно для изменения и удаления триггера

Правила (Rules):

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

Пример: создание правила, выполняющего проверку 15 <= x <= 75 :

CREATE RULE MyRule AS @exp BETWEEN 15 AND 75

-- свяжем это правило со столбцом price таблицы titles sp_bindrule MyRule ’titles.price’

Теперь все добавляемые или изменяемые строки будут проверяться на указанное условие в данном столбце.

Для освобождения столбца от правила используется хранимая процедура sp_unbindrule <имя объекта>. Для удаления правила используется команда DROP RULE. Перед удалением правило должно быть освобождено от всех столбцов.

Умолчания (Default):

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

Пример создания умолчания и связывания его со столбцом:

CREATE DEFAULT MyDef AS ’неизвестно’ sp_bindefault MyDef ’titles.title’

Тип данных значения по умолчанию должен совпадать с типом данных столбца или должно быть возможным неявное преобразование значение к типу данных столбца. Для освобождения столбца от умолчания используется хранимая процедура sp_unbindefault <имя объекта>. Для удаления умолчания используется команда DROP DEFAULT.

Ограничения целостности (Constraints):

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

39

Частично ограничения целостности были рассмотрены ранее для команд CREATE TABLE и ALTER TABLE. В этих командах после (необязательного) ключевого слова CONSTRAINT для отдельного столбца или таблицы в целом могут идти следующие типы ограничений:

NULL | NOT NULL

PRIMARY KEY

UNIQUE

FOREIGN KEY … REFERENCES

ON DELETE

ON UPDATE

CHECK <логическое выражение> – контроль вводимых значений каким-либо логическим выражением.

Пример:

CREATE TABLE publichers (

pub_id int NOT NULL PRIMARY KEY,

pub_name varchar(40) DEFAULT (’неизвестно’) CHECK (pub_id LIKE ’99[0-9][0-9]’)

)

4. Физическая модель данных MS SQL Server.

SQL Server одновременно может поддерживать до 32767 баз данных, которые могут иметь связи друг с другом или внешними базами данных. После установки пакета создаются четыре системы базы данных: master – системные хранимые процедуры и системные таблицы, msdb – репликация и восстановление баз данных, tempdb – временные объекты для пользователей и промежуточные результаты выполнения запросов, model – модельная база данных (вновь создаваемые базы данных используют данную базу как шаблон, включая набор объектов и прав), и две пользовательских: pubs – использованную в данном учебном пособии, Northwind – аналог базы «Борей» для MS Access, предназначенные для обучения и экспериментов.

Для хранения данных используется:

(1)обычный дисковый раздел ОС. В этом случае база данных хранится как минимум в двух файлах, физический доступ к которым для пользователей в NTFS запрещён (в том числе блокируется копирование этих файлов). В файле с расширением .mdf хранится системная информация о базе данных и её объекты. С ростом базы длина файла автоматически увеличивается на фрагменты заданного размера. В файле с расширением .ldf хранится журнал транзакций. По желанию разработчика база данных может состоять более чем из двух файлов, обычно объединённых в группы. Вторичные файлы данных имеют расширение .ndf и не используются для хранения системной информации.

(2)Неформатированный (RAW) раздел жёсткого диска. База на таком разделе сразу занимает объём всего раздела, при этом возможно организовать только одну базу в разделе. Доступ к этому разделу будет иметь только SQL Server. При этом никакой возможности доступа к этим данным средствами ОС нет, реплицирование будет возможно только средствами SQL Server.

Основная единица хранения данных на уровне файла базы данных – страница (page). При дисковых операциях чтения-записи страница обрабатывается целиком. В SQL Server размер страницы равен 8192 байт. Первые 96 байт отводятся под заголовок, в котором хранится системная информация о типе страницы, объёме свободного места на странице и идентификационном номере объекта базы данных, которому принадлежит эта страница. Базовые типы страниц: data, index, text/image. После заголовка идёт область данных, а в конце страницы – таблица смещений строк, в которой указывается начало каждой записи относительно начала страницы. При удалении строки пустое пространство помечается и потом его может занять новая строка, но перемещения строк не происходит.

40