Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Сервер гарантирует, что любая команда получает целостный образ данных фиксированный на какой-то момент времени, даже если в текущий момент данные изменяются другими транзакциями. Когда сервер начинает выполнение команды выборки, undo-сегмента он определяет текущий номер изменений (SCN) и не позволяет данной команде получить доступ к информации, которая не была зафиксирована до этого SCN.
Undo-сегмент system
Создается в табличном пространстве SYSTEM во время создания базы данных. Этот undo-сегмент используется только для изменений, касающихся объектов табличного пространства SYSTEM.
Табличное пространство типа undo
· Табличное пространство типа UNDO может быть создано в момент создания базы данных при помощи команды
CREATE DATABASE db01
UNDO TABLESPACE und01 DATAFILE 'undoldb01.dbf' SIZE 20M AUTOEXTEND ON;
· Или может быть создано позднее по команде
CREATE UNDO TABLESPACE undol DATAFILE 'undoldb0l.dbf' SIZE 20M;
Изменение табличного пространства типа UNDO
Команда alter tablespace позволяет произвести изменения в табличном пространстве undo:
· ADD DATAFILE
· RENAME
· DATAFILE [ONLINE | OFFLINE]
· BEGIN BACKUP
· END BACKUP
Пример:
Файл данных добавляется к табличному пространству undo :
ALTER TABLESPACE undotbs
ADD DATAFILE 'undotbs2.dbf' SIZE 30M
AUTOEXTEND ON;
Переключение табличных пространств типа undo
· Вы можете переключить использование табличного пространства UNDO с одного на другое.
· Только одно табличное пространство undo может быть назначено экземпляру в какой-то момент времени.
· Более одного табличного пространства undo может быть создано для экземпляра, но только одно может быть активным.
· Переключение выполняется динамически по команде alter system
ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS2;
Удаление табличного пространства типа undo
Команда drop tablespace используется для удаления табличного пространства undo
DROP TABLESPACE UNDOTBS2;
- переключитесь на новое табличное пространство UNDO ;
- удалите табличное пространство после завершения текущих транзакций.
Квоты на использование текущего табличного пространства undo
· Длинные транзакции - результат неверного программирования, потребляющие значительные ресурсы.
· Квоты на табличное пространство UNDO задают максимальные ресурсные ограничения для группы пользователей.
· UNDO_POOL - директива Resource Manager, определяющая размер пространства для группы потребителей ресурсов.
· Когда группа превышает лимит, новые транзакции для группы невозможны, пока текущая транзакция не закончится нормально или аварийно и не освободит пространство отката.
Получение информации об Undo-сегментах
-Представления словаря данных
DBA_ROLLBACK_SEGS
-Динамические представления производительности
V$ROLLNAME, V$SESSION,
V$TRANSACTION, V$ROLLSTAT, V$UNDOSTAT
27. Триггеры БД.
1.Триггер проверяет возможность удаления записи из таблицы «Клиент». Если в таблице «Заказы» существуют связанные записи, то выдается сообщение об ошибке. В противном случае запись удаляется.
SQL> edit trigdelete;
\\Текст триггера:
CREATE OR REPLACE TRIGGER trigdelete
BEFORE DELETE
ON client
REFERENCING OLD as old_row
FOR EACH ROW
DECLARE
A number;
BEGIN
SELECT count(clientid) INTO A
FROM orders
WHERE clientid=:old_row.clientid;
if (A > 0) THEN
raise_application_error(-20001, 'Neobxodimo udalit svyazannie zapisi iz tablici zakazi!');
END IF;
END;
/
SQL> SET SERVEROUTPUT ON;
SQL> @trigdelete
Триггер создан.
SQL> delete from client
2 where clientid=3;
delete from client
*
ошибка в строке 1:
ORA-20001: Neobxodimo udalit svyazannie zapisi iz tablici zakazi!
ORA-06512: на "SCOTT.TRIGDELETE", line 10
ORA-04088: ошибка во время выполнения триггера 'SCOTT.TRIGDELETE'
SQL> delete from client
2 where clientid=2;
1 строка удалена.
SQL> select * from client;
CLIENTID FIO CL_PHONE EMAIL
---------- -------------------- ----------- --------------1 Komarov AV 4563214 kav@mail.ru
3 Ivanova IM 3216589 iim@mail.ru
4 Smirnova SO 9854786 ssov@mail.ru
2. Триггер проверяет возможность вставки данных в таблицу «Заказы». Если параметры новой записи соответствуют кодам клиента, спектакля и театра в соответствующих таблицах «Клиент», «Спектакль» и «Театр», то запись успешно вставляется. Если какая-либо из записей не соответствует значению первичного ключа, выдается ошибка.
SQL> edit triginsert;
\\Текст триггера:
CREATE OR REPLACE TRIGGER triginsert
BEFORE INSERT
ON Orders
REFERENCING NEW as new_row
FOR EACH ROW
DECLARE
CountPlay NUMBER;
CountClient NUMBER;
CountTheatre NUMBER;
BEGIN
SELECT count(playid)
INTO CountPlay
FROM play
WHERE playid=:new_row.playid;
SELECT count(clientid)
INTO CountClient
FROM client
WHERE clientid=:new_row.clientid;
SELECT count(theatreid)
INTO CountTheatre
FROM theatre
WHERE theatreid=:new_row.theatreid;
IF (CountPlay = 0) THEN
raise_application_error(-20001,'Spektaklya s takim kodom ne sushestvuet!!!');
END IF;
IF(CountClient = 0) then
raise_application_error(-20001,'Klienta s takim kodom ne sushestvuet!!!');
END IF;
IF(CountTheatre = 0) then
raise_application_error(-20001,'Teatra s takim kodom ne sushestvuet!!!');
END IF;
END;
/
SQL> SET SERVEROUTPUT ON;
SQL> @triginsert
Триггер создан.
SQL> insert into orders
2 values (4, 2, 1, 3, '13-05-2009', '17-05-2009', '17-05-2009');
insert into orders
*
ошибка в строке 1:
ORA-20001: Klienta s takim kodom ne sushestvuet!!!
ORA-06512: на "SCOTT.TRIGINSERT", line 22
ORA-04088: ошибка во время выполнения триггера 'SCOTT.TRIGINSERT'
SQL> insert into orders
2 values (4, 1, 10, 3, '13-05-2009', '17-05-2009', '17-05-2009');
insert into orders
*
ошибка в строке 1:
ORA-20001: Spektaklya s takim kodom ne sushestvuet!!!
ORA-06512: на "SCOTT.TRIGINSERT", line 19
ORA-04088: ошибка во время выполнения триггера 'SCOTT.TRIGINSERT'
SQL> insert into orders
2 values (4, 1, 1, 5, '13-05-2009', '17-05-2009', '17-05-2009');
insert into orders
*
ошибка в строке 1:
ORA-20001: Teatra s takim kodom ne sushestvuet!!!
ORA-06512: на "SCOTT.TRIGINSERT", line 25
ORA-04088: ошибка во время выполнения триггера 'SCOTT.TRIGINSERT'
SQL> insert into orders
2 values (4, 3, 3, 1, '13-05-2009', '17-05-2009', '17-05-2009');
1 строка создана.
4. Триггер проверяет, чтобы дата заказа билетов не превышала даты
Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.