Поиск по этому блогу

четверг, 27 октября 2016 г.

Oracle SQL Developer vs FOR UPDATE


Порой возникает необходимость что-то быстренько изменить в любимой БД, пока никто не видел, делать это стандартным способом через написание апдейта конечно не хочется, так как это не так быстро как хотелось бы, да и сильно изнашивает клавиатуру. В дурацком и дорогом PL/SQL Developer'e, для таких как мы, давно уже придумали обходной путь в виде самопального оператора for update, который быстро и без напряга позволяет поменять всё и вся. А что же в бесплатном и кроссплатформеном Oracle SQL/Devekoper'e? Как все мы давно уже поняли компания Oracle лёгких путей не ищёт, но всё же на это случай она придумала свой, как всегда, "элегантный" способ. Вот он.


Последовательность действий следующая:

1. Выполняем интересующий запрос к БД, понимаем что  нам нужно изменить в конкретной строке. Выделяем условие выборки следующее за оператором where и сохраняем его в буфер обмена (Ctrl + c)




2. Зажимаем клавишу Ctrl, наводим курсор манипулятора мышь на название интересующей таблицы, в моём примере это таблица doc, и нажимаем левую кнопку манипулятора.



3. После выполнения второго пункта откроется расширенное меню таблицы. В нём необходимо перейти на вкладку  Data








4. Копируем в строку ввода Filter условия выборки запроса. И нажимаем клавишу Enter




5. Выбираем поле которое необходимо отредактировать, и открываем его  двойным щелчком по левой кнопке манипулятора мышь.








6. Вносим необходимые изменения и нажимаем кнопку ОК





7. Чтобы зафиксировать изменения в БД необходимо нажать на кнопку Commit changes (пиктограмма БД с зеленой галкой)





8. Изменения внесены, теперь можем проверить их корректность выполнив ещё раз начальный запрос.




Спасибо за внимание.

P.S. Oracle SQL Developer хорош ещё тем, что умеет общаться и с другими БД например с PostgreSQL, MSSQL, MYSQL используя специальные плагины.

 

пятница, 11 июля 2014 г.

OeBS: Поднять приоритет запросу ожидающего своей очереди

update apps.fnd_concurrent_requests set priority=40 
    where request_id=95678 
    and phase_code='P'

четверг, 31 октября 2013 г.

OeBS: Отчет о состоянии служебных процессов в системе

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

alter session set nls_language = american nls_territory = america
/
declare
x_errm varchar2(4000);
x_errc number;
begin
xxt_bs_services.delete_set;
xxt_bs_services.check_or_fix_admin_prg(x_errm, x_errc, true);
dbms_output.put_line('errc= '||x_errc);
dbms_output.put_line('errm= '||x_errm);
end;
/

вторник, 25 июня 2013 г.

OeBS: Время работы БД с последнего запуска. (Uptime oracle database)

Иногда, для разбора полётов, полезно знать насколько долго уже живёт пациент (БД oracle), своего рода аналог команды uptime в *nix системах.


select STARTUP_TIME from v$instance

вторник, 15 января 2013 г.

OeBS: Поиск пользователей с установленным режимом debug_mode


-- Ищем у кого установлен профиль "Запускать операцию в debug_mode"
    
SELECT fpo.profile_option_name,fpov.level_value,f.user_name
,fpo.user_profile_option_name
,fpov.profile_option_value
from fnd_profile_option_values fpov,
fnd_profile_options_vl    fpo,
fnd_user f
where fpov.application_id    = fpo.application_id
and fpov.profile_option_id = fpo.profile_option_id
and f.user_id=fpov.level_value
and fpo.user_profile_option_name='ФК: Запускать операцию в debug_mode'
and fpov.profile_option_value='Y'

воскресенье, 13 января 2013 г.

OeBS: пакетная отмена выполнения запросов

Отмена всех одноимённых запросов:

1. Найти program_short_name по ид одного из нужных запросов.

select program_short_name from fnd_conc_req_summary_v where request_id='50654852'

2. Отменить все запросы в очереди по program_short_name

Для запросов ожидающих своей очереди:

update fnd_concurrent_requests set status_code='D', phase_code='C'
where request_id in (select request_id from fnd_conc_req_summary_v
where program_short_name='результат предыдущего запроса' and phase_code='P')
commit;

Для выполняющихся в данный момент запросов:

Внимание! Перед выполнением необходимо убедиться, что для выбранного типа запросов данный способ остановки будет корректным.

update fnd_concurrent_requests set status_code='D', phase_code='C'
where request_id in (select request_id from fnd_conc_req_summary_v
where program_short_name='результат предыдущего запроса' and phase_code='R')
commit;

пятница, 6 апреля 2012 г.

СТЭ: поиск и удаление "потерянных" файлов

Поиск и удаление «потерянных» файлов БД – ситуация когда на ФС есть а в словаре данных нет.
Небольшой скрипт выводящий в файл наличие файлов БД на файловой системе и в базе данных, показывающий "лишние" файлы.


К сожалению блог "съедает" часть скрипта, поэтому выкладываю в виде файла.

# Путь до файлов БД согласно ТА, для APRODE
DBPATH=/ftas01/prod/oebs/db/apps_st/data
#Поиск файлов БД на файловой системе, по группам, с последующей записью в файлы
find $DBPATH/files/* -print > fs_datafiles.txt
find $DBPATH/redo/* -print > fs_redo.txt
find $DBPATH/temp/* -print > fs_temp.txt
find $DBPATH/undo/* -print > fs_undo.txt

# Запись в файл списка файлов учтённых в БД. Разбито на 4 группы.
sqlplus -S system/manager<<c1
spool on;
spool database_files_datafile.txt;
set pages 0;
set heading off;
set feedback off;
select name from v\$datafile where name not like '%undo%' order by name;
spool off;
exit;
/
c1

sqlplus -S system/manager<<c2
spool on;
spool database_files_undo.txt;
set pages 0;
set heading off;
set feedback off;
select name from v\$datafile where name like '%undo%' order by name;
spool off;
exit;
/
c2

sqlplus -S system/manager<<c3
spool on;
spool database_files_temp.txt;
set pages 0;
set heading off;
set feedback off;
select name from v\$tempfile order by name;
spool off;
exit;
/
c3

sqlplus -S system/manager<<c4
spool on;
spool database_files_redo.txt;
set pages 0;
set heading off;
set feedback off;
select member from v\$logfile order by member;
spool off;
exit;
/
c4
# Команда сравнения файлов на ФС и БД по группам и вывод разницы в один результирующий файл
sdiff database_files_datafile.txt fs_datafiles.txt > diff_datafiles.log
sdiff database_files_undo.txt fs_undo.txt >> diff_datafiles.log
sdiff database_files_temp.txt fs_temp.txt >> diff_datafiles.log
sdiff database_files_redo.txt fs_redo.txt >> diff_datafiles.log
# Удаление всех промежуточных результатов
rm database_files_datafile.txt fs_datafiles.txt database_files_undo.txt fs_undo.txt database_files_temp.txt fs_temp.txt database_files_redo.txt fs_redo.txt



Скрипт можно скачать здесь: count_diff.sh

понедельник, 26 марта 2012 г.

OeBS: Трассировка канкарентов (TraceConcurrent)

Иногда возникает необходимость снять трассировку выполнения определённого канкарента, разберём на примере.

Включить трассировку для "Перенос записей в ГК". Как это сделать:

Полномочие "Системный администратор"
Руководитель - Программа - Определение
Осуществляем поиск нужной программа (F11- Ctrl + F11) не забываем поставить галку "Включено" в строке поиска по называнию программы.

Ставим или снимаем галку с пункта "Включить трассировку" по необходимости.

Запустить запрос на выполнение. Подождать 10-15 мин.

Файл трассировки появится в каталоге udump определить его имя можно использовав следующий запрос:

select oracle_process_id from fnd_concurrent_requests
where request_id=[request_id]

Поиск включенной трассировки

-- После включения трассировки пользователи, бывает, забывают её отключить. Найти программы со включенной трассировкой можно так.

select fv.PROGRAM_SHORT_NAME, fv.PROGRAM from fnd_concurrent_requests fc, fnd_conc_req_summary_v fv
where fc.enable_trace = 'Y'
and fc.request_id=fv.REQUEST_ID



среда, 14 марта 2012 г.

OeBS: Детализированный вывод выполняющихся канкарентов

Запрос в деталях расскажет какие канкаренты сейчас исполняются.

select distinct r.request_id,
PR.USER_CONCURRENT_PROGRAM_NAME,
TO_CHAR((sysdate - r.requested_start_date) * 24 * 60, '9999') MINUTES,
s.SID,
s.SQL_ID,
s.WAIT_CLASS,
s.event,
s.SECONDS_IN_WAIT,
s.BLOCKING_SESSION,
U.USER_NAME,
r.requested_start_date,
r.priority
FROM FND_CONCURRENT_REQUESTS R
left join v$session s on s.PROCESS = r.os_process_id
INNER JOIN FND_USER U ON U.USER_ID = R.REQUESTED_BY
INNER JOIN FND_CONCURRENT_PROGRAMS_TL PR ON PR.CONCURRENT_PROGRAM_ID = R.CONCURRENT_PROGRAM_ID
where  STATUS_CODE = 'R'

среда, 25 января 2012 г.

OeBS : Статусы конкарент запросов и фазы их выполнения

Коллегой была найдена отличная заметка Arun Kumar'a на заданную тему, оригинал здесь

Статусы конкарент запросов и фазы их выполнения с вольным переводом.

STATUS_CODE Column:

A - Waiting (Ожидание)
B - Resuming (Возобновление)
C - Normal (Нормальное выполнение)
D - Cancelled (Отменено)
E - Error (Ошибка)
F - Scheduled (Запланировано)
G - Warning (Предупреждение)
H - On Hold (В ожидании)
I - Normal (Нормальное выполнение)
M - No Manager (Нет диспетчера)
Q - Standby (Ожидания)
R - Normal (Нормальное выполнение)
S - Suspended (Приостановлено)
T - Terminating (Завершение)
U - Disabled (Отключено)
W - Paused (Приостановлено)
X - Terminated (Завершено)
Z - Waiting (Ожидание)



PHASE_CODE column:

C - Completed (Завершено)
I - Inactive (Неактивно)
P - Pending (В ожидании)
R - Running  (Выполняется)

суббота, 7 января 2012 г.

OeBS : Не останавливается БД

Бывают такие моменты, что база данных останавливается неприемлемое количество времени, что делать в таких случаях:

Под пользователем БД в ОС выполнить команду
ps -fe |grep pdboebs

Если в выводе окажутся строки с вот таким текстом (LOCAL=NO) это наш случай.

Решение: выполнить команду в ОС под пользователем БД

for a in `ps -aef | grep -v grep | grep "APRODE (LOCAL=NO" | awk '{print $2}'`; do kill -9 "$a"; done 

После чего из вывода первой команды характерные строки должны уйти. Если они не ушли обратите внимание на название инстанса в примере это APRODE, регистр имеет значение.

Если и это не помогло, необходимо принудительно остановить БД выполнив следующее:

sqlplus / as sysdba
shutdown abort;
startup;

СУФД : Таблицы, запросы, мониторинг


Цитирую документ Таблицы запросы мониториг_new

ЦЕПОЧКА ТАБЛИЦ В СУФД

---------Цепочка таблиц входящие
select * from queue_packet_in
select * from queue_in_pack2docq
select * from queue_document
select * from doc
select * from abstractdoc

---------Цепочка таблиц исходящие
select * from abstractdoc
select * from doc
select * from queue_document
select * from queue_out_pack2docq
select * from queue_packet_out
--------------------------------------
select * from document_queue_to_org


OeBS : История исполнения ASFK_NIGHT_SERVICES


Посмотреть историю и результат сбора статистики по схемам за последние несколько дней можно следующим запросом:

select request_id, request_date,requested_start_date, requested_by, phase_code,status_code,actual_start_date,actual_completion_date,completion_text from fnd_concurrent_requests
where concurrent_program_id=(select concurrent_program_id from fnd_concurrent_programs
where concurrent_program_name='ASFK_NIGHT_SERVICES')
order by request_id desc

Посмотреть более детально по схемам можно так:

select last_analyzed, table_name  from all_tables 
where owner='XXT' and temporary!='Y' order by 1 desc
 
select last_analyzed, table_name  from all_tables 
where owner='APPLSYS' and temporary!='Y' order by 1 desc
 
select last_analyzed, table_name  from all_tables 
where owner='GL' and temporary!='Y' order by 1 desc
 
select last_analyzed, table_name  from all_tables 
where owner='XLA' and temporary!='Y' order by 1 desc
 
select last_analyzed, table_name  from all_tables 
where owner='AP' and temporary!='Y' order by 1 desc
 
select last_analyzed, table_name  from all_tables 
where owner='SUFD' and temporary!='Y' order by 1 desc
 
select last_analyzed, table_name  from all_tables 
where owner='SUFD2' and temporary!='Y' order by 1 desc
 

 
Поле last_analyzed отображает дату последнего сбора. 

OeBS : Поиск блокирующих сессий


Цитирую известный документ. 

1. Поиск блокирующих сессий (blocking session).

Для поиска блокирующих сессий можно использовать следующий запрос


select p.pid, s.sid, s.serial#,s.process,
s.blocking_session, -- sid блокирующей сессии
s.seconds_in_wait, -- время ожидания в секундах
s.username, s.program, s.module
from v$session s, v$process p
where s.paddr = p.addr
and blocking_session is not null
order by seconds_in_wait

select sid, status, serial#, sql_id, action, event
from v$session where sid = < sid блокирующей сессии >


На основании полученной информации можно рассматривать вопрос о принудительном отсоединении блокирующей сессии.

alter system kill session '< sid блокирующей сессии >, < serial# блокирующей сессии >'



2. Поиск блокирующих сессий для события ожидания «Сursor: pin S wait on X».

SELECT p2raw ,
to_number(substr(to_char(rawtohex(p2raw)), 1, 8), 'XXXXXXXX') sid
FROM v$session
WHERE event = 'cursor: pin S wait on X';

select sid, status, serial#, sql_id, action, event
from v$session where sid = < sid блокирующей сессии >


На основании полученной информации можно рассматривать вопрос о принудительном отсоединении блокирующей сессии

alter system kill session '< sid блокирующей сессии >, < serial# блокирующей сессии >'

среда, 4 января 2012 г.

Pidgin - модульный клиент мгновенного обмена сообщениями (для протокола IRC)

Эта небольшая инструкция поможет Вам установить и правильно настроить pidgin используя протокол обмена мгновенными сообщениями IRC Дистрибутив клиента pidgin можно скачать на его официальном сайте http://www.pidgin.im/

Скачать инструкцию в удобном для Вас формате можно здесь:

howto-pidgin-irc-windows.doc
howto-pidgin-irc-windows.odt
howto-pidgin-irc-windows.pdf
howto-pidgin-irc-windows.mht
howto-pidgin-irc-windows.html
howto-pidgin-irc-windows все форматы




P.S. Инструкция по установке и настройке немного другого, но тоже очень хорошего клиента IRC howto-x-chat-irc-windows

четверг, 23 июня 2011 г.

AIX: автозагрузка



Предлагаю Вашему вниманию организацию исполнения произвольных команд после перезагрузки AIX.
За исполнения скриптов после запуска ОС AIX отвечает файл /etc/inittab
Синтаксис добавления новго задания:
otr:2:once:/usr/bin/autostart.sh
Где:
otr - произвольные символы (роли не играют)
2 - уровень загрузки
once - запускать при запуске однократно
/usr/bin/autostart.sh - скрипт со всеми необходимыми нам командами
Конечно файл /usr/bin/autostart.sh должен быть заранее создан.
touch /usr/bin/autostart.sh
chmod +x /usr/bin/autostart.sh
Создаем и делаем исполняемым.

среда, 4 мая 2011 г.

OS: Удобряем screen в AIX


Screen прекрасная и удобная программа, но в ОС AIX она работает несколько странно... ну я думаю Вы это уже заметили клавиша забой не работает вместо нее приходится пользоваться сочетанием клавиш ctrl+h ну и так по мелочи. Решение есть, необходимо создать файл .screenrc в домашнем каталоге пользователя.

Содержимое файла может быть следующим:

vbell off
autodetach on
startup_message off
pow_detach_msg "Screen session of \$LOGNAME \$:cr:\$:nl:ended."
shell -$SHELL
shellaka '$ |bash'
defscrollback 10000
termcap xterm hs@:cs=\E[%i%d;%dr:im=\E[4h:ei=\E[4l
terminfo xterm hs@:cs=\E[%i%p1%d;%p2%dr:im=\E[4h:ei=\E[4l
termcapinfo xterm Z0=\E[?3h:Z1=\E[?3l:is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l
termcapinfo xterm* OL=10000
termcapinfo xterm 'VR=\E[?5h:VN=\E[?5l'
termcapinfo xterm 'k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~'
termcapinfo xterm 'kh=\E[1~:kI=\E[2~:kD=\E[3~:kH=\E[4~:kP=\E[H:kN=\E[6~'
termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
termcapinfo xterm 'vi=\E[?25l:ve=\E[34h\E[?25h:vs=\E[34l'
termcapinfo xterm 'XC=K%,%\E(B,[\304,\\\\\326,]\334,{\344,|\366,}\374,~\337'
termcapinfo xterm ut
termcapinfo wy75-42 xo:hs@
termcapinfo wy* CS=\E[?1h:CE=\E[?1l:vi=\E[?25l:ve=\E[?25h:VR=\E[?5h:VN=\E[?5l:cb=\E[1K:CD=\E[1J
termcapinfo hp700 'Z0=\E[?3h:Z1=\E[?3l:hs:ts=\E[62"p\E[0$~\E[2$~\E[1$}:fs=\E[0}\E[61"p:ds=\E[62"p\E[1$~\E[61"p:ic@'
termcap vt100* ms:AL=\E[%dL:DL=\E[%dM:UP=\E[%dA:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC
terminfo vt100* ms:AL=\E[%p1%dL:DL=\E[%p1%dM:UP=\E[%p1%dA:DO=\E[%p1%dB:LE=\E[%p1%dD:RI=\E[%p1%dC
bind k
bind ^k
bind .
bind ^\
bind \\
bind ^h
bind h
bind 'K' kill
bind 'I' login on
bind 'O' login off
bind '}' history
register [ "\033:se noai\015a"
register ] "\033:se ai\015a"
bind ^] paste [.]
bindkey -d -k kb stuff \010

Взято вот отсюда

вторник, 26 апреля 2011 г.

OeBS: Сбор статистики по схемам


При сборе статистики по схемам возможно возникновение типичной ошибки. Заблокированы таблицы сбора статистики, необходимо их разблокировать командой:

exec dbms_stats.unlock_table_stats ('APPS', 'XXT_PPP_MPP_RPP');

Где:
APPS - схема
XXT_PPP_MPP_RPP - таблица

понедельник, 18 апреля 2011 г.

СУФД: Альтернативное решение транспорта между СУФД УФК и СУФД ОФФЛАЙН на основе ПО с открытым кодом (lftp)

Предлагаю Вашему вниманию организацию передачи данных между СУФД ОФК и СУФД УФК на основе протокола FTP.


В УФК установлен и настроен FTP сервер, с ним и предполагается работать, для работы с ним необходимо выбрать программное обеспечение способное осуществлять автоматическую доставку данных на ftp сервер и их получение с него.

В качестве такой программы предлагаю использовать универсальный ftp-клиент LFTP. Неомного о нём из wikipedia:
lftp — консольный FTP-клиент для UNIX и UNIX-подобных операционных систем. Программа написана Александром Лукьяновым и распространяется по лицензии GNU GPL.
Кроме FTP программа также поддерживает протоколы FTPS, HTTP, HTTPS, HFTP, FISH и SFTP, используемый протокол автоматически определяется из URL-ссылки. Одно из достоинств программы Lftp - поддержка протокола FXP: передачи данных между двумя FTP-серверами без участия компьютера клиента.
С помощью команды torrent можно задействовать BitTorrent-клиент.

Lftp относится к мощ 085;ым FTP-клиентам, он имеет такие фукнции как рекурсивное зеркальное копирование дерева каталогов, автоматическое возобновление прервавшейся загрузки или приостановка вручную, выставление закладок для файлов и каталогов, и многое другое. Загрузка файлов в назначенное время, ограничение скорости загрузки, очереди загрузки. Контроль процесса загрузки в UNIX-подобной командной оболочке, либо автоматизация процесса скриптами.


понедельник, 4 апреля 2011 г.

OeBS: Инициализация окружения


DECLARE
l_resp_id INTEGER;
l_app_id INTEGER;
l_user_id INTEGER;
l_person_id INTEGER;
l_person_name VARCHAR2 (200);
l_person_l_name VARCHAR2 (200);
l_person_f_name VARCHAR2 (200);
l_person_m_name VARCHAR2 (200);
l_phone_number VARCHAR (200);
BEGIN
-- Test statements here
SELECT responsibility_id, application_id
INTO l_resp_id, l_app_id
FROM fnd_responsibility_vl
WHERE responsibility_name = 'АСФК: Все функции';
SELECT user_id
INTO l_user_id
FROM fnd_user
WHERE user_name = 'NLESIN';
fnd_global.apps_initialize (l_user_id, l_resp_id, l_app_id);
END;

Где:
NLESIN - Учётная запись пользователя в OeBS