Friday, December 21, 2007

По 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

Thursday, December 28, 2006

Скриптец для удаления множества пакаджей Солярки

#pkginfo|grep Northern выдает кучу лишних пакаджей типа:
system SUNWnafos Northern Africa OS Support
system SUNWnafow Northern Africa OW Support
Скриптик помогает создать файлик, при запуске которого можно удалить все эти пакаджи разом.
1) Наваять скрипт 1.pl
#/bin/perl
while (){
(undef, my $a, undef)=split;
print "pkgrm -n $a\n";}
2) pkginfo|grep
Northern | perl 1.pl > aaa
3) chmod 755 aaa
Запустить aaa

Monday, December 25, 2006

Обход ограничения на 8 символов в логине в HPUX

#cd /etc/default
#touch I_ACCEPT_RESPONSIBILITY_FOR_BYPASSING_SECURITY_CHECKS

Friday, December 22, 2006

FTP upload&download

Из-за сбоя ленточного девайса, появилась временная необходимость копировать дампы схем, которые сливаются на локальную ФС как Windows- так и Unix-сервера по расписанию на ftp-сервер своей винды. Сделал это скриптами и установкой расписания.

1) Закачка из из своей винды с сервера БД
Создал два файлика download.bat и ftpdownload.txt
--download.bat
ftp -i -s:ftpdownload.txt

--ftpdownload.txt
open мой хост
oracle
мой пароль
binary
mget /orabackup/dmp
quit

2) Закачка с винды на винду
--ftpdownload.txt
open мой виндовый хост
мое_имя
мой_пароль
binary
get os\1.txt
get os\2.txt
get os\3.txt
get Oracle4Linux\11.txt
get Oracle4Linux\22.txt
quit

По ASM

Размер ASM
SQL> select name,state,type,total_mb,free_mb from v$asm_diskgroup; --размер ASM
SQL>select name,path,mode_status,state,disk_number from v$asm_disk; --дисковые группы

Monday, December 11, 2006

dbora - автостарт базы после ребута сервера

Если быстро и без ASM (проверено на Linux Centos 4.4 с Oracle 10gR2)
1) Исправить /etc/oratab (поменять "N" на "Y")
2) поместить скрипт /etc/init.d/dbora (Листинг ниже)
# ls -l /etc/init.d/dbora
Владельцы и права такие
-rwxr-x--- 1 root dba 785 Mar 14 13:00 /etc/init.d/dbora

3) зарегистрировать сервис
#chkconfig --add dbora

4) проверить наличие сервиса и нужных уровней
# chkconfig --list dbora
dbora 0:on 1:off 2:off 3:on 4:off 5:on 6:on

5) Проверить автостарт базы и листнера перегрузив сервер (init 6). После проверки запущенных сервисов полезно заглянуть в $ORACLE_HOME/shutdown.log (лог остановки базы) и в $ORACLE_HOME/startup.log (лог старта базы).

Листинг /etc/init.d/dbora
==================================
# chkconfig: 0356 99 10
# description: Startup Oracle Instances \
#
ORACLE_OWNER=oracle
ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1 ### (замените на свой ORACLE_HOME)
case "$1" in
start)
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/lsnrctl start"
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbstart"
touch /var/lock/subsys/dbora
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/isqlplusctl start" ### закомментировать строку, если не нужен isqlplus
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/emctl start dbconsole" ### закомментировать строку, если не нужен EM
;;
stop)
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/isqlplusctl stop" ### закомментировать строку, если не запущен isqlplus
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/emctl stop dbconsole" ### закомментировать строку, если не запущен EM
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbshut"
rm -f /var/lock/subsys/dbora
su - $ORACLE_OWNER -c "ORACLE_HOME/bin/lsnrctl stop"
;;
*)
echo $"Usage: $prog {start|stop}"
exit 1
esac
exit
=============================================
Если же нужно стартовать базу на базе ASM, то
в /etc/udev/permissions.d/50-udev.permissions
правим атрибуты файлов raw-устройств, напр-р, в разделе # raw devices добавляем raw/*:oracle:dba:0660, удалив (закоментарив) raw/*:root:disk:0660
ram*:root:disk:0660
#raw/*:root:disk:0660
raw/*:oracle:dba:0660
И не забываем в /etc/oratab заменить N на Y
+ASM:/oracle/product/10.2.0/db_1:Y

Friday, December 08, 2006

20 наиболее привлекательных для АБД возможностей

17 и 20 недели
- Неделя 17 Планировщик (Scheduler)
- Неделя 20 Лучшее на последок (Best of the Rest)

Новая база

Сегодня я получил уведомление о передаче в мое обслуживание к тем небольшим региональным базам, которые я получил после командировки на Сахалин, еще одной БД, которая как я понял намного более серьезна .... База режима 24х7, данных порядка одного терабайта. Бизнес-процессы пока неизвестны, сервер с базой передается другим разработчикам. Поэтому необходимо изучить ее, наладить контакт с разработчиками и вести ее в зависимости от поступающих задач и проблем.
Думаю, успешная поддержка такой базы, потребует бОльших усилий и квалификации. И надеюсь не подведу себя и справлюсь. Надо будет через 2-3 месяца написать сюда отзыв для себя, каково же оно - начало ведения такой базы....

Wednesday, December 06, 2006

На мой "чистый" эл.адрес шлют спам

Нашел сатейку 2-летней давности Что такое атаки DHA?, где просто и понятно объяснен один из способов каким образом твой "незапачканный" нигде эл.адрес может попасть в базы спамеров.
Это еще один аргумент админу почтового сервера, который утверждает, что ты либо сам "засветил" свой эл.адрес либо переписываешься с зараженными респондентами и получаешь теперь спам. "А вы уверены, что DHA (directory harvest attack) на вашем почтовике блокируются?"
Интересно, почему не добавлено в sendmail, exim и др. по дефолту средство блокировки таким образом атакующих IP-адресов?

Saturday, December 02, 2006

db_recovery_file_dest is same as db_create_file_dest

Только что обнаружил в alert.log строку
WARNING: db_recovery_file_dest is same as db_create_file_dest
Т.к. моя база на ASM, то запрос
select name,value from v$parameter where name like '%_file_dest%';
в качестве значения value для упомянутых параметров вернуло "+имя дисковой группы ASM" В моем случае это +DATA....
Думаю нет причин для беспокойств. Но на будущее, очевидно, лучше делать две дисковые группы.
Перед запуском $ORACLE_HOME/bin/asmcmd, чтобы посмотреть на "файловую систему"
необходимо сменить ORACLE_SID через export ORACLE_SID=+ASM.
Иначе ошибка asmcmd: command disallowed by current instance type.

Tuesday, November 28, 2006

LOGON_TIME, для трассировки сессий, запущенных на одном хосте

Если пользователи используют базу через вебинтерфейс приложения, запущенного под каким-то пользователем 'user', то можно использовать хотя бы LOGON_TIME для идентификации sid'а интересующей сессии, по которой нужно сделать трассировку.
Например, для включения трассировки своей сессии, запускаем веб-приложение, регистрируемся и включаем трассировку след.образом:
select sid,serial#,osuser,TO_CHAR(logon_time, 'DD.MM.YYYY HH24:MI') "logon_time" from v$session where osuser='user';

Определяем по logon_time свою сессию и включаем трассировку своей сессии
exec sys.dbms_system.set_ev(sid,serial,10046,12,'');
и повторяем проблемные "щелчки", о которых сообщил юзер


===========
Также полезно использовать триггер after logon на включение трассировки
(после трассировки не забыть отключить его через alter trigger trace_login_trigger disable)
CREATE OR REPLACE TRIGGER trace_login_trigger
AFTER logon ON DATABASE
BEGIN
IF (USER = <'USERNAME'>) THEN
EXECUTE IMMEDIATE 'ALTER SESSION SET EVENTS ''10046 trace name
context forever, level 12';
END IF;
END;

Про snapshots

Правильно ли я понял на опыте сегодняшнего дня, что у snapshots '?' - дифференциальное обновление, 'c' - полное обновление, например,
дифференциальное - BEGIN DBMS_SNAPSHOT.REFRESH('schema.SNP_BRANCH','?'); END;
полное - BEGIN DBMS_SNAPSHOT.REFRESH('schema.SNP_BRANCH','С'); END;

Saturday, November 18, 2006

По установке Oracle 10GR2 в Linux (John Smiley & Tim)

Step-by-step установки Oracle 10.2.0.2 [ 3 | 4 ] на Centos 4.2[4]. (или Enterprise Linux Unbreakable)
на основе
Installing Oracle Database 10g Release 2 on Linux x86, by John Smiley


Предполагается установка патчсета 10.2.0.2 [ 3 | 4 ] и создание новой базы данных, поэтому рассматривается установка без апргейда работающей в 10.2.0.1 БД.
ASM для новой базы данных сконфигурен без ASMlib, на rawdevices.

В примерах далее в выражениях "<<" My уберите кавычки.

Установка и настройка CentOS по дефолту со swap-разделом в 1,5 (или в 2, см.доку) объема RAM, достаточным количеством дискового пространства, c установкой X-ов, Gnome, sysstat, mc etc.
При дисковом пространстве на 12 Gb и RAM на 1024 Мб я выделил разделы след. образом: /boot - 100 мб swap - 1600 мб / - 7 Gb остальное оставил "сырым" под rawdevices.
Без выделения /usr, /var, /tmp , т.е. все будет "валиться" в корень /.
Сразу после установки CentOS в консоли сервера.

1) Т.к. мой сервер под Oracle находится в защищенной сетке для удобства сразу открываю ssh для root (в /etc/ssh/sshd_config раскомментировать строку PermitRootLogin yes), для нормального отображения системных шрифтов в mc правлю /etc/sysconfig/i18n удалением UTF-8 так, что остается LANG="en_US", SUPPORTED="en_US:en"

2) Для последующей установки Oracle через X разрешаю протокол XDMCP (если лень лезть в конфиги, то в GNOME достаточно просто включить галочку в "Applications-System Setting-Login Screen-XDMCP").
Если есть под рукой XManager, то можно не включать XDMCP, а подключаться через XStart XManager’а.

3) Далее удобнее работать в ssh-сессии через putty под root-ом.

Установить все необходимые пакеты (copy-paste).

# rpm -q binutils compat-db control-center gcc gcc-c++ glibc glibc-common gnome-libs libstdc++ libstdc++-devel make pdksh sysstat xscreensaver libaio openmotif21

В моем случае не хватало libaio и openmotif21, о чем сообщил мне запрос
package libaio is not installed package openmotif21 is not installed и я их доустановил прямо из директории CentOS/RPMS дистрибутивного диска (copy-paste).

# rpm -Uvh openmotif21-2.1.30-11.RHEL4.6.i386.rpm libaio-0.3.105-2.i386.rpm

Также опыт показал, что во время установки Oracle возникает ошибка, если не установлен пакет compat-libstdc++ . Поэтому необходимо проверить ее наличие (copy-paste)

# rpm -ql compat-libstdc++-33-3.2.3-47.3

Если no installed, то установить из rpm-ов
# rpm -i compat-libstdc++-33-3.2.3-47.3.i386.rpm
(в Enterprise Linux 4.4 # rpm -Uvh compat-libstdc++-296-2.96-132.7.2.i386.rpm)

И удостовериться, что все доступно в системе
# rpm -ql compat-libstdc++-33-3.2.3-47.3 /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so.5.0.7

Конфигурирование Linux для установки Oracle

1) Заведение групп oinstall, dba и пользователя oracle (copy-paste)
# /usr/sbin/groupadd -g 502 oinstall
# /usr/sbin/groupadd -g 503 dba
# /usr/sbin/useradd -m -u 501 -g dba -G oinstall oracle

Проверка id и gid
# id oracle uid=501(oracle) gid=502(oinstall) groups=502(oinstall),503(dba)

Установка пароля passwd oracle через:
# passwd oracle

2) Создание директорий по OFA (copy-paste)
# mkdir /oracle
# chown -R oracle:oinstall /oracle
# chmod -R 775 /oracle

3) Конфигурирование параметров ядра (через copy-paste)
# cat >> /etc/sysctl.conf
 <<
MYEOF
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=262144
net.core.wmem_max=262144
MYEOF
Проверить /sbin/sysctl -p

4) Установить Shell-лимиты для юзера oracle

#/bin/sh
cat >> /etc/security/limits.conf
 <<
MYEOF
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
MYEOF

# cat >> /etc/pam.d/login
 <<
MYEOF
session required /lib/security/pam_limits.so
MYEOF


# cat >> /etc/profile
 <<
MYEOF
if [ \$USER = "oracle" ]; then
if [ \$SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
MYEOF

# cat >> /etc/csh.login
 <<
MYEOF
if ( \$USER == "oracle" ) then
limit maxproc 16384
limit descriptors 65536
umask 022
endif
MYEOF


# cat >> /etc/profile
 <<
MYEOF
if [ \$USER = "oracle" ]; then
if [ \$SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
MYEOF

# cat >> /etc/csh.login
 <<
MYEOF
if ( \$USER == "oracle" ) then
limit maxproc 16384
limit descriptors 65536
umask 022
endif
MYEOF


Установка Oracle из графического окна.
….

=====
По созданию ASM на базе Rawdevices (взял здесь )
# ls /dev/sd*
sda sda1 sda2 sdb sdc sdd
# 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.

The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
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-1305, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1305, default 1305):
Using default value 1305

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

Calling ioctl() to re-read partition table.
Syncing disks.
#
====
После рестарта появился девайс /dev/sda4
# fdisk -l
Disk /dev/sda: 12.8 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 778 6144862+ 83 Linux
/dev/sda3 1306 1566 2096482+ 82 Linux swap
/dev/sda4 779 1305 4233127+ 83 Linux

Partition table entries are not in disk order

Создаем директорию /dev/raw
# mkdir -p /dev/raw

и в файл /etc/sysconfig/rawdevices прописываем
/dev/raw/raw1 /dev/sda4
и делаем
# service rawdevices restart

Появился диск /dev/raw/raw1, к которому мы назначим хозяина и атрибуты
# chown oracle:dba /dev/raw/raw1
# chmod 660 /dev/raw/raw1

Также, чтобы после перезагрузки сервера атрибуты сохранились, добавим эти же строки в /etc/rc.local
# cat >> /etc/rc.local
 <<
My
chown oracle:dba /dev/raw/raw*
chmod 600 /dev/raw/raw*
My

Под рутом
# /oracle/product/10.2.0/db_1/bin/localconfig add

Затем создаем ASM-инстанс - для этого: ИЛИ запускаем GUI под юзером oracle, запускаем dbca и начинаем создание ASM-инстанса
Почему не вручную? Не вижу смысла создавать директории и файлы вручную, если так и так установка Oracle была из GUI.

Но ...
ИЛИ ВРУЧНУЮ на основе 2 статей Manually Creating an ASM Instance и Adventures in ASM (copy/paste)
# su - oracle
$ orapwd file=$ORACLE_HOME/dbs/orapw+asm password=my_passwd
$ mkdir -p $ORACLE_BASE/admin/+asm/bdump
$ mkdir -p $ORACLE_BASE/admin/+asm/cdump
$ mkdir -p $ORACLE_BASE/admin/+asm/hdump
$ mkdir -p $ORACLE_BASE/admin/+asm/pfile
$ mkdir -p $ORACLE_BASE/admin/+asm/udump

$ cat > $ORACLE_BASE/admin/+asm/pfile/init.ora
 <<
MY
*.background_dump_dest='/oracle/admin/+asm/bdump'
*.core_dump_dest='/oracle/admin/+asm/cdump'
*.instance_type='asm'
*.large_pool_size=12M
*.remote_login_passwordfile='SHARED'
*.user_dump_dest='/oracle/admin/+asm/udump'
MY

$ ln -s $ORACLE_BASE/admin/+asm/pfile/init.ora $ORACLE_HOME/dbs/init+asm.ora

$ export ORACLE_SID=+asm
# sqlplus "/ as sysdba"

SQL> startup
ASM instance started

Total System Global Area 75497472 bytes
Fixed Size 777852 bytes
Variable Size 74719620 bytes
Database Buffers 0 bytes
Redo Buffers 0 bytes
ORA-15110: no diskgroups mounted

SQL> create spfile from pfile;
SQL> alter system set asm_diskstring = '/dev/raw/raw*' scope=both;
SQL> alter system set asm_diskgroups = 'ASM_DATA' scope=both;
SQL> create diskgroup asm_data external redundancy disk '/dev/raw/raw1';

Полезно добавить в SQLPATH скриптик login.sql
==================
login.sql
set serveroutput on size 1000000
set trimspool on
set long 5000
set linesize 900
set pagesize 9999
column plan_plus_exp format a80
column global_name new_value gname
set termout off
define gname=+asm
column global_name new_value gname
select lower(user) || '@' || substr(global_name,1,
decode( dot, 0, length(global_name), dot-1) ) global_name
from (select global_name, instr(global_name,'.') dot from global_name );
set sqlprompt '&gname> '
set termout on

Thursday, November 16, 2006

Скоро на Сахалин!

Скоро еду отработать в Южносахалинск. Возлагаю большие надежды, что все пройдет нормально и готовлюсь сейчас к этой работе. Нужно перевести базу на новый сервер, проапгрейдить СУБД до 10GR2 и немного (при помощи snapshots) изменить логику базы данных.

Friday, October 13, 2006

Oracle's V$ Views

"Пару" ссылок по Oracle's
1) Инсталляция 10G в Linux http://www.oracle.com/technology/pub/articles/smiley_10gdb_install.html
2) http://www.ss64.com/orav/
3) http://www.adp-gmbh.ch/ora/misc/dynamic_performance_views.html

Sunday, October 01, 2006

По истории Приморья

Coгласно антропологической классификации нанайцы, удэгейцы и орочи относятся к байкальскому типу североазиатской расы большой монголоидной расы ...далее.


ЧЖУРЧЖЭНИ В УССУРИЙСКЕ И ЕГО ОКРЕСТНОСТЯХ XI-XII ВЕК, читать

Впервые русские землепроходцы - отряд О.Степанова - побывали в Приморье в середине XVII в. Однако активное изучение и основание края началось в середине XIX вю. К этому же времени относится и интенсивное заселение края.

26 мая 1861 г. южные земли Дальнего Востока России, включая Приморскую область, были объявлены открытыми для заселения крестьянами и "предприимчивыми людьми всех сословий". Приморье заселяли казаки и крестьяне, демобилизованные чины армии и флота, ремесленники и квалифицированные рабочие-контрактники, каторжане и ссыльные, иностранцы, получившие российское подданство, и временно проживающие здесь отходники.

Только за 1861-1900 г.г. на Дальний Восток России, включая Приморье, прибыло 116 тыс. человек, из них почти 82 % крестьян и 9% казаков; за 1901-1916 г.г. сюда переселилось 287 тыс. человек.

В 1959 г. в Приморье возникли первые населенные пункты - казачьи станции на реке Уссури; в 1861-1866 г.г. появились перве крестьянские села на юге края. В 1860 г. был основан город Владивосток.далее


Первоначально Владивосток, или вернее тот пункт, где впоследствии развился настоящий Владивосток, был занят русскою воинскою силою, состоявшею из сорока нижних чинов 4-го линейного батальона под начальством прапорщика Комарова, 20 июня 1860 г. Команда эта была доставлена сюда на военном транспорте «Маньчжур», входившем, по-видимому, в состав эскадры особой экспедиции, под начальством адмирала П.В. Козакевича, которой было предписано занять и укрепить два пункта для небольших команд в гаванях Новгородской (Посьет) и Владивостоке, в заливе Петра Великого, крейсировать около него и описать все берега его от границ Кореи с юга до бухты Ольги к северу со всевозможной точностью и подробностью».

Наше побережье, как и весь Уссурийский край, официально перешли к нам по Пекинскому трактату 2 ноября 1860 года. ... далее


Старое фото: Бухта Золотой Рог

ОСНОВАНИЕ ВЛАДИВОСТОКА

Wednesday, September 27, 2006

Скоро на курсы DBA

Скоро - через 2,5 недели - еду на курсы DBA 10 и надеюсь удастся осознать и понять то, о чем там будут говорить. Не запомнить как поэтапные инструкции к выполнению, а именно понять и разложить полученные знания по полочкам как можно быстрее и как можно глубже.
У меня имеется опыт прослушивания 4-ех авторизованных курсов от MS и 1-го от Oracle и ... я понял, что понять и осмыслить тот объем информации, который нужно освоить "галопом по Европе" во время курсов просто невозможно физически, так как очень мало времени для этого и трудно смоделировать настоящие проблемные ситуации, которые могут возникать.
Поэтому думаю, что для максимального понимания, послекурсовой "домашний" практикум по тем же Student Guide обязателен. Прохождение которого как правило впоследствии помогает быстрее осмыслить проблему, разобраться в рабочей проблеме и найти оптимальный путь ее решения.
Да, как я помню, тогда по окончанию курсов всегда не было времени на этот домашний практикум по Student Guide, но .... возможно просто я неправильно расставлял приоритеты.
Да, после первых 3 курсов, MS занимаясь каждый день по вечерам во время курсов, я все же смог сдать экзамен на MCP Windows NT Server 4. Но впоследствии работая в этой области, я много раз убеждался как много я еще не знаю. Тогда после курсов я также не смог повторить домашний практикум.

Т.е. нынче надо будет собраться и после этих курсов по максимуму прогонять их в вечернее время. Очень надеюсь на это будет оставаться время и силы.
От прохождения домашнего практикума зависит то, как я быстро приближусь к тому, чтобы стать Oracle DBA.
И я спрашиваю себя: "Хорошо это уяснил? Через 3-4 месяца посмотрим".

Vintela Authentication Services

Совсем недавно - позавчера - я узнал, что есть возможность приобрести Vintela Authentication Services и так обрадовался, что написал по этому поводу в форум, в котором 2 месяца назад я задавал вопрос по AD-авторизации в Solaris.
http://forum.sun.com/jive/thread.jspa?threadID=102574&tstart=0

В ответ на директиву высказать мнение о целесообразности покупки VAS я написал директорату:

"По решению от Vintela - как единая система для AD-authz для всех хостов нашей компании, данная технология может быть наиболее адекватной для наших нужд.
Но конечно желательно его предварительно протестировать в нашем зоопарке разных ОС и платформ.
В данный момент ситуация с тестированием AD-авторизации на UNIX-подобных системах у нас такая:
1) Для настройки единой аутентификации в разных Unix ОС, которые есть у нас можно использовать встроенные Native либо OpenSource-средства типа OpenLdap, PADL и MIT Kerberos, но везде приходится сталкиваться с нюансами, которые характерны для той или иной ОС. И разворачивание данного решения на наших рабочих UNIX-хостах может потребовать немало времени.
2) Решение с аутентификацией и авторизацией данными средствами работает в настоящий момент на трех тестовых серверах на базе ОС:
- Solaris 10x (10.25.66.222);
- HP UX 11 v2 (10.25.38.2);
- CentOS 4.3 (10.25.66.251).

но везде встала проблема с разграничением доступа к данным серверам по принадлежности AD-пользователей к тем или иным группам AD - независимо от принадлежности к соответствующим группам в AD и pam-политики UNIX-сервера пользователь авторизуется. Причем использовались разные средства, как native так и openldap и средства от padl.com.

Например, проблема c CentOS 4.3 проиллюстрирована ниже: пользователь test, который не являясь членом группы AD-DBA, авторизуется на CentOS, хотя при входе выскакивает баннер о необходимости быть членом этой группы для успешного входа.

login as: test

test@10.25.66.251's password:
You must be a msSFU30MemberUid of CN=AD-DBA,OU=UNIX-Groups,OU=UNIX-OU,DC=testdomain,DC=ru to login.

Last login: Mon Sep 25 12:24:13 2006 from ws234.testdomain.ru

[test@centest ~]$ id
uid=10118(test) gid=10007(AD-Adms) groups=10007(AD-Adms)
[test@centest ~]$

В Solaris и HP-UX также присутствует данная проблема, просто без подобного баннера.

3) Рано или поздно появится необходимость монтирования при помощи smbclient-ов домашних директорий пользователей AD с файлового сервера.
А это опять свои нюансы на каждой ОС. Т.е. для задейстования автомонтирования при логоне посредством Samba-клиентов возможно тоже потребуется бубен.

4) Это субъективно, но во многих форумах по решению тех или иных проблем с AD-авторизацией на UNIX-машинах, я не единожды встречал реплики о том, что сменив танцы с бубном на решение от Vintela подобные проблемы исчезли.

Вышеперечисленные пункты можно отнести в пользу тестирования решения от Vintela.
Также немаловажно наличие поддержки от их российского представительства.

Wednesday, August 09, 2006

LDAP-авторизация заработала

LDAP-авторизация заработала в тестовой среде на Solaris 10x86 в VMWare 1.0 и Win2K3R1. Помог Андреас, натолкнувший на то, что в AD нужно сделать OU-структуру как описано в MS статье, когда так сделал выпросив разрешения у начальства - действительно сработало. Ну а птом покатило и с вложенными OU-шками.

Monday, July 31, 2006

Чтение книг полезная вещь, но опасная как динамит

Нашел интересную интерпретацию цоевской фразы:
Когда-то Виктор Цой пел: «Чтение книг полезная вещь, но опасная как динамит». Современная бюрократия и буржуазия лучше других понимает подрывной характер книги, ее способность формировать думающих, критически мыслящих людей, способных задать себе и другим неправильные вопросы. Нас они видят в качестве дешевой рабочей силы и потребителя телевизионного суррогата. «Главное не напрягать мозги, меньше знаешь — крепче спишь»! Рыночный тоталитаризм должен быть комфортным! Разделение труда должно сопровождаться и разделением умственной деятельности. Одни работают и не думают, другие думают и управляют. Выход один: сопротивляться!

Tuesday, July 25, 2006

Ccылки

Command line reference for Windows, Bash, Oracle, and SQL Server http://www.ss64.com/
Docs by books http://www.oracle.com/pls/db102/portal.all_books

Первый месяц, Solaris AD, Kyte

Уже чуть более месяца (22 июля был месяц) как я на новом месте работы. Работа и город нравятся, быт более менее устроен. Благодаря Антону Яцевичу жилищных проблем с устройством в городе не возникло. Пару недель назад дочу приняли в 1-ую гимназию и в связи с чем 10 дней назад мы сменили жилье, теперь мы живем в 3 минутах от офиса, что расширило наши возможности как по моей работе, так и по освоению моими девочками городских достопримечательностей. Занимаюсь установкой аутентификации и авторизации пользователей AD в Solaris на тестовой машине (Solaris 10 6/06 на VMWare Server 1.0). Аутентификация через Керберос встала бес проблем, но авторизация через LDAP пока не дается. Основой послужила вторая глава из книжки MS Windows Security and Directory Services for UNIX v1.0
http://www.microsoft.com/technet/itsolutions/cits/interopmigration/unix/usecdirw/08wsdsu.mspx
Интересно было бы проверить ее на Solaris 9 for Sparc, но пока такой возможности нет.
Также с сегодняшнего дня нужно вплотную приступить к чтению Oracle-литературы.