Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Oracle - MS Server / OracleМП / Lab2 / отчёт.docx
Скачиваний:
38
Добавлен:
17.04.2018
Размер:
1.76 Mб
Скачать

Выполнение работы

(3)Открыть окно редактора SQL и выполнить подготовленные SQL-операторы, выбирающие данные и таблиц, отметив в отчетевремя, затраченное на выполнение каждого оператора.

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

Создадим таблицу, куда будем выводить время:

CREATE TABLE Times(

Num INTEGER NULL,

Command CHAR(50) NULL,

Times CHAR(31) NULL

);

Добавление данных в таблицу:

--

INSERT INTO Times(Times)

Select Systimestamp

FROM dual;

UPDATE Times SET Command='Начало работы'

WHERE Times.times=(SELECT MAX(Times)FROM Times);

--

Выполнение Задания (Лучше смотреть в программе) Один из выполненных запросов

Время работы:

(5)Разрешить пользователю с именем SCOTTпросматривать данные из таблиц многотабличной базы данных.

GRANT select ON BUILDING TO SCOTT;

GRANT select ON FLAT TO SCOTT;

GRANT select ON ROOM TO SCOTT;

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

Все изменения, сделанные пользователем MP_34_12 так же отображаются и у пользователяSCOTT

Выполняется неявная транзакция.

(8)В окне редактора SQL, открытого пользователем с именем студента, выполнить SQL-оператор, завершающий транзакцию с сохранением обновлений.

  1. оператор COMMIT означает успешное завершение транзакции; его использование делает постоянными изменения, внесенные в базу данных в рамках текущей транзакции;

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

В результате явной транзакции данные так же сохраняются.

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

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

ROLLBACK TO <точка сохранения>. Этот оператор используется совместно с представленным выше оператором SAVEPOINT. Транзакцию можно откатить до указанной точки сохранения, не отменяя все сделанные до нее изменения. Таким образом, можно выполнить два оператора UPDATE, затем — оператор SAVEPOINT, а после него — два оператора DELETE. При возникновении ошибки или исключительной ситуации в ходе выполнения операторов DELETE транзакция будет откатываться до указанной оператором SAVEPOINT точки сохранения; при этом будут отменяться операторы DELETE, но не операторы UPDATE.

Без точки восстановления: 62милисекунды.

Меняем скрипт: savepoint del;

DELETE FROM BUILDING

WHERE BUILDING.material NOT IN ('Кирпич');

SELECT *

FROM BUILDING;

ROLLBACK TO savepoint del;

Сточкой восстановления: 94милисекунды.

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

Удаления не сохранились.

(12)Перейти в окно редактора SQL для пользователя с именем студента и выполнить возврат ко 2-й точке сохранения. Просмотреть содержимое всех таблиц, из которых удалялись строки, и прокомментировать в отчетеполученные результаты.

--И)Удаление строк, удовлетворяющие условию

SELECT *

FROM BUILDING;

---

savepoint del1;

DELETE FROM BUILDING

WHERE BUILDING.kadastr>10;

SELECT *

FROM BUILDING;

----

savepoint del2;

DELETE FROM BUILDING

WHERE BUILDING.kadastr>8;

SELECT *

FROM BUILDING;

----

savepoint del3;

DELETE FROM BUILDING

WHERE BUILDING.kadastr>4;

SELECT *

FROM BUILDING;

ROLLBACK TO savepoint del2;

SELECT *

FROM BUILDING;

До начала удаления:

После отката ко второй строчке:

После третьего удаления:

ВЫВОД: Мы можем просматривать таблицу, удаляя в ней какие-либо строчки, и восстанавливать её без потери данных.

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

Данные сохранены после второго удаления, как и в пользователе MP_34_12.

(15)Перейти в окно редактора SQL для пользователя с именем студента и выполнить удаление всех строк из своей однотабличной базы данных оператором DELETE, отметив в отчетевремя, затраченное на выполнение оператора.

Мы не создавали однотабличную БД, по этому удалю Одну из Созданных таблиц в МНОГОТАБЛИЧНОЙ БД:

--//////////////////////////////////////////////////////

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

INSERT INTO Times(Times)

Select Systimestamp

FROM dual;

UPDATE Times SET Command='Удаление таблицы'

WHERE Times.times=(SELECT MAX(Times)FROM Times);

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

DELETE FROM Tabless;

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

INSERT INTO Times(Times)

Select Systimestamp

FROM dual;

UPDATE Times SET Command='Конец работы'

WHERE Times.times=(SELECT MAX(Times)FROM Times);

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

Даже когда таблица пустая это занимает 15 милисекунд.

После удаления таблицы с 10 строками: 17.2 милисекунды.

(16)Восстановить удаленные строки и повторно выполнить удаление всех строк из своей однотабличной базы данных оператором TRUNCATE, отметив в отчетевремя, затраченное на выполнение оператора.

--//////////////////////////////////////////////////////

DROP TABLE Tabless;

CREATE TABLE Tabless(

Line1 CHAR(50) NULL,

Line2 CHAR(31) NULL

);

INSERT INTO TAbless VALUES('234234234','1231231');

INSERT INTO TAbless VALUES('234234234','1231231');

INSERT INTO TAbless VALUES('234234234','1231231');

INSERT INTO TAbless VALUES('234234234','1231231');

INSERT INTO TAbless VALUES('234234234','1231231');

INSERT INTO TAbless VALUES('234234234','1231231');

INSERT INTO TAbless VALUES('234234234','1231231');

INSERT INTO TAbless VALUES('234234234','1231231');

INSERT INTO TAbless VALUES('234234234','1231231');

INSERT INTO TAbless VALUES('234234234','1231231');

--//////////////////////////////////////////////////////

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

INSERT INTO Times(Times)

Select Systimestamp

FROM dual;

UPDATE Times SET Command='Удаление таблицы'

WHERE Times.times=(SELECT MAX(Times)FROM Times);

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

TRUNCATE TABLE Tabless;

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

INSERT INTO Times(Times)

Select Systimestamp

FROM dual;

UPDATE Times SET Command='Конец работы'

WHERE Times.times=(SELECT MAX(Times)FROM Times);

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

SELECT * FROM TIMES;

Затраченное время:42.2милисекунды

  • Операция TRUNCATE не записывает в журнал событий удаление отдельных строк. Вследствие чего не может активировать триггеры.

  • После операции TRUNCATE для некоторых СУБД (например, Oracle) следует неявная операция COMMIT. Поэтому удаленные в таблице записи нельзя восстановить операцией ROLLBACK. Но существуют и СУБД, в которых операция TRUNCATE может участвовать в транзакциях, например, Microsoft SQL Server.

  • Операция DELETE блокирует каждую строку, а TRUNCATE — всю таблицу.

  • Операция TRUNCATE не возвращает какого-то осмысленного значения (обычно возвращает 0) в отличие от DELETE, которая возвращает число удаленных строк.

Соседние файлы в папке Lab2