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) Прописать тоже самое, что и в пункте

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;

15 января 2013 г.

Установка Crypto Pro JSP


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


C:\jcp\lib>install "D:\oracle\soasuite\asgw2\jdk\jre" СЕРИЙНЫЙ_НОМЕР "НАЗВАНИЕ_ОРГАНИЗАЦИИ"

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;