среда, 13 января 2010 г.

10 базовых вопросов по MS SQL Server

1. Какой командой (short cut) можно вызвать помощь HELP по синтаксису оператора SQL в Query Analyzer?

Выделить оператор и нажать Shift+F1

2. Как в Query Analyzer в открытом файле скрипта выполнить только часть последовательных команд?

Выделить нужные команды и нажать F5 или кнопку кнопку Execute Query.

3. После написания процедуры выяснилось, что она работает неправильно. Какие есть средства для устранения ошибок в работе процедуры?

Для обработки ошибок, возникающих во время исполнения процедур, используются коды возврата и функция @@ERROR.

1).Обработка пользовательских ошибок.

С помошью оператора RETURN можно вернуть значения для обработки ошибок.

Пример:

ALTER PROCEDURE exampleProc

AS

.....

IF(....проверка на возможность ошибки...)

RETURN(1)

ELSE

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

При вызове процедуры:

-- Добавляем переменную для хранения результирующего кода

DECLARE @r_code int

-- Запускаем процедуру и устанавливаем @r_code равной результату процедуры

EXECUTE @r_code = exampleProc

--Определяем значение @r_code и исполняем программу

IF @r_code = 0

.....

ELSE IF @r_code = 1

PRINT 'Ошибка номер ' + CONVERT(varchar(1),@r_code)

GO

2).Ошибки базы данных

При возникновении ошибки функция @@ERROR возвращает номер ошибки отличный от нуля.

Номера и описания ошибок хранятся в таблице master.dbo.sysmessages.

4. Что такое уровень изоляции транзакций и в каких случаях его надо регулировать для SQL Server?

Уровень, на котором транзакция готова к приёму несогласованных данных, называется уровнем изоляции. Уровень изоляции определяет степень изоляции одной транзакции

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

выполнения, но за это приходится расплачиваться согласованностью данных. Напротив,

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

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

SQL Server поддерживает все четыре уровня изоляции:

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

READ COMMITTED – завершенное чтение, при котором отсутствует черновое, "грязное" чтение.

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

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

SERIALIZABLE – сериализуемость. Чтение запрещено до завершения транзакции.

5. Что такое нормализация базы данных? Для чего это нужно и есть ли какие качественные характеристки нормализации?

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

6. В T-SQL есть возможность написания запроса по результатам другого запроса, который упоминается в конструкции FROM. Продемонстрировать как это можно сделать. Для демонстрации использовать таблицу из базы Northwind.

Из всех продуктов выбираем названия напитков(ID=1) поставщика Exotic Liquids(ID=1) .

SELECT Beverages.ProductName

FROM (SELECT ProductName,SupplierID FROM Products

WHERE CategoryID=1) as Beverages

WHERE Beverages.SupplierID = 1;

7.1 Написать запрос при помощи оператора SELECT, который блокирует таблицу на чтение.
Для демонстрации этого использовать таблицу из базы Northwind. Применить в нем оператор WAITFOR для того, чтобы транзакция с этим запросом продолжалась назначенное время. Проверить, что блокировки действительно существуют при помощи другого запроса SELECT по той же таблице. Показать, что возникшая блокировка может быть обнаружена с помощью визуальных средств, предоставляемых SQL Server. Прислать скриншот это view, который показывает наличие проблем с блокировками.

SET TRANSACTION ISOLATION LEVEL READ COMMITTED

BEGIN TRAN

SELECT * FROM Categories WITH (TABLOCKX)

WAITFOR DELAY '00:00:10'

COMMIT TRAN

Для обнаружения блокировок на уровне таблицы можно использовать программу SQL Server Profiler, системные хранимые процедуры sp_lock и sp_who, а также окно Current Activity программы SQL Server Enterprise Manager.

lock1

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

SELECT * FROM Categories WITH (NOLOCK)

8. Работа с utility Profiler - показать как можно отследить все запросы только к определенной базе. Для проверки использовать запросы к базе Northwind.

SQL Profiler ->File-> New Trace -> вкладка Events-> добавить TSQL->вкладка Filters-> раскрыть узел DatabaseName-> выбрать Like-> вписать Northwind->Run

9. Как организовать в БД поддержку отношения логических связей объектов многие ко многим на уровне таблиц БД?

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

10. В Query Analyzer есть возможность создавать объекты БД (функции, процедуры, таблицы и т.д.) при помощи шаблонов. Можно кратко описать как это можно сделать?

В Object Browser выбрать вкладку Templates .

Выбрать необходимый шаблон, он откроется в новом окне.

В меню Edit выбрать Replace Template Parameters.

Установить нужные значения параметров.

Нажать Replace All.

Нажать кнопку Execute Query.

Комментариев нет:

Отправить комментарий