Thursday, May 31, 2007

Bastille

После установки Bastille если есть конфиг, натравить на него можно через
#bastille -b
Проверить можно через vsftpd, если он установлен
На команду #service vsftpd status
Ответ: vsftpd dead but subsys locked

Wednesday, May 30, 2007

Ошибки создания JOBs при импорте схем под system

При импорте множества схем под system объекты job валятся в схему system, а не в схемы, которым они принадлежат. Пока не нашел как решить эту проблему. А пока нужно было удалить кучу созданных объектов JOB и попросить разработчиков создать эти JOB-ы.
Написал такой код для удаления этих job-ов, который сработал.
declare
j number;
begin
for j in (select job from dba_jobs where log_user in ('SYSTEM'))
loop begin
DBMS_JOB.REMOVE(j.job);
COMMIT;
end;
end loop;
end;

Tuesday, May 29, 2007

Полезняшки

select u.sid, substr(u.username,1,12) user_name, s.sql_text
from v$sql s, v$session u
where s.hash_value = u.sql_hash_value
and sql_text not like '%from v$sql s, v$session u%'
order by u.sid;

Monday, May 28, 2007

Тест с установкой Oracle на CentOS 5

Пока есть время (в преддверии установки нового сервера для разработчиков) решил протестить установку Oracle 10gR2 на CentOS 5 (хотя как я понял 5-я версия RHEL еще не тестировалась Oracle). Первая грабля поджидает сразу после запуска runInstaller'а на сообщении
"Checking operating system version: must be redhat-3, SuSE-9, redhat-4, UnitedLinux-1.0, asianux-1 or asianux-2". Загляните в /etc/redhat-release и поменяйте версию. Подсказку нашел на одной из
ссылок по установке Oracle 10gR2 на Red Hat 5.
Следующая грабля связана с rawdevices, на базе которых поднимается Oracle ASM.
Я не нашел ни /etc/init.d/rawdevices, ни /etc/sysconfig/rawdevices. Помог FAQ How do I add raw device mapping in Red Hat Enterprise Linux 5?. Ну и ссылка на русскую доку по RHEL возможно пригодится
Установил Oracle и создал базу на базе ASM успешно. Все работает, но когда попробовал перелить несколько схем из другой БД при помощи impdp с network_link, но получил ошибки
ORA-31626: job does not exist
ORA-31650: timeout waiting for master process response

.....Думаю, тестировать далее нет смысла - если будет время продолжим тесты, но сейчас я откажусь от CentOS 5 в своих работах с Oracle 10gR2.

dmesg в crontab.root

На установленной системе с HP-UX 11.11 PA-RISC установил Oracle 10g и базу на базе ASM. Экземпляр ASM был построен на asm_diskstring='/dev/rdsk/c18t0*, /dev/rdsk/c20t1*', права на которые принадлежали oracle:dba. Дак вот время от времени права на /dev/rdsk/c20t1* слетали на sys:bin, из-за чего ASM постепенно сыпался. Понятно было, что какой-то процесс вызывает переинициализацию дисков в системе. При этом в /var/spool/cron/crontabs/root никаких процессов кроме скриптов бэкапа нет.
Написал скриптик-чекер, которые проверял права на диски ежеминутно из крона и высылал на эл.почту уведомление об их изменении. Время от времени такие сообщения начали сыпаться на почту и я заметил в, что /tmp появляется файлик ioscan.out именно в то же время когда прилетает уведомление.
Оказалось, что в /var/spool/cron/crontab.root прописана строка 05,15,25,35,45,55 * * * * /usr/sbin/dmesg - >>/var/adm/messages

man dmesg сказал
dmesg - collect system diagnostic messages to form error log
....If the - argument is specified, dmesg computes (incrementally) the new messages since the last time it was run and places these on the standard output....
Отключение этой строки из крона помогло.
Т.е. crontab -e позволяет управлять лишь /var/spool/cron/crontabs/user, а не всем кроном юзера user.

Wednesday, May 23, 2007

Block change tracking (Сказочно, но проверить!)

Отслеживание измененных блоков для оптимизации инкрементального резервирования за счет устранения необходимости полного просмотра файлов данных в ходе резервирования.
Информация о физическом расположении всех изменений, заносится в файл отслеживания изменений change tracking file фоновым процессом CTWR (change tracking writer).
При включенном режиме отслеживания файл измененных блоков автоматически используется RMAN-ом.

Для просмотра включен ли режим отслеживания измененных блоков
sys@ORCL> select status from v$block_change_tracking;

STATUS
----------
DISABLED

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

sys@ORCL> show parameter db_create_file_dest;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +ASM_DATA

Если параметр включен как в примере выше, то включение без указания имени файла.
sys@ORCL> alter database enable block change tracking;

sys@ORCL> select status,filename from v$block_change_tracking;

STATUS FILENAME
---------- --------------------------------------------------
ENABLED +ASM_DATA/orcl/changetracking/ctf.303.623334603

При выключенном параметре parameter db_create_file_dest
sys@ORCL> alter database enable block change tracking
2> using file '/mydir/rman_change_track.f'
3> REUSE;

Friday, May 18, 2007

/dev/async, см. 393314.1

Symptoms
Database storage is ASM on an HP-UX system.
A disk fails in an ASM diskgroup.
ASM does not recover and I/Os hang indefinitely.
All types of SQL statements requiring I/O can be affected.
Asynchronous I/O is enabled.

Solution
To implement the solution enable minor device number 4 for device /dev/async, i.e.
crw-rw-rw- 1 bin bin 101 0x000004 Sep 12 2006 /dev/async

Major and minor device numbers are assigned to a character device when the device is created with mknod. In order to change minor device number, /dev/async needs to be recreated.

$ /sbin/mknod /dev/async c 101 0x0

Thursday, May 10, 2007

ограничения network_link

При при заливке при помощи ipmdp с network_link не поддерживаются партиционированные таблицы и таблицы типа xmltype
- определить есть ли партиционированные таблицы в схеме-источнике можно через
select distinct(owner) from dba_objects where object_type like 'TABLE PARTITION';

или, например, для схем User1, User2, User3
select * from dba_tab_partitions where table_owner in ('USER1','USER2','USER1');

- определить есть ли таблицы xmltype схемы-источника можно через
select distinct(owner) from dba_xml_tables;

Также наблюдается проблема с импортом через network_link данных из таблиц, имеющих столбцы типа LONG. Поэтому перед выполнением импорта лучше сразу определить такие таблицы через

select owner,table_name,column_name,data_type from dba_tab_columns
where owner in ('USER1','USER2','USER1') and data_type='LONG' order by 2;

и сделать импорт этих таблиц через DUMPFILE:

Tuesday, May 08, 2007

Проблема со special файл диска MSA1000 в HP-UX

Несколько дней назад столкнулся с проблемой когда из Oracle ASM (с asm_diskstring=/dev/rdsk/c20t1*), установленном на в HP-UX 11.11 c массивом MSA1000, потерялся один диск... Соответственно, общий объем дисковой группы уменьшился на объем потерянного диска. При этом утилита #/opt/compaq/hpacucli/bld/hpacucli показывает все физические диски с массива и все LUN-ы как доступные. После команд insf, ioscan и ioscan –funC disk special-файл диска /dev/rdsk/c20t1d4 не получает новых атрибутов по дате сканирования как все остальные диски....
bash-2.05b# ls -l /dev/rdsk/c20t1*
crw-rw-r-- 1 oracle dba 188 0x141000 May 4 11:58 /dev/rdsk/c20t1d0
crw-rw-r-- 1 oracle dba 188 0x141100 May 4 11:58 /dev/rdsk/c20t1d1
crw-rw-r-- 1 oracle dba 188 0x141200 May 4 11:58 /dev/rdsk/c20t1d2
crw-rw-r-- 1 oracle dba 188 0x141300 May 4 11:58 /dev/rdsk/c20t1d3
crw-rw-r-- 1 oracle dba 188 0x141400 Apr 24 09:29 /dev/rdsk/c20t1d4
crw-rw-r-- 1 oracle dba 188 0x141500 May 4 11:58 /dev/rdsk/c20t1d5
crw-rw-r-- 1 oracle dba 188 0x141600 May 4 11:58 /dev/rdsk/c20t1d6

Было предложено удалить и пересоздать этот special-файл след.образом.
1) удалить special files через
# rmsf /dev/rdsk/c20t1d4
# rmsf /dev/rdsk/c20t1d4
2) Запустить insf, ioscan
И если новый special–файл /dev/rdsk/c20t1d4 не создался, то перечитать по хардварному адресу LUN-а, взятому из ioscan –funC disk

bash-2.05b# ioscan -funC disk
disk 75 0/12/0/0.1.11.0.0.1.4 sdisk CLAIMED DEVICE HP MSA VOLUME

insf -e –H 0/12/0/0.1.11.0.0.1.4


Далее для Oracle ASM изменил владельца и атрибуты полученного special-файла
#chown oracle:dba /dev/rdsk/c20t1d4
#chmod 0664 /dev/rdsk/c20t1d4

И сегодня эта же проблема замечена вновь

bash-2.05b# ls -l /dev/rdsk/c20t1*
crw-rw-r-- 1 oracle dba 188 0x141000 May 8 09:12 /dev/rdsk/c20t1d0
crw-rw-r-- 1 oracle dba 188 0x141100 May 8 09:12 /dev/rdsk/c20t1d1
crw-rw-r-- 1 oracle dba 188 0x141200 May 8 09:11 /dev/rdsk/c20t1d2
crw-rw-r-- 1 oracle dba 188 0x141300 May 8 09:11 /dev/rdsk/c20t1d3
crw-rw-r-- 1 oracle dba 188 0x141400 May 4 12:58 /dev/rdsk/c20t1d4
crw-rw-r-- 1 oracle dba 188 0x141500 May 8 09:11 /dev/rdsk/c20t1d5
crw-rw-r-- 1 oracle dba 188 0x141600 May 8 09:11 /dev/rdsk/c20t1d6

Для временного решения данной проблемы добавил в крон периодическое выполнение скрипта my_checker.sh
# my_checker.sh
#!/usr/bin/sh
RCPNT=my@email.com
LOG=/oracle/product/my_checker.log
LSCMD='ls -l /dev/rdsk/c20t1*'
PATH=/usr/bin:/bin
DATE=`date +'%d/%m/%Y-%H:%M'`
${LSCMD}>> ${LOG}
if grep -i "sys" ${LOG}
then
cat ${LOG}|mailx -s "WARNING from HP-UX at "${DATE} ${RCPNT}
/sbin/init.d/chown_oracle_dba
rm -f ${LOG}
else rm -f ${LOG}
fi

# /sbin/init.d/chown_oracle_dba
#!/usr/bin/sh
PATH=/usr/bin
chown oracle:dba /dev/rdsk/c18t0*
chmod 660 /dev/rdsk/c18t0*
chown oracle:dba /dev/rdsk/c20t1*
chmod 660 /dev/rdsk/c20t1*

Monday, May 07, 2007

alter database open resetliogs;

Эксперимент с потерей onlinelogs ...
Для симуляции потери online-logs, удалил их вручуную через 'asmcmd -p' при закрытой базе. При попытке открыть базу после этого ошибка
sys@ORCL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01139: RESETLOGS option only valid after an incomplete database recovery

Делаем recover until cancel (либо until time) и открываем базу.

sys@ORCL> alter database recover until cancel;
sys@ORCL> alter database open resetlogs;
Database altered.
ИЛИ
sys@ORCL> alter database recover automatic until time "to_date('2007-07-05:15:00:00','YYYY-MM-DD:HH24:MI:SS')";
sys@ORCL> alter database open resetliogs;
Database altered.

И ВАЖНО ПОМНИТЬ, что после OPEN RESETLOGS необходимо сразу сделать полный бэкап базы, т.к. все предыдущие потеряют актуальность.

expdp & impdp

Как можно сделать импорт-экспорт ....
1) create directory dpump_dir1 as '/home/oracle/dmp', если нет возможности воспользоваться существующей директорией из select * from dba_directories;
2) expdp system/passwd directory=dpump_dir1 dumpfile=myfile.dmp schemas=user1,user2,user3;
3) Копируем файлик на сервер, где нужна копия схемы в '/home/oracle/dmp2';
4) create directory dpump_dir2 as '/home/oracle/dmp2';
5) impdp system/passwd directory=dpump_dir2 dumpfile=myfile.dmp schemas=user1,user2,user3

ИЛИ через network_link

1) create database link mylink
connect to system identified by passwd
using 'service_name';
2) create directory dpump_dir1 as '/home/oracle/dmp'
3) ipmdp system/passwd directory=dpump_dir1 job_name=dpimp_job1 schemas=user1,user2,user2 network_link=mylink

log-и будут "сыпаться" в файл import.log директории /home/oracle/dmp

Жмем ctrl+c, набираем help и "балдеем" :)
Import> help

Вспоминая, что “сердцем” любой операции Data Pump является мастер-таблица. Это ключ к возможности Data Pump продолжать прерванные задания....
Выйдя из интерактивного режима позже подсоединиться к процессу можно по заданному job_name через $impdp system/passwd attach=dpimp_job1
Имя джобы можно посмотреть через
select * from dba_datapump_jobs;
===========
Через пару дней появилась задача перелить в нерабочее время схему обновленную User1 из одной базы в другую под именем User2. Написал скрипт, запускаемый из at или cron под root'ом.
В листинге далее необходимо добавить '<<' перед первым EOF

#!/bin/sh
RCPNT=me@mydomain.ru
ORACLE_HOME=/oracle/product/10.2.0/OraHome1
ORACLE_SID=mydb
NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
ORA_NLS10=$ORACLE_HOME/nls/data
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/local/lib:/lib:/usr/lib
PATH=/bin:/sbin:$ORACLE_HOME/bin:$PATH:$HOME/bin
su - oracle -c "sqlplus system/passwd EOF
drop user user2 cascade;
exit;
EOF"
su - oracle -c "impdp system/passwd directory=data_pump_dir job_name=dp_user2 schemas=user1 remap_schema=user1:user2 network_link=mydb2"
DATE=`date +'%d/%m/%Y-%H:%M'`
echo "See logs of User2 dumped at "${DATE}|mail -s "User2 dumped" ${RCPNT}

# Скрипт проверил - работает.

Засады и ограничения:
1) Скрипт-то сработал и перелил схему, но .... оказалось, что при ремаппинге необходимо "возвращать" пароль импортированной схемы... "Чтите доку как грицо". И поэтому добавляем в скриптик (необходимо добавить '<<' перед первым EOF):
su - oracle -c "sqlplus system/passwd EOF
alter user user2 identified by values oldpasswd_of_user;
exit;
EOF"
Иначе user2 не сможет залогиниться под своим паролем.

Если много юзеров, воспользуемся скриптом

set pages 0;
set feedback off;
set termout off;
spool user_pass.sql;
select 'alter user "'||username||'" identified by values '''||password||''';'
from dba_users REM where username in ('USER1','USER2','USER3');
spool off;
exit;

2) Также при импорте СХЕМЫ (а не базы) по network_link не требуется создавать идентичную схему. Схема будет создана автоматом. За исключением того, что если у импортируемой схемы табличное пространство по умолчанию отличается от Users и такого ТС нет на целевой базе, то его необходимо просто создать.

Wednesday, May 02, 2007

к интеграции Oracle с DP 5.1

При установке интеграции DP с Oracle обращай внимание на наличие /etc/opt/omni/cell/cell_server со строкой dp-сервера. И добавляй в строке определения версии oracle в /opt/omni/lbin/util_oracle8.exe значение '10.*'

При смене сервера dp, например, в Linux нужно в /usr/omni/config/cell/cell_server изменить имя сервера на новое и сделать service xinetd restart

к установке Oracle ASM on MSA1000 на HP-UX 11.11

В HP-UX 11.11 после "нарезки" LUNs массива MSA1000 при помощи hpacucli, где каждому LUNу соответствует один физический диск, для того, чтобы при создании дисковых групп ASM с normal redundancy не ошибиться в определении failgroups, юзай команды
#ioscan
#insf
#ioscan -funC disk (информация об определенных в системе дисках) и эту ссылку Interpreting Hardware Paths.
Данная ссылка поможет определить разные пути к одному и тому же диску, которые c целью обеспечения failover можно будет оформить в виде масок разных failgroup's.
Например,
SQL> alter system set asm_diskstring='/dev/rdsk/c18t0*','/dev/rdsk/c20t1*';

System altered.

SQL> create diskgroup msa1000 normal redundancy
2 failgroup fg1 disk '/dev/rdsk/c18t0*'
3 failgroup fg2 disk '/dev/rdsk/c20t1*';
Diskgroup created.

После установки библиотеки клиента DP и интеграции c Oracle, проверить доступность ленточек можно через
#ioscan -funC tape