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

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) После этого можно копировать базы данных.

13 августа 2013 г.

Переподключение дисков в ASM через multipath

Проблема: диски в ASM примонтированы напрямую, не используя multipath.

Нужно отмонтировать диски а ASM с одного пути, например /dev/sdc, и примонтировать к другому, например к /dev/dm-1

Для примера:

1)
ls -al /dev/oracleasm/disks/

brw-rw---- 1 oracle oinstall 8, 16 Jul  2 15:12 DISK1
brw-rw---- 1 oracle oinstall 8, 32 Jul  2 15:12 DISK2

Видно что диски примонтированы напрямую, не через  multipath (цифра 8)

2)
Должно быть:
ls -al /dev/oracleasm/disks/

brw-rw---- 1 oracle oinstall 253, 8 May 20 14:40 DISK1
brw-rw---- 1 oracle oinstall 253, 9 May 20 14:40 DISK2

Вместо 8 стоит 253, значит  диски примонтированы правильно (через multipath )

3)
Для определения, к какому multipath относится DISK1:
multipath -ll | less

далее в этом списке ищем устройство с этими major minor номерами.
То есть 8:16. Для поиска можно просто в строке приглашения less набрать /8:16
Имеем например: 0:0:0:5  sdb  8:16   [active][ready], а принадлежит он mpath1.
Путь к нему будет: /dev/mapper/mpath1

4)
Определяем пути, к которым подключены диски:
/etc/init.d/oracleasm listdisks
DISK1
DISK2
DISK3
DISK4

ls -al /dev/oracleasm/disks/
total 0
drwxr-xr-x 1 root   root         0 Jun 25 18:47 .
drwxr-xr-x 4 root   root         0 Jun 25 18:47 ..
brw-rw---- 1 oracle oinstall 8, 48 Jul  3 16:58 DISK1
brw-rw---- 1 oracle oinstall 8, 64 Jul  3 16:58 DISK2
brw-rw---- 1 oracle oinstall 8, 80 Jul  3 16:58 DISK3
brw-rw---- 1 oracle oinstall 8, 96 Jul  3 16:58 DISK4

/etc/init.d/oracleasm querydisk -v -d DISK1
Disk "DISK1" is a valid ASM disk on device /dev/sdd[8,48]

Так смотрим по всем дискам, в итоге составляем таблицу соответствий:
------------------------------------------------------------------
| DISK1    sdd  mpath6        dm-8
| DISK2    sde  mpath3        dm-3
| DISK3    sdf   mpath4        dm-4  
| DISK4    sdg  mpath5        dm-5
------------------------------------------------------------------

5) В ASM
SQL>  select g.name "Group", d.name "Disk", d.mode_status "Status" from v$asm_disk d, v$asm_diskgroup g where d.group_number = g.group_number;

Group                          Disk                           Status
------------------------------ ------------------------------ -------
DATA                           DATA_0002                      ONLINE
FLASH                          FLASH_0000                     ONLINE
DATA                           DATA_0001                      ONLINE
DATA                           DATA_0000                      ONLINE


SQL> show parameter asm_diskstring

asm_diskstring                       string      /dev/oracleasm/disks

SQL> select GROUP_NUMBER, DISK_NUMBER, MODE_STATUS, STATE, NAME, PATH from v$asm_disk;
           1           2 ONLINE  NORMAL   DATA_0002  /dev/oracleasm/disks/DISK4

           2           0 ONLINE  NORMAL   FLASH_0000 /dev/oracleasm/disks/DISK3

           1           1 ONLINE  NORMAL   DATA_0001   /dev/oracleasm/disks/DISK2

           1           0 ONLINE  NORMAL   DATA_0000  /dev/oracleasm/disks/DISK1


6)  Удаление:

ALTER DISKGROUP FLASH DROP DISK FLASH_0000;

7) Отмонтируем:
ASMCMD> umount FLASH

DROP DISKGROUP FLASH INCLUDING CONTENTS;

8) Удаляем:
/etc/init.d/oracleasm deletedisk DISK3
Deleting Oracle ASM disk "VOL1" [ OK ]

9) Если не удаляется, то чистим заголовок диска:
-- Сохраняем заголовок диска в файл
dd if=/dev/sdf of=file_sdf bs=1024 count=100
dd if=/dev/sdf of=file_sdf3 bs=1024 count=100

-- Обнуление диска для возможности его удалить
dd if=/dev/zero of=/dev/sdf bs=1024 count=100

-- Удаляем с /etc/init.d/oracleasm deletedisk, если и сейчас не получится, то перезагружаем хост
-- Восстанавливаем заголовок диска:
dd if=file_sdf of=/dev/sdf  bs=1024 count=100

10) Создаем
/etc/init.d/oracleasm createdisk DISK3 /dev/dm-4

11) Добавляем параметр EXCLUDE в /etc/sysconfig/oracleasm
ORACLEASM_SCANEXCLUDE="sd"

12)
/etc/init.d/oracleasm scandisks


29 января 2013 г.

Удаление архивных логов


Настроил несколько standby серверов, после этого появилась проблема с удалением архивных логов Oracle.

По официальной документации делаем так:
- настроить архивирование логов с помощью rman
- настроить  RETENTION POLICY
- включить mandatory для передачи архивных логов
- затем удалять логи с помощью
backup archivelog all delete input;
- на standby сервере можно использовать что-то вроде
delete archivelog all completed before 'sysdate';
или
delete archivelog until time ‘SYSDATE-10';

Этот вариант мне не подошел, пришлось удалять все логи вручную с помощью скриптов:

#!/bin/bash

echo "start ..."

. /home/oracle/scripts/oraenv.sh

export NLS_DATE_FORMAT="DD-MON-RRRR HH24:MI:SS"
export TODAY=`date '+%Y%m%d'`
export TIME=`date '+%H%M%S'`

echo "step 2 ..."


cd /home/oracle/scripts

rm /home/oracle/scripts/1.tmp

sqlplus -s / as sysdba << EOF
set heading off
set pages 0 echo off feedback off
spool /home/oracle/scripts/1.tmp
select max(sequence#)-10 from v\$archived_log where dest_id=5 and thread#=1 and standby_dest='YES' and applied ='YES';
spool off;
exit;
EOF

echo "step 3 ..."

seq1=`cat /home/oracle/scripts/1.tmp | awk 'NR==1{print $1}'`

echo "step 4 ..."
echo "seq1 = $seq1"


echo $seq1
echo "delete noprompt archivelog until sequence $seq1 thread 1;"

rman msglog /home/oracle/scripts/PRIMARY_ARC_DEL.${TODAY}_${TIME}.log << EOF
connect target /
run{
delete noprompt archivelog until sequence $seq1 thread 1;
}
EOF

echo "done ..."


exit


22 января 2013 г.

Краткая инструкция по установке Standby сервера


ON PRIMARY

1) Прописать на каждом из 3-х узлов в /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora

DOCSTB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = xxxxxxxxxx)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = docstb)
    )
  )

DOC =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = xxxxxxxxxxxxx)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = doc)
    )
  )

ON STANDBY

2) Прописать тоже самое, что и в пункте 1 

3) Прописать статический листенер в /u01/app/oracle/product/11.2.0/grid/network/admin/listener.ora  , чтобы мы могли удаленно подсоединиться к базе в состоянии nomount

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME=docstb)
      (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME = docstb)
    )
  )


ON PRIMARY

4) Скопировать файл паролей с одного из узлов на стендбай и переименовать его в orapwdocstb


ON STANDBY

5) Создаём audit trail директорию в $ORACLE_BASE/admin

cd /u01/app/oracle/admin
mkdir docstb
cd docstb
mkdir adump

6) Создаём файл параметров initdocstb.ora в директории /u01/app/oracle/product/11.2.0/dbhome_1/dbs/

db_name=docstb

7) Устанавливаем ORACLE_SID=docstb и запускаем базу в режиме nomount

startup nomount

ON PRIMARY

8) Выполняем команды

alter system set log_archive_config='DG_CONFIG=(doc,docstby,docstb)';
alter system set log_archive_dest_3='SERVICE=DOCSTB VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=docstb';
alter system set log_archive_dest_state_3=enable;


9) Создаем скрипт standby.sql

run {
     allocate channel doc type disk;
     allocate auxiliary channel docstb type disk;
     duplicate target database for standby
     from active database
spfile
     set cluster_database='FALSE'
     set user_dump_dest='/u01/app/oracle/diag/rdbms/docstb/trace'
     set core_dump_dest='/u01/app/oracle/diag/rdbms/docstb/cdump'
     set background_dump_dest='/u01/app/oracle/diag/rdbms/docstb/trace'
     set audit_file_dest='/u01/app/oracle/admin/docstb/adump'
     set db_create_file_dest='+STBY'
     set db_recovery_file_dest='+STBY'
     set db_recovery_file_dest_size='300G'
     set local_listener=''
     set remote_listener=''
     set service_names='docstb'
     set db_unique_name='docstb'
     set db_file_name_convert='+DATA','+STBY'
     set log_file_name_convert='+DATA','+STBY'
     set control_files='+STBY/docstb/controlfile/docstb.ctl'
     set log_archive_max_processes='5'
     set fal_client='docstb'
     set fal_server='doc'
     set standby_file_management='AUTO'
     set log_archive_config='DG_CONFIG=(doc,docstb)'
     set log_archive_dest_2='SERVICE=DOC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=doc';
     }

10) Запускаем скрипт на одном из узлов

rman target sys/xxxxxxx
connect auxiliary sys/xxxxxxxxxxx@docstb
@/u01/app/oracle/product/11.2.0/dbhome_1/dbs/standby.sql

ON STANDBY

11)
alter database recover managed standby database using current logfile disconnect from session;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
alter database open read only;
alter database recover managed standby database using current logfile disconnect from session;

alter system set dg_broker_start=TRUE;


ON PRIMARY

12)

dgmgrl> connect sys/******
dgmgrl> add database docstb as  connect identifier is docstb;
 dgmgrl> enable configuration;

14 января 2013 г.

Небольшая инструкция использования ASM без asmlib


В версии red hat 6.3 не поддерживается asmlib. 
Инструкция сделана на основе документа во вложении Configure RAW on ASM.docx

On first node

1) # fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or
OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected
by w(rite)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-522, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-522, default 522):
Using default value 522

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.


2) # cat /proc/partitions  -- проверяем создание партиции
major minor  #blocks  name

   8        0  104857600 sda
   8        1     512000 sda1
   8        2   74984448 sda2
   8       16  524288000 sdb
   8       17  524281243 sdb1
253        0   35745792 dm-0
253        1   16777216 dm-1
253        2   22458368 dm-2

3) Open /etc/udev/rules.d/60-raw.rules and put these lines there for all disks

ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"


ACTION=="add", KERNEL=="raw*", OWNER=="oracle", GROUP=="oinstall",  MODE=="0660"


3) Run following commands to bound raw disks:
# /bin/raw /dev/raw/raw1 /dev/sdb1

4) Starting udev
# start_udev


ON second node

1) # /sbin/partprobe  --обновляет /proc/partitions

2) Run following commands to bound raw disks:
# /bin/raw /dev/raw/raw1 /dev/sdb1

3) Starting udev
# start_udev

Недостатки:
К сожалению, при такой конфигурации не работает часть функционала ASM, например ACFS:

ASMCMD> volcreate -G data -s 1G  volume_test
ORA-15032: not all alterations performed
ORA-15490: not all instances could add/drop the volume (DBD ERROR: OCIStmtExecute)


4 января 2013 г.

файлы конфигураций dgmgrl


В среде Oracle RAC по документации Oracle файлы конфигураций dgmgrl нужно создавать на shared диске. Но по умолчанию эти файлы лежат на локальных дисках.

У меня это влияет на то, что после перезагрузки одного узла RAC иногда он перестает отправлять данные на standby сервер, иногда теряет конфигурацию.

Лечится это так:
Asmcmd:
cp /u01/app/oracle/product/11.2.0/dbhome_1/dbs/dr1dst.dat +DATA/dr1dst.dat
cp /u01/app/oracle/product/11.2.0/dbhome_1/dbs/dr2dst.dat +DATA/dr2dst.dat

sqlplus:
ALTER SYSTEM SET DG_BROKER_START=FALSE;
ALTER SYSTEM SET DG_BROKER_CONFIG_FILE1='+DATA/ dr1dst.dat' SCOPE=BOTH sid='*';
ALTER SYSTEM SET DG_BROKER_CONFIG_FILE2='+DATA/ dr2dst.dat' SCOPE=BOTH sid='*';
ALTER SYSTEM SET DG_BROKER_START=TRUE;

26 декабря 2012 г.

Ошибка при старте кластера


После сбоя на дисковом массиве, упал кластер

При старте crsd демон не находил ocr файлов, которые были размещены в дисковой группе DATA

2012-12-22 10:48:21.774: [UiServer][1157368128] {0:0:122} Done for ctx=0x2aaab80c4460
2012-12-22 10:48:24.021: [    AGFW][1144760640] {0:5:21} Agfw Proxy Server received the message: RESOURCE_STATUS[Proxy] ID 20481:44752
2012-12-22 10:48:24.021: [    AGFW][1144760640] {0:5:21} Received state LABEL change for ora.asm 1 1 [old label  = Startup Initiated, new label = OCR not started]
2012-12-22 10:48:24.021: [    AGFW][1144760640] {0:5:21} Agfw Proxy Server sending message to PE, Contents = [MIDTo:2|OpID:3|FromA:{Invalid|Node:0|Process:0|Type:0}|ToA:{Invalid|Node:-1|Process:-1|Type:-1}|MIDFrom:0|Type:4|Pri2|Id:7067:Ver:2]
2012-12-22 10:48:24.021: [    AGFW][1144760640] {0:5:21} Agfw Proxy Server replying to the message: RESOURCE_STATUS[Proxy] ID 20481:44752
2012-12-22 10:48:24.021: [   CRSPE][1155266880] {0:5:21} State change received from isur-db-01 for ora.asm 1 1
2012-12-22 10:48:24.021: [   CRSPE][1155266880] {0:5:21} Processing PE command id=129. Description: [Resource State Change (ora.asm 1 1) : 0x2aaaac178c90]
2012-12-22 10:48:24.021: [   CRSPE][1155266880] {0:5:21} Set State Details to [OCR not started] from [ Startup Initiated] for [ora.asm 1 1]
2012-12-22 10:48:24.021: [   CRSPE][1155266880] {0:5:21} PE Command [ Resource State Change (ora.asm 1 1) : 0x2aaaac178c90 ] has completed
2012-12-22 10:48:24.022: [    AGFW][1144760640] {0:5:21} Agfw Proxy Server received the message: CMD_COMPLETED[Proxy] ID 20482:7068
2012-12-22 10:48:24.022: [    AGFW][1144760640] {0:5:21} Agfw Proxy Server replying to the message: CMD_COMPLETED[Proxy] ID 20482:7068
2012-12-22 10:48:24.022: [    AGFW][1144760640] {0:5:21} Agfw received reply from PE for resource state change for ora.asm 1 1
~

[root@isur-db-01 ohasd]# /u01/app/11.2.0/grid/bin/ocrcheck
PROT-602: Failed to retrieve data from the cluster registry
PROC-26: Error while accessing the physical storage



ocrconfig_loc=+DATA


Нет дисковой группы +DATA

SQL> select NAME from v$asm_diskgroup;

no rows selected

SQL> select disk_number, name from  v$asm_disk;

DISK_NUMBER NAME
----------- ------------------------------
          1
          0
SQL> select NAME , STATE FROM V$ASM_DISKGROUP;

no rows selected


[root@isur-db-01 ~]# /etc/init.d/oracleasm listdisks
DISK1
DISK2


SQL> select TOTAL_MB from v$asm_disk;

  TOTAL_MB
----------
         0
         0



SQL> shutdown immediate
ORA-15100: invalid or missing diskgroup name

SQL> startup
ORA-32004: obsolete or deprecated parameter(s) specified for ASM instance
ASM instance started

Total System Global Area  283930624 bytes
Fixed Size                  2227664 bytes
Variable Size             256537136 bytes
ASM Cache                  25165824 bytes
ORA-15032: not all alterations performed
ORA-15017: diskgroup "DATA" cannot be mounted
ORA-15063: ASM discovered an insufficient number of disks for diskgroup "DATA"

Диски в дисковой группе DATA имеют статус PROVISIONED


SQL> select HEADER_STATUS,name from v$asm_disk;

HEADER_STATU NAME
------------ ------------------------------
PROVISIONED
PROVISIONED



/u01/app/11.2.0/grid/bin/kfed read /dev/oracleasm/disks/DISK1


kfdhdb.acdb.ub2spare:     43605 ; 0x1de: 0xaa55

В этом случае восстанавливать нужно по ноте Mounting Diskgroup Fails With ORA-15063 and V$ASM_DISK Shows PROVISIONED [ID 1487443.1]

На обоих серверах. На первом:

dd if=/dev/oracleasm/disks/DISK1 of=/tmp/DISK1.dd bs=1M count=1

 /u01/app/11.2.0/grid/bin/kfed read /dev/oracleasm/disks/DISK1 |grep ausize
kfdhdb.ausize:                  1048576 ; 0x0bc: 0x00100000


/u01/app/11.2.0/grid/bin/kfed repair /dev/oracleasm/disks/DISK1 aus=1048576

На втором:

/u01/app/11.2.0/grid/bin/kfed read /dev/oracleasm/disks/DISK2 |grep ausize


dd if=/dev/oracleasm/disks/DISK2 of=/tmp/DISK2.dd bs=1M count=1

/u01/app/11.2.0/grid/bin/kfed repair /dev/oracleasm/disks/DISK2 aus=1048576


После этого asm смог смонтировать дисковую группу +DATA и кластер поднялся на обоих серверах.

12 ноября 2012 г.

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



  • INS-41321

При установке Oracle Grid получил сообщение об ошибке:
[FATAL] [INS-41321] Invalid Oracle Cluster Registry (OCR) location.
CAUSE: The installer detects that the storage type of the location (/cmsstgdb/crs/ocr/ocr1) is not supported for Oracle Cluster Registry.
ACTION: Provide a supported storage location for the Oracle Cluster Registry.

Причина в неправильных настройках одного из общих дисков. В моем случае примонтированный по NFS диск. Oracle ожидает следующие параметры в /etc/fstab:

"rw,hard,rsize>=32768,wsize& gt;=32768,proto=tcp |tcp,vers=3|nfsvers=3|nfsv3|v3,timeo>=600, acregmin=0&acregmax=0&acdirmin=0& amp;acdirmax=0|actimeo=0"

В итоге добавил такую строку:

host_nfs_server:/u02/oracle_db/shared_config  /u01/shared_config  nfs  rw,vers=3,rsize=32768,wsize=32768,acregmin=0,acregmax=0,acdirmin=0,acdirmax=0,hard,proto=tcp,timeo=600,retrans=2,sec=sys  0 0


  • Fail to connect

[  clsdmc][2529904384]Fail to connect (ADDRESS=(PROTOCOL=ipc)(KEY=host1DBG_MDNSD)) with status 9
2012-11-01 13:19:16.488: [ora.mdnsd][2529904384] {0:0:32} [start] Error = error 9 encountered when connecting to MDNSD
2012-11-01 13:19:17.513: [ora.mdnsd][2529904384] {0:0:32} [start] without returnbuf
2012-11-01 13:19:17.692: [ COMMCRS][2534106880]clsc_connect: (0x7f01780652c0) no listener at (ADDRESS=(PROTOCOL=ipc)(KEY=host1DBG_MDNSD))

Решение - нужно удалить временные файлы в /var/tmp/.oracle:
ls -la /var/tmp/.oracle
rm *

  • ClusterwarePRCT-1302
INFO: ERROR: 
INFO: Unable to obtain network interface list from Oracle ClusterwarePRCT-1302 : The "OCR," has an invalid IP address format
INFO: Verification cannot proceed
INFO: Post-check for cluster services setup was unsuccessful on all the nodes. 

Решение - переименовать названия сетевых интерфейсов, необходимо полное совпадение.