Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 курс (заочка) / Лабораторные работы / !Лабораторный практикум ТБД (задание).pdf
Скачиваний:
17
Добавлен:
08.01.2022
Размер:
1.12 Mб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

Государственное образовательное учреждение высшего профессионального образования

МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И ИНФОРМАТИКИ

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

Кафедра Интеллектуальные системы в управлении и автоматизации

ЛАБОРАТОРНЫЙ ПРАКТИКУМ по дисциплине «ТЕХНОЛОГИИ БАЗ ДАНЫХ»

для специальности

09.03.02

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

МОСКВА2019

1

ЛАБОРАТОРНЫЙ ПРАКТИКУМ по дисциплине «ТЕХНОЛОГИИ БАЗ ДАНЫХ»

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

Составитель:

Воронова Л,И. – д.ф.-м.н., профессор кафедры ИСУиА

©Московский технический университет связи и информатики, 2019

©Л.И.Воронова

2

ОГЛАВЛЕНИЕ

Оглавление

 

ВВЕДЕНИЕ .............................................................................................................................

4

Лабораторная работа №1........................................................................................................

5

Лабораторная работа №2......................................................................................................

13

Лабораторная работа №3-4 ..................................................................................................

24

Создание первичного ключа двумя способами.............................................................

24

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

25

Ввод данных......................................................................................................................

26

Создание связей................................................................................................................

27

Создание индексов ...........................................................................................................

29

Изменение структуры таблиц, контрольные ограничения...........................................

29

Ограничения на модификацию столбцов таблиц ......................................................................

29

Представления ..................................................................................................................

30

Контрольные задания к л.р. № 3-4..................................................................................

31

Лабораторная работа №5-6 ..................................................................................................

32

Логика приложения..........................................................................................................

32

Обработка файлов PL/SQL...........................................................................................................

32

Хранимые процедуры...................................................................................................................

32

Хранимая процедура Customer_Insert .........................................................................................

33

Листинг 1. Процедура CustomerInsert .........................................................................

33

Хранимая процедура NewCustomerWithTransaction .....................................................

36

Задания к лабораторной работе.......................................................................................

41

Лабораторная работа №7-8 ..................................................................................................

42

Триггеры............................................................................................................................

42

Пример предваряющего триггера................................................................................................

42

Пример завершающего триггера.................................................................................................

43

Обработка исключений ................................................................................................................

47

Словарь данных ................................................................................................................

47

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

50

Управление параллельной обработкой ..........................................................................

50

Уровень изоляции «завершенное чтение»..................................................................................

51

Уровень изоляции «сериализуемость».......................................................................................

52

Уровень изоляции «только чтение»............................................................................................

53

Дополнительные замечания о блокировках...............................................................................

54

Oracle и безопасность.......................................................................................................

54

3

ВВЕДЕНИЕ

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

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

В лабораторных работах предусматривается общее ознакомление с разным инструментарием современных СУБД, в том числе язык PL SQL (процедуры, функции, триггеры, курсоры и т.д.), В качестве предмета исследования выбрана промышленная СУБД фирмы ORACLE. Анализируются вопросы администрирования данных, особенности управления транзакциями, словарь данных, безопасность.

Задачи лабораторного практикума рассмотреть этапы разработки ИС и их характеристики, изучить архитектуры реализации корпоративных информационных систем, познакомится с различными SQL СУБД промышленного класса и сравнить их характеристики, изучить основные принципы архитектуры и работы СУБД ORACLE, встроенный и динамический SQL, получить практические навыки разработки, управления и администрирования БД с помощью СУБД ORACLE

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

Объем лабораторного практикума - 20 часов. В рамках практикума выполняется 8 лабораторных работ. Итоговая форма контроля – зачет

4

Лабораторная работа №1

Цель. Знакомство с возможностями проверки работоспособности ORACLE-сервер. Создание БД. Приобретение навыков работы в SQL* Plus. Создание пользователя и настройка прав доступа.

Последовательность выполнения.

Установить на своем ПК одну из свободно распространяемых учебных версий с сайта www.oracle.com в соответствии с версией операционной системы.

Предпочтительно выбрать Oracle Database Express Edition 11g Release 2.

5

При установке указать пароль (Имя БД задается по умолчанию).

Запустить - ознакомиться с описанием

Дальнейшая работа предполагается в режиме командной строки SQL Plus, затем через браузер OE

1.Вход в систему:

В меню Start выбрать All Programs, затем Oracle Database 11g Express Edition, а затем Get Started

Введите в открывшемся окне

Username: system

Password: пароль, заданный при инсталляции Oracle Database XE

Нажмите Login. Откроется страница.

6

2. Проверка сервера

Открыть "Панель управления - Администрирование - Службы" и найти два сервиса, один в имени заканчивается так же как SID базы, а другой заканчивается TNSListener! Они должны оба быть запущены с типом запуска

«Авто»!

3.Запустить Диспетчер задач (CTRL+ALT+DEL) или щелкните правой кнопкой пустое место на панели задач и выберите в контекстном меню команду Диспетчер задач.

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

7

4. Запустить все закрытые экземпляры БД вновь.

Теперь там же правой кнопкой мыши, на Start, память «скакнула вверх»! Экземпляр снова в работе. База доступна и снова ждет коннектов. Вывод! Весь экземпляр БД находится в ОЗУ - это одна из особенностей сервера Oracle!

5. Знакомство с файлом init.ora

Найдите каталог C:\oraclexe\app\oracle\product\11.2.0\server\config\ scripts\ Откройте файл init.ora. Это самый ответственный файл экземпляра БД - небольшой по объему файл инициализации экземпляра. С его помощью, можно производить оптимальную настройку БД.

ПРЕДУПРЕЖДЕНИЕ!!!!

Файл не изменять! Полная ответственность за последствия лежит на студенте!!!

8

6. Знакомство с файлами экземпляра БД

Откройте каталог C:\oraclexe\app\oracle\oradata\XE\. Здесь находятся файлы экземпляра вашей БД. Два файла с расширением CTL, являются "управляющими файлам", в них содержится вся схема БД. Файлы с расширением DBF являются так называемыми файлами табличных пространств (в них содержатся таблицы, хранимые процедуры, триггеры и т.д.). Как правило, их имена, передают сущность организации экземпляра, а именно наличие пространств (а соответственно и файлов), как минимум - SYSTEM, TEMP, USERS, INDEX. Есть еще так называемые сегменты "отката", которые могут иметь собственный файл, а могут находиться и внутри других табличных пространств.

7. Работа в модели клиент-сервер

Характерная особенность серверов в этой модели - наличие "прослушивающего процесса"! (в сети, там, где работает сервер БД, запущен процесс – «ухо», которое слушает сетку, а вернее пакеты, которые в ней бегают и как только обнаружит запрос на соединение отвечает на него и предоставляет канал связи между сервером и клиентом).

Один из сервисов, .... TNSListener(SID базы), как раз и является этим "чутким ухом", обеспечивающим соединения сервера с клиентом.

В модели клиент-сервер трудится над поисками, обновлениями, удалением и т.д. именно СЕРВЕР БД. Клиент формирует запрос и ждет ответа. Сервер выполняет запрос, возвращает результат клиенту. Трафик сети меньше и работа быстрее на порядок, чем уFS-БД.

Файл, определяющий всю работу клиента с сервером (а так же наоборот)

находится в папке C:\oraclexe\app\oracle\product\11.2.0\server \network\ADMIN c именем tnsnames.ora.

Откройте этот файл и ознакомьтесь с его содержимым.

8.Работа в командной строке SQL Plus

Запустить SQL Command Line (содержит интерпретатор команд). Для

создания сессии пользователя с сервером напишите команду “connect”, затем введите логин и пароль:

SQL> connect

Enter user-name: SYSTEM

9

Enter password: (Примечание: при наборе символы не отображаются) Создайте на диске C:\ папку Temp, она будет использоваться для

хранения временных файлов во время выполнения работы. Введите:

SQL> SPOOL C:\Temp\SPL.TXT

Теперь все, что мы делаем "спулиться" в файл SPL.TXT в каталоге C:\Temp и будет доступно для редактирования.

Ввести SQL> SELECT COUNT(*) FROM USER_OBJECTS

 

2 /

Проанализировать результат

Ввести

/

Проанализировать результат

Ввести

SQL> RUN

Проанализировать результат

Ввести

SQL> LIST

Проанализировать результат

Ввести

SQL> EDIT

Проанализировать результат (Примечание: в

некоторых случаях для корректной работы команды потребуется запуск от имени администратора)

(После нажатия Enter появится окно Блокнота, со строкой: SELECT COUNT(*) FROM USER_OBJECTS

/

Изменим текст:

SELECT COUNT(*) FROM USER_TABLES

/

Теперь при закрытии будет задан вопрос: Сохранить изменения в файле afiedt.buf!

Файл содержит, то, что хранит буфер, а лежит он обычно в каталоге

C:\oraclexe\app\oracle\product\11.2.0\server\bin

После сохранения запустите эту команду и проанализируйте результат. Поместите в каталог Temp файл содержащий следующее:

C:\Temp\proba.txt Hello world!!!

Введите:

SQL> EDIT C:\temp\proba.txt

Откроется Блокнот с содержимым файла

10

Для очистки экрана SQL Plus используйте CLEAR SCREEN Для очистки буфера CLEAR BUFFER

9. Создание пользователя и настройка прав доступа

Используйте команду SHOW USER

SQL> SHOW USER

Вернитесь к пользователю System

Создадим пользователя MILLER с паролем KOLOBOK в табличном пространстве USER, владея им целиком и захватив в свое распоряжение еще кусочек табличного пространства TEMP (на всякий случай!)

CREATE USER MILLER IDENTIFIED BY KOLOBOK DEFAULT TABLESPACE USERS

/

Выделим этому пользователю ряд прав и создадим сессию с се рвером! Нижеприведенные операторы можно вводить по очереди или целиком. Главное, чтобы сработал последний оператор COMMIT (завершение транзакции)

GRANT CREATE SESSION, TABLE, PROCEDURE, TRIGGER, VIEW, SEQUENCE,VIEW TO MILLER

/

GRANT DELETE ANY TABLE TO MILLER

/

GRANT DROP ANY TABLE TO MILLER

/

GRANT DROP ANY PROCEDURE TO MILLER

/

GRANT DROP ANY TRIGGER TO MILLER

/

GRANT DROP ANY VIEW TO MILLER

/

GRANT ALTER ANY TABLE TO MILLER

/

GRANT ALTER ANY TABLE TO MILLER

11

/

GRANT ALTER ANY PROCEDURE TO MILLER

/

GRANT ALTER ANY TRIGGER TO MILLER

/

COMMIT

/

Операторы GRANT предоставляют пользователю определенные привилегии.

Для упрощения можно собрать все строки, которые мы вводили в файл, затем использовав команду START или операцию "@". Проделайте это сами, находясь в схеме SYSTEM!!!

ПРЕДВАРИТЕЛЬНО Введите

DROP USER MILLER CASCADE

/

Затем соберите все строки, в файл, скажем CrMiller.sql, поместите его в каталог, например, Temp, и введите следующее:

@C:\TEMP\CRMILLER.SQL

В SQL Plus, есть много внутренних команд, например, очень полезной может оказаться SET TIME ON приглашение примет вот такой вид:

14:09:52 SQL>

Например, можно оценивать время на запрос из таблицы!

Если ввести SET TIME OFF, то все станет по-прежнему.

При отображении информации на экран ПОЛЕЗНО использовать оператор форматирования столбца:

COL имя_столбца FORMAT Ann, например: COL FIO FORMAT A10

При работе с типом DATE можно использовать встроенную функцию

TO_DATE

например,

SELECT имя_столбца FROM имя_таблицы

WHERE HIRE_DATE < TO_DATE('01.06.1988','DD/MM/YYYY')

12

Лабораторная работа №2

Цель. Создание таблиц и формирование запросов в СУРБД ORACLE

Задачи: построить таблицы, заполнить их информацией, сформировать по 2 запроса следующих типов:

выборка всех данных

запрос с условием

запрос с использованием синонимов

с использованием подзапроса

с использованием сортировки

с использованием группировки

с использованием конкатенации

выборка неповторяющихся записей

с использованием агрегатных функций

с использованием NOT

с использованием WHERE

Запросы сохранить в виде представлений.

Последовательность выполнения.

1. Создание Таблиц

Создать соответствующие таблицы. Поля выбрать самостоятельно.

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

имя_таблицы.имя_столбца

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

2. Построение сложных запросов

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

13

SELECT ([ALL | DISTINCT]< список полей>|*) FROM <Список таблиц>

[WHERE<Предикат-условие выборки или соединения>] [GROUP BY <Список полей результатам] [HAVING <Предикат-условие для группы>]

[ORDER BY <Список полей, по которым упорядочить вывод>]

Пример 1:

Выбрать все записи из таблицы Закупка детали:

select KODDZ, KODZ, KOLVO, PRICED, DATA from zakupkad;

Пример 2:

Выбрать данные из полей «Название завода», «Адрес» и «ФИО

руководителя» по заводу с кодом 2:

 

select NAMEZ, ADRESS, FIOR

from zavod where kodz=2;

NAMEZ

ADRESS

FIOR

---------------------- -------------------------------------------------------------- ---------

-

Лакокрасочный завод г. Москва, Варшавское шоссе,7, кор. 4 430412 Коломова В. В.

Условия.

Условия в предложении where может быть несколько. В таком случае используют ключевые слова:

And - И Or - ИЛИ

Like – КАК

BETWEEN

IN - выборка значений из списка

IS Null | IS NOT NULL

14

Пример 3:

Выбрать

из таблицы Закупка деталей информацию по деталям,

купленным у

завода с кодом 2, подставив вместо кода название:

select zavod.kodz, zavod.namez, zakupkad.koddz, zakupkad.kolvo, priced,

data

from zakupkad, zavod

where zavod.kodz=zakupkad.kodz and zavod.kodz=2;

KODDZ

KODZ

KOLVO PRICED

DATA

----------

 

----------------------------

----------

----------

--------

31

Лакокрасочный завод

8

30

07.01.07

32

Лакокрасочный завод

1

35

10.01.07

Пример 4:

 

 

 

 

Закупались ли детали у заводов с кодом 2 и 3?

 

 

select *

from zavod where kodz=2 and kodz=3;

 

Пример 5:

Закупались ли детали у заводов с кодом 2 или 3? select * from zavod where kodz=2 or kodz=3;

Пример 6:

Есть ли в таблице завод, в названии которого присутствует слово «лак»? select * from zavod where namez like ‘%лак%’ or namez like ‘%Лак%’;

Пример 7:

Выбрать информацию по деталям, которые закупались в одну из дат: select * from zakupkad

where data in (’07-01-07’, ’10-01-07’, ’11-01-07’);

Пример 8:

Выбрать информацию по деталям, которые закупались между датами: select * from zakupkad

15

where data between ’07-01-07’ and ’11-01-07’;

Пример 9:

Выбрать информацию по заводам, у которых поле «телефон» пустое: select kodz from zavod where telz is null;

Пример 10:

Выбрать информацию по заводам, у которых поле «телефон» заполнено: select kodz from zavod where telz is not null;

Синонимы и их применение при выборке данных.

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

create [public] synonym имя_синонима for имя_польз.имя_объекта;

(public означает, что данный синоним может использоваться любым пользователем.)

Пример 11:

Запрос, приведенный в примере № 3 можно записать короче: select b.kodz, b.namez, a.koddz, a.kolvo, a, data

from ZakupkaD a , Zavod b

where b.kodz=a.kodz and b.kodz=2;

Пример 12:

Создать синоним для таблицы Закупка деталей для пользователя студент: create synonym zakd for student.Zakupkad;

Подзапросы.

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

возвращает несколько строк: используется in)

16

Пример 13:

Выбрать детали, которые покупались у заводов, в названии которых есть слово «лак»

select * from zakupkad where kodz in

( select kodz from zavod

where namez like ‘%лак%’ or namez like ‘%Лак%’ );

Представления

Пример 1. Сортировка:

Выбрать все записи из таблицы Закупка деталей и отсортировать по коду

детали:

 

 

 

 

select * from zakupkad

order by koddz;

KODDZ KODZ KOLVO PRICED DATA

---------- ---------- ---------- ---------- ------------

31

2

8

30

07.01.06

31

2

8

30

12.02.06

32

2

1

35

10.01.06

32

2

1

35

15.02.06

41

4

4

48

11.01.06

41

4

4

48

16.03.05

Возрастание ( ASC ) или убывание ( DESC ) для каждого столбца. По умолчанию установлено – возрастание

SELECT * FROM Orders ORDER BY cnum DESC;

Пример 2. Группировка:

Посчитать сколько раз покупали ту или иную деталь:

select koddz, count(data) from zakupkad

17

group by koddz;

KODDZ COUNT(DATA)

---------- -----------

312

322

412

ЗАМЕЧАНИЕ: в предложении group by указывается поле, которое обязательно должно присутствовать в предложении select, в отличие от предложения order by. Также, в предложении group by можно указывать несколько полей, в этом случае группировка будет последовательна сначала по одному полю, потом по второму.

Пример 4. Конкатенация (объединеие):

ЗАМЕЧАНИЕ: в предложениях select можно объединять значения двух или более полей (например, если ФИО разбито на 3 поля) и добавлять сторонний текст.

Вывести данные из примера №2, используя возможности конкатенации: select 'Деталь'||' '||koddz||' '||'покупалась'||' '||count(data)||'раз(-а)'

from zakupkad group by koddz;

'ДЕТАЛЬ'||''||KODDZ||''||'ПОКУПАЛАСЬ'||''||COUNT(DATA)||'РАЗ(-А)

----------------------------------------------------------------

Деталь 31 покупалась 2раз(-а) Деталь 32 покупалась 2раз(-а) Деталь 41 покупалась 2раз(-а)

Пример 5. Синонимы столбцов, ввод собственного текста:

При выполнении запросов в примерах 2-4, в качестве имени поля выводиться то, что пишется в предложениях select. Вид результата можно привести в более удобный для пользователя вид с помощью синонимов столбцов.

18

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

Название_завода.

select kodz Код, namez Название from zavod;

КОД

НАЗВАНИЕ

-----

----------------------------------------

1

Стекольный завод №1

2Лакокрасочный завод

4Деревообработывающий завод № 5

5Завод по изготовлению металлоконструкций

На базе примера № 3:

select Sum((KOLVO)*(PRICED)) Сумма from zakupkad where koddz=31;

СУММА

----------

480

Пример 6. Выборка неповторяющихся (уникальных) записей:

Добавим в таблицу Закупка деталей дублирующую строку со значениями

KODDZ KODZ KOLVO PRICED DATA

---------- ---------- ---------- ---------- ------------

41 4 4 48 11.01.06

Сделать выборку данных из всех полей таблицы Закупка деталей, исключая повторяющиеся записи:

select distinct * from zakupkad;

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

Пример 7. Применение NOT:

19

Выбрать информацию по заводам, у которых поле «телефон» не пустое:

select kodz

from zavod

where telz is not null;

АНАЛОГИЧНО:

 

select kodz

from zavod

where not telz is null;

Выбрать информацию по деталям, которые закупались в одну из дат: select * from zakupkad where data not in (’07-01-07’, ’10-01-07’, ’11-01-

07’);

АНАЛОГИЧНО:

select * from zakupkad where not data in (’07-01-07’, ’10-01-07’, ’11-01- 07’);

Пример 8. Применение агрегатных функций:

* COUNT - считает число значений в данном столбце, или число строк в таблице (count (*), например) . Когда она считает значения столбца, она используется с DISTINCT чтобы производить счет чисел различных значений в данном поле. Если вместо DISTINCT указать |ALL, то в результате будет выведено число строк, в которых указанное поле не нулевое.

SQL> select * from u;

I L P N

---------- --------------- --------------- ---------------

1

b

1

Бухгалтер

2

p

2

Плановик

3

m

3

Менеджер

4

 

4

Гость

SQL> select count(l)

20

2 from u;

COUNT(L)

----------

3

SQL> select count(*) 2 from u;

COUNT(*)

----------

4

*SUM – арифметическая сумма всех выбранных значений данного поля.

*AVG – усредненное значение всех выбранных значений данного поля.

*MAX - наибольшее из всех выбранных значений данного поля.

*MIN - производит наименьшее из всех выбранных значений данного поля.

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

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

ПРИМЕР:

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

select Sum((KOLVO)*(PRICED)) from zakupkad where koddz=31;

SUM((KOLVO)*(PRICED))

---------------------

480

Использование скалярных выражений:

21

SELECT MAX ( blnc + (amt) ) FROM Orders;

Пример 9. Having:

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

SELECT snum, odate, MAX (amt) FROM Oreders

WHERE MAX ((amt)) > 3000.00 GROUP BY snum, odate;

Это будет отклонением от строгой интерпретации ANSI. Чтобы увидеть максимальную стоимость приобретений свыше $3000.00, вы можете использовать предложение HAVING. Предложение HAVING определяет критерии используемые чтобы удалять определенные группы из вывода, точно также как предложение WHERE делает это для индивидуальных строк. Правильной командой будет следующая:

SELECT snum, odate, MAX ((amt)) FROM Orders

GROUP BY snum, odate HAVING MAX ((amt)) > 3000.00;

Создание представлений.

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

Общий синтаксис:

22

create view имя_представления as

текст

[атрибуты]

Пример:

CREATE VIEW US AS select l , p

from u WITH READ ONLY;

Выборка:

Select * from us;

23