12 мар. 2012 г.

TAF метод SELECT

В общем случае TAF, переключив приложение на другой узел кластера, не может прозрачно продолжить работу этого приложения, поскольку у погибшей сессии был контекст который неоткуда взять (активные транзакции, значения переменных PL/SQL, параметры сессии установленне с помощью команд ALTER SESSION). Однако существуют приложения, для которых это возможно прозрачно сделать. Это DSS-приложения, то есть приложения ориентированные на получение отчетов. В процессе работы приложения этого типа в основном выполняют SQL- запросы.
В отличие от типа SESSION, при использовании метода SELECT Oracle Client помимо создания новой сессии производит восстановление открытых курсоров “погибшей” сессии.

Проверим, как работает метод SELECT, предварительно определив в файле tnsnames.ora следующий алиас:
RACDB_SELECT =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan.cluster.us.oracle.com)(PORT = 1521))
    (FAILOVER = yes)
    (CONNECT_DATA =
      (FAILOVER_MODE =
        (TYPE = SELECT)
        (METHOD = BASIC)
      )
      (SERVICE_NAME = racdb.us.oracle.com)
    )
  ) 

Откроем сессию в sqlplus с помощью вышеприведенного дескриптора соединения и по традиции проверим, к какому узлу кластера мы имеем соединение:

C:\RACDD4D\v4.1>sqlplus rscott/rtiger@racdb_select
SQL*Plus: Release 11.2.0.3.0 Production on Sat Jan 28 16:58:19 2012
Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning, Real Application Clusters and Automatic Storage Management options

SQL> SELECT dbms_utility.current_instance FROM dual;

CURRENT_INSTANCE
----------------
               2

Таблица accounts в схеме rscott содержит 200 тыс. записей. Поле acc_id этой таблицы было заполнено с помощью генерации последовательных значений последовательности (sequence).
SQL> SELECT COUNT(*) FROM accounts;

  COUNT(*)
----------
    200000

SQL>DESC accounts
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ACC_ID                                    NOT NULL NUMBER(6)
 ACC_NUM                                            VARCHAR2(20)
 ACC_CUR                                            VARCHAR2(3)
 ACC_BAL                                            NUMBER
 CUS_ID                                             NUMBER(6)
 ACC_STATUS                                         VARCHAR2(3)
 ACC_DATE_CREATED                                   DATE

SQL>

Запустим на выполнение простой запрос к этой таблице. После начала его выполнения подключимся непосредственно на второй узел и аварийно завершим экземпляр, на котором выполняется запрос, с помощью команды SHUTDOWN ABORT:
SQL> SELECT acc_id FROM accounts ORDER BY 1;
    151619
    151620
    151621
    151622
    151623
    151624

    ACC_ID
----------
    151625
    151626
    151627
    151628


В момент сбоя выполнение запроса “замораживается” на несколько секунд, а потом продолжается со следующей записи как ни в чем ни бывало!
151629
    151630
    151631
    151632
    151633
... ... ...
    199998
    199999
    200000

200000 rows selected.

   SQL> SELECT dbms_utility.current_instance FROM dual;

CURRENT_INSTANCE
----------------
               3


Как вы видите, с использованием типа SELECT, технология TAF позволяет помимо сессии также восстановить и состояние курсоров приложения. При этом продолжение выполнения запроса произошло абсолютно прозрачно для приложения: оно и не подозревало, что запрос завершил свое выполнение на другом (в данном случае третьем) узле.
На самом деле для того, чтобы обеспечить такую “магию”, Oracle Client производит большую работу. До момента сбоя, выполняя запрос, Oracle Client хранит в памяти клиентского компьютера:
  • текст запроса и значение его параметров (переменных привязки);
  • SCN на момент начала запроса;
  • количество прочитанных строк до момента сбоя;
  • рассчитанную контрольную сумму прочитанных строк.

Рис. 1 Иллюстрация алгоритма работы типа SELECT


После сбоя, переключившись на другой узел, Oracle Client производит следующие действия:
  • выполняет на этом узле запрос на момент времени заданный SCN на начало запроса;
  • незаметно для приложения прочитывает столько же строк результата запроса, сколько было прочитано до сбоя;
  • снова рассчитывает контрольную сумму прочитанных строк.
  • сравнивает полученную контрольную сумму с той, которая была до момента сбоя;
  • если значения старой и новой контрольных сумм совпадают, то продолжает чтение следующих строк и возвращает их приложению;
  • если значения старой и новой контрольных сумм не совпадает, то приложению выдается исключение “ORA-25408: can not safely replay call”, и выполнение запроса прерывается.
SCN на момент начала запроса нужен для того, чтобы гарантировать неизменность содержимого выборки после переключения на другой узел, поскольку за время прошедшее от начала выполнения до момента сбоя, содержимое запроса могло измениться.
Расчет контрольной суммы прочитанных строк необходим для проверки того, что порядок возвращаемых строк в запросе не изменился. Как вы помните, Oracle Database не гарантирует порядок результирующих строк запроса, если конечно это явно не определено фразой ORDER BY. Поэтому может получиться так, что после переключения, строки будут возвращены в другом порядке.

Часто и в OLTP-приложениях имеются модули формирования отчетности, поэтому применение метода SELECT также может быть востребовано и в транзакционных системах.

14 февр. 2012 г.

TAF and non failover exception

Все вы хорошо знаете технологию Transparent Application Failover [TAF],
также знаете о том, что она предназначена для защиты от сбоя текущего узла (Failover).

Стоит отметить важный момент, про который часто возникает недопонимание: технология TAF реализуется полностью клиентом СУБД, то есть соответствующая функциональность включена в Oracle Client, и предназначена только для защиты от сбоя соединения. Это означает, что TAF НЕ может защитить от ошибок возникающих в стеке ПО Oracle.

Рассмотрим небольшой интересный пример, предварительно определив в файле tnsnames.ora следующий алиас с поддержкой TAF с типом SELECT:
RACDB_SELECT =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan.cluster.us.oracle.com)(PORT = 1521))
    (FAILOVER = yes)
    (CONNECT_DATA =
      (FAILOVER_MODE =
        (TYPE = SELECT)
        (METHOD = BASIC)
      )
      (SERVICE_NAME = racdb.us.oracle.com)
    )
  ) 

Откроем сессию в sqlplus с помощью вышеприведенного дескриптора соединения, и по традиции проверим, к какому узлу кластера мы имеем соединение:
C:\RACDD4D\v4.1>sqlplus rscott/rtiger@racdb_select
SQL*Plus: Release 11.2.0.3.0 Production on Sat Jan 28 16:58:19 2012
Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning, Real Application Clusters and Automatic Storage Management options

SQL>SELECT dbms_utility.current_instance FROM dual;

CURRENT_INSTANCE
----------------
               3
Затем выполним запрос по большой таблице в параллельном режиме (Parallel Query), но в момент его выполнения "неожиданно" аварийно завершим экземпляр на другом узле – отличном от того, с которого был инициирован запрос. При этом на “упавшем” узле выполнялась часть подчиненных процессов (Parallel Query Slave):

SQL> alter table accounts parallel;
Table altered.

SQL> SELECT acc_id FROM accounts ORDER BY 1;
    1
    2
    3
    4
    5
    6
... ... ...

Пока наш запрос выполняется, аварийно остановим, например. четвертый экземпляр:
[oracle@rac4 ~]$ sqlplus / as sysdba

SQL> shutdown abort;
ORACLE instance shut down.
В этот момент выполнявшийся запрос неожиданно прерывается по ошибке:
ACC_ID
----------
    93925
    93926
    93927
    93928
    93929
    93930
    93931

ERROR:
ORA-12805: parallel query server died unexpectedly
В данном случае запрос прервался из-за того, что стали недоступны параллельные подчиненные процессы (Parallel Query Slave) на 4-ом узле. При этом сама сессия в полном порядке – третий узел работоспособен !
Произошла ошибка на прикладном уровне Oracle, не связанная с сбоем соединения, поэтому TAF в данном случае ничем не может нам помочь !

21 нояб. 2011 г.

"1C:Enterprise" now work on Exadata


Произошло эпохальное событие: "1C:Предприятие" поддерживает Exadata!

Как вы помните 1С уже достаточно давно поддерживает Oracle Database 11.2.0.2 на платформе Linux x64. Для запуска 1С на данной платформе необходимо установить три патча: 10094732, 11724916, 9620994.
Собственно узлы БД (database node) Exadata и работают под управлением Oracle Database 11.2.0.2 и Linux x64.

Сейчас ошибки (баги), которые исправляют вышеописанные патчи, были устранены и на Exadata.
Итак: "1С:Предприятие" работает на Exadata при условии установки на database node двух патчей:
    - Exadata Bundle Patch 9
    - Patch 13251038

Огромная благодарность за помощь в получении патчей и масштабное тестирование "1С:Предприятие" на Exadata сотрудникам компании "Fors" !

16 нояб. 2011 г.

22 ноября: Москва: OTN Developer Day 2011


22 ноября в гостинице «Бородино» по адресу ул. Русаковская д. 13/2 (недалеко от метро Красносельская) в рамках Oracle Technology Network Developer Day Database пройдут

Мастер-классы по разработке приложений для Oracle Database 11g.


Мероприятие пройдет в формате двух параллельных мастер-классов:
  • разработка приложений с помощью Oracle Application Express (APEX)
  • pазработка .NET-приложений с помощью Oracle Data Provider for .NET (ODP .Net)
Участие в мероприятии бесплатно при условии предварительной регистрации здесь. Обращаем Ваше внимание на то, что все материалы мастер-классов предоставляются на английском языке.

Для участия в мероприятии Вам необходимо иметь с собой ноутбук, удовлетворяющий следующим техническим требованиям:
  • операционная система Windows, Linux или Mac
  • минимум 2 ГБ оперативной памяти
  • минимум 20 ГБ свободного дискового пространства
  • VirtualBox 4.1.6
По всем вопросам регистрации просим обращаться к Екатерине Ивкиной по электронной почте ekaterina.ivkina в домене oracle.com или по телефону +74956411400.

Update 1:

Огромная благодарность всем участникам за проявленный интерес !!!

Материалы семинара доступны по ссылкам ниже: Инструкции к лабораторным работам доступны на сайте Oracle Learning Library (oracle.com/oll).
Рекомендую сделать все предложенные нами лабораторные работы, если возникнут какие-либо вопросы - пишите в коментарии к этому посту или по адресу andrey.zabelin в домене oracle.com .

Виртуальная машина, использовавшаяся на треке APEX, доступна на странице Developer Day - Hands-on Database Application Development.

Update 2:


Как выяснилось на мероприятии на компах с процессором AMD необходимо выполнить дополнительные настройки для запуска виртуальной машины. Проблема заключается в управлением энергопотреблением APIC под Linux на процессорах AMD.
Linux зависает при старте, перед запуском виртуальной машины нужно снять галку в свойствах (см. скриншот) .

На работоспособность APEX внутри виртуальной машины эта настройка не влияет ;-)

Есть другой вариант - отредактировать файл /grub/boot/menu.lst и добавить опцию "noapic nolapic acpi=off" в секцию boot в гостевой операционной системе Linux.

6 нояб. 2011 г.

Database As Service. Part1 (Создание шаблона БД)

На прошедшем Oracle Day я рассказывал презентацию про подготовку инфраструктуры для облачных вычислений. Была затронута тема предоставления заказчикам базы данных как сервиса - Database As Service [DBaaS].
Тема эта относительно новая, и мне хотелось бы рассмотреть ее более подробно.

Введение
DBaaS - это копцепция БД которая представляет собой ресурс в облаке. Пользователь не знает, где физически находится эта БД. Как и любой другой ресурс в облаке, эта база данных автоматически создается по запросу пользователя.
Затем заказчик работает с этой БД обычным образом: работает с ней через приложение или использует для задач разработки или тестирования. Также пользователь, если в этом возникла необходимость, может удалить ресурс - БД при этом автоматически удаляется.

Очень часто в организациях постоянно требуется создавать БД типовых конфигураций используемых в компании. Иногда эти БД нужны на определенное время, например для задач тестирования. Эта рутинная работа ложится на плечи DBA, которые и так, особенно в крупных компаниях, сильно перегружены. Идея DBaaS состоит в автоматизации получения готовой типовой БД, чтобы, как и для любого другого ресурса в облаке, БД создавалась по запросу пользователя и автоматически производился учет и оплата ее использования.

Концептуально, в иерархии ресурсов облака, DBaaS лежит между уровнями "Инфраструктура как сервис" [IaaS] и "Платформа как сервис" [PaaS]. В качестве инфраструктуры база данных может использовать непосредственно железо сервера, то есть может быть установлена непосредственно на операционной системе аппаратного сервера, либо может работать в виртуальной машине.

DBaaS обеспечивает следующие преимущества:

10 окт. 2011 г.

15 сент. 2011 г.

Oracle Cloud File System

Сейчас я занимаюсь подготовкой демонстрации ACFS для семинара по Облачным вычислениям. Часть демонстрации посвящена шифрованию. Многие  знают, что для закрытия конфиденциальной информации на уровне Oracle Database есть механизмы TDE (Transparent Data Encryption). Показать, что все работает, в этом случае, достаточно просто: включить шифрование, добавить записи в таблицу, взять любой «просмоторщик» бинарных файлов, открыть файл БД и показать, что данные  нечитабельны.

Замечательно! А как быть, если TDE включено для  файловой системы? Если у вас нет прав на объект, то вы не получаете доступ. Если доступ есть, то TDE абсолютно прозрачно и расшифровывает данные налету для вас независимо от приложений, при любом доступе к файлу который хранится на диске. При копировании на незащищенный диск автоматически происходит расшифровка. Т.е. в процессе тестирования ACFS Security вела себя абсолютно прагматично: есть права - получите, нет прав - до свидания и have a nice day! :-)
Пример команд. Действительно, просто без погружения в Realms :)

Тем не менее, способ есть. Можно производить поиск информации на уровне тома (volume), например из под root выполнив: dd, strings  и т.д.. Также не стоит забывать про файловый кэш (для очиски в Linux, например можно использовать команду "sync"). Т.к. блоки файлов пользователя шифруются при «переливке» с кеша на диск. В итоге, все удалось решить.

Кроме этого, ACFS (маркетинговое название - Cloud FS) позволяет организовать репликацию файлов между серверами в рамках одного ЦОД или нескольких площадок. Многие знают, что для защиты данных БД от катастроф, как правило, используется Oracle Data Guard. Но как быть с файлами приложений или бинарными файлами Oracle Homes?  Как раз для решения такой задачи Cloud FS Replication может помочь, причем, передача данных идет по обычным IP каналам.
Демонстрация будет прадставлена на следующем семинаре ....


Самое главное ! 20-ого сентября, в офисе Oracle будет проходить мероприятие для партнеров - «Облачные вычисления. Построение дата центров нового поколения». Партнеры, приходите, будет много интересного!

Информация  о регистрации  и детали мероприятия здесь.