barbitoff programmer`s blog

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

понедельник, 27 мая 2013 г.

WSO2 ESB: логирование из groovy-скрипт-медиатора

Вызов mc.getServiceLog() возвращает объект org.apache.commons.logging.Log (логгер имеет имя "org.apache.synapse.mediators.bsf.ScriptMessageContext"):
mc.getServiceLog().error("123")
выводит в wso2carbon.log:
TID: [0] [ESB] [2013-05-27 12:00:21,855] ERROR {org.apache.synapse.mediators.bsf.ScriptMessageContext} -  123 {org.apache.synapse.mediators.bsf.ScriptMessageContext} 

понедельник, 20 мая 2013 г.

Утилита для выполнения DQL

Для тех, кому надоело выполнять DQL через DA, рекомендую бесплатную утилиту dqMan (http://www.fme.de/en/industry-sectors/solutions/dqman/). Для работы утилите требуется библиотека dmcl40.dll и dmcl.ini с настройками репозитория (берутся из установки Documentum DFC).

PS Поспешил немного с рекомендацией. Заставить это чудо корректно отображать русские символы в результатах select'а у меня не получилось, правка dmcl.ini не помогает, отображаются кракозябры. Да и вообще теперь оно у меня падает почему-то сразу после логина в репозитории, хотя я ничего ни в каких конфигах не менял.

среда, 15 мая 2013 г.

Установка PyCairo под Win

При попытке запуска одного из скриптов, написанных на Python, получил ошибку:
import cairo
ImportError: No module named cairo
Причина - не установлена библиотека cairo. Ставится она из неофициальной сборки под Windows, найти её можно тут:  http://www.lfd.uci.edu/~gohlke/pythonlibs/#pycairo (есть версии под x86 и x64 и разные версии питона).

Oracle: просмотр списка активных запросов

Следующий запрос выдает информацию по активным запросам, включая sid и serial (необходимые для "убивания" запроса), а также сам текст запроса:
select a.sid, a.serial#, a.osuser, sql_text
from v$session a, v$sqlarea b
where b.hash_value = a.sql_hash_value
  and a.schemaname != 'SYS'
  and a.status = 'ACTIVE'
Убивается запрос выполнением:
ALTER SYSTEM KILL SESSION 'sid,serial'

Oracle: загрузка из csv

В поставку клиента Oracle входит утилита SQL Loader (sqlldr), предназначенная как раз таки для загрузки данных из внешних файлов. Подробно её использование описано тут: http://www.orafaq.com/wiki/SQL*Loader_FAQ. В т.ч. она умеет загружать данные в таблицы из scv. Для этого нужно создать управляющий файл примерно следующего содержания:
load data
 characterset utf8
 infile '/path/to/my.csv'
 into table table_name_to_import
 fields terminated by ","
 ( col1, col2, col3 )
Данный файл указывает путь к csv для загрузки, говорит о том, что содержимое файла закодировано с помощью UTF8 (без BOM), поля разделены запятыми, в каждой строке содержится 3 поля, которые должны быть загружены в таблицу "table_name_to_import" в колонки "col1", "col2" и "col3".
После этого можно вызывать sqlldr:
T:\app\username\product\11.2.0\client_1\BIN>sqlldr <username>@<alias>/<password> control=/путь/к/управляющему.файлу
В случае, если какие-то записи не были загружены (например, было превышено ограничение на длину поля), sqlldr рядом со входящим файлом создаст файл с расширением ".bad", в который будут помещены ошибочные записи из входящего csv.
В частности, при конфигурации, приведенной выше, в этот файл попадут все строки с пустыми полями, т.е. когда подряд идут два разделителя. Чтобы такие записи все же загружались (с установкой соотв. полей в NULL), нужно указать "trailing nullcols" в управляющем файле (после указания разделителя):
load data
 characterset utf8
 infile '/path/to/my.csv'
 into table table_name_to_import
 fields terminated by "," TRAILING NULLCOLS
 ( col1, col2, col3 )
Кстати, чтобы таблица, в которую осуществляется импорт, предварительно очищалась, можно воспользоваться командой "TRUNCATE", размещаемой перед "into":
load data
 characterset utf8
 infile '/path/to/my.csv'
 TRUNCATE into table table_name_to_import
 fields terminated by "," trailing nullcols
 ( col1, col2, col3 )