Friday, December 21, 2007

Грабелька с OVO-мониторингом баз Oracle (на Linux-ах)

Суть проблемы изложена в вопросе в форуме hp itrc.
Hi
We have the following situation. After a colleque of us restored partially a backup ( core dump happended) ORACLE is behaving somehow strange :
Logon to ORACLE using sqlplus works fine
Using the application that is normally used with the db alos works fine.
If the application tries to logon to ORACLE using programmatic access does not work at all .We always get the ORA-12546 error
We cannot fin whats wrong.
Has anyone a idea where we should search
Ответ оказался:
Make sure the permission on the oracle execuatble is correct. The oracle executable permission should be:
52224 -rwsr-sr-x 1 oracle dba 53431665 Aug 10 11:07 oracle
Explanation:
The error, ora-12546, occurs due to an incorrect setting on the oracle executable.

По AWR

-- Просмотреть все снимки, хранящиеся в репозитарии
select * from sys.wrm$_snapshot;

-- Просмотреть текущие настройки AWR

select * from dba_hist_wr_control;

-- Задать новые настройки AWR
begin
dbms_workload_repository.modify_snapshot_settings(
interval=>15,
retention=>10080);
end;

--Просмотреть представления с данными AWR

SELECT table_name, comments FROM dict WHERE table_name
LIKE 'DBA_HIST%'
order by 1;

-- Удалить AWR снапшоты (на примере ниже размер БД уменьшается с 10 до 3Гб)

SQL> select sum(bytes)/1024/1024/1024 from dba_segments;

SUM(BYTES)/1024/1024/1024
-------------------------
               10.2251587

SQL> select dbid, retention from dba_hist_wr_control;

      DBID RETENTION
---------- ---------------------------------------------------------------------------
2822602820 +00008 00:00:00.0

SQL> select min(snap_id), max(snap_id) from dba_hist_snapshot;

MIN(SNAP_ID) MAX(SNAP_ID)
------------ ------------
       21234        21405

SQL>  exec dbms_workload_repository.drop_snapshot_range(21234,21405);

PL/SQL procedure successfully completed.

SQL> select sum(bytes)/1024/1024/1024 from dba_segments;

SUM(BYTES)/1024/1024/1024
-------------------------

               3.08276367

define(`SMART_HOST',`smtp.provider.com')

After installing new Linux-server with Oracle etc. for successful mailing don't remember about adding feature "define(`SMART_HOST',`smtp.provider.com')" into your sendmail.mc
And after do
# cd /etc/mail
# make
# killall -1 sendmail
# echo test|mail me@mydomain.com

Thursday, December 20, 2007

top 2 file

top -d 1 -n 1000 -f /home/oracle/slava3.txt

Убить неубиваемую сессию (ORA-00031: session marked for kill)

Сегодня при попытке убить сессию нарвался на ошибку ORA-00031: session marked for kill
В таком случае сессию можно убить из Unix через убийство процесса
# kill pid, где pid - это spid из представления v$process, который можно узнать по ADDR. ADDR узнается по PADDR из v$session. Напр-р,
select spid from v$process where addr in
(select paddr from v$session where osuser='ADUser');

Если есть под рукой Toad , то в Session Browser
spid для проблемной сессии можно посмотреть перейдя в закладку Process

Tuesday, December 18, 2007

FEATURE(`delay_checks')

FEATURE(`delay_checks') - интересная фича в конфиге sendmail при проблеме когда сервер долго не выдает invitation из-за чего коннекты могут отваливаться по таймауту

http://dz.dn.ua/spam/antispam.html

Wednesday, December 12, 2007

Грабли с WMware

Получил сегодня ошибку "511 vmware-serverd service is not running" в своей VMware Server 1.0.2 после рестарта XP. По совету в одном из форумов, вылечил путем перезапуска службы VMware Registration Service при закрытой консоли. Но при попытке запустить виртуальную машину получил следующую ошибку "Virtual machine config file is invalid.." Вычитал про файлы .vmem and .vmem.lck в директории данной машины здесь и просто попытался их удалить, что оказалось безуспешно. Пришлось сребутить опять свою XP, после чего данные файлы исчезли и VMWare-машина нормально стартовала.

Tuesday, December 11, 2007

Грабли при Upgrade до 10.2.0.3

Сегодня при попытке проапгредить тестовую БД после накатки Patch Set 2 (релиз 10.2.0.3) нарвался на неожиданные грабли:
1) Ошибки как при запуске @?/rdbms/admin/catupgrd.sql, так и при запуске dbua (Ошибка звучала примерно так
DBUA thinks this is a Rerun operation and is trying to connect to the database with oracle home /oracle/product/10g. If you believe this is not a Rerun operation, remove the below file and invoke DBUA again.
/oracle/product/10g/cfgtoollogs/dbua/logs/Welcome_LIVE.txt ).
Оказалось, что были потеряны онлайн-логи БД - сообщение об этом я получал при
SQL> startup upgrade , но игнорировал ....
После того как проделал
SQL> recover database until cancel;
SQL> alter database open resetlogs;
(конечно на боевой базе после этого обязательно сделать полный бэкап базы) проблема ушла и после SQL> startup upgrade скрипт @?/rdbms/admin/catupgrd.sql начал свое исполнение.

Вывод 1: не игнорь недоступность онлайн-логов при "startup upgrade" .
---
2) Делал upgrade по Readme.html из архива патча. Потратив время, оказалось, что не стоит игнорить написанное черным по белому там - проверьте нет ли обновленного readme на металинке. В файле на металинке перед обновлением необходимо пропатчиться....

Вывод 2: прежде чем делать любые обновления, проверяй металинк, не обновился ли документ, описывающий данное обновление.

3) Нарвался на "тупейшую" засаду - скрипт catupgrd.sql завис бес каких либо сообщений, не сразу заглянув в алерт.лог я выяснил, что место в дисковой группе АСМ закончилось :( вот, засада.

Вывод 3: проверь достаточно ли свободного места в SYSTEM, SYSAUX, да и просто в дисковой группе.

Friday, December 07, 2007

Для установки запуска агента OVO

Для установки OVO-агента
[root@mysrv OpC]# /usr/src/OVO/RPC_BBC/opc_inst -s <имя_сервера>

Для запуска и проверки статуса OVO-агента
[root@mysrv OpC]# /opt/OV/bin/OpC/opcagt -start
[root@mysrv OpC]# /opt/OV/bin/OpC/opcagt -status
VPO Managed Node status :
-------------------------
Control Agent /opt/OV/bin/OpC/opcctla (13529) is running
Message Agent /opt/OV/bin/OpC/opcmsga (13532) is running
BBC Local Location Broker /opt/OV/bin/llbserver (13533) is running
Subagent 1:
Action Agent /opt/OV/bin/OpC/opcacta (13534) is running
Logfile Encapsulator /opt/OV/bin/OpC/opcle (13535) is running
Monitor Agent /opt/OV/bin/OpC/opcmona (13536) is running
Message Interceptor /opt/OV/bin/OpC/opcmsgi (13537) is running
Subagent 12:
Performance Agent /opt/OV/bin/coda -redirect (13538) is running
Subagent 13:
Service Discovery Agent /opt/OV/bin/OvSvcDiscAgt /f -start (13539) is running

Wednesday, December 05, 2007

iptables - первый опыт :)

Раннее всегда работал с ipfw, но сегодня пришлось активировать и "подкрутить" iptables в linux (CentOS). Нужно было оставить открытым порт только для одного ip-адреса. Почитав в Инете и поманив сделал так.
Активировал через Х-ы через Security.
Правила описываются в /etc/sysconfig/iptables
После добавления (изменения) правила в этот файлик
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5555 -s 10.27.115.223 -j ACCEPT
которое идентично стандартным за исключением того, что я добавил ip-адрес источника через ключ -s ('-s 10.27.115.223')
срестартил iptables
# /etc/init.d/iptables restart
Для проверки правил полезная командочка
# iptables-save > /root/firewall.rules2

Wednesday, November 07, 2007

Включить XDMCP в Linux

в /etc/X11/gdm/gdm.conf
[xdmcp]
Enable=true
#init 5
Ели не проканало, то посмотри Red Hat ноуледжбэйз

Принципалы (principals), защищаемые (securables), разрешения (permissions) в SQL Server 2005

Принципалы (principals) — это те объекты, которым в SQL Server 2005 можно предоставлять разрешения. Они могут быть как индивидуальными (например, учетная запись), так и групповыми (например, роль).

Securables (дословно "защищаемые") — еще одна важнейшая концепция системы безопасности SQL Server 2005. Это все, на что в SQL Server 2005 можно назначить разрешения.

Терминология системы безопасности SQL Server 2005, принципалы (principals), защищаемые (securables), разрешения (permissions)

Tuesday, October 23, 2007

первый бэкап и ресторе в MS SQL 2005 :)

Недавно меня неофициально отправили на MS-курс "Внедрение MS SQL 2005" (на работе читали курсы для разработчиков двумя этажами выше). И похоже, что мои впечатления от "первого" знакомства MS SQL 2005 выше ожидаемых. Хотя конечно, чтобы серьезно заниматься им, надо потратить немало времени и усилий. Но мне нужно знать и представлять "куда кликнуть" когда наш DBA от MS SQL будет в отпуске или отъезде.
Мне понравились доступность и понятность материалов из текнет и онлайн-букса.
Пример скрипта, который я нашел и который возможно нужен будет частенько для создания копии БД для разработчиков.

-- Скрипт создает копию БД (formonitor) из ее бэкапа под новым именем (DB_test) и новым расположением md- и ld-файлов БД.

USE master

GO
-- DROP DATABASE DB_test
RESTORE DATABASE DB_test
FROM disk='D:\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\formonitor.bak'
WITH RECOVERY ,
MOVE 'Formonitor' TO 'D:\Test_DB\DB_test.mdf',
MOVE 'Formonitor_log' TO 'D:\Test_DB\DB_test.ldf'
--
/*
Чтобы узнать логические имена файлов 'Formonitor' и 'Formonitor_log' из файла бэкапа formonitor.bak нужно сказать:
RESTORE FILELISTONLY
FROM disk='D:\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\formonitor.bak'
*/

Wednesday, October 10, 2007

первый снег ... собеседование у Оюны

АВФ:
>> не действительно красиво листва ещё не опала леса зелёно красно жёлтые и Байкал синий солнце и снег

Monday, August 20, 2007

Скрипты для перекомпиляции INVALID-объектов

После некоторых действий в базе (импорта, обновления, установки CPU и др.) часто обнаруживаются INVALID-объекты, которые рекомендуется лечить запуском скрипта $ORACLE_HOME\rdbms\admin\utlrp.sql.
Сейчас для компиляции инвалидных функций и процедур я пользуюсь sqlplus-скриптом с сайта Don'а Burleson'а invalid_func_proc.sql.
А для компиляции инвалидных пакетов и тел пакетов скриптом с Oracle-Base invalid_pkg.sql.

--invalid_func_proc.sql
set heading off;
set feedback off;
set echo off;
set lines 999;
set page 500;
spool run_invalid.sql
select
'ALTER ' || OBJECT_TYPE || ' ' ||
OWNER || '.' || OBJECT_NAME || ' COMPILE;'
from dba_objects
where status = 'INVALID'
and object_type in ('FUNCTION','PROCEDURE');
spool off;
set heading on;
set feedback on;
set echo on;
--@run_invalid.sql
--===========================
--invalid_pkg.sql.
SET SERVEROUTPUT ON SIZE 1000000
BEGIN
FOR cur_rec IN (SELECT owner,
object_name,
object_type,
DECODE(object_type, 'PACKAGE', 1,
'PACKAGE BODY', 2, 2) AS recompile_order
FROM dba_objects
WHERE object_type IN ('PACKAGE', 'PACKAGE BODY')
AND status != 'VALID'
ORDER BY 4)
LOOP
BEGIN
IF cur_rec.object_type = 'PACKAGE' THEN
EXECUTE IMMEDIATE 'ALTER ' || cur_rec.object_type ||
' "' || cur_rec.owner || '"."' || cur_rec.object_name || '" COMPILE';
ElSE
EXECUTE IMMEDIATE 'ALTER PACKAGE "' || cur_rec.owner ||
'"."' || cur_rec.object_name || '" COMPILE BODY';
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line(cur_rec.object_type || ' : ' || cur_rec.owner ||
' : ' || cur_rec.object_name);
END;
END LOOP;
END;
/

Sunday, August 19, 2007

Протестить mount over ssh?

Нашел про монтирование удаленной фс через ssh - надо протестить ...
http://www.cyberciti.biz/tips/rhel-centos-mounting-remote-filesystem-using-sshfs.html
да и вообще похоже много чего полезного здесь

Friday, August 17, 2007

su - oracle - Your default context is user_u:system_r:unconfined_t.

После перезагрузки сервака после вчерашнего обновления openssh (еще не определил как это связано с сабжем), не сработал dbora - "пошел" разбираться. При попытке изменить контекст юзера получил
[root@mysrv]# su - oracle
Your default context is user_u:system_r:unconfined_t.

Do you want to choose a different one? [n]
[oracle@mysrv ~]$
Теперь ясно почему не сработал dbora.

Гугл посоветовал закомментарить в /etc/pam.d/su строку с pam_selinux.so open multiple

#session required /lib/security/$ISA/pam_selinux.so open multiple
session required /lib/security/$ISA/pam_selinux.so open

и это помогло.

Thursday, August 16, 2007

How to enable telnet in CentOS

На время обновления openssh на всякий случай приподнял telnet по howto с centos.org

1. Login to your server through SSH and su to root.
2. Type pico /etc/xinetd.d/telnet
3. Look for the line: disable = no and replace with disable = yes
4. Now restart the inetd service: /etc/rc.d/init.d/xinetd restart
5. Turn off it through chkconfig as well because it can still start through that.
/sbin/chkconfig telnet off

SQL> drop database;

Минут 10 убил чтобы перевести базу в нужное состояние перед drop'ом :)
SQL> startup mount EXCLUSIVE restrict force;
ORACLE instance started.

Total System Global Area 536870912 bytes
Fixed Size 1261860 bytes
Variable Size 167775964 bytes
Database Buffers 364904448 bytes
Redo Buffers 2928640 bytes
Database mounted.
SQL> drop database;

Обновление пакетов Linux на примере обновления open-ssh до 4.6p1 на CentOS 4.4

1) Обновление из RPM-исходника (пример с zlib)
# wget ftp://chuck.ucs.indiana.edu/pub/array2/linux/fedora/linux/core/5/source/SRPMS/zlib-1.2.3-1.2.1.src.rpm
# rpmbuild --rebuild zlib-1.2.3-1.2.1.src.rpm
# rpm -Uhv /usr/src/redhat/RPMS/i386/zlib-*1.2.3-1.2.1.i386.rpm

2) Обновление из тарбола (на примере openssh)
# cd /usr/src/redhat/SOURCES
# wget ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-4.6p1.tar.gz
# tar zxvf openssh-4.6p1.tar.gz
Ищем файлик типа spec
# find . -type f -name *.spec
# cd openssh-4.6p1/contrib/redhat/
# vi openssh.spec
%define no_x11_askpass 1
%define no_gnome_askpass 1
# rpmbuild -bb --clean --target i586 openssh.spec
# cd /usr/src/redhat/RPMS/i586
# rpm -Uvh openssh-*4.6p1-1.i586.rpm
Во время установки ругнулось на зависимости старых пакетов
error: Failed dependencies:
openssh = 3.9p1-8.RHEL4.9 is needed by (installed) openssh-askpass-3.9p1-8.RHEL4.9.i386
openssh = 3.9p1-8.RHEL4.9 is needed by (installed) openssh-askpass-gnome-3.9p1-8.RHEL4.9.i386
- удалил их через
# rpm -e <пакеты, на которые ругалось>

После удаления повторил установку и перегрузил процесс sshd через
kill -1

3) Установка или обновление при помощи yum
#yum install XFree86-devel
#yum install gtk2-devel
#yum update openssl

mount NFS from HP-UX onto Oracle on Linux

Для того, чтобы сделать импорт дампа базы из hp-ux на linux проделал следующее
1) на hp-ux под root'ом
- в /etc/rc.config.d/nfsconf значения параметров NFS_SERVER и START_MOUNTD заменил на 1.
- запустил /sbin/init.d/nfs.server start
- дамп файл лежит в /dmp, поэтому в /etc/exports добавил строчку
/dmp -anon=65534,async
- перечитал изменения /usr/sbin/exportfs -a
- проверил /usr/sbin/exportfs
2) на Linux под root'ом
также решил смонтировать и дал команду
$ mount name_of_server:/dmp /dmp -o rw,bg,hard,nointr,tcp,vers=3,timeo=300,rsize=32768,wsize=32768
Когда я ее дал в начале без опций $ mount name_of_server:/dmp /dmp, то при попытке сделать импорт из этой директории вывалилась ошибка:
ORA-27054: NFS file system where the file is created or resides is not mounted with correct options

Wednesday, August 15, 2007

RMAN-03002: failure of Duplicate Db command at

Технари бросили задачку сделать им копию продакшн-базы для тестирования новой версии их софта. Датафайлы базы в объеме чуть более 160 Гб. Первая мысль, которая пришла - поднять вторую базу на этом же сервере через RMAN duplicate. Но .... sga рабочей базы забила всю доступную оперативную память сервера, а там ее всего 2Gb и есна уменьшать ее нельзя :(
Тогда как сделать копию базы, если нет железа, где ее развернуть? Спросить у офисников VMWare-машинку. Удалось найти у них VMWare-машинку на 2Gb RAM, но дискового пространства всего лишь 170 Гб :( - больше нету. Ок, пока я поднял на ней Centos 4.4 и Oracle 10gR2.
Итак остаются две проблемы - для дамп-файла нет места на сервере. Также его нет на VMWare-сервере, который выделен под копию базы. Cетевой экспорт посредством network_link не подходит, т.к. в базе огромная куча таблиц с полями типа LONG (Интересно убрано ли это ограничение в недавно выложенной 11g?).
Доовольный и потирая руки, т.к. никогда не делал его, я ответил себе - нужно попробовать RMAN duplicate!!! Проведя тесты у себя на тестовой базе, подготовил duplicate.rcv c содержимым:
run {
allocate auxiliary channel 'aux_sbt' type 'sbt_tape';
duplicate target database to 'SID новой базы'
skip tablespace 'ненужный TS';
}
exit;
Запустил команду
$ rman target / auxiliary sys/passwd@ @duplicate.rcv
и .... получил ошибки, основной смысл которых RMAN-03002: failure of Duplicate Db command at .... Погуглив и пошаривши по металинку осеняет!!! кого я гоню-то - и грустно и смешно :( ОСи то разные :( Тесты я провел на Linux-ах и с той и с этой стороны, а под продакшн базой у меня сервачок HP rp5470 с HP-UX 11.11, когда как для тестовой копии я поднял Linux - другого варианта не было. Известно, что при RMAN restore (который является частью duplicate) возможны только одинаковые ОСи. Вот он пример того, как что-то зная в теории, выпускаешь из виду на практике, пока не "наступишь"... Эээхх....

А с копией базы на самом деле оказалось не все потеряно. Эту боевую базу поднимал я и располагал данные на MSA1000. Тоже неплохой опыт был. Т.к. вот к моему серваку был подключен еще один такой же массив. Соответственно с него мне и выделили раздельчик на 300Гб - благо еще была возможность. Для того, чтобы подмаунтить его коллега использовал ioscan, insf , funC -disk и sam. Саначала создал volume group vg01, а в ней и раздел lvol9 с монтированием его в /dmp. Дальше дело техники - expdp и ipmdp по сети.
Кстати, impdp по сети с дамп-файлом еще делать не приходилось и надеюсь все сработает - щас пока молотит expdp. Через некоторое время добавлю продолжение.

Saturday, August 11, 2007

Перенос базы в новую ASM_DISKGROUP

После того, как был добавлен новый LUN, был настроен автостарт базы осталось решить последнюю проблему - необходимо перенести базу из текущих asm_diskgroups, поднятых на RAID0 в новую asm_diskgroup, созданную на базе нового добавленного LUN'а RAID1.
При подготовке к данному переносу почитал доку, ноты металинка и провел ряд тестов на своей тестовой базе в VMVare-машине. В результате составил след.инструкцию, которую и использовал при работе с продакшн базой.
====
Задача: Перенести базу в новую asm_diskgroup
Данные: Имя новой asm_diskgroup - EVA01R1


1) Сделать бэкап control- файла

SQL> select name from v$controlfile;
SQL> alter database backup controlfile to '+EVA01R1';

2) Задать новое месторасположение control-файла в spfile

SQL> alter system set control_files='+EVA01R1\ITC\CONTROLFILE\CONTROL01.CTL' SCOPE=SPFILE;

Прим. если spfile не используется экземпляром, то прописать в его init.ora

3) Восстановить новый из старого control-файла


$ rman target /
RMAN > shutdown immediate;
RMAN > startup nomount;
RMAN> restore controlfile from '+EVA02/itc/controlfile/current.266.610247845';

4) Запустить копирование базы

RMAN> alter database mount;
RMAN> backup as copy database format ' +EVA01R1 ';

5) Переключить базу на копию

RMAN> switch database to copy;
RMAN> RUN
{
SWITCH TEMPFILE 1 TO '+EVA01R1';
}


6) Добавить в init.ora
параметр Db_create_file_dest=+eva01r1

7) Открыть базу
RMAN> alter database open;

8) Добавить в новую asm_diskgroup зеркальные копии онлайн-логов во всего журнальные группы экземпляра

alter database add logfile member ' +EVA01R1 ' to group 1 ;
alter database add logfile member ' +EVA01R1 ' to group 2;
alter database add logfile member ' +EVA01R1 ' to group 3 ;
alter database add logfile member ' +EVA01R1 ' to group 4 ;
alter database add logfile member ' +EVA01R1 ' to group 5 ;

9) Переключить журнал
alter system archive log current

10) Удалить старые копии журналов из старой asm_diskgroup

Можно использовать скрипт (здесь старая группа +EVA02)

declare
strSQL varchar2( 200 );
begin
for pList in (select member from v$logfile where member like '+EVA02/%' ) loop
strSQL:= 'alter database drop logfile member "' || pList.member || '"' ;
begin
EXECUTE IMMEDIATE strSQL;
end;
end loop;
end;

или вручную через

alter database drop logfile member '+EVA02/itc/onlinelog/group_1.256.609887989’
(имя файла изменять на свое)

Проверить остались ли старые файлы
select member from v$logfile where member like '+EVA02/%'

11) Переместить файл block_change_tracking

SQL> select status,filename
from v$block_change_tracking;

SQL> alter database disable block change tracking

SQL> alter database enable block change tracking
using file '+EVA01R1' reuse;


12) Проверить месторасположение всех фалов

select name from v$controlfile
union
select name from v$datafile
union
select name from v$tempfile
union
select member from v$logfile
union
select filename from v$block_change_tracking


13) Удалить все старые дисковые группы как ненужные

SQL> drop diskgroup eva01 including contents;
SQL> drop diskgroup eva02 including contents;

Friday, August 10, 2007

Добавление восьмого LUN'а с EVA5000 в Centos (ПРОДОЛЖЕНИЕ)

Вчера делал перенос базы в новую ASM дисковую группу как раз на этом сервере с его перезагрузкой. Тогда остались вопросы по поведению после ребута:
1) Похватится ли 8-й LUN системой?
2) Создастся ли /dev/mpath/3600508b4001039d90000600000d20000p1 , на базе которого должен создастся /dev/raw/raw17 ?
Ответы на все отрицательные :( Хотя после установки max-scsi-luns=255 ответы должны были быть положительными.
Пришлось пока просто прописать автостартап-скрипты для добавления 8-го LUNа и для монтирования с него raw-девайса для новой дисковой группы ASM Oracle. Как раз на нее и переливал впоследствии базу RMAN-ом.

[root@vld-olap-1 init.d]# cat /etc/init.d/addscsilun
#!/bin/sh
#
# chkconfig: 2345 1 99
# description: Adds new scsi LUN
#

/bin/echo "scsi add-single-device 0 0 0 8" > /proc/scsi/scsi
/bin/echo "scsi add-single-device 0 0 1 8" > /proc/scsi/scsi
/bin/echo "scsi add-single-device 1 0 0 8" > /proc/scsi/scsi
/bin/echo "scsi add-single-device 1 0 1 8" > /proc/scsi/scsi

#chkconfig --add addscsilun
проапдейтил скрипт маунта нового раздела в raw17 и все конечно заработало и проблема закрыта, но ... вопрос почему же 8-й LUN не подхватился системой после ребута остался нерешенным.

Thursday, August 09, 2007

Смена пароля SYS экземпляра ASM

[oracle@mysrv dbs]$ orapwd file=$ORACLE_HOME/dbs/orapw+ASM password=sys force=y

Wednesday, August 08, 2007

Добавление восьмого LUN'а с EVA5000 в Centos

После включения поддержки ядром max_scsi_luns для автоматического подключения scsi-разделов презентовали дополнительный LUN на основе, которого нужно было сделать asm_diskgroup. Как я это сделал.
1) Вручную добавил данный LUN через
echo "scsi add-single-device 0 0 0 8" > /proc/scsi/scsi
echo "scsi add-single-device 0 0 1 8" > /proc/scsi/scsi
echo "scsi add-single-device 1 0 0 8" > /proc/scsi/scsi
echo "scsi add-single-device 1 0 1 8" > /proc/scsi/scsi

после чего появился файл /dev/dm-14
2) Вручную добавил вь-14
# multipathd -k
multipathd> add map dm-14
ok
после чего в /dev/mpath/ появилась ссылка на /dev/dm-14

3) Создал партицию из появившейся ссылки, т.е. в моем случае
# fdisk /dev/mpath/3600508b4001039d90000600000d20000
выдели все доступное пространство от первого до последнего цилиндра
Дал команду #partprobe

После чего я ожидал увидеть /dev/mpath/3600508b4001039d90000600000d20000p1, но этого не произошло.
Поэтому очень важно увидеть создание данного файла после ребута, т.к. именно после его создания startup-скриптами будет создан raw-девайс, на базе которого создается asm_diskgroup.

А пока я создал вручную raw через
# raw /dev/raw/raw17 /dev/mpath/3600508b4001039d90000600000d20000

А далее под oracle и ORACLE_SID=+asm создал группу
SQL> create diskgroup eva01r1 external redundancy disk /dev/raw/raw17;

Теперь нужно проверить во время ночных работ с перезагрузкой сервера и переливкой RMAN-ом базы в данную asm_diskgroup следующее:
1) Похватится ли 8-й LUN системой?
2) Создастся ли /dev/mpath/3600508b4001039d90000600000d20000p1 , на базе которого должен создастся /dev/raw/raw17 ?

Скрипт создания raw

cnt=10
for md in `ls /dev/mpath/*p1`
do
raw /dev/raw/raw$cnt $md
cnt=`expr $cnt + 1`
done;

Продолжение следует ...

Tuesday, August 07, 2007

per_free in tablespace/autoextent on

Запустив запрос на проверку свободной пространства в ТС
SELECT F.TABLESPACE_NAME,TO_CHAR ((T.TOTAL_SPACE - F.FREE_SPACE),'999,999') "USED (MB)",
TO_CHAR (F.FREE_SPACE, '999,999') "FREE (MB)",
TO_CHAR (T.TOTAL_SPACE, '999,999') "TOTAL (MB)",
TO_CHAR ((ROUND ((F.FREE_SPACE/T.TOTAL_SPACE)*100)),'999')||' %' PER_FREE
FROM (SELECT TABLESPACE_NAME, ROUND (SUM (BLOCKS*(SELECT VALUE/1024
FROM V$PARAMETER WHERE NAME = 'db_block_size')/1024) ) FREE_SPACE
FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F,
(SELECT TABLESPACE_NAME,ROUND (SUM (BYTES/1048576)) TOTAL_SPACE
FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME ) T
WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME
обнаружил пару ТС с 0% в значении PER_FREE
Вопрос: как проверить выставлен ли autoextent в файлах данного ТС?
Ответ: select * from dba_data_files

Friday, August 03, 2007

umask и Vintela VAS

При установке VAS у пользователей AD их id в Unix-системах начинаются с 1001.
Согласно Red Hat Knowledgebase Если id пользователя более, чем 99, то umask по-умолчанию должен быть 002, иначе 022 (см./etc/bashrc), но umask у пользователей VAS на CentOS упорно 022.

Вследствие чего возникает проблема, когда пользователь группы VAS не может изменить (удалить) файлы, созданные другим пользователем этой же группы VAS.
Т.е. пользователь VAS должен либо давать команду umask 002 (666-002=664), чтобы его коллеги по VAS-группе могли менять созданные им файлы либо подправить свой /home/user/.bashrc путем добавления в конце строки umask 002.
Но юзеры никак не хотят это принять и упорно ругают VAS :) Можно их понять ....

Надо подправить настройки для вновь создаваемых пользователей для Linux в
/etc/skel/.bashrc, откуда берет настройки /etc/default/useradd, просто добавив в конце строку umask 002.
А для тех пользователей, которые уже зарегились подправить их /home/AD-user/.bashrc

Thursday, August 02, 2007

Куда сыпятся логи стартап-скриптов в HP-UX?

При тестировании скрипта автостарта ASM-экземпляра Oracle (да и наверняка других самописных) полезно знать, что HP-UX логгирует записи о стартовых скриптах в /etc/rc.log. Кто встречал ошибку SQL> ORA-29701: unable to connect to Cluster Manager, тот поймет в чем польза этого файлика :)

Wednesday, August 01, 2007

Ссылки на БобрДобр

Удобный сервис - БобрДобр. Во всяком случае так позиционируется и на первый взгяд так и есть. Во всяком случае есть возможность "уволить" тэг "Links" :)

Ссылки BASH Shell Script Directory

http://bash.cyberciti.biz/

Monday, July 30, 2007

Поддержка ядром Linux определенного кол-ва scsi luns

Cсылки, которые пригодились для решения этой задачи
1) How do I setup multiple LUNs on Red Hat Enterprise Linux 4?

How do I rebuild the initial ramdisk image?

2) Administer Linux on the fly с переводом на опеннете.

Ccылки к тому, что сегодня получил задание выяснить как увеличить кол-во поддерживаемых LUNs ядром Linux (Centos 4.4). Было высказано предположение, что у ядра есть параметр, подобный max scsi luns, дефолтовое значение которого 7, которое нужно увеличить. Про дефолтовое значение max_scsi_luns я не нашел ничего, но как оказалось на данном сервере после загрузки ОС вручную запускался скрипт rescan-scsi-bus.sh , использующий добавление дисков на лету echo "scsi add-single-device H C I L" > /proc/scsi/scsi и и который не без ограничений.
Вечером следующего дня я сделал установку Multiple LUNs с перестройкой образа RAM-диска по указанным ссылкам и это избавило от ручного запуска данного скрипта.
Также был автоматизирован запуск asm-экземпляра и базы Oracle и apache после загрузки ОС.

Thursday, June 28, 2007

Быстрый Logminer

1) Создай пакет DBMS_LOGMNR
$ cd $ORACLE_HOME/rdbms/admin
$ sqlplus system/password @dbms.sql

2) Определи файлы, которые будут анализироваться логмайнером (в примере далее это файлы ASM типа +DBGROUP1/ccdb/onlinelog/group_2.262.593698089), например, вытащи активные журналы через

SELECT distinct member LOGFILENAME FROM V$LOGFILE;

3) Добавь полученные файлы в поле видимости пакета DBMS_LOGMNR
BEGIN
sys.DBMS_LOGMNR.ADD_LOGFILE
('+DBGROUP1/ccdb/onlinelog/group_2.262.593698089'); --замени на свои имена файлов
sys.DBMS_LOGMNR.ADD_LOGFILE
('+DBGROUP1/ccdb/onlinelog/group_3.263.593698095');
sys.DBMS_LOGMNR.ADD_LOGFILE
('+DBGROUP1/ccdb/onlinelog/group_1.261.593698085');
END;

4) Запусти начало анализа журналов
BEGIN
sys.DBMS_LOGMNR.START_LOGMNR
(options =>
dbms_logmnr.dict_from_online_catalog);
END;

5) Найди проблемную операцию и вытащи UNDO-запрос через запрос к V$LOGMNR_CONTENTS
Например,
select username,to_char(timestamp,'mm/dd/yy hh24:mi:ss') timestamp,
seg_type_name, seg_name, table_space, sql_redo,sql_undo, session# SID, serial#
from V$LOGMNR_CONTENTS
where operation = 'DELETE' -- Если нужно поменяй отслеживаемую операцию!!!
and table_space like 'USERS' -- Если нужно поменяй или убери ТС!!!
and to_char(timestamp,'mm/dd/yy hh24:mi:ss')> '06/27/07 17:00:00' -- Здесь задай свою дату!!!
order by 2 desc;

6) Остановить Logmnr-процесс
BEGIN
sys.Dbms_Logmnr.end_logmnr;
END;

Быстро сфлэшбэчиться 2 (to before drop;)

В продолжение своей темки "Быстро сфлэшбэчиться" провел тестики с "корзиной" при удалении тестовой таблички adm_office на основе "Using Oracle's recycle bin, by Natalka" и "Ретроспективная (Flashback) таблица", где Arup неплохо вставил - "В некоторых случаях этим пользователем-неудачником можете оказаться и вы – АБД!". С чем я согласен :)

drop table adm_office; -- случайное удаление таблицы
select * from tab; -- видим строку с переименованной таблицей в системную
select * from recyclebin; --удостоверимся, что это наша удаленная таблица
--если в sqlplus, то можно SQL> show recyclebin
flashback table adm_office to before drop; -- сфлэшбэчим удаленную табличку

Итак я представил, что кто-то из юзеров удалил таблицу в своей схеме и позвонил мне. Я зашел под system'ом и не увидел удаленной таблицы в recyclebin. Тогда делаю запрос
select owner, object_name, original_name, type, droptime, can_undrop, can_purge from dba_recyclebin;
и вижу то, что нужно - схему, имя таблицы, время ее удаления и возможность восстановления!
Можно проверить эту табличку запросом к переименованной табличке, например:
select * from СХЕМА."BIN$kffqEdSnQd2u6rEnet3Pzg==$0"
Теперь осталось сфлэшбэчить данную табличку с указанием ее схемы-владельца
flashback table СХЕМА.adm_office to before drop;

Wednesday, June 27, 2007

Тесты c Logminer

Сегодня провел тесты с logminer на основе статьи Раскрываем секреты – глубинный анализ журналов пока на своей Винде в тестовой базе.
Сначала нужно инсталлировать пакет DBMS_LOGMNR (далее шаг 1)
Затем выдать привилегию юзеру, который будет анализировать журнал (шаг 2 - сразу родился вопрос - когда я попытался сделать анализ от юзера adm, которому дал роль по статье, получил ошибку "Привилегий недостаточно" - поэтому вопрос с привилегиями пока открыт).

Тест в винде - если что-то удалено недавно и изменения сохранились в оперативных журналах (имена журналов мы возьмем из SELECT distinct member LOGFILENAME FROM V$LOGFILE;)

1) C:\>sqlplus / as sysdba
2) SQL> c:\oracle\product\10.2.0\db_1\rdbms\admin\dbmslm.sql;
3) SQL> GRANT EXECUTE_CATALOG_ROLE TO adm;
4) SQL> CREATE PUBLIC SYNONYM DBMS_LOGMNR FOR SYS.DBMS_LOGMNR;
5) SQL> SELECT distinct member LOGFILENAME FROM V$LOGFILE;
6) BEGIN
DBMS_LOGMNR.ADD_LOGFILE
('C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLWIN\REDO03.LOG');
DBMS_LOGMNR.ADD_LOGFILE
('C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLWIN\REDO02.LOG');
DBMS_LOGMNR.ADD_LOGFILE
('C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLWIN\REDO01.LOG');
END;
8) BEGIN
DBMS_LOGMNR.START_LOGMNR
(options =>
dbms_logmnr.dict_from_online_catalog);
END;

здесь dbms_logmnr.dict_from_online_catalog - как я понял из доки использование логмайнером словаря БД для анализа не только онлайн-журналов (dbms_logmnr.DICT_FROM_REDO_LOGS), но и заархивированных.

9) select username,to_char(timestamp,'mm/dd/yy hh24:mi:ss') timestamp,
seg_type_name, seg_name, table_space, sql_redo,sql_undo, session# SID, serial#
from V$LOGMNR_CONTENTS
where operation = 'DELETE'
and table_space like 'USERS'
and to_char(timestamp,'mm/dd/yy hh24:mi:ss')> '06/27/07 17:00:00'
order by 2 desc;

10) Нахожу нужную строку и из SQL_UNDO выбираю и выполняю соответствующий запрос, чтобы вернуть как было.
Прим. Cтолбец SQL_REDO – показывает оператор, который может быть выполнен, чтобы вызвать то же самое изменение, сделанное пользователем, и столбец SQL_UNDO – оператор, который может быть выполнен для отмены изменения.


Но что делать если произошло пакетное удаление или изменение? Думаю, pl/sql с курсорами, хотя не уверен. Надо будет протестить.

Tuesday, June 19, 2007

Не используйте нулевой сектор raw-девайса для Oracle ASM в Solaris 10

Вчера коллега натолкнулся на проблему, что сырой девайс не определялся ASM-инстансом Oracle в числе CANDIDATE-дисков. Сегодня утром он нашел проблему и поделился опытом. Он сделал дамп этого раздела dd-ой и увидел, что Solaris 10 R2 записал свою служебную инфу в нулевой сектор этого девайса. Очевидно, что для ASM-инстанса это и послужило проблемой. Тогда он пересоздал сырой раздел не с нулевого, а с первого сектора и ASM увидел CANDIDATE-диск.
Вывод: выделяя девайс под раздел для Oracle ASM в Solaris 10 начните его не с нулевого, а с первого сектора. На других ОС-ях пока не было возможности проверить это. Ссылка на man dd

Thursday, June 14, 2007

CPU Apr 2007 на Solaris 10 (Sparc 64-bit)

Сегодня ночью установил CPU Apr 2007 на Oracle 10gR2 на базе Solaris 10 (Sparc 64-bit). Данный апрельский Critical Patch Update ставился впервые и проделав загодя тесты с его установкой на Linux x86 (Centos 4.4) на выполнение работ по План-графику выделил 1 час с 9.00 до 10.00 утра. Т.к. на Линухе на установку данного CPU я затратил примерно полчаса. Но этой ночью ввиду бессоницы (укладывал себя спать с пол 12-го ночи раза три) и возможно неуверенности, что одного часа утром может и не хватить (а надо уложиться именно за это время), решил начать установку из дома и не пожалел об этом.... Т.к. на все работы по установке этого CPU на Solaris 64-bit ушло 2 часа 15 мин. - с 3.45 час. до 6.00 час. Причем свежий opatch 10.2.0.2.2, который требовался для установки этого CPU, был уже установлен и резервные копии базы и бинарников Oracle сделаны из cron.
В конце установки CPU пришлось поволноваться, когда получил это:
Inventory check OK: Patch ID 5901881 is registered in Oracle Home inventory with proper meta-data.
Verification of 'ar' actions failed. This is a known issue for this platform. Pl ease check the note 353150.1 on Metalink for the process to manually verify the files.
Files check OK: Files from Patch ID 5901881 are present in Oracle Home

Но следование упомянутой ноте 353150.1 показало, что "... all Source files are 4 bytes smaller than their respective Destination files AND the patch has successfully applied". Тесты с базой прошли успешно и она уже чуть более часа как в "плавании".

Tuesday, June 12, 2007

В dbca не вижу базы, созданной вручную

Провел тест с созданием базы вручную на основе модифицированного скрипта, сгенерированного раннее при помощи dbca. База успешно поднялась. Но когда я решил взглянуть на нее через dbca, с удивлением обнаружил, что ее нет среди инстансов ... Хотя база поднята и работает.
Хм... пока тема остается открытой.

Saturday, June 09, 2007

Error 45 initializing SQL*Plus

Сегодня утром на свежеустановленном тестовом сервере Centos 4.4 + Oracle 10gR1 получил ошибку Error 45 initializing SQL*Plus

[oracle@centest ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.2.0 - Production on Sat Jun 9 10:19:14 2007
Copyright (c) 1982, 2005, Oracle. All Rights Reserved.
Error 45 initializing SQL*Plus
Internal error

Судя по металинку эта бага обнаруживается на разных платформах и версиях Oracle, нашел упоминание о Bug 3039738 (Oracle Cluster File System (OCFS) ) и в форуме данная проблема присутствует. Заглянул в первое попавшееся и когда вычитал реплику автора о подобной проблеме "Even I faced the same problem. But when I set the oracle_home,nls_lang and path environment variables it worked fine" сразу проверил свои переменные окружения и обалдел, когда увидел, что HOSTNAME=my_server_name.other_domain.ru :)
Заглянул в /etc/hosts, /etc/resolv.conf, /etc/sysconfig/network - так и есть, там прописан не мой, а "левый" домен.
Исправил, ребутнулся - ошибка осталась :(
Проблема остается открытой ...

Thursday, June 07, 2007

grant select on все таблицы одной схемы другой схеме?

К моему удивлению, не нашел как это сделать в SQL Reference и сделал через запуск скрипта, полученного из
SET ECHO OFF
SET NEWPAGE 0
SET SPACE 0
SET PAGESIZE 0
SET FEEDBACK OFF
SET HEADING OFF
SET TRIMSPOOL ON
spool grants2user2.sql
select 'grant select on '''||owner||'.'||table_name||''' to user2;' from dba_tables where owner='USER1';
spool off;
exit;

Wednesday, June 06, 2007

Вывод списка ролей (пример использования %ROWTYPE)

declare
cursor get_roles is -- Объявляем курсор
select * from dba_roles;
v_roles get_roles%ROWTYPE; --Объявляем переменную, работающую с курсором
begin
open get_roles;
loop
exit when get_roles%NOTFOUND; --Оператор цикла для просмотра всех записей таблицы
dbms_output.enable;
fetch get_roles into v_roles; --Фетчим курсор в переменную
dbms_output.put_line(TO_CHAR(v_roles.role));
end loop;
close get_roles;
end;
/

Tuesday, June 05, 2007

Создание скрипта сохранения и изменения паролей

set pause off;
set pages 0;
set linesize 140;
set feedback off;
set termout off;
column cmd_line format a80
column tick format a3
column sum_bytes format 999,999,999,999
spool return_pass.spool.sql;
select 'alter user "'||username||'" identified by values '''||password||''';' from dba_users;
spool off;
spool change_pass.spool.sql;
select 'alter user "'||username||'" identified by qqq;' from dba_users;
spool off;
exit;

Open Relay Checker etc.

Онлайн-чекеры Интернет-серверов
http://tests.nettools.ru/
http://www.mxtoolbox.com/blacklists.aspx

IP-калькуляторы
http://ipcalc.dewil.ru
http://www.cotse.com/networkcalculator.html

Monday, June 04, 2007

create_roles.sql

set feedback off
set heading off
set termout off
set linesize 1000
set trimspool on
set verify off
spool roles.sql
select 'create role ' || r.role || ';'
from dba_roles r;
spool off;
exit;

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

Wednesday, April 18, 2007

PHSS_32508 при установке Oracle 10g R2 на HP-UX PA-RISC (64-Bit)

По требованиям ораклинной доки для установки Oracle 10g R2 на HP-UX PA-RISC (64-Bit) необходимо установить патчи PHSS_32508 и др. Вы не сможете этого сделать, если в вашей системе не установлен платный C++ копилятор.
==
Что это за патчи?
PHSS_32508 - patch for ANSI C++ compiler
PHSS_32509 - patch for ANSI C compiler
PHSS_32510 - patch for the ANSI C/C++/fortran optimizer
PHSS_32731 - patch for Serviceguard
==
А и не надо их ставить (для PL/SQL Native вообще должно быть достаточно gcc 3.4.0) - просто игнорируйте
Checking for PHSS_32508; found Not found. Failed <<<<
Checking for PHSS_32509; found Not found. Failed <<<<
Checking for PHSS_32510; found Not found. Failed <<<<
Checking for PHSS_32731; found Not found. Failed <<<<
и продолжайте установку.

Tuesday, April 03, 2007

...telnet в Solaris 10

Вам приходилось быть свидетелем ситуации, когда телнет может быть полезен? когда некто потерял пароль к своей Соляре? :)

....для входа на удаленную систему без пароля под пользователем root достаточно набрать: telnet -l "-froot" host. Суть в передаче аргумента опции "-l" программе login без проверки, login в свою очередь интерпретирует "-f" - как вход без запроса пароля.

http://www.opennet.ru/opennews/art.shtml?num=9842
http://sunsolve.sun.com/search/document.do?assetkey=1-26-102802-1

Итак, если вы юзаете релизы Solaris s10u1 и s10u2, то просто отключите telnet.

bash-3.00# inetadm|grep telnet
enabled maintenance svc:/network/telnet:default
bash-3.00# inetadm -d svc:/network/telnet:default
bash-3.00# inetadm|grep telnet
disabled disabled svc:/network/telnet:default


Или через svcadm disable svc:/network/telnet:default

Tuesday, March 27, 2007

Амра, молодец!

Похоже, все пока идет нормально и Амра справляется. Надеюсь, все будет ОК. Что покажет будущее?

Wednesday, March 21, 2007

Мистер Хитклиф? - спросил я

Я только что вернулся от своего хозяина - единственного соседа, который будет мне здесь докучать. Место поистине прекрасное! Во всей Англии едва ли я сыскал бы уголок, так идеально удаленный от светской суеты. Совершенный рай для мизантропа! А мистер Хитклиф и я - оба мы прямо созданы для того, чтобы делить между собой уединение. Превосходный человек! Он и не представляет себе, какую теплоту я почувствовал в сердце, увидав, что его черные глаза так недоверчиво ушли под брови, когда я подъехал на коне, и что он с настороженной решимостью еще глубже засунул пальцы за жилет, когда я назвал свое имя.
- Мистер Хитклиф? - спросил я.
В ответ он молча кивнул.
- Мистер Локвуд, ваш новый жилец, сэр.
................
Кто-то же читает это? Интересно, когда придет время, когда можно будет также просто в свое удовольствие почитать худ.литературу? :)

Monday, March 19, 2007

Быстро сфлэшбэчиться

Примеры флэшбэка.
Самый частый и быстро исправляемый случай - Юзер по запарке менее чем полчаса назад удалил сообщение из таблицы message.
--
select * from message order by msg_date desc;
delete from message where msg_date > '18.03.2007'
commit;
create table t1 as
select * from message as of
timestamp sysdate-1/24/60*30 where msg_date > '18.03.2007';
select * from t1;
insert into message select * from t1;
--или по тупому затолкать все, что было полчаса назад
insert into message select * from message as of timestamp sysdate-1/24/60*30 where msg_date > '18.03.2007';
commit;
2) ...

Sunday, March 11, 2007

Ссылки пока

http://www.idevelopment.info - нашел интересные скрипты, ораклово-юниховые - на досуге неплохо посмотреть бы
http://otn.oracle.com - бес комментов, просто увидев статью Смайли в популярных, подумал, что правильно - удобная ведь ... не было б цены, если б ее проапгрейдить насчет ASM on raw without ASM-libs :)
Stat-утилиты и анализ производительности системы
==
BASH Programming - Introduction HOW-TO
Linux Shell Scripting Tutorial v1.05r3 - A Beginner's handbook

10 Seconds Guide to Bash Shell Scripting

Арх-ра и топология вычислительных систем, с минитестами

Saturday, March 10, 2007

+MS=V34

+MS=V34 - это значение для строки инициализации модема, после ввода которого я смог выходить в сетку из своего ноутбука. Взял значение для Conexant по найденной ссылке

Tuesday, March 06, 2007

Жесть от квесть?

Недели 3 назад для настройки аутентификации в Oracle из AD посредством VAS (не просто из AD и без OID, а именно черз VAS) я запросил у Quest заявленный у них на сайте гайданс "Integrating VAS and Oracle Advanced Security Option Kerberos Adapter with Microsoft Windows 2003 Active Directory". После безуспешных попыток его получить через сайт и support@quest.com, получил его от местных ребят из i-soft.ru, которые качнули этот документ с ftp-сервера. Выяснилось, что этот гайданс сырой и я сообщил об этом ребятам из i-soft и самому автору документа (Noel Sidebotham). Автор сначала попытался отбрыкаться мол обратись к своему региональному ресселеру, а затем сказал, что рабочая версия док-та еще в разработке. И прошло более 2 недель, как support@Quest.com разродился ответом о том, что у них не готов этот мануал....

Hi Bair,
I have checked with Konstantin he has explained to your account manager that this document is not ready and is not customer-facing. Hopefully they have explained this to you.
I believe this question has now been answered so I will now close this case down.
Kind Regards,
Ewan

При этом странно то, что этот мануал заявлен у них на сайте как готовый и VAS давно уже продается с этой заявляемой у них на сайте возможностью (проверил сейчас ссылку - они даже не удосужились убрать ее) и ... получается до сих пор никто из их клиентов, приобретших VAS, не пытался настроить заявленную ими аутентификацию в ORACLE из AD при помощи VAS ? ....

Wednesday, February 14, 2007

к VAS tips

типс про кэш VAS , который согласно документации более эффективен, чем кэш-сервера типа nscd.

Если нужно посмотреть какие AD-учетки попали в кэш VAS нужно дать команду
/opt/quest/libexec/vas/sqlite3 /var/opt/quest/vas/authcache/vas_auth.vdb "select * from authcache;"

Проверил вход в сервер (HP-UX) с его консоли при отключенной сети под своей AD-учеткой, которая есть в его кэше - логон сработал, пользователя AD сервер авторизовал.

Tuesday, February 13, 2007

тест по интеграции Secure Path с Oracle ASM

Cегодня реализовал подготовку теста по интеграции Secure Path с Oracle ASM (ОС - HP-UX 11.23, дисковый массив HP Storage Works EVA5000, Secure Path - HPswsp A.3.0F.02F.00F for Active-Active Disk Arrays).
Стола задачка - создать дисковую группу
ASM на базе Virtual device file-ов, созданных Secure Path'ом, доступ к которым обеспечивается multipathing-ом.
Идея реализована - лишь для чистоты эксперимента сегодня

будет проверена доступность данных после краха одного из "путей" SP……путем "вытыкания" одного из шнурочков из порта :)

Вечером: тест с "вытыканием" сработал.
Похоже, это решение будет реплицироваться дальше.
======
HP StorageWorks Enterprise Virtual Array 5000 - Overview
HP StorageWorks Secure Path, Overview & Features
Active/active vs. active/passive arrays
==

LUN, разделы и тома

LUN — это логическая ссылка на часть подсистемы хранения. LUN может указывать на диск, часть диска, целый дисковый массив или раздел дискового массива в подсистеме. Эта логическая ссылка, при ее назначении серверу сети SAN, играет роль физического диска, доступного для записи и чтения данных этим сервером. Применение LUN делает проще управление ресурсами хранилища в сети SAN, поскольку они служат как логическими идентификаторами, для которых можно назначать привилегии доступа и контроля.

После назначения LUN для сервера в этом LUN можно создать один или несколько разделов. С помощью разделов определяется, сколько дискового пространства будет отведено для хранилища. Чтобы операционная система смогла начать запись в раздел и чтение из него, требуется создать в разделе тома, отформатировав его в одной из файловых систем. Тома определяют, сколько логического пространства отведено для хранилища. Тома могут занимать несколько разделов.

Sunday, January 21, 2007

Solaris Volume Manager

Когда пришлось поднять Oracle 10gR2 на базе SUN Solaris 10 (SUN Fire 120) с нуля, то при создании зеркала из двух дисков мне помогла эта статья
http://solaris-center.ru/docs/svm.html

Thursday, January 18, 2007

Oracle - 32-bit или 64-bit?

Как определить в 32- или в 64-битном режиме запущен Oracle?
1) Если Oracle запущен в 32-битном режиме то при обращении к полю address представления v$sql мы увидим 8 символов, а при обращении в 64-битном режиме - 16 символов.

Например, для 32-битного режима:

select address from v$sql where rownum <>

а для 64-битного -

select address from v$sql where rownum < 2;

ADDRESS
----------------
78BA1040787F3E44

2) #file $ORACLE_HOME/bin/oracle
Например,
#file /u01/app/oracle/product/10.2.0/Db_1/bin/oracle
/u01/app/oracle/product/10.2.0/Db_1/bin/oracle: ELF 64-bit MSB executable SPARCV 9 Version 1, dynamically linked, not stripped

#file /u01/app/oracle/product/10.2.0/db_1/bin/oracle
/u01/app/oracle/product/10.2.0/db_1/bin/oracle: setuid setgid ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped

==============================================
Определить битовость на HPUX
# getconf KERNEL_BITS