45804 (665148), страница 2

Файл №665148 45804 (Oracle9i. Обзор некоторых новых возможностей) 2 страница45804 (665148) страница 22016-07-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

Real Application Cluster

Технология Real Application Cluster заслуживает отдельной статьи или даже серии статей. Эта технология позволяет перенести приложение, разработанное без учёта особенностей кластерной архитектуры, на кластер, и получить при этом существенное увеличение и производительности, и отказоустойчивости.

Кроме этого к средствам обеспечения масштабируемости можно отнести автоматическое распределение памяти PGA и тонкое распределение ресурсов сервера (развитие технологии Database Resource Manager).

Очень большое внимание в Oracle9i уделено средствам работы с хранилищами данных. При работе с ними, как правило, требуется решить две основные проблемы – как загрузить данные в хранилище и как их потом анализировать.

Для решения первой проблемы данные нужно сначала извлечь из какого-либо источника (часто этим источником является OLTP-система), потом преобразовать (выполнить денормализацию, просуммировать по какому-либо показателю и т.п.), и потом загрузить в базу данных. Для обозначения этого процесса обычно используется аббревиатура ETL (Extraction, Transformation and Loading).

Одна из основных задач в процессе ETL – определить, какие данные были изменены после последней загрузки хранилища. Технология Change Data Capture позволяет отслеживать все изменения данных, сохранять информацию об изменениях в таблицах изменений (change tables) и просматривать изменения данных за нужный промежуток времени.

Если данные в хранилище загружаются из внешних файлов, то появление внешних таблиц (External Tables) позволяет избежать одного из шагов в ETL-процессе. Внешняя таблица – это таблица, структура которой описана в базе данных, а данные хранятся в плоском файле. В базе данных необходимо описать формат этого файла, для этого используется язык, очень похожий на язык управляющих файлов SQL*Loader. Естественно, внешние таблицы можно использовать только для запросов. Описываются они приблизительно так:

create table emp_external

(

empno number(4),

ename char(10),

job char(9),

mgr number(4),

sal number(7,2),

comm number(7,2),

deptno number(2)

)

organization external

(

type oracle_loader -- другого пока нет

default directory emp_dir -- объект типа Directory в базе данных

access parameters

(

fields rtrim

(

EMPNO (01:04),

ENAME (06:15),

JOB (17:25),

MGR (27:30),

SAL (32:39),

COMM (41:48),

DEPTNO (50:51)

)

)

location ('ulcase2.dat')

)

Для облегчения шага Transformation в ETL-процессе предлагаются конвейерные (pipelined) функции. Это функции, которые на входе получают набор строк (ref cursor) и на выходе выдают тоже набор строк (nested table). Их принципиальная новизна в том, что это множество строк они выдают не сразу, а по одной. Внутри такой функции ставится оператор PIPE ROW, который выдает одну строку результата и приостанавливает выполнение функции до тех пор, пока среда, вызвавшая эту функцию (это может быть, например, тоже конвейерная функция), не потребует следующую строку. Рассмотрим пример конвейерной функции.

Объявление типа для источника (producer) данных:

create or replace package emp_pipe is

type strong_refcur_t is ref cursor return emp%rowtype;

end;

Объявление типа для приемника (consumer) данных:

create or replace type emp_t is

object (empno number, ename varchar2(10), sal number);

create or replace type emp_t_table as table of emp_t;

Сама конвейерная функция:

create or replace FUNCTION emp_pipe_fun(cur emp_pipe.strong_refcur_t)

RETURN emp_t_table

PARALLEL_ENABLE (PARTITION cur BY ANY)

PIPELINED is

one_row cur%rowtype;

BEGIN

LOOP

FETCH cur INTO one_row;

/* Здесь можно вставить любую обработку полученной строки */

EXIT WHEN cur%NOTFOUND;

/* Оператор PIPE ROW возвращает одну строку результата */

PIPE ROW (emp_t(one_row.empno, one_row.ename, one_row.sal*10));

END LOOP;

CLOSE cur;

/* RETURN вызывается без аргументов, */

/* т.к. все результаты функция уже вернула через PIPE ROW */

RETURN;

END;

Использование этой функции:

select * from table(emp_pipe_fun(cursor(select * from emp)));

Результат работы emp_pipe_fun может послужить источником данных для другой конвейерной функции (назовем ее another_fun):

Select *

from table(another_fun(cursor(

select * from table(emp_pipe_fun(cursor(select * from emp))))));

Это позволяет «нанизывать» такие функции друг на друга и организовывать конвейер преобразования данных.

Новый SQL-оператор Merge и новый многотабличный синтаксис оператора Insert облегчают шаг Loading. Оператор Merge – реализация стандартной для хранилищ данных операции UPSERT, предназначенной для решения задач типа «если продажи в данном регионе уже были – увеличить сумму продаж (Update) по коду региона, если не было – вставить строку с кодом и суммой продаж (Insert)». Например (используем уже упоминавшиеся таблицы Sales и Regions):

Создадим суммарную таблицу продаж по регионам:

create table Sales_sum (region_id number, sum_amount number);

Внесем в нее данные о продажах за последние сутки:

merge into sales_sum SS

using (select region_id, amount from sales where sal_date>sysdate-1) S

on (SS.region_id=S.region_id)

when matched then -- продажи по региону уже были

update set SS.sum_amount=SS.sum_amount+S.amount

when not matched then -- первая продажа в данном регионе

insert (SS.region_id, SS.sum_amount)

values (S.region_id, S.amount);

Многотабличный Insert позволяет одним оператором вставить строки сразу в несколько таблиц, причем можно задавать условия вставки строки для каждой таблицы. Например, при переносе данных о продажах в архив требуется отдельно учитывать особо крупные сделки.

Создадим таблицы для архивных данных и крупных сделок:

create table sales_arch as select * from sales where 0=1;

create table super_sales as select * from sales where 0=1;

Перенесем данные:

insert all

when amount>100000

then into super_sales values (id, region_id, product_id, amount, sal_date)

when 1=1

then into sales_arch values (id, region_id, product_id, amount, sal_date)

select * from sales;

Администратору

Администратор базы данных – человек, отвечающий в первую очередь за сохранность данных и работоспособность системы. Новые способы обеспечения бесперебойной работы позволят ему жить более спокойно.

Остановки базы данных можно разделить на плановые (например, для изменения параметров экземпляра) и внеплановые (различные сбои). Oracle9i позволяет существенно понизить частоту плановых остановок, поскольку допускает динамическое изменение почти всех параметров экземпляра, в том числе и таких параметров системной глобальной области, как размер кэша буферов базы данных или разделяемого пула. Что же касается сбоев, то гарантировать их отсутствие не может никто. Oracle9i содержит средства для снижения вероятности сбоев и максимально безболезненного устранения их последствий.

Технология Oracle Data Guard – развитие старой идеи резервной базы данных (Standby Database). Основным недостатком старого варианта была невозможность полного восстановления резервной базы перед ее активизацией. Если при аварии основного сервера повреждался текущий журнал (current redo log), то все изменения базы данных, записанные в этот журнал, терялись безвозвратно. Для многих OLTP-систем это было неприемлемо. Технология Oracle Data Guard позволяет администратору базы данных самому выбрать, что для него важнее – недопущение потери даже самого малого количества данных или максимальная производительность. Если потеря данных недопустима, то можно заставить Oracle отправлять изменения на резервный сервер в синхронном режиме, т.е. пока эти изменения не выполнятся на резервной базе данных, транзакция не считается зафиксированной. Естественно, это может привести к некоторым потерям в производительности. Можно использовать старый метод – изменения передаются на резервный сервер только после заполнения очередного журнала на основном сервере. Тут мы жертвуем сохранностью данных ради производительности. И есть компромиссный вариант – изменения передаются на резервный сервер «почти синхронно», тогда небольшая потеря данных в случае аварии возможна, но маловероятна.

Особого внимания заслуживает новая возможность Recovery Manager – восстановление отдельного блока файла данных. Раньше одним из стандартных способов восстановления при обнаружении поврежденного (corrupted) блока было копирование файла, содержащего этот блок, из резервной копии и применение к нему архивных и оперативных журналов. Это требовало как минимум перевода поврежденного табличного пространства в автономный режим на время копирования файла, что приводило к недоступности части данных на довольно длительный срок. Теперь Recovery Manager может извлечь из резервной копии только поврежденный блок, выполнить его восстановление при помощи журналов и записать восстановленный блок в файл данных. В этом случае временно недоступными оказываются только данные в поврежденном блоке.

Так называемые возобновляемые операции (Resumable Operations) позволяют бороться с другим очень распространенным видом сбоев – нехваткой пространства в базе данных. Каждый администратор наверняка не раз попадал в ситуацию, когда операция вроде перестроения большого индекса или реорганизации огромной таблицы работает несколько часов и обрывается из-за нехватки места в табличном пространстве (постоянном или временном) или невозможности расширить сегмент отката. В Oracle9i такую операцию можно объявить возобновляемой. Тогда в случае возникновения подобной ошибки процесс не прерывается, а приостанавливается до тех пор, пока администратор не устранит препятствие или не истечет заданный таймаут. Вот как это выглядит.

Создадим таблицу (для чистоты эксперимента – в управляемом системой (dictionary managed) табличном пространстве, т.к. в локально-управляемом (locally managed) не действует параметр Maxextents):

create table Small_extent_table

tablespace dict_tbs

storage (initial 10K maxextents 1)

as select * from emp;

Несколько раз продублируем в ней данные:

insert into Small_extent_table

select * from Small_extent_table;

Примерно на пятой-шестой попытке получим ошибку «ORA-01631: max # extents (1) reached in table SCOTT.SMALL_EXTENT_TABLE». Включим возобновляемые операции (для этого пользователь должен иметь привилегию Resumable):

alter session enable resumable;

Попробуем еще раз:

insert into Small_extent_table

select * from Small_extent_table;

Сессия зависает и ждет возможности добавить экстент в таблицу. Из другой сессии обнаружим это:

select name, sql_text, error_msg from dba_resumable;

Получим:

User SCOTT(70), Session 7, Instance 1

insert into small_extent_table s select * from small_extent_table

ORA-01631: max # extents (1) reached in table SCOTT.SMALL_EXTENT_TABLE

Устраним причину ошибки:

alter table Scott.Small_extent_table storage (maxextents 10);

Теперь осталось только убедиться, что в первой сессии оператор Insert успешно закончился.

Еще один классический вид сбоев – ошибки пользователей. Если кто-то из пользователей, разработчиков или сам администратор случайно удалил таблицу или запустил неотлаженную процедуру, восстановить потерянные данные бывает очень трудно. В Oracle8i в таких случаях очень помогает утилита Log Miner. В Oracle9i эта утилита обогатилась новыми возможностями, такими как восстановление текста DDL-операций или возможность пропуска поврежденной части журнала.

Кроме Log Miner, восстановить данные после пользовательской ошибки помогает еще одно нововведение – ретроспективные запросы (flashback query). С помощью процедур пакета dbms_flashback пользователь может задать нужный момент времени (предшествующий ошибке), и после этого все его запросы будут возвращать состояние данных на указанный момент. Попробуем это сделать.

Характеристики

Тип файла
Документ
Размер
128,78 Kb
Тип материала
Учебное заведение
Неизвестно

Список файлов реферата

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6532
Авторов
на СтудИзбе
301
Средний доход
с одного платного файла
Обучение Подробнее