Показаны сообщения с ярлыком Oracle. Показать все сообщения
Показаны сообщения с ярлыком Oracle. Показать все сообщения

6 июня 2019 г.

Доступ к PostgreSQL из Oracle

Краткая инструкция по настройке ДБ-линка из базы Oracle к PostgreSQL 


Описание серверов:

  • Oracle DB. Медстатистика: 10.2.XX.XX   srv-ms-ora01
  • PostgreSQL DB. Больничные: 10.1.XX.XX  srv-elnp1-pg01

Для создания линка необходимо открыть доступ между серверами по порту 5432

Настройка PostgreSQL DB

  • Создайте пользователя
create user dblinkuser encrypted password 'пароль' CONNECTION LIMIT 50;
GRANT CONNECT ON DATABASE eln TO dblinkuser;
\c eln
grant usage on schema eln to dblinkuser;
GRANT SELECT ON ALL TABLES IN SCHEMA eln TO dblinkuser;
ALTER DEFAULT PRIVILEGES IN SCHEMA eln GRANT SELECT ON TABLES TO dblinkuser;
GRANT USAGE ON SCHEMA public TO dblinkuser;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO dblinkuser;
  • Проверка
psql -U dblinkuser -d eln
select * from eln.df;

Должны получить данные

update eln.df set moid=200001003712 where id=1;
Должны получить ошибку: must be: ERROR:  permission denied for relation df
  • pg_hba
Добавьте в  pg_hba.conf строку



host    eln             dblinkuser     10.2.XX.XX/32            md5

Примените
pg_ctl reload -D xxxxxx

Установка ODBC драйвера

Устанавливаем на хост с базой Oracle. Есть несколько вариантов установки. У нас нет пакетов, поэтому в нашем случае:
  • Вариант 1. Из исходников
Скачайте с : https://odbc.postgresql.org/
и по инструкции :
./configure
make
make install

  • Вариант 2. С помощью дистрибутива от EDB Postgres
В опциях снимите установку базы, и включите установку ODBC

  • Проверка после установки
odbcinst -j
unixODBC 2.3.6
DRIVERS............: /etc/unixODBC/odbcinst.ini
SYSTEM DATA SOURCES: /etc/unixODBC/odbc.ini
FILE DATA SOURCES..: /etc/unixODBC/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8


SQLSETPOSIROW Size.: 8


Создание подключения, настройки HS Oracle

  • odbc.ini



[ODBC Data Sources]
  PG_LINK = PostgreSQL
[PG_LINK]
  Debug = 1
  CommLog = 1
  ReadOnly = yes
  Driver = /opt/PostgreSQL/psqlODBC/lib/psqlodbcw.so
  Servername = 10.1.XX.XX
  FetchBufferSize = 99
  Username = dblinkuser
  Password = пароль
  Port = 5432
  Database = eln
[Default]
  Driver = /usr/lib64/unixODBC/liboplodbcS.so

Создайте копии


cd /root/
chmod a+rw .odbc.ini
ln .odbc.ini odbc.ini
ln .odbc.ini /etc/odbc.ini
ln .odbc.ini /home/oracle/odbc.ini
ln .odbc.ini /home/oracle/.odbc.ini


ln .odbc.ini /etc/unixODBC/odbc.ini


Проверки

  • Получить список подключенных драйверов (тех, для которых созданы записи в odbcinst.ini):
odbcinst -q -d

  • Получить список подключенных источников данных (DSN):
odbcinst -q -s

  • Полную информацию можно получить:
cat /etc/unixODBC/odbcinst.ini

  • Запрос данных из PostgreSql
Выполняем под пользователем root и oracle
isql -v PG_LINK

select * from eln.df;
Должны получить данные из таблиц БД PostgreSql


Настройка Oracle 


  • Создаем config

cd /u01/oracle/app/product/12.1.0/dbhome_1/hs/admin/
vi initPG_LINK.ora



HS_FDS_CONNECT_INFO=PG_LINK
HS_FDS_TRACE_LEVEL=255
HS_FDS_SHAREABLE_NAME=/opt/PostgreSQL/psqlODBC/lib/psqlodbcw.so
set ODBCINI=/home/oracle/.odbc.ini
set ODBCINSTINI=/etc/unixODBC/odbcinst.ini
HS_LANGUAGE = AMERICAN_AMERICA.AL32UTF8
HS_NLS_NCHAR = UCS2


  • tnsnames.ora

cd /u01/oracle/app/product/12.1.0/dbhome_1/network/admin
vi tnsnames.ora
  PG_LINK =
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1523))
    (CONNECT_DATA=(SID=PG_LINK))
    (HS=OK)
  )


  • listener.ora


cd /u01/oracle/app/product/12.1.0/dbhome_1/network/admin
vi listener.ora
LISTENER_dg4odbc =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1523))
    )
  )
SID_LIST_LISTENER_dg4odbc =
  (SID_LIST =
  (SID_DESC =
      (SID_NAME=PG_LINK)
      (ORACLE_HOME=/u01/oracle/app/product/12.1.0/dbhome_1)
      (ENVS="LD_LIBRARY_PATH=/usr/local/lib:/usr/lib64:/usr/lib:/u01/oracle/product/11.2.0.4/lib:/u01/oracle/app/product/12.1.0/dbhome_1/dg4msql/driver/lib:/u01/oracle/app/product/12.1.0/dbhome_1/lib")
      (PROGRAM=dg4odbc)
    )
  )

lsnrctl stop LISTENER_dg4odbc
lsnrctl start LISTENER_dg4odbc
lsnrctl status LISTENER_dg4odbc



  • Проверка
tnsping pg_link


  • database link
Создаем database link:
create public database link PG_LINK connect to "dblinkuser" identified by "пароль" using 'PG_LINK';

Проверка:
select * from "eln"."df"@PG_LINK;


Возможные ошибки

  • ORA-28545

ORA-28545: error diagnosed by Net8 when connecting to an agent
Unable to retrieve text of NETWORK/NCR message 65535
ORA-02063: preceding 2 lines from PG_ELN_LINK

Tue Jun 04 14:58:02 2019
HS:  Unable to establish RPC connection to HS Agent...
HS:  ... Agent SID = (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=srv-ms-ora01)(PORT=1521))(CONNECT_DATA=(SID=PG))), 
NCR error = 65535 Unable to retrieve text of NETWORK/NCR message 65535

Решение - создать отдельный listener

  • ORA-28546
ORA-28546: connection initialization failed, probable Net8 admin error
ORA-28511: lost RPC connection to heterogeneous remote agent using 
SID=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1523))(CONNECT_DATA=(SID=PG_LINK)))
ORA-02063: preceding 2 lines from PG_LINK


Решение -  добавьте переменные окружения:
     (ENVS="LD_LIBRARY_PATH=/usr/local/lib:/usr/lib64:/usr/lib:/u01/oracle/product/11.2.0.4/lib:/u01/oracle/app/product/12.1.0/dbhome_1/dg4msql/driver/lib:/u01/oracle/app/product/12.1.0/dbhome_1/lib")

  • ORA-28500
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
c

Решение - Добавьте параметр 
HS_LANGUAGE=AMERICAN_AMERICA.WE8ISO8859P1

  • Русские буквы испорчены

Решение - Решаем согласно ноте:
Select from PostgreSQL Using DG4ODBC Gives Error ORA-28500 : Error Invalid Byte Sequence For Encoding UTF8 [ID 1369633.1]

HS_NLS_NCHAR = UCS2


1 марта 2018 г.

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

Несколько вопросов начального уровня к претенденту на должность администратора БД Oracle (DBA), позволяющих дать быструю оценку кандидата на предмет - стоит ли вести с ним дальнейший разговор или нет. Вопросы может задать кадровик или менеджер.


  • С помощью каких приложений можно стартовать инстанс базы данных:

1) SQL*Plus
2) Oracle Enterprise Manager
3) RMAN


  • Какие стадии проходит инстанс во время запуска:

1) nomount
2) mount
3) open


  • Какие типы остановки инстанса с помощью команды shutdown возможны:

1) normal
2) immediate
3) transactional
4) abort


  • Вы хотите что-бы одиночный инстанс oracle стартовал автоматически при старте операционной системы, какие способы настроить автостарт возможны:

1) Использовать Oracle Restart
2) Написать свои скрипты


  • Для чего используется файл с паролями (password file):

Когда база остановлена, то нет доступа к словарю данных и нельзя проверить пароль обычным способом. Поэтому необходим механизм для администратора подключиться к  базе данных, даже если база остановлена. Файл с паролями хранится на диске отдельно от базы, содержит имена и пароли всех учетных записей с правами администрирования (учетки имеющие привилегии sysdba и sysoper)


  • Из каких обязательных файлов состоит базы данных:

1) Дата-файлы
2) онлайн-редо лог файлы
3) контрольный файл


  • Какая связь между табличным пространством и дата-файлами:

1) Каждое табличное пространство состоит из одного или более дата-файлов.
2) Дата-файл может входить только в одно табличное пространство


  • Какая разница между представлением и материализованным представлением:

1) обычное представление - это SQL запрос в словаре (логический объект)
2) материализованное представление - это таблица (физический объект базы данных)


  • Событие "log file sync" из-за чего возникает

Ожидание завершения команд commit и rollback, или: ожидание записи на диск в онлайн редо-лог

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



31 марта 2015 г.

Экзамен 1Z0-060 Upgrade to Oracle Database 12c

Наконец нашел время сдать тест 1Z0-060. Я готовился к нему полгода, изучил множество документов и книг. Это не самый быстрый способ.

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

1) идем на сайт:  http://www.aiotestking.com/oracle/category/exam-1z0-060-upgrade-to-oracle-database-12c-update-january-30th-2014/ 
и просматриваем там все 150 возможных вопроса. Читаем все комментарии, они помогают понять суть.  Если тема вопроса незнакома, то изучаем в официальной документации Oracle 12 или на специализированных ресурсах, например:  http://oracle-base.com/articles/12c/articles-12c.php 

2) Для желающих я собрал все вопросы в один файл, можете скачать по ссылке:
https://www.dropbox.com/s/0zcks9e3irxffjl/QUESTION%201Z0-060.docx?dl=0
Зеленым я отметил ответы, на которые я уверен на 100 %. Желтым не корректные вопросы, или я не уверен в ответе.

3) На этом сайте совпадает по охвату 100% вопросов с реальным экзаменом. По содержимому вопросы могут отличаться, но незначительно. Например из того, что запомнил, в вопросе:
------------------------
You are about to plug a multi-terabyte non-CDB into an existing multitenant container database (CDB) as a pluggable database (PDB).
The characteristics of the non-CDB are as follows:
– Version:Oracle Database 12c Releases 1 64-bit
– Character set: WE8ISO8859P15
– National character set: AL16UTF16
– O/S: Oracle Linux6 64-bit

The characteristics of the CDB are as follows:
– Version: Oracle Database 12c Release 1 64-bit
– Character set: AL32UTF8
– O/S:OracleLinux 6 64-bit
Which technique should you use to minimize down time while plugging this non-CDB into the CDB?
A.    Transportable database
B.    Transportable tablespace
C.    Data Pump full export / import
D.    The DBMS_PDB package
E.    RMAN


------------------------

Список возможных ответов сократили до :
------------------------
A.    Transportable database
B.    Transportable tablespace
С.    The DBMS_PDB package
D.    RMAN

------------------------

4) Также учтите, что на www.aiotestking.com часть вопросов неправильные, много опечаток. Также часть ответов указана неправильно, это особенность сайта: совместная коллективная работа без модерации ответов. Из-за этого есть вандалы, реклама и т.д. Но большинство вопросов и ответов правильные.

В итоге вы должны самостоятельно правильно отвечать без подсказки на все 150 вопросов с этого сайта. На экзамене вам нужно будет ответить только на 86 вопросов (из 150 представленных на www.aiotestking.com)

Удачи !

26 февраля 2015 г.

Администрирование пользователей в бухгалтерии Парус

Несколько скриптов для облегчения добавления ролей в бухгалтерии "ПАРУС"

  • Смотрим роли по организации:  

    
select RN,ROLENAME from parus.ROLES
  where 
     rolename like '%N219%' and
     rolename not like 'dd%'
  order by rolename   ;

  • Добавление пользователю ролей по списку:  

    
declare
  nrn number;
  cnt pls_integer;
  login_to varchar2(100);
  role_to number;
  type array_t is varray(4) of number;
  array1 array_t := array_t(412675597,14104312,15162844,8115887);
begin
  login_to   := 'USER_LOGIN_TO!!!';
  for i in 1..array1.count loop
    role_to := array1(i);  
      select count(*) into cnt from parus.userroles tt where tt.roleid=role_to and tt.authid=login_to;
      if cnt=0 then  
          parus.P_USERROLES_BASE_INSERT(role_to, login_to, nrn);
      end if;    
  end loop;   
end;

commit;

  • Добавление ролей по названию:  

    
declare
  nrn number;
  cnt pls_integer;
  login_to varchar2(100);
begin
  login_to   := 'USER_LOGIN_TO!!!';
  for i in (select RN,ROLENAME from parus.ROLES where (rolename like '%ДГПкаN110%'  ) and rolename not like 'dd%' order by rolename )
  loop
      select count(*) into cnt from parus.userroles tt where tt.roleid=i.RN and tt.authid=login_to;
      if cnt=0 then  
          dbms_output.put_line('added for '||login_to||'   '||i.ROLENAME);
          parus.P_USERROLES_BASE_INSERT(i.RN, login_to,nrn);
      end if;    
  end loop;   
end;

commit;

  • Копирование всех ролей одного пользователя другому:  

    
declare
  nrn number;
  cnt pls_integer;
  login_from varchar2(100);
  login_to varchar2(100);
begin
  login_from := 'USER_LOGIN_FROM!!!';
  login_to   := 'USER_LOGIN_TO!!!';
  for i in (
    select * from parus.userroles t where t.authid=login_from) loop
      select count(*) into cnt from parus.userroles tt where tt.roleid=i.roleid and tt.authid=login_to;
      if cnt=0 then  
        parus.P_USERROLES_BASE_INSERT(i.roleid,login_to,nrn);
      end if;  
    end loop;
end;

commit;

  • удаление роли:  

    
select t.RN, t.ROLEID,t.AUTHID,r.ROLENAME 
  from parus.userroles t,
       parus.ROLES r 
  where t.ROLEID=r.RN and 
    t.authid='USER_LOGIN_TO!!!'
  order by r.ROLENAME  ;

begin
  PARUS.P_USERROLES_BASE_DELETE(1762104080);
end;  

24 октября 2014 г.

Как установить патч tzdata на Linux в 2014 (переход на зимнее время)

Как установить патч tzdata на Linux


RedHat

1) Скачиваем пакеты: https://www.dropbox.com/s/w0ilea47xh56l0c/rpms.zip?dl=0
2) Смотрим версию RedHat: cat /etc/redhat-release
3) Устанавливаем пакеты: rpm -Uvh *
4) Перестартовать ntp: service ntp restart
5) Проверяем текущую дату и часовой пояс: date

SuSe

1) Скачиваем пакеты: https://www.dropbox.com/s/3b80dmnytg5ttcw/tzdata_Suse.zip?dl=0
2) Устанавливаем пакеты: rpm -Uvh *
3) Перестартовать ntp: service ntp restart
4) Проверяем текущую дату и часовой пояс: date

Ubuntu

sudo sh -c "echo 'deb http://archive.ubuntu.com/ubuntu/ $(lsb_release -cs)-proposed restricted main multiverse universe' >> /etc/apt/sources.list"

sudo apt-get update

sudo apt-get install tzdata

sudo apt-get update && sudo apt-get upgrade

sudo /etc/init.d/ntp restart   (при необходимости sudo apt-get install ntp)

date

http://help.ubuntu.ru/wiki/%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_ubuntu_server/%D1%81%D0%B5%D1%82%D1%8C/ntp

dpkg-reconfigure tzdata

Проверить установку

1) Проверить можно командой: rpm -q tzdata
вывод команды покажет установленную версию, версии равные или
старше 2014f - обновлены, т.е. f,g,h:  tzdata-2014{f|g|h}

2) также, можно проверить командой: cat /etc/localtime
последняя строка в выводе должна быть: "MSK-3"

17 октября 2014 г.

Переход на зимнее время Oracle баз данных в 2014 году

Что делать с базами данных для перехода на зимнее время в 2014 году

Непростое решение: что делать с базами данных для корректного перехода на зимнее время в 2014 году. Особенно если у тебя 150 баз в промышленной эксплуатации. Как ни странно, лучшее решение: ничего не делать :)

Сначала обратимся к первоисточникам:

в России с 2 часов 00 минут 26 октября 2014 года 11 часовых зон. Москвы во 2-й зоне:

" 2-я часовая зона (МСК, московское время, UTC+3): Республика Адыгея, Республика Дагестан, Республика Ингушетия,
 Кабардино-Балкарская Республика, Республика Калмыкия, Карачаево-Черкесская Республика, Республика Карелия, Республика Коми,
 Республика Крым, Республика Марий Эл, Республика Мордовия, Республика Северная Осетия — Алания, Республика Татарстан, Чеченская Республика,
 Чувашская Республика — Чувашия, Краснодарский край, Ставропольский край, Архангельская область, Астраханская область, Белгородская область,
 Брянская область, Владимирская область, Волгоградская область, Вологодская область, Воронежская область, Ивановская область,
 Калужская область, Кировская область, Костромская область, Курская область, Ленинградская область, Липецкая область, Московская область,
 Мурманская область, Нижегородская область, Новгородская область, Орловская область, Пензенская область, Псковская область, Ростовская область,
 Рязанская область, Саратовская область, Смоленская область, Тамбовская область, Тверская область, Тульская область, Ульяновская область,
 Ярославская область, города федерального значения Москва, Санкт-Петербург, Севастополь и Ненецкий автономный округ;"

Документация техподдержки Oracle

Есть подробное описание влияния этого перехода в документе: The Russian Government re-introduces DST in 2014 - Impact on Oracle RDBMS (Doc ID 1907147.1)

Если кратко, то:
есть некая база (база Олсона), хранящая часовые пояса и смещения времени для разных часовых поясов начиная с 1970 г (начало эпохи Unix). Эти данные также хранятся (и обновляются патчем) в базе данных Оракл. Когда происходит изменение смещения (например как в случае с предстоящим изменением на зимнее время в России), эти данные вендор СУБД обновляет из базы Олсона и выпускает в виде патча для БД (в нашем случае Oracle). Если этот патч не применить, то работа с датами и временем содержащим смещения DST приведет к неверным результатам для тех часовых поясов, смещения в которых поменялись.
Если приложения работают исключительно с локальным временем без указания таймзон, то патч на базу можно не ставить, достаточно только патча для ОС.

The "Date" datatype has no timezone information stored, "sysdate" (and "systimestamp") do not use any Oracle provided timezone information. None of these are using in any way Oracle DST patches or Oracle provided DST information. "Sysdate" is purely dependent on the operating system clock, hence it IS depending on the timezone information of this operating system and/or the operating system "TZ" variable settings when the database and listener where started (!!!).

Т.е. если используются для хранения дат и времени типы без таймзоны, то они никак не используют оракловый патч с таймзонами и DST.
Зато если в базе используется TimeStamp with Time Zone то придется ставить патч и тестировать. Вот этот патч: «Patch 19396455: DST-23: DST UPDATE SEPTEMBER 2014 - TZDATA2014F» К сожалению этот патч выпустили не на все версии Oracle, например для 11.2.0.2 уже нет патча.

В шедулере базы Oracle, к сожалению, используется TimeStamp with Time Zone, поэтому щедулер возможно собъёться на один час 26 октября, поэтому разработчикам нужно будет проверить свои задания и  выставить нужное смещение (а не именованную тайм зону). Надо это не забыть сделать 26 октября.

Также желательно обновить Java на все серверах, применить TZupdater tool с tzdata2014f

Текущее состояние

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

select from_tz(timestamp '2013-10-01 1:00:00','UTC') at time zone 'Europe/Moscow' tz from dual
 union all
 select from_tz(timestamp '2013-11-26 1:00:00','UTC') at time zone 'Europe/Moscow' tz from dual
 union all
 select from_tz(timestamp '2014-10-25 1:00:00','UTC') at time zone 'Europe/Moscow' tz from dual
 union all
 select from_tz(timestamp '2014-10-26 1:00:00','UTC') at time zone 'Europe/Moscow' tz from dual
 union all
 select from_tz(timestamp '2015-07-26 1:00:00','UTC') at time zone 'Europe/Moscow' tz from dual
 union all
 select from_tz(timestamp '2015-10-29 1:00:00','UTC') at time zone 'Europe/Moscow' tz from dual;
-----------------------------------
TZ
01/10/2013 5:00:00.000000000 +04:00
26/11/2013 4:00:00.000000000 +03:00
25/10/2014 5:00:00.000000000 +04:00
26/10/2014 4:00:00.000000000 +03:00
26/07/2015 5:00:00.000000000 +04:00
29/10/2015 4:00:00.000000000 +03:00
-----------------------------------

Вот и первый сюрприз: база в 2013, 2014, 2015 годах переводит время на зимнее и на летнее время. То есть она не знает, что в 2011 году мы в России отменили переход на зимнее время. Как же так ? Проверяем версию тайм-зоны:
SELECT version FROM v$timezone_file;
-----------------------------------
14
-----------------------------------

Так и есть, во всех установленных базах Oracle, версий 10, 11, 12 стоит версия таймзон (база Олсона) от 2010 года! У нас никто не ставил патч 7695070 от 2011 года. А Oracle не включил в свои дистрибутивы новую версию базы Олсона, как ни странно, весь остальной мир не меняет свои часовые пояса раз в 3 года, скучно живут. 
Получается что у нас Oracle неправильно работал с часовыми поясами в полях типа "*with Time Zone" последние 3 года, никто об этом не догадался, или никто такие поля не использует. 

Поэтому лучший вариант для нас: ничего не трогать. 26 октября базы сами перейдут на зимнее время, ничего менять не нужно, все будет работать правильно. К тому же большинство разработчиков использует простые типы полей, баз тайм зон, для них вообще ничего не меняется, в их случае база берет дату из операционной системы. То есть достаточно на OS установить патч.
Но следующей весной базы опять сами сменят даты на летнее время (смещение 4 часа от UTC), это может вызвать проблемы для тех кто использует время с тайм зонами!

Вообще летнее и зимнее время - это вопрос философский, важно смещение от UTC. С 26 октября мы в России должны получать смещение 3 часа от UTC навечно (или пока правительству не надоест). Следующей весной непропатченные базы Oracle автоматом сменят смещение на 4 часа от UTC, что неправильно.

4) Если мы все таки решили исправить такое поведение баз Oracle. Краткая инструкция что нужно делать:
- Обновляем OPatch
- Обновляем базу минимум до версии 11.2.0.3
- Ставим патч 19396455: DST-23 (остановка базы не требуется)
- Обновляем базу данных, выполняем скрипт: Scripts to automatically update the RDBMS DST (timezone) version in an 11gR2 or 12cR1 database . (Doc ID 1585343.1) Эти скрипты автоматически перегрузят базу данных 2 раза! 
- Проверяем: 
 SELECT version FROM v$timezone_file;
----------
        23
----------
Видно что тайм зона теперь 23 версии.

SQL> select from_tz(timestamp '2013-10-01 1:00:00','UTC') at time zone 'Europe/Moscow' tz from dual
  2   union all
  3   select from_tz(timestamp '2013-11-26 1:00:00','UTC') at time zone 'Europe/Moscow' tz from dual
  4   union all
  5   select from_tz(timestamp '2014-10-25 1:00:00','UTC') at time zone 'Europe/Moscow' tz from dual
  6   union all
  7   select from_tz(timestamp '2014-10-26 1:00:00','UTC') at time zone 'Europe/Moscow' tz from dual
  8   union all
  9   select from_tz(timestamp '2015-07-26 1:00:00','UTC') at time zone 'Europe/Moscow' tz from dual
 10   union all
 11   select from_tz(timestamp '2015-10-29 1:00:00','UTC') at time zone 'Europe/Moscow' tz from dual;

TZ
---------------------------------------------------------------------------
01-OCT-13 05.00.00.000000000 AM EUROPE/MOSCOW
26-NOV-13 05.00.00.000000000 AM EUROPE/MOSCOW
25-OCT-14 05.00.00.000000000 AM EUROPE/MOSCOW
26-OCT-14 04.00.00.000000000 AM EUROPE/MOSCOW
26-JUL-15 04.00.00.000000000 AM EUROPE/MOSCOW
29-OCT-15 04.00.00.000000000 AM EUROPE/MOSCOW

Видно что смещение от UTC теперь 3 часа с 26 октября 2014 года постоянно.

5) Обновление JAVA машин. На серверах приложений с Weblogic, BI, Cloud Control обязательно.
Краткая инструкция по обновлению java :
- cd /u01/distr/tzupdater
- unzip tzupdater-1_4_8-2014h.zip 
- cd tzupdater-1.4.8-2014h/
- /u01/app/oracle/product/11203/dbhome_1/jdk/bin/java  -jar tzupdater.jar -u
- /u01/app/oracle/product/11203/dbhome_1/jdk/jre/bin/java  -jar tzupdater.jar -u
- Проверка:
/u01/app/oracle/product/11203/dbhome_1/jdk/bin/java  -jar tzupdater.jar -V
/u01/app/oracle/product/11203/dbhome_1/jdk/jre/bin/java  -jar tzupdater.jar -V
- Результат обеих команд должен содержать строку:
tzupdater version 1.4.8-b01
JRE time zone data version: tzdata2014h
Embedded time zone data version: tzdata2014h





17 апреля 2014 г.

Установка «Oracle Enterprise Manager 12c» с базой Oracle DB 12c


  За последний год несколько раз устанавливал Oracle Enterprise Manager, всегда натыкался на какие-нибудь проблемы. По количеству ошибок эта программа у меня на 1-м месте, установить с 1-го раза практически невозможно.

  В очередной раз устанавливал Oracle Enterprise Manager для заказчиков. Скачал последнюю версию, с обнадёживающим названием: «Oracle Enterprise Manager Cloud Control 12c Release 3 Plug-in Update 1 (12.1.0.3) New!». В компании Oracle знают свою репутацию надежности своих программ, поэтому  заманивают клиентов магическими словами: «Release 3» (уже 3-я версия), «Update 1» (это не бета-версия), «12.1.0.3» (здесь 0.3 в конце, версии с 0.0 никто для реальной работы не будет скачивать).

  Для хранения репозитория я решил использовать базу Oracle 12c. В конце года заканчивается официальная поддержка базы версии 11.2, нужно будет переходить на версию 12. Я подумал, что хватит версии Oracle 12с простаивать на тестовых стендах, пора и в бою себя показать. 

  Создал новую PDB (подключаемую базу). Запустил установку OEM. С 5-й попытки установка завершилась успешно. Как обычно потребовались танцы с бубном. Самую большую проблему для меня вызвало аварийное завершение на шаге «OMS сonfiguration». Ключевые слова в логах:


INFO: oracle.sysman.top.oms:The plug-in OMS Configuration has failed its perform method

SEVERE: Failed executing oracle.sysman.omsca.util.RegisterPostRepSchemaMetadata unable to look up name "jdbc/mds/owsm" in JNDI context

oracle.sysman.top.oms:OMSCA-ERR:Post deploy operations failed. Check the trace file

install weblogic "PolicyManagerValidator" failed to preload on startup in Web application: "/wsm-pm".


  Поиск в интернете решения не нашел. Затрудняло анализ, то что программа установки после этой ошибки удаляла сконфигурированный инстанс weblogic-сервера вместе с логами. Пришлось несколько раз запускать установку, сохранять логи. После изучения проблемы была найдена причина: сессия в базе данных от weblogic-сервера аварийно завершалась с ошибкой ORA-7445:

Exception [type: SIGSEGV, SI_KERNEL(general_protection)] [ADDR:0x0] [PC:0x22BAA34, kzrtevw()+9988] [flags: 0x0, count: 1]
Errors in file /u01/app/oracle/diag/rdbms/emcdb/emcdb/trace/emcdb_ora_36611.trc  (incident=7581):
ORA-07445: core dump [kzrtevw()+9988] [SIGSEGV] [ADDR:0x0] [PC:0x22BAA34] [SI_KERNEL(general_protection)] []

Падение базы вызывал такой SQL запрос:

SELECT COUNT(*) FROM all_objects WHERE object_name = 'EM_UPG_DESUPPORTED_PLUGINS' AND object_type = 'TABLE'AND 0 = (SELECT COUNT(*) FROM gc_current_deployed_plugin WHERE plugin_id = 'oracle.sysman.db' AND destination_type = 'Repository');

На сайте техподдержки support.oracle.com нашел статью с описанием этой ошибки: Bug 4618715 - Dump inserting into a view with OLS policy on tables (Doc ID 4618715.8). Первый раз эта ошибка была обнаружена в 2005 году в версии базы oracle db 9, затем всплывала в версии 10, затем в 11. Каждый раз помечено, что баг исправлен. В моем случае этот баг всплыл в версии 12. Официального метода исправления ошибки от oracle нет. Я установил последний пакет с исправлениями: Patch 17552800 DATABASE PATCH SET UPDATE 12.1.0.1.2, в нем этот баг не исправился. Oracle Label security (OLS) у меня уже был отключен. 

  Я сделал несколько экспериментов и нашел такой workaround: нужно вручную отключить политики OLS у всех таблиц, участвующих в запросе. Т.е. смотрим проблемный SQL запрос, находим таблицы входящие в запрос, и отключаем у всех таблиц все политики. В нашем случае представление gc_current_deployed_plugin ссылается на 4 таблицы, у одной из них есть политики, отключаем так:

BEGIN
SYS.DBMS_RLS.DROP_POLICY('SYSMAN', 'EM_MANAGEABLE_ENTITIES', 'TARGET');
END;

Сделать это нужно в середине инсталляции EM12, когда таблицы репозитория уже созданы, но установщик еще не дошел до шага конфигурации OMS сервера. В итоге успешно заканчиваем инстилляцию.


  К сожалению этот эксперимент показал, что версия oracle db 12c еще "сырая" и в продакшн ей выходить еще рано. Ждем 1-го сервис-пака.

5 октября 2013 г.

Oracle Net

Недавно узнал что Oracle листенер на одиночном сервере базы данных (не RAC) по умолчанию слушает все сетевые интерфейсы. Для этого достаточно в конфигурационном файле listener.ora указать имя сервера, например

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = setebos)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

Имя хоста:

oracle> hostname
setebos

oracle> cat /etc/hosts
10.127.120.129  setebos.dit.ru setebos

Проверяем:
oracle> ifconfig
bond0.1742          inet addr:10.127.120.129
bond0.2630          inet addr:172.16.8.1  Bcast:172.16.8.63  Mask:255.255.255.192
usb0               inet addr:169.254.95.120  Bcast:169.254.95.255  Mask:255.255.255.0

В файле /etc/hosts указан адрес 10.127.120.129, но слушаются все IP адреса:

setebos:/oracle> nmap 10.127.120.129
1521/tcp open  oracle

setebos:/oracle> nmap 172.16.8.1
1521/tcp open  oracle

setebos:/oracle> nmap 169.254.95.120
1521/tcp open  oracle

На сервере RAC слушается только указанный сетевой интерфейс.

12 сентября 2013 г.

Oracle Golden Gate на Oracle Rac

При настройке настройке процесса Extract на кластерной базе столкнулся с ошибками:

1)
The number of Oracle redo threads (4) is not the same as the number of
checkpoint threads (1). EXTRACT groups on RAC systems should be created
with the THREADS parameter

Нужно добавить опцию threads
- Delete the extract
delete extract testext

- Recreate the extract
add extract testext, tranlog, threads 2, begin now
add <exttrail/rmttrail> <path>, extract testext

- Start the extract
start extract testext

2) На сервере с 2-мя узлами при старте выдается ошибка:
WARNING OGG-01423  No valid default archive log destination directory found for thread 4.
WARNING OGG-01423  No valid default archive log destination directory found for thread 3.

Нужно удалить лишние потоки в active redo log

alter database disable thread 3;
alter database disable thread 4;

ALTER DATABASE DROP LOGFILE GROUP 7;
ALTER DATABASE DROP LOGFILE GROUP 8;
ALTER DATABASE DROP LOGFILE GROUP 5;
ALTER DATABASE DROP LOGFILE GROUP 6;

3) Создание пользователя в ASM инстансе:
CREATE USER asm_user IDENTIFIED by XXX;
GRANT SYSASM TO asm_user;  
GRANT sysdba TO asm_user;

Проверка:
sqlplus asm_user@ORCL_ASM as sysasm

Добавляем в файл параметров
TranLogOptions ASMUser asm_user@ORCL_ASM, asmpassword XXX

23 апреля 2013 г.

Oracle Web Services Manager Gateway Is Slow


На московском узле портала gosuslugi.ru стал зависать сервер с Oracle Web Services Manager

Нашел подходящую статью с описанием:
Oracle Web Services Manager Gateway Is Slow And Causes Locks [ID 967020.1]


Для исправления нужно создать 2 индекса и очистить пул:

CREATE INDEX orawsm.IDX_MPSTORE_TEST_1 ON orawsm.MEASUREMENT_PERSISTED_STORE (STORETIME) LOGGING TABLESPACE USERS NOPARALLEL;
       
CREATE INDEX orawsm.IDX_pipeline_TEST_1 ON orawsm.PIPELINES (policy_id, pipeline_status,pipeline_major_ver, pipeline_minor_ver ) LOGGING TABLESPACE USERS NOPARALLEL;

alter system flush shared_pool;

5 февраля 2013 г.

Ошибка TNS-12555: TNS:permission denied



При старте листенера на одном из серверов получил ошибку:

Starting /opt/oracle/product/11.2.0/dbhome_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 11.2.0.1.0 - Production
System parameter file is /opt/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Log messages written to /opt/oracle/diag/tnslsnr/asur-nsi-db-02/listener/alert/log.xml
Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
TNS-12555: TNS:permission denied
 TNS-12560: TNS:protocol adapter error
  TNS-00525: Insufficient privilege for operation
   Linux Error: 1: Operation not permitted

Listener failed to start. See the error message(s) above...

В интернете нашел, что  причина в каталоге /var/tmp/.oracle

Для проверки:

ls -la /var/tmp/.oracle
total 44
drwxrwxrwt 2 root   oracle 4096 Feb  5 15:44 .
drwxrwxrwt 3 root   root   4096 Mar 22  2012 ..
srwxrwxrwx 1 oracle oracle    0 Mar 22  2012 s#12914.1
srwxrwxrwx 1 oracle oracle    0 Mar 22  2012 s#12914.2
srwxrwxrwx 1 oracle oracle    0 Mar 22  2012 s#13198.1
srwxrwxrwx 1 daemon root      0 May 14  2012 s#16174.1
srwxrwxrwx 1 daemon root      0 May 14  2012 s#16174.2
srwxrwxrwx 1 daemon root      0 Apr  2  2012 s#18732.1
srwxrwxrwx 1 daemon root      0 Apr  2  2012 s#18732.2
srwxrwxrwx 1 daemon root      0 Mar 22  2012 s#4741.1
srwxrwxrwx 1 daemon root      0 Apr 11  2012 s#7507.2
srwxrwxrwx 1 daemon root      0 Oct  6 12:45 sEXTPROC1
srwxrwxrwx 1 oracle oracle    0 Mar 22  2012 sEXTPROC1521

Как видно, несколько файлов имеют владельцем другую группу.
Для исправления:
chown -R oracle:oracle /var/tmp/.oracle