18 декабря 2017 г.

Вопросы на собеседовании oracle DBA, часть 1

Проведение собеседований

   Иногда приходится проводить собеседования кандидатов на должность администратора базы данных Oracle. Бывают случаи, когда непросто выбрать лучшего кандидата из нескольких, если задавать каждому разные вопросы.  Обычно администраторы хорошо знают несколько направлений работы, которым занимались на предыдущем месте работы. В последний год остановился на типовом стандартном наборе вопросов, которые должны знать все администраторы. Каждый ответ оцениваю по 5 бальной системе, в итоге вывожу итоговые оценки по 7 направлениям. Время ответа ограничиваю, если остается время задаю уточняющие вопросы.

   В этой статье приведу типовые вопросы, которые задаю на должность дежурного и ведущего администратора (начальный и средний уровни администрирования).  Всего стараюсь оценить 7 направлений (хотелось бы больше, но 45 минут обычно не хватает):
  1. Архитектура
  2. Бэкап / Рекавери
  3. Резервирование (STANDBY)
  4. Performance
  5. SQL – PL SQL
  6. OS
  7. Не технические аспекты

По каждой теме стараюсь задать хотя-бы 3-4 вопроса. Обычно вопросы идут по повышению сложности и времени ответа. Что обычно спрашиваю:

Архитектура

Различия PFILE and SPFILE
Обычно все знают, далее спрашиваю:
  • Как узнать с какого файла параметров стартовал инстанс?
  • show parameter spfile показывает пустую строку - что это значит?
Как администратор настраивает управление памятью для инстанса Oracle.
В ответе хотелось бы услышать об особенностях Automatic Memory Management (AMM), ASMM, назначении, особенности настройки OS, больших страницах.

Какая информация хранится в контрольном файле.
Я знаю о 12 типах, при ответе считаю кол-во тем, которое сообщит кандидат, если более 6 - то ставим 5

Контрольная точка
Для получения 4 нужно что-то сказать об: CKPT, FAST_START_MTTR_TARGET. Для 5 баллов спрашиваю о полной и инкрементальной, почему несколько групп редо-логов находятся в состоянии active.

Бэкап и восстановление

Прошу рассказать о средствах резервирования данных.
Хотелось бы услышать о холодных бэкапах, горячих через RMAN и user managed, выгрузке данных export/import, DataPump. Об особенностях функционирования, плюсы и минусы.



Как оценить предполагаемый размер бэкапа

Что происходит при Begin Backup

Этапы полного восстановления базы из бэкапа

Дублирование (dublicate)
Что такое,  что происходит если указано FROM ACTIVE DATABASE и нет.

Резервирование (STANDBY)

Data Guard Protection Modes 
Стандартный вопрос, обычно все отвечают. Оцениваю точность формулировок.

AFFIRM SYNC / NOAFFIRM NOSYNC

Действия при установке точки восстановления и откате (flashback database) 
Очередность действий на основной базе и резервной.

dgmgrl
Что такое, какие команды в dgmgrl знакомы

Performance

Диагностика
Что делает при жалобах пользователей, куда смотрит

Типовые события ожидания
db file sequential reads
db file scattered reads
log file sync
buffer busy waits

Причины и способы лечения

Параметры таблиц
PCTFREE and PCTUSED

Планы запросов
Index Full Scan и Index Fast Full 

Методы фиксации плана запросов
Что знает о «профиле» (profile) запроса

SQL plan management (SPM). 

SQL – PL SQL

Основы
Прошу привести пример DML,  DCL, DDL команд
Разница между delete и truncate
Типы constraints

Какие варианты реорганизовать таблицу

Ora-01555 snapshot too old

Мутирующие таблицы

Отличие View и materialized view


OS

Load average 
Что означает, как посмотреть

LVM
Для чего, какие команды помнит

limits
Как посмотреть лимиты 

Не технические аспекты

Работал ли с сайтом техподдержки.
Обычно все отвечают да, далее прошу уточнить: Отличия ORA-600 от ORA-7445

Что читает  
блоги, книги ?

Характер  
оценить психологические характеристики кандидата на предмет встраивания в команду и комфорта общения

не профессиональные параметры кандидата  
возраст, жизненные взгляды, допустимость переработок, стремление к развитию в профессии, мобильность и частоту смены работы, семейное положение, кругозор и опыт работы в смежных областях

1 декабря 2017 г.

Grid Infrastructure 12.2 для одиночного инстанса

Grid Infrastructure 12.2 для одиночного инстанса

Небольшая шпаргалка по включению автоматического рестарта БД Oracle 12 (Oracle Restart). В статье будет продемонстрирована установка Grid Infrastructure 12.2 без ASM для целей включения автоматического старта и рестарта различных компонент БД Oracle 12 (Oracle Restart).

Причиной для установки Oracle Restart обычно является желание увеличить доступность одиночного инстанса БД. В этом случае можно использовать компоненты Grid Infrastructure для мониторинга ресурсов листенера и инстанса БД, также для автоматического рестарта этих компонент в случае различных проблем.

Используя стандартный инсталятор (программу автоматической установки и старта Grid Infrastructure) создание компоненты Automatic Storage Management (ASM) обязательно, этот шаг нельзя пропустить. Поэтому установку будем выполнять в два шага, частично в программе-установщике, частично скриптом.

Подготовка

  • Настраиваем операционную систему, согласно требований в документации
  • Скачиваем дистрибутивы linuxx64_12201_grid_home.zip и linuxx64_12201_database.zip с сайта Oracle Technology Network
  • На сервере БД создаем рабочий каталог:
mkdir -p /u01/app/grid/product/12.2.0.1
  • Копируем в него дистрибутив
mv linuxx64_12201_grid_home.zip /u01/app/grid/product/12.2.0.1/
  • Распаковываем. Начиная с версии 12.2 (Oracle 12c Release 2) zip-файл требуется распаковывать в конечном рабочем каталоге.
cd /u01/app/grid/product/12.2.0.1/
unzip linuxx64_12201_grid_home.zip
  • Проверка. Запускаем Cluster Verification Utility (CVU)
cd /u01/app/grid/product/12.2.0.1
chmod u+x *.sh
./runсluvfy.sh stage -pre hacfg –verbose

Установка

  • Запускаем инсталятор
cd /u01/app/grid/product/12.2.0.1
./gridSetup.sh
  • Выбираем установку только ПО, без конфигурации сервисов:

  • Далее все шаги по умолчанию, в конце выполняем root-скрипты.
  • Выполняем конфигурирование Grid Infrastructure, для этого запускаем под пользователем root:

/u01/app/grid/product/12.2.0.1/perl/bin/perl -I/u01/app/grid/product/12.2.0.1/perl/lib -I/u01/app/grid/product/12.2.0.1/crs/install /u01/app/grid/product/12.2.0.1/crs/install/roothas.pl

В результате выполнения должны получить:

CRS-4133: Oracle High Availability Services has been stopped.
CRS-4123: Oracle High Availability Services has been started.

centos     2017/12/21 11:27:35     /u01/app/grid/product/12.2.0.1/cdata/centos/backup_20171221_112735.olr     
2017/12/21 11:27:36 CLSRSC-327: Successfully configured Oracle Restart for a standalone server

Проверка

Для проверки статуса компонент выполним запрос crsctl
cd /u01/app/grid/product/12.2.0.1/bin
./crsctl stat res –t

./crsctl enable has

Создание листенера

В качестве завершающего шага рекомендуется запустить хотя-бы один листенер. Для этого запускаем мастер netca:

cd /u01/app/grid/product/12.2.0.1/bin/
./netca

В открывшемся мастере создаем новый листенер, все параметры можно оставить по умолчанию. После выполнения проверяем что запустился:

Установка ПО Oracle

  • Копируем и распаковываем дистрибутив ПО Oracle. В нашем случае это будет версия 12c Enterprise Edition Release 12.2.0.1.0

unzip linuxx64_12201_database.zip

  • Запускаем установщик:
cd database/
./runInstaller

  • Установка ПО Oracle не отличается от обычной установки. Каталог для установки выбираем: /u01/app/oracle/product/12.2.0/dbhome_1

Создание и запуск инстанса БД

  • Запускаем мастер создания инстанса БД:
cd /u01/app/oracle/product/12.2.0/dbhome_1/bin
./dbca
  • Все параметры для нового инстанса стандартные, и не отличаются от обычной установки. Кроме настройки листенера. На странице выбора листенера, выбираем созданный нами листенер в каталоге Grid Infrastructure:
  • После создания инстанса проверяем статус компонент:


  • Для исправления ошибки "ORA-28040: Нет соответствующего протокола аутентификации" добавляем в конфигурационный файл sqlnet.ora следующие строки: 
    • SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
    • SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
    • SQLNET.ALLOWED_LOGON_VERSION=8

Проверка

Уже сейчас можно проверить автостарт сервисов. Для этого перезагружаем хост, проверяем статус базы данных.
srvctl status listener
srvctl status database -database EMDB