barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

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

Java: залогировать стек текущего потока

Задача

Залогировать стек текущего потока.

Решение

Немного неочевидное, т.к. Thread имеет метод dumpStack(), который печатает стек в поток ошибок, а нам надо задействовать логгер. Получилось так:
        StringWriter strWr = new StringWriter();
        PrintWriter writer = new PrintWriter(strWr);
        new Throwable().printStackTrace(writer);
        logger.severe(strWr.toString());

вторник, 3 апреля 2018 г.

Oracle Weblogic: ALTER SESSION-команды в Init SQL

Задача - в качестве Init SQL необходимо выполнить 2 ALTER SESSION-команды
Решение - ALTER SESSION-команды в Init SQL заворачиваем в анонимный PL/SQL-блок, а внутри него каждую команду - в execute immediate:
SQL BEGIN execute immediate('alter session set ...');execute immediate('alter session set ...'); END;

Oracle: посчитать число индексов по char/varchar-колонкам

SELECT COUNT(DISTINCT i.INDEX_NAME)
FROM dba_ind_columns i
    JOIN dba_tab_columns c
        ON (c.TABLE_NAME = i.TABLE_NAME AND c.OWNER = i.TABLE_OWNER AND c.COLUMN_NAME = i.COLUMN_NAME)
WHERE
    (UPPER(c.DATA_TYPE) LIKE 'VARCHAR%'
        OR UPPER(c.DATA_TYPE) LIKE 'CHAR%')

четверг, 15 марта 2018 г.

Как сменить пароль на машине c Windows Server 2012, к которой подключаешься по RDP

Т.к. Ctrl+Alt+Delete просто так на удаленную машину не отправить (комбинация отработает на локальной машине), необходимо воспользоваться комбинацией Ctrl+Alt+End, которая отправит Ctrl+Alt+Delete на удаленную машину. Ну и на появившемся экране нажимаем "Change password".

четверг, 21 декабря 2017 г.

Узнать SID сессии по database link

Проблема

Есть БД "А" и БД "Б", в первой создан DATABASE LINK ко второй. Нужно запросом к БД "А" узнать идентификатор сессии (SID) между БД "А" и БД "Б".

Решение

Из всех опробованных вариантов заработал только этот:
select
   to_number(substr(dbms_session.unique_session_id@DBLINK_NAME,1,4),'XXXX') mysid
from dual;
, где DBLINK_NAME - имя DATABASE LINK'а.

четверг, 23 ноября 2017 г.

Oracle DB: определение размера MATERIALIZED VIEW

Следующий запрос возвращает размеры (в Мб) всех материализованных представлений в БД:
SELECT segment_name,sum((BYTES)/(1024*1024)) "Allocated(MB)"
FROM dba_extents
WHERE segment_name in (SELECT mview_name FROM dba_mviews)
GROUP BY segment_name ;
Спасибо http://javeedkaleem.blogspot.ru/2010/04/find-space-used-by-materialized-views.html.