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

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

42 страницы (Word-файл)

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

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