Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Открытие существующего пакета DTS и его корректировка




Пакет New_data.dts хранится вне SQL Server. Он предназначен для импорта данных о новых продуктах из текстового файла в таблицу newprods базы данных Nortwind.

1. Предварительно создайте таблицу newprods. Для этого выполните программу C:\MOC\2072a\labfiles\L09\newprods.sql. Запишите ее текст в отчет.

2. Откройте пакет DTS. Для этого вызовите команду контекстного меню Open Package на рубрике Data Transformation Services и выберите файл C:\MOC\2072a\labfiles\L09\New_data.dts (самую последнюю версию).

3. Поместите копию пакета, свойства его объектов и задания в отчет.

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

5. Отредактируйте пакет таким образом, чтобы вначале удалялась существующая таблица newprods, на следующем шаге таблица Newprods создавалась с помощью файла сценария C:\MOC\2072a\labfiles\L09\newprods.sql, а затем заполнялась данными из текстового файла. Для этого выполните следующие действия:

5.1. В окне перетащите пиктограмму Execute SQL Task из раздела Tasks панели инструментов в рабочее пространство DTS Designer.

5.2. В окне диалога Execute SQL Task Properties введите информацию, представленную в табл. 2.

Таблица 2

Опция Значение
Description (Описание) Удаление таблицы Newprods
Existing Connection SQL Server Destination (Northwind)
SQL statement DROP TABLE Northwind.dbo.newprods
Parse query (Синтаксический разбор запроса) OK

5.3. Перетащите вторую пиктограмму Execute SQL Task из раздела Tasks панели инструментов в рабочее пространство DTS Designer.

5.4. В окне диалога Execute SQL Task Properties введите информацию, представленную в табл. 3.

Таблица 3

Опция Значение
Description (Описание) Создание таблицы Newprods
Existing Connection SQL Server Destination (Northwind)
SQL statement Вставить (Paste) файл сценария для создания таблицы Newprods C:\MOC\2072a\labfiles\L09\newprods.sql
Parse query (Синтаксический разбор запроса) OK

5.5. Задайте правильный порядок выполнения шагов задания в пакете DTS. Для этого в рабочем пространстве DTS Designer выделите задачу, которая удаляет таблицу Newprods, затем при нажатой клавише CTRL щелкните по пиктограмме задания, которое создает таблицу Newprods. Обе пиктограммы будут выделены.

5.6. В меню Workflow выберите позицию On Completion. Дважды щелкните по синей стрелке, чтобы просмотреть свойства последовательности выполняемых действий. Отметьте в отчете. Закройте окно диалога.

5.7. В рабочем пространстве выделите задачу, которая создает таблицу newprods. Нажмите и удерживайте клавишу CTRL и щелкните по текстовому файлу New products. При этом обе пиктограммы останутся выделенными.

5.8. В меню Workflow выберите позицию On success. Дважды щелкните по зеленой стрелке, чтобы просмотреть свойства последовательности выполняемых действий.

5.9. Закройте окно диалога, сохраните пакет DTS, а затем выполните его.

Перенос объектов SQL Server в новую базу данных

Импортирование объектов из одной базы данных в другую

Ваша задача перенести часть объектов базы данных Northwind в новую базу данных. Для выполнения данной задачи необходимо сначала создать новую базу данных Nwind2.

Переключитесь в Enterprise Manager , выделите свой сервер, в меню TOOLS раскройте список мастеров Wizard, и в рубрике Data Transformation Service выберите DTS Import Wizard.

Введите данные в мастере, используя информацию, представленную в табл. 4.

Таблица 4

Опция Значение
Data Source and Destination (Источник и адресат данных) Microsoft OLE DB Provider for SQL Server
Server Name (Имя сервера) Local
Security Context (Контекст защиты) Windows Authentication
Database (База данных – источник) Northwind
Database (База данных – приемник) Nwind2
Table copy or Query (копия таблицы или запрос) Copy objects and data between SQL Server databases (Копирование объектов и данных из одной базы данных в другую)
Objects to Transfer (Объекты для передачи) Очистить флажок Include all dependent objects Очистить флажок Copy all objects
Select Objects (Выбор объектов) ТаблицаOrders ТаблицаOrder Details Представление Order Subtotal ПредставлениеSummary of Sales by Quarter ПредставлениеSummary of Sales by Year
Use default options (Использовать опции по умолчанию) Очистить флажок
Options     Security options   Table options Очистить флажок Copy database users and database roles   Очистить флажок Copy object-level permissions Очистить флажок Copy Triggers
Script File Directory (Каталог сценариев) С:\Moc\2072a\Labfiles\L09\DB_xref
Run DTS Immediately (Запускать пакет немедленно) Yes

Переключитесь в Query Analyzer. Выполните следующие команды для просмотра результата передачи в базу данных Nwind2.

Use Nwind2

Select * from information_schema.tables where table_type in (‘BASE TABLE’,’VIEW’)

Просмотрите содержание каталога сценариев

C:\MOC\2072a\Labfiles\L09\DB_xref. Откройте и просмотрите файлы типа .tab, используя Блокнот или Query Analyzer. Что за команды там находятся? В файле c каким расширением записано создание представлений в новой базе данных?

Экспорт файлов в текстовый файл

Ваша задача состоит в том, чтобы перекачать данные из таблицы Customers базы данных Northwind в текстовый файл. Для этого воспользуйтесь мастером DTS Export Wizard. Введите информацию в соответствующих окнах мастера из табл.5.

Таблица 5

Опция Значение
Data Source (Источник данных) Microsoft OLE DB Provider for SQL Server
Server Name (Имя сервера) Local
Security Context (Контекст защиты) Windows Authentication
Database (База данных – источник) Northwind
Data Destination (Адресат данных) Текстовый файл
Destination file name (Имя файла-адресата) С:\MOC\2072a\labfiles\l09\SoAmer.txt
Table copy or Query (копия таблицы или запрос) Use a query to specify the data to transfer (Использовать запрос для передачи данных)
Query Builder (Конструктор запросов)  
Source Table (исходная таблица) Selected Columns (выбранные поля) Sorting order (порядок сортировки) Customers Все столбцы, кроме Phone и Fax Country, CompanyName  
Критерии запроса Customer.Country=’Argentina’ OR Customer.Country=’Brazil’ OR Customer.Country=’Venezuela’
SQL query statement Parse
Select file format (формат файла) Delimited
Column delimiter (разделитель колонок) Tab
Run DTS Immediately (Запускать пакет немедленно) Yes
Schedule DTS Package (Создать расписание выполнение DTS) Yes
Recurring Job Schedule (расписание выполнения задания на периодической основе)     Еженедельно по понедельникам, средам и пятницам в 9 утра
Save DTS Package (сохранить пакет) Yes
Description (описание) Список южноамериканских клиентов
Server Name Local
DTS package security context Windows Aithentication

Откройте программу Блокнот и просмотрите созданный текстовый файл.

Проверьте, что для пакета создано расписание

Для этого в Enterprise Manager раскройте список Jobs в SQL Server Agent и найдите в нем задание SouthAmericanCustomers и просмотрите его свойства. Команду шага задания вы просмотреть не сможете, т.к. она зашифрована.

Импорт данных с помощью задания массовой вставки Bulk Insert

Создайте самостоятельно в конструкторе пакетов DTS пакет для импорта данных из текстового файла C:\MOC\Labfile\L09\Newprods.txt в таблицу Products базы данных Northwindcopy. Предварительно просмотрите исходную таблицу, подсчитайте число записей в ней. Будьте внимательны, когда будете описывать разделители полей. Предусмотрите в пакете DTS шаг, который бы не позволил разрастаться таблице Products при повторном выполнении задания.

Отобразите в отчете копию пакета и свойства его соединений и заданий.

Перенос данных из таблицы Excel в таблицу базы данных Pubs

В конструкторе пакетов DTS создайте самостоятельно (используя материалы лекции) задание для переноса данных из таблицы reclama.xls с листа Заказы в таблицу Zakaz базы данных Pubs. Используйте VB скрипт для преобразования поля Месяц из поля в числовом формате в источнике данных в поле символьного формата так, чтобы 1-му месяцу соответствовало значение «Январь», второму – «Февраль» и т.д.

10. Лабораторная работа по теме «Репликация»

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

В этой лабораторной работе вам необходимо объединиться с партнером, в упражнении 2 один из компьютеров будет выступать в роли издателя и дистрибьютора, а другой в роли подписчика, а в упражнении 3 – наоборот, второй компьютер будет сконфигурирован как издатель и дистрибьютор, а первый - как подписчик.

Регистрация второго сервера

В Enterprise Manager раскройте SQL Server Group и, вызвав контекстное меню, выполните команду New SQL Server Registration. При регистрации сервера Вашего партнера не забудьте, что Вы можете это сделать только с помощью SQL Server аутентификации, указав Login sa и пароль sa.

Настройка репликации транзакций

Используя мастер, Вы должны создать публикацию на основе таблицы Products базы данных Northwind. Данная таблица будет реплицирована в таблицу ReplProducts на сервере-подписчике. Вы должны обновить данные на сервере-издателе и проверить, что они обновились в репликации.

Создание публикации (на сервере издателе и дистрибьюторе)

1. В Enterprise Manager выберите локальный сервер в качестве издателя и дистрибьютора, щелкните по его имени и вызовите мастер для создания публикации (Tools|Wizards|Replication|Create Publication Wizard).

2. В окне диалога Create and Manage Publication выберите Northwind, затем щелкните по кнопке Create Publication.

3. Введите в окнах мастера информацию, представленную в табл.1, остальным опциям оставьте значения по умолчанию.

 

 

Таблица 1

Опция Значение
Distributor (Дистрибьютор) Ваш сервер
Snapshort folder (папка для моментального снимка) По умолчанию
Publication Database (база данных публикации) Northwind
Publication type (Тип публикации Transaction publication (публикация транзакций)
Subscriber types (Тип подписчика) Серверы SQL Server 2000
Articles for publication (Статьи в публикации) dbo.products
Publication Name (Имя публикации) NorthwindProductsTablePublication
Publication description (Описание публикации) Публикация транзакций таблицы Products БД Northwind

После завершения установки свойств публикации подождите завершения процесса создания дистрибьютора, издателя, публикации и ее статей.

4. Закройте окно диалога по созданию публикаций.

5. В дереве консоли раскройте окно Replication Monitor.

6. Задайте режим автоматического обновления Replication Monitor.

7. Раскройте папку Publishers, в ней – свой сервер, после чего щелкните по созданной Вами публикации. В окне детализации просмотрите список агентов репликации, отметьте в отчете их свойства и хронологию.

Ответьте на следующие вопросы:

Когда намечен запуск Log Reader Agent?

Когда намечен запуск Snapshort Agent?

Создание подписки (на сервере-подписчике)

На втором сервере создайте подписку типа Pull на публикацию, созданную на сервере-издателе.

1. В Enterprise Manager раскройте свой сервер на втором компьютере, щелкните по его имени, и запустите мастер по созданию подписки типа Pull (Tools|Wizards|Replication|Create a Pull Sibscription Wizard).

2. Используйте в окнах мастера информацию табл.2

 

Таблица 2

Опция Значение
Look for publications (Поиск публикаций) From registered servers
Publisher (Издатель) Первый сервер
Publication (Публикация) NorthwindProductsTablePublication
Synchronization agent login (Вход в систему агента синхронизации)  
Distination database (База данных – адресат) Создайте новую базу данных (New-ReplicatedNorthwind)
Initialize subscription (Инициализировать подписку) Yes (да)
Snapshort delivery (Доставка моментальных снимков) Используйте файлы моментальных снимков из папки по умолчанию
Distribution Agent Shedule (Расписание агента Distribution Agent) Continiously (непрерывно)
Start required Services (Запустите необходимые службы) SQL Server Agent на подписчике

 

После нажатия на кнопку Finish подождите выполнение мастером всех необходимых шагов для создания подписки, ее инициализации и запуска агента Distribution Agent.

3. Раскройте ветвь Management, в ней SQL Server Agent, после чего раскройте рубрику Jobs. Просмотрите задание из категории Repl-Distribution и обратите внимание на его расписание. Ресурсы какого сервера будут использованы в этом задании. Изменятся ли эти ресурсы в случае Push-подписки?

3. Создание публикации слиянием

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

На компьютере, обозначенном как издатель и дистрибьютор, создайте папку общего доступа с именем repldata по адресу: C:\program files\Microsoft SQL Server\MSSQL\Repldata.

Задайте для данной папки разрешения: для всех – чтение, для

Сконфигурируйте на данном компьютере свойства дистрибьютора (можно для этого использовать либо команду TOOLS|Replication|Configure Publishing, Subscribers and Distribution, либо соответствующий мастер, предварительно выделив нужный сервер).

Установите свойства в соответствии с табл. 3.

Таблица 3

Опция Значение
Distributor (Дистрибьютор) Выбранный сервер
Snapshort folder (папка для моментального снимка) C:\program files\Microsoft SQL Server\MSSQL\Repldata.  
Customize publishing and distribution setting(настроить установки) Yes
Destribution database Name (Имя базы данных Distribution) Distribution
Folder for distribution database file (папка для файла данных базы данных Distribution) По умолчанию
Folder for distribution database log files(папка для файла журнала транзакций базы данных Distribution) По умолчанию
Enable publishers to use This Ditributor (Разрешите издателям использовать данный дистрибьютор) Выбранный сервер-дистрибьютор
Enable publication databases (Разрешите использовать базу данных для репликации) Northwind  
Enable Subscribers (Дайте доступ подписчикам) Сервер Вашего партнера

 

Создайте публикацию для репликации слиянием на издателе

Щелкните на имени сервера издателя и дистрибьютора, выберите мастер по созданию публикации, используйте для создания публикации информацию табл.4.

Таблица 4

Опция Значение
Publication Database (база данных публикации) Northwind
Publication type (Тип публикации Merge publication (публикация сведением)
Subscriber types (Тип подписчика) Серверы SQL Server 2000  
Specify articles for publication (Определите статьи) Customers Employees Order Details Orders Products Shippers
Publication Name (Имя публикации) Northwind
Define data filters, enable anonymous subscriptions… Yes
Filter data (Фильтровать данные) No
Allow anonymouse subscriptions (Разрешить анонимных подписчиков) No
Set snapshot shedule   Create the first snapshot immediately Use the default schedule (расписание по умолчанию)

 

Просмотрите хронологию работы агента Snapshot

Раскройте папку Replication Monitor, раскройте в ней папку Publishers, после чего щелкните по рубрике Northwind:Northwind, в окне детализации просмотрите столбец Last Action (там должна появиться запись “A snapsort of 6 articles was generated” (сформирован моментальный снимок 6 статей). Вызовите контекстное меню на Snapshot и выполните команду Agent History. Щелкните по кнопке Session details. Просмотрите подробную информацию о создании моментального снимка, зафиксируйте ее в отчете.

Создание подписки по запросу и разрешение конфликтов

Создание Pull подписки

На сервере, который теперь должен служить подписчиком с помощью мастера Pull Subscription создайте подписку типа Pull. Используйте при этом данные табл.5.

Таблица 5

Опция Значение
Look for publications (Поиск публикаций) From registered servers
Publisher (Издатель) Сервер Вашего партнера
Publication (Публикация) Northwind:Northwind
Distination database (База данных – адресат) Создайте новую базу данных (New-NorthwindMergeDB)
Initialize subscription (Инициализировать подписку) Yes (да Инициализируйте схему и данные на подписчике) Запустите агента Merge, чтобы инициализировать подписку немедленно
Snapshort delivery (Доставка моментальных снимков) Используйте файлы моментальных снимков из папки по умолчанию
Merge Agent Shedule (Расписание агента Merge Agent) Ежедневно, через каждые 2 минуты
Set subscription priority (Приоритет)
Start required Services (Запустите необходимые службы) SQL Server Agent на подписчике

 

После создания подписки в дереве консоли Enterprise Manager разверните сервер-подписчик, разверните базу данных NorthwindMergeDB, после чего щелкните по Pull Subscriptions. В окне детализации, после того, как стобец Status покажет, что Merge Agent успешно работает, просмотрите Job History.

Ресурсы какого сервера использует этот агент?

Обновление исходной таблицы на издателе

Перейдите на сервер дистрибьютор и издатель, откройте на нем окно запроса.

Введите и выполните следующие команды:

Use Northwind

SELECT * from Customers

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

Введите и выполните следующие команды:

Use Northwind

Update Customers

Set ContactName==’Maria Anders-Smith’ Where CustomerID=’ALFKI’

SELECT * from Customers

Сколько времени займет репликация этого обновления данных?

На сервере-подписчике переключитесь в SQL Server, после чего откройте новое соединение со своим сервером.

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

На сервере-издателе и дистрибьторе переключитесь в Enterprise Manager, раскройте Replication Monitor, затем Agents, после чего щелкните по Merge Agent (Возможно Вам придется обновить его), в окне детализации щелкните правой кнопкой мыши по Northwund и выберите Agent History. Щелкните по кнопке Session Details.

Просмотрите и зафиксируйте в отчете, какие действия были выполнены во время сеанса.

Можете ли вы запустить задание Merge Agent с сервера дистрибьютора и издателя?

Одновременное обновление на издателе и подписчике

На сервере издателя и дистрибьютора переключитесь в Query Analyzer , введите и выполните следующие команды:

Use Northwind

Update Customers

Set ContactName=’Maria Anders-Smyth’ where CustomerID=’ALFKI’

Select * from customers

На сервере –подписчике откройте окно запроса и введите следующие команды:

Use NorthwindMergeDB

Update Customers

Set ContactName=’Maria Anders-Smythe’ where CustomerID=’ALFKI’

Select * from customers

На сервере дистрибьютора и издателя переключитесь в Enterprise Manager, в окне детализации Agent details убедитесь, что изменения были раплицированы, и что конфликт был разрешен. Это займет несколько минут.

Какое обновление было применено?

 

11. Лабораторная работа по теме «Индексирование таблиц в SQL Server»

Цель данной работы научиться планировать и создавать индексы.

1. Установка базы данных CREDIT

В главном меню системы выберите пункт «Выполнить» и запустите командный файл, который находится по адресу: "C:\MOC\2073A\Labfiles\Credit Database\Install.bat". После этого обновите данные Вашей рубрики Databases и проверьте, что в списке баз данных появилась база данных Credit.

2.Создание индексов в таблице Corporation

Создайте кластерный индекс в таблице Corporation по полю Corp_no c именем Corporation_ident,

Создайте некластерный индекс по полю region_no, назовите индекс corporation_region_link

Общий вид команды индексирования (без дополнительных параметров):

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX имя_индекса ON { имя_таблицы| имя_представления } (имя_поля[ ASC | DESC ] [ ,...n ] )

3. Использование системной хранимой процедуры Sp_help для идентификации индексов

Подключитесь к Query Analyzer и напишите скрипт, в котором откройте базу данных creditи запустите процедуру sp_help для таблицы corporation (sp_help имя_таблицы). Выполните скрипт. Просмотрите в результате 6-ю таблицу. Какие сведения об индексах дает процедура sp_help ?

Ответы зафиксируйте в отчете.

4. Использование информации из таблицы sysindexes

В Qwery Analyzer наберите следующие команды, а затем выполните скрипт.

USE credit

GO

 

SELECT t.name AS [имя_таблицы], i.name AS [имя_индекса], i.*

FROM sysobjects AS t JOIN sysindexes AS i ON t.id = i.id

WHERE t.id > 100

ORDER BY t.name

Просмотрите внимательно скрипт, скопируйте его в отчет. Проанализируйте результат.

Какие таблицы имеют индексы? Какого типа?

5. Создание индексов таблиц базы данных Northwind

Наберите следующие команды, проанализируйте их и выполните скрипт.

USE Northwind

GO

 

IF EXISTS (SELECT name FROM sysindexes WHERE name = 'Orders_Customers_link')

DROP INDEX Orders.Orders_Customers_link

GO

CREATE NONCLUSTERED INDEX Orders_Customers_link ON Orders(CustomerID)

WITH FILLFACTOR = 75

GO

 

Сохраните текст скрипта в отчете.

Что должно стать результатом его выполнения?

Выполните процедуру sp_help имя_таблицы, sp_helpindex имя_таблицы, чтобы проверить создание индекса.

5.2. Создайте два индекса для таблицы Products базы данных Northwind в соответствии с данными табл.1.

Таблица 1

Index Type Name Table Column Fillfactor value
Clustered Products_categoryID_link Products CategoryID
Nonclastered Products_SupplierID_link Products SupplierID

Сделайте запрос к таблице sysindexes, чтобы проверить, какие индексы были созданы.

5.3. Проверьте наличие индексов с помощью системной хранимой процедуры sp_helpindex для таблиц Orders и Products.

Зафиксируйте результаты. Проанализируйте их.

6. Проверка индексных структур

В этом упражнении перед созданием индексов будет проверяться структура таблицы базы данных Credit. Затем Вы создадите различные типы индексов с различными значениями FillFactor и выявите их влияние на структуру таблицы.

6.1. Обследование первоначальной структуры таблицы.

Наберите и выполните следующие команды, выделяя их и выполняя в виде отдельных пакетов:

USE Credit

GO

 

EXEC sp_spaceused member

SELECT * FROM sysindexes WHERE id = OBJECT_ID('member')

 

DBCC SHOWCONTIG ('member')

GO

Результаты запишите в табл.2

Таблица 2

Информация Источник Результат
Number of rows(Число строк) Sp_spaceused: rows  
Number of indexes (Число индексов) SELECT * FROM sysindexes WHERE ID=OBJECT_ID(‘member’) (см. Колонку IndID)  
Number of pages (Количество страниц) DBCC SHOWCONTIG: Page scanned  
Number of rows per page (Число строк на странице) Число строк/число страниц  
Number of extents (Число экстентов) DBCC ShowContig:Extent Switches  
Average extent fill (Средняя степень заполнения экстента) DBCC ShowContig:Extent:Avg.Pages per Extent  
Avrage page fill (Средняя степень заполнения страниц) DBCC ShowContig:Extent:Avg.Pages Density (full)  

 

6.2. Создание кластерного индекса. После создания индекса по полю Member_no с помощью команды

CREATE UNIQUE CLUSTERED INDEX mem_no_CL ON member (member_no).

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

Таблица 3

Информация Источник Результат
Number of clustered index pages(число страниц в кластерном индексе) Sysindexes :used  
Number of data pages in the clustered index (число страниц с данными в кластерном индексе) Sysindexes : dpage    
Number of non-data pages in the clustered index (Число страниц в кластерном индексе, не занятых данными) Used-dpage  
Number of indexes (Число индексов) SELECT * FROM sysindexes WHERE ID=OBJECT_ID(‘member’) (см. Колонку IndID)  
Number of pages (Количество страниц) DBCC SHOWCONTIG: Page scanned  
Number of rows per page (Число строк на странице) Число строк/число страниц  
Number of extents (Число экстентов) DBCC ShowContig:Extent Switches  
Average extent fill (Средняя степень заполнения экстента) DBCC ShowContig:Extent:Avg.Pages per Extent  
Avrage page fill (Средняя степень заполнения страниц) DBCC ShowContig:Extent:Avg.Pages Density (full)  

 

Сравните показатели табл. 2 и табл.3.

Остались страницы заполненными после создания кластерного индекса?

Сделал ли кластерный индекс таблицу более компактной. Почему да или почему нет?

6.3. Создание некластерного индекса.

Создайте некластерный индекс следующей командой:

CREATE NONCLUSTERED INDEX indx_fname ON member(firstname)

Выполните команду для просмотра таблицы sysindexes для таблицы member.

Запишите полученную информацию в табл.4

Таблица 4

Информация Источник Результат
Number of pages in nonclustered index on FIRSTNAME column (число страниц в некластерном индексе по полю FIRSTNAME) Sysindexes :used  
Number of pages in leaf level (число страниц на листьевом уровне) Sysoindexes : dpage    
Число строк на листьевых страницах Число строк таблицы/число листьевых страниц    

 

6.4. Создание некластерного индекса с параметром FillFactor

Удалите существующий некластерный индекс командой

DROP INDEX member.indx_fname,

а затем создайте его заново с параметром FillFactor равным 25.

Используя таблицу sysindexes, как в предыдущих примерах, заполните таблицу 5, аналогичную по составу табл.4.

Как влияет параметр FillFactor на степень заполнения страниц на листьевом уровне?

7. Проверка полезности индексов

7.1. Создайте четыре некластерные в таблице Charge базы данных Credit в соответствии с табл. 6.

Таблица 6

Имя индекса Имя поля
charge_no_CL charge_no
indx_member_no member_no
indx_provider_no provider_no
indx_category_no category_no

 

7.2. Сделайте запросы к таблице Charge, чтобы получить максимальные и минимальные значения полей Charge_no, Member_number, Provider_no, category_no. Запишите полученные значения в отчет в виде табл.7.

Таблица 7

Значение Charge_no Member_no Provider_no Category_no
Минимальное        
Максимальное        

7.3. Оцените селективность по каждому из индексируемых полей.

Для этого запишите следующие запросы, но не выполняйте их!

1. SELECT * FROM charge

WHERE charge_no BETWEEN 1 AND m, где m-соответствующее максимальное значение

2. SELECT * FROM charge

WHERE member_no BETWEEN 1 AND m

3. SELECT * FROM charge

WHERE provider_no BETWEEN 1 AND m

4. SELECT * FROM charge

WHERE category_no between 1 AND m.

Выделите первый запрос, и щелкните в меню Query по команде Display Estimated Plan.

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

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

Таблица 8

Предложение WHERE Граница, при которой используются индексы % записей (n/10000)
WHERE charge_no BETWEEN 1 AND n    
WHERE member_no BETWEEN 1 AND n    
WHERE provider_no BETWEEN 1 AND n      
WHERE category_no between 1 AND n    

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

8. Просмотр статистики индексов и оценка индексной селективности

Откройте базу данных Credit, удалите указанные в команде DROP индексы таблицы member и выполните следующие команды для создания индексов.

DROP INDEX member.indx_member_no, member.indx_corp_lname, member.indx_lastname

CREATE UNIQUE INDEX indx_member_no ON member (member_no)

CREATE INDEX indx_corp_lname ON member (corp_no,lastname)

CREATE INDEX indx_lastname ON member (lastname)

GO

Для просмотра статистики индекса indx_member_no выполните следующую команду:

DBCC SHOW_STATISTICS (member,indx_member_no)

Запишите результаты в табл.9.

Таблица 9

Информация Результат
indx_member_no indx_corp_lname indx_lastname
Rows      
Steps      
Density      
All density      

Аналогичные действия проделайте и с другими созданными индексами.

Оцените селективность каждого индекса по полученным результатам.

 

12. Лабораторная работа по теме «Программирование»

1. Исправление ошибок в готовом скрипте

Откройте в Query Analyzer скрипт, расположенный по адресу:

C:\Moc\2073A\Labfiles\L02\Sample_Script.sql.

Просмотрите его и выполните. Просмотрите перечень ошибок. Обратите внимание, что сообщается номер строки (Line ….), в которой находится ошибка.

Основные намеки: в программе не проставлены символы комментариев и отсутствуют команды (GO), разделяющие программу на пакеты.

Запустите программу, сохраните ее на своем диске, сделайте распечатку для отчета.

2.Создание циклических программ

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

Нечетное Сумма нечетных Четное Сумма четных
Нечетное Сумма нечетных Четное Сумма четных

 

Текст программы и результаты привести в отчете.

3.Использование конструкции CASE

Разработайте скрипт для проверки наличия контрактов с авторами (таблица Authors базы данных Pubs) и выдайте сообщения в соответствии со следующим алгоритом:

Если поле contract=0 и поле state =’CA’, то текст сообщения должен быть ‘надо заключить!’,

Если поле contract=0 и поле state =’TN’, то текст сообщения – ‘тоже хороший человек, надо подумать’,

Если поле contract=1, то сообщить ‘ему и так хорошо’, во всех остальных случаях записать ‘пусть потерпит!!’.

Вывести в запросе поля au_lname, au_fname, state, contract, 'Наличие контракта'=.

Текст программы и результаты привести в отчете.

4.Использование динамически конструирования программ

Написать программу для открытия любой базы данных и выполнения запроса из любой ее таблицы. Используйте для проверки таблицы Orders, Products базы данных Northwind и таблицу Authors из базы данных Pubs.

Текст программы и результаты привести в отчете.

5. Разработать функцию для начисления стипендии в зависимости от среднего балла по следующему алгоритму:

если средний балл <3.5, то стипендия не начисляется, если средний балл>=3.5, но меньше 4.5, то стипендия должна быть 300 р, иначе 400.

Проверить результаты, задав соответствующие значения параметров. Текст функции и результаты привести в отчете.

6. Создать таблицу в базе данных Pubs со следующими полями: FIO студента, OC1, OC2, OC3, означающие оценки за экзамены. Внести в нее 3-4 записи.

 

7. Преобразовать ранее созданную функцию, добавив в нее необходимые параметры.

Используйте новый вариант функции в запросе, выводя в нем следующие поля: FIO, OC1, OC2, OC3, средний балл, значение стипендии.

8.Создать функцию, которая должна выбирать в таблицу фамилию, разряд сотрудника, должность из соответствующих таблиц базы данных kadry с разрядом, большим или равным заданного параметром функции @r. По умолчанию сделать этот параметр равным числу 13. Организовать проверку на правильность ввода данного параметра, (разряд должен быть в пределах от 1 до 18), выдать сообщение об ошибке. Можно для этого использовать поле fio. Таблицу объявить параметром функции. Организовать вызов функции т.о., чтобы проверить правильность ее работы при всех вариантах вводимого параметра.

 

9. Создайте программу для исправления номера телефона автора с определенным идентификационным номером (Pubs..authors)

Создайте новую пользовательскую ошибку со следующим текстом сообщения «Введен неправильный идентификационный код пользователя» с уровнем серьезности 16 (контекстное меню на имени сервера/Все задачи/Manage SQL Server Messages).

Задайте в программе два параметра: ID автора (@au_id) и номер телефона (@phone). По умолчанию дайте им значения NULL.

Предусмотрите в программе проверку ввода значений параметров, выдайте сообщение, если они отсутствует.

Если параметр @au_id введен, проверьте, существует ли такой идентификационный номер в таблице авторов. Если нет автора с введенным @au_id, возбудите созданную ранее ошибку. Если введенный параметр соответствует определенному автору, замените номер его телефона на введенный и выдайте об этом сообщение.

10. Создайте скрипт для объявления, открытия и вывода данных из курсора, который должен выбрать поля CustomerID, ContactName, City из таблицы Northwinds..Customers из записей, в которых поле City=London.

11. Создайте хранимую процедуру с параметром @city и выходным параметром в виде курсора, аналогичном созданному в примере 10.

Напишите процедуру обработки данного курсора и сохраните ее в виде отдельного скрипта. В этой процедуре подсчитайте количество проживающих в заданном городе и выведите результат под выводом данных из курсора в виде «Число проживающих в городе London= …».

 

13. Лабораторная работа по теме «Триггеры»

Цель работы: научиться создавать триггеры

¨ для поддержания целостности данных,

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

 

1. Создание триггера на вставку новой записи

Запустите Query Analyzer и наберите программу, представленную ниже. Программа проверяет, существует ли триггер 'OrdDet_Insert', и удаляет его, а затем создает заново. Триггер создается на добавление новой записи в таблицу Order Details (заказанные товары).

/*

** Создание триггера на добавление записи в таблицу Order Details.

** Когда в таблицу Order Details записываются сведения о новом заказе,

** в таблице Products значение поля UnitsInStock должно уменьшаться на

** количество заказанного товара (Quantity).

*/

 

USE Northwind

/*

** Если триггер 'OrdDet_Insert' существует, удалим его командой DROP

** TRIGGER…

*/

 

IF EXISTS ( SELECT name FROM sysobjects

WHERE type = 'TR' AND name = 'OrdDet_Insert' )

DROP TRIGGER OrdDet_Insert

GO

/* Создадим триггер*/

CREATE TRIGGER OrdDet_Insert

ON [Order Details]

FOR INSERT

AS

UPDATE P SET

UnitsInStock = P.UnitsInStock - I.Quantity

FROM Products P INNER JOIN Inserted I

ON P.ProductID = I.ProductID

GO

 

/*

** Проверим наличие триггера :

** 1. С помощью запроса к таблице sysobjects

*/

 

SELECT name FROM sysobjects

WHERE type = 'TR'

ORDER BY type, name

GO

 

/*

**2. С помощью хранимой процедуры sp_helptrigger

*/

sp_helptrigger [Order Details]

 

Запустите части программы, в которых проверяется наличие триггера и создается триггер. Сохраните этот текст в своем отчете. Опишите, что делает данный триггер.

Запустите по очереди части программы, которые сообщают информацию о созданных триггерах.

Где хранятся сведения о триггерах?

Тестирование созданного триггера

1. Проверьте наличие запаса продукта (UnitInStock) с кодом (ProductID), равным 22. Запишите значение поля UnitInStock в отчет.

2. Добавьте строку в таблицу Order Details, которая соответствует заказу продукта с кодом 22 в количестве (Quantity) 50 штук командой

Insert into [Order Details] (OrderID,ProductID,UnitPrice,Quantity,Discount)

Values (11077,22,21.00,50,0.0)

3. Еще раз выполните запрос п.1. Запишите значение поля UnitInStock в отчет.

Проработал ваш триггер или нет?

Доработайте данный триггер таким образом, чтобы вначале в нем осуществлялась проверка, существует ли в таблице Products заказанный товар в нужном количестве, выдавалось сообщение, если товара нет совсем или его запас меньше требуемого, и операция добавления записи в таблицу Order Details откатывалась. Еще раз протестируйте триггер.

2. Создание триггера на обновление для обновления содержимого колонки

1. Создайте две новые таблицы NewCategories и NewProducts на основе соответствующих таблиц с помощью команд SELECT * INTO…, например,

Select * into newcategories from categories

При этом в новые таблицы перенесутся данные, но они не будут содержать ограничения типа Primary KEY и Foreign Key.

2. Создайте триггер на удаление записи из таблицы NewCategories такой, что при отсутствии соответствующей категории в этой таблице, в таблице Newproducts изменялось значение поля Discontinued на 1.

create trigger category_delete on newcategories

for delete

as

update p set discontinued=1 from newproducts as p

inner join deleted as d

on p.categoryid=d.categoryid

3. С помощью запроса выведите все записи из таблицы Products с кодом категории (CategoryID), равным 7 (показать поля ProductID, CategoryID, Discontinued). Сохраните результаты запроса в отчете.

4. Удалите из таблицы Categories запись с кодом категории =7.

5. Выполните еще раз запрос п.3. для тестирования триггера. Сделайте выводы.

3. Создание триггера, который поддерживает сложные бизнес-правила

Текст данного триггера приведен ниже.

USE Northwind

GO

 

CREATE TRIGGER Product_Delete

ON NewProducts FOR DELETE

AS

IF (Select Count (*)

FROM [Order Details] INNER JOIN deleted

ON [Order Details].ProductID = Deleted.ProductID

) > 0

BEGIN

RAISERROR(‘Транзакция не может быть выполнена, т.к. в таблице Order Details существуют заказы данного продукта’, 10, 1)

ROLLBACK TRANSACTION

END

go

 

/* тестирование триггера */

DELETE NewProducts WHERE ProductID = 6

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

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

Тестирование порядка выполнения триггеров и ограничений

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

2. Протестируйте триггер с помощью команды DELETE (см. предыдущее упражнение) Проработал ли данный триггер для таблицы Products? Почему да или почему нет?


Приложения

Приложение 1

Управление файлами данных

 

Рис.1. Физическая архитектура базы данных

Рис.2. Пример размещения базы данных в разных группах файлов на разных дисках

Команды создания и изменения базы данных kadry_new1

Use master

Create database kadry_new1

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

C:\Program Files\Microsoft SQL Server\MSSQL\data\kadry_new1.mdf

C:\Program Files\Microsoft SQL Server\MSSQL\data\kadry_new1_log.LDF

Exec sp_helpdb kadry_new1—просмотр сведений о базе данных

/* добавляем к базе данных файловую группу*/

ALTER DATABASE kadry­_new1

ADD FILEGROUP kadryFG1

GO

/* добавляем в группу два файла*/

ALTER DATABASE kadry­_new1

ADD FILE

( NAME =kadry_data2,

FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\ kadry_data2.ndf ',

SIZE = 5MB,

MAXSIZE = 100MB,

FILEGROWTH = 5MB),

( NAME= kadry_data3 ,

FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\ kadry_data3.ndf’ ,

SIZE = 5MB,

MAXSIZE = 100MB,

FILEGROWTH = 5MB)

TO FILEGROUP kadryFG1

ALTER DATABASE kadry­_new1

/*назначаем группу группой по умолчанию*/

MODIFY FILEGROUP kadryFG1 DEFAULT

 

Приложение 2

Управление безопасностью SQL Server

Таблица 1

Фиксированные серверные роли SQL Server

Роль Назначение Права и разрешенные команды
Database Creators (dbcreator) Создание и модификация баз данных   Добавление членов роли dbcreator ALTER DATABASE CREATE DATABASE DROP DATABASE RESTORE DATABASE RESTORE LOG Увеличение пространства, занимаемого базой данных. Переименовние БД sp_renamedb  
Disk Administrators (diskadmin) Управление файлами   Добавление членов роли diskadmin DISK INIT Выполнение процедур .sp_addumpdevice sp_diskdefault sp_dropdevice  
Process Administrators (processadmin) Управление процессами     Добавление членов роли processadmin KILL  
Security Administrators (securityadmin) Управление защитой   Добавление членов роли securityadmin GRANT/DENY/REVOKE Предоставление прав на CREATE DATABASE Чтение журнала ошибок. Выполнение процедур: sp_addlinkedsrvlogin sp_addlogin sp_defaultdb sp_defaultlanguage sp_denylogin sp_droplinkedsrvlogin sp_droplogin sp_dropremotelogin sp_grantlogin sp_helplogins sp_password sp_remoteoption (обновление опций) sp_revokelogin
Server Administrators (serveradmin) Конфигурирование SQL Server   Добавление членов роли serveradmin DBCC FREEPROCCACHE RECONFIGURE SHUTDOWN sp_fulltext_service sp_configure sp_tableoption
Setup Administrators (setupadmin) Управление связанными серверами   Добавление членов роли setupadmin Добавление, удаление, настройка связанных серверов Назначение хранимых процедур, выполняемых при запуске SQL Server
System Administrators (sysadmin) Универсальное   Выполнение любых действий в SQL Server

 

 

Таблица 2

Фиксированные роли базы данных

 

Роль Описание
db_owner Имеет все права
db_accessadmin Может добавлять или удалять пользователей БД
db_securityadmin Может управлять всеми разрешениями, владением объектами, создавать роли и добавлять в них новых пользователей  
db_ddladmin Может применять все команды Data Definition Language кроме GRANT, REVOKE и DENY.
db_backupoperator Может использовать команды DBCC, CHECKPOINT, и BACKUP .
db_datareader Может читать все таблицы БД
db_datawriter Может модифицировать все таблицы БД
db_denydatareader Не может читать.все таблицы БД
db_denydatawriter . НЕ Может модифицировать все таблицы БД

 

 

Приложение 3

Таблица 1

Счетчики для мониторинга использования памяти

Объект:Счетчик Описание Рекомендации
  Memory: Available Bytes Отслеживает количество байт памяти, свободной для использования ее процессором Значение счетчика должно быть больше 5000 КВ. Значения ниже данного показывают переполнение физической памяти, что означает, что память должна быть увеличена
  Memory: Pages/sec Отслеживает число страниц, которые операционная система Windows 2000 читает или пишет на жесткий диск Этот счетчик никогда не должен быть продолжительно больше нуля Если же значение продолжительное время больше нуля, это означает, что Windows 2000 постоянно подкачивает файлы, а чтобы выяснить, является ли виновником интенсивного свопинга SQL Server , следует понаблюдать за следующим счетчиком.  
  Process: Page Faults/sec/SQL Server Instance Отслеживает подкачку страниц, вызванную тем, что Windows выделяет память под данные процессы Высокие значения данных счетчиков показывают высокую интенсивность свопинга. Проверьте, SQL Server ли или другой процесс порождает чрезмерный свопинг
             

 

Таблица 2

Счетчики для наблюдения за памятью для SQL Server

Объект:счетчик Описание Рекомендации
Process: Working Set/SQL Server Instance Отслеживает общее количество памяти, которую использует каждый экземпляр SQL Server Этот счетчик должен быть больше 5000КВ. Если он становится ниже, SQL Server недоступна никакая дополнительная память.
SQL Server: Buffer Manager: Buffer Cache Hit Ratio Отслеживает процент страниц в буферном КЕШе без чтения с жесткого диска. Этот счетчик должен больше 90%, так как он показывает число страниц, найденное в КЕШе.
SQL Server: Buffer Manager: Total Pages Отслеживает общее число страниц в буферном КЕШе, включая страницы базы данных, свободные страницы и страницы других процессов Низкое значение счетчика указывает на частые операции ввода-вывода с диска. Требует решения вопроса о добавлении памяти
SQL Server: Memory Manager: Total Server Memory Отслеживает общее количество динамической памяти, используемой сервером. Если этот счетчик продолжительно имеет высокое значение по сравнению с объемом физической памяти, это означает, что требуется увеличить память.

 

 

Таблица 3

Счетчики для наблюдения за работой процессора

Объект:Счетчие Описание Рекомендации
Processor: %Processor Time Отслеживает процент времени процессора Этот счетчик должен иметь значение меньше 90%. Если оно выше, уменьшите рабочую нагрузку процессора, увеличьте ее эффективность или добавьте мощности процессору.
System: Context Switches/sec Считает число переключений между потоками в сек В многопроцессорном компьютере при значении этого показателя более 8000, а счетчика Processor: % Processor Time больше 90 %, рассмотрите возможность переключиться в фибровый режим
System: Processor Queue Lengthr Отслеживает число потоков, ожидающих процессорного времени Monitors the number of threads waiting for processor time Этот счетчик никогда не должен иметь значение больше 2. Если он больше 2 продолжительное время, уменьшите рабочую нагрузку, увеличьте ее эффективность, увеличьте мощность процессора или добавьте еще один процессор в мультипроцессорной системе
Processor: %Privileged Time Отслеживает процент времени, который процессор тратит на привилегированные операции ядра Windows, например, операции ввода-вывода Если большой процент процессорного времени тратится на выполнения команд ядра операционной системы и счетчик физического жесткого диска имеет высокое значение, рассмотрите возможность повышения производительности подсистемы ввода-вывода жесткого диска.
Processor: %User Time Отслеживает процент времени, которое тратится процессором на выполнение процессов пользователя, например самого SQL Server. Это может быть индикатором того, что другое приложение препятствует выполнению работы SQL Server.

 

 

Таблица 4

Счетчики для наблюдения за работой дисков

Объект:Счетчик Описание Рекомендации
PhysicalDisk: %Disk Time Отслеживает процент времени от общего времени активности системы на операции ввода-вывода. Этот счетчик должен быть постоянно меньше чем 90 %.
PhysicalDisk: Avg.Disk Queue Length Отслеживает среднее число системных запросов к диску в очереди Значение этого счетчика не должно быть больше чем вдвое больше количества шпинделей диска ( в обычном диске –1 шпиндель, в конструкции RAID их может быть больше). Если оно превышает заданный уровень, то следует либо заменить диск более быстрым, либо переместить часть файлов на другой физический диск, либо установить массив дисков RAID.
PhysicalDisk: Disk Reads/sec Отслеживает уровень операций чтения Этот счетчик должен быть постоянно меньше, чем емкость вашей подсистемы жесткого диска
PhysicalDisk: Disk Writes/sec Отслеживает уровень операций записи Этот счетчик должен быть постоянно меньше, чем емкость вашей подсистемы жесткого диска.

 

Приложение 4

Таблица 1

Перечень категорий событий в SQL Profiler

Категория событий Описание
Cursor События, связанные с открытием или закрытием курсоров
Database События генерируются при изменении размеров файлов базы данных или журнала транзакций
Errors and Warnings События, связанные с ошибками и предупреждениями SQL Server
Locks События отражают процессы установки и снятия блокировок
Objects События, связанные с созданием, открытием и закрытием, удалением объектов баз данных
Performance События генерируются при выполнении команд DML
Scans События связаны со сканированием таблиц и индексов
Security Audit События отражают действия сервера, связанные с защитой: добавление и удаление пользователей, удачные и неудачные попытки подсоединиться к серверу
Sessions События, позволяющие получить информацию о пользователях, подключившихся к SQL Server
Stored Procedures События, позволяющие наблюдать за ходом выполнения хранимых процедур
Transactions События, отражающие выполнение транзакций
TSQL События, связанные с выполнением команд Transact-SQL
User Configurable 10 пользовательских событий

 

 

Таблица 2

Свойства событий


Свойство Принадлежность всем событиям Описание
Application Name * Имя приложения, установившего соединение с SQL Server
Connection ID * Идентификационный номер соединения
CPU * Количество процессорного времени в млсек, выделенное событию
Start Time * Время наступления события
End Time * Время окончания события
Duration * Длительность события в млсек
Event Class * Класс события
Event Sub Class   Подкласс события
Domain Name * Имя домена, к которому принадлежит пользователь, деятельность которого привела к возникновению события
Server Name * Имя сервера, который наблюдается
DatabaseID * Идентификационный номер базы данных, с которой работал процесс, вызвавший событие
NTUserName * Имя учетной записи в Windows 2000, деятельность которой привела к наступлению события
SQL User Name * Имя пользователя базы данных, под которым работает клиентское соединение
SPID * Идентификационный номер процесса сервера, ассоциированный сервером с клиентским соединением, вызвавшим возникновение события
Host Process ID   Идентификационный номер, присвоенный клиентскому процессу на
Поделиться:

Дата добавления: 2015-09-15; просмотров: 119; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты