Выполнение работы
(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-оператор, завершающий транзакцию с сохранением обновлений.
оператор 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, которая возвращает число удаленных строк.