Компоненты архитектуры СУБД Oracle. Основные компоненты. Сервер Oracle. Экземпляр Oracle. Архитектура экземпляра Oracle. Файловая структура БД. Файл параметров. Файл паролей

Страницы работы

Фрагмент текста работы

Сервер гарантирует, что любая команда получает целостный образ данных фиксированный на какой-то момент времени, даже если в текущий момент данные изменяются другими транзакциями. Когда сервер начинает выполнение команды выборки, 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-сегмент, имеющий статус PENDING OFFLINE, содержит данные активных транзакций. Если транзакции завршины, то можно удалять табличное пространство.
  • Чтобы удалить табличное пространство undo:

- переключитесь на новое табличное пространство 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. Триггер проверяет, чтобы дата заказа билетов не превышала даты

Похожие материалы

Информация о работе

Предмет:
Базы данных
Тип:
Ответы на экзаменационные билеты
Размер файла:
436 Kb
Скачали:
0