7 августа 2015 г.

Исправлена ошибка при установке Oracle RAC

  Некоторое время назад пытался установить кластерную БД 12-й версии. Но не удалось, во время выполнения root.sh получал странную ошибку:
ROOT.SH FAILED: PRIF-15: INVALID FORMAT FOR SUBNET
Исправления в то время не нашел, пришлось установить кластерное ПО предыдущей (11-й) версии.

  Недавно получил новую заявку на установку кластерной базы. При установке опять получил подобную ошибку. Как выяснилось, такой сбой происходит при установке кластерного ПО версии 12.1.0.2 на некоторых валидных IP адресах. В моем случае, если IP адрес содержит число 255 в любом октете, то установка не проходила (адрес вроде: 10.255.255.ххх). Oracle недавно признал баг: 
"ROOT.SH FAILED: PRIF-15: INVALID FORMAT FOR SUBNET", и выпустил патч: 19777496

Я составил инструкцию, как можно устанавливать кластерное ПО с такими патчами:

1) Запускаем установку кластерного ПО и перед выполнением root.sh устанавливаем нужный патч на всех узлах кластера:
  • копируем патч в to /u01/patch 
  • chown -R oracle:dba /u01/patch/ 
  • копируем и распаковываем новый OPatch 
  • с правами пользователя oracle запускаем установку патча: /u01/crs/12.1.0/grid/OPatch/opatch napply -oh /u01/crs/12.1.0/grid -local /u01/patch/19777496/19777496
Затем запускаем root.sh на всех узлах и как обычно заканчиваем установку кластерного ПО.

2) Если нужно будет позже установить PSU, то удалите этот патч, в дальнейшем он мешает установке некоторых обновлений, для этого выполните команды:
  • srvctl stop home -o /u01/crs/12.1.0/grid -s /u01/patch/111 -n emias-db-rac01 
  • /u01/crs/12.1.0/grid/crs/install/rootcrs.pl -prepatch 
  • opatch rollback -local -id 19777496 -oh /u01/crs/12.1.0/grid 
  • /u01/crs/12.1.0/grid/rdbms/install/rootadd_rdbms.sh /u01/crs/12.1.0/grid/crs/install/rootcrs.pl -postpatch 
3) Установите последний PSU на всех узлах кластера:
  • create rsp file /u01/crs/12.1.0/grid/OPatch/ocm/bin/emocmrsp -no_banner -output /u01/patch/grid_config.rsp 
  • opatchauto apply /u01/patch/20996835 -oh /u01/crs/12.1.0/grid -ocmrf /u01/patch/grid_config.rsp
4) После этого можно копировать базы данных.

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;