четверг, 9 октября 2014 г.

ARCHIVELOG - посмотреть/включить/выключить

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

-- режим архивлогов
SQL> SELECT LOG_MODE FROM SYS.V$DATABASE;

-- пути и количество архивлогов
SQL> ARCHIVE log list;

Изменить размещение

SQL> ALTER SYSTEM SET log_archive_dest_1='location=/u01/oradata/MYSID/archive/' SCOPE=spfile;
SQL> ALTER SYSTEM SET log_archive_format='%t_%s_%r.arc' SCOPE=spfile;


Включить режим (перевод в ARСHIVELOG)

SQL> shutdown immediate
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;

Выключить режим (перевод в NOARСHIVELOG)

SQL> shutdown immediate
SQL> startup mount;
SQL> alter database noarchivelog;
SQL> alter database open;

Заметки новичка о pfile/spfile

pfile (parameter file)
- текстовый файл с параметрами запуска БД (обычное название init$ORACLE_SID.ora)

spfile (server parameter file)
- двоичный файл с параметрами, начиная с какой-то версии Oracle (обычное название spfile$ORACLE_SID.ora);
- руками менять нельзя

Размещаются в:
$ORACLE_HOME/dbs (linux)
$ORACLE_HOME\database (Win)

Главное, на мой взгляд, отличие: 
 при использовании spfile комманда ALTER SYSTEM SET .. вносит изменения в настройки, без рестарта БД

Порядок поиска файла параметров при старте БД:
Oracle будет использовать файл параметров в следующем порядке (т.е. какой первый найдёт, тот и загрузит):
spfile$ORACLE_SID.ora
spfile.ora
init$ORACLE_SID.ora

Создание pfile/spfile:
-- создать pfile из текущих настроек БД (то, что сейчас запущено)
CREATE PFILE = '/tmp/orabkp/my_init2.ora' FROM MEMORY;

-- создать pfile/spfile из текущего spfile
CREATE PFILE = '/tmp/orabkp/my_init.ora' FROM SPFILE;

-- создать spfile из pfile
CREATE SPFILE = '/tmp/orabkp/sparams2.ora' FROM PFILE='/tmp/orabkp/my_init2.ora';

Старт БД из явного pfile:
shutdown immediate
STARTUP PFILE='/tmp/orabkp/my_init2.ora' MOUNT;
alter database open;

Стартовать с явным spfile нельзя, но можно сделать следующее:
1. startup c явным pfile
2. create spfile from pfile;
3. shutdown immediate;
4. startup (if you don't say pfile= then the database will start with the spfile)

Вообще, про startup здесь:startup(удобно читать) и в доках: strtup (Oradoc 11g)

Примечание ( из форумов sql.ru)
1. экземпляр при старте использует файлы параметров, находящиеся в ORACLE_HOME\database (если явно не указать STARTUP PFILE=...)
2. если там есть и pfile, и spfile - используется spfile
3. если используется spfile, то команда ALTER SYSTEM SET... может вносить изменения и в память (для воздействия немедлено), и в spfile. При использовании pfile ALTER SYSTEM SET... влияет только на текущий экземпляр, а изменения в pfile надо не забыть внести ручками
4. spfile ручками менять нельзя
5. в Oracle >=10 при использовании spfile и ASMM (автоматического управления памятью) экземпляр сам записывает в spfile текущие значения размеров областей памяти

понедельник, 1 сентября 2014 г.

Доступ к Appender-ам logback в коде

Мы почти везде используем для логирования logback. Иногда надо получить доступ к его Appender-ам в runtime. Зачем ? Например, если я хочу получить пути файлов, в которые идёт запись логов - чтобы архивировать и передать по http клиенту (если это, скажем, web-приложение).

Пример доступа :

LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
// проходим по всем loggers
for (ch.qos.logback.classic.Logger logger : lc.getLoggerList()) {
    // от каждого logger получаем его appenders
    Iterator iter = logger.iteratorForAppenders();
    while (iter.hasNext()) {
        Appender appender = (Appender) iter.next();
        // тут приходится анализировать конкретные классы 
        if (appender instanceof FileAppender) {
                  ....
        }
    }
}

пятница, 29 августа 2014 г.

Два контекста Spring MVC. Порядок загрузки.

По мотивам прочтения вот этого поста http://sgdev-blog.blogspot.sg/2014/07/spring-mvc-common-mistakes.html

В web приложениях со springframework, я чётко разделяю srping-овыйе контексты -
  - mvc.xml:  настройки, относящиеся к view, а точнее к "внешнему" web-взаимодействию (сюда входят намапленные web-контроллеры, ресурсы и т.п.)
  - services.xml: настройки, которые содержат непосредственно компоненты логики, в том числе, связки с БД, репозитории, и т.п.

Собственно, сделано это, чтобы не грузились компоненты по два раза, в двух контекстах. А в статье указанной выше  описано почему это происходит и разумные рекомендации. Которым я оказывается уже следую.


Чего я не знал, и что иногда имеет важное значение - это последовательность загрузки контекстов.

1. Сначала грузится тот контекст, что описан в ContextLoadListener(в моём случае services.xml)
2. Потом, при инициализации сервлета, грузится контекст, описанный в DispatcherServlet (mvc.xml в параметре contextConfigLocation или, по умолчанию, ${servlet.name}-context.xml)

среда, 6 августа 2014 г.

Получение объёма БД Oracle (в Гб)

Файлы БД описаны в   v$datafile 

Сам sql-запрос общего объёма :

select round(sum(bytes)/1024/1024/1024,2) || ' Gb' from v$datafile

вторник, 5 августа 2014 г.

Перевод строк в PLSQL. Особенности

Для того, чтобы в строке, сформированной в PLSQL и переданной в java можно было увидеть перевод строки - "\r\n"(0D0A), надо использовать стандартную plsql-константу "utl_tcp.CRLF".
Если использовать chr(13), то в java мы увидим только "\r", хотя в PLSQLDeveloper визуально будет казаться, что перевод строки есть. Это происходит из-за того, что в своём редакторе PSQLDeveloper, при показе, добавляет недостающие символы перевода строки .

четверг, 15 мая 2014 г.

Конспект книги Э.Голдратта "Критическая цепь"

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

Мне нравятся его книги. Ну и с каждой из прочитанных, мне кажется я чуть-чуть лучше понимаю о чём он вообще хочет сказать глобально :)


Конспект

Чем ниже человек в структуре, тем больше он обвиняет кого-то другого внутри компании, а не вне ее.

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

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

— Что в нашей физической цепи эквивалентно проходу? Что определяется не только самими звеньями, а фактом их взаимодействия? Не вес. Если мы устраним все взаимодействия, все связи, если у нас останется только гора звеньев, вес останется прежним. Итак, какое качество характеризует цепь? Прочность цепи. Если сломается одно звено — всего-навсего одно звено — сломается вся цепь и прочность цепи упадет до нуля.

Вы будете бутылочным горлышком. Вы ничего не имеете против? Это означает, что вы важнее всех, что проход всей компании зависит от вас. Это также означает, что вам постоянно от всех достается.

предположим, что необходимо измерить высоту здания. При использовании одного метода ответ получается десять ярдов, а при использовании другого метода — двадцать ярдов. Конфликт налицо. Вы думаете, что ученым в области точных наук придет в голову прийти к компромиссу? Что они скажут, что высота здания пятнадцать ярдов? Все ухмыляются.
— Что делают в точных науках, — продолжает Джонни, — когда возникает конфликт? Их реакция совершенно не похожа на нашу. Мы пытаемся найти приемлемый компромисс. А им такая мысль даже в голову не приходит. Их исходная точка никогда им этого не позволит: они не признают, что в реальности существуют конфликты. Вне зависимости от того, насколько широко приемлемы те методы, с помощью которых измеряли высоту здания, инстинктивное заключение ученых будет таковым, что за одним из методов лежит неверная исходная посылка. Вся их энергия пойдет на то, чтобы найти и исправить эту исходную посылку. Может быть, нам стоит сделать то же самое?

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

Если на программиста не нажать, он никогда не закончит работу, у него всегда есть что-то, что он хотел бы подправить.

— Мы обнаружили три механизма разбазаривания подстраховки. Один мы назвали студенческим синдромом: спешить некуда, поэтому начинаем в последнюю минуту. Второй — перепрыгивание от задания к заданию. Третий связан с зависимостью между элементами, эти зависимости вызывают аккумулирование опозданий и разбазаривание выигрышей по времени.

Локальная эффективность и отклонения (variances) являются неверными показателями.

— Что тогда является ограничением проекта? Что мы должны выбрать в качестве эквивалента бутылочному горлышку? — повторяю я мой вопрос.
— Критический путь.

— Мы перенесем всю подстраховку в конец критического пути.

За неделю до ожидаемого времени мы просто напоминаем людям, что их задание, находящееся на критическом пути, на подходе. За три дня до его начала мы снова посылаем им напоминание, и потом опять за день, когда мы знаем наверняка, что все остальное будет готово, чтобы передать работу. Самое главное — это то, что люди знают: когда время подошло, они должны оставить все остальное, с чем они работали, и работать на критическом пути.

Убеждение в необходимости сотрудничества совершенно необходимо. Времена, когда было можно диктовать, прошли. Если вы хотите, чтобы ваши люди думали и предлагали инициативы, вы не можете им диктовать.

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

[я] твердо верю в домашнее задание. В отличие от Джима мне нравится читать работы моих студентов. Это забирает много времени, но это единственный способ получить действительную обратную связь: чему я их научил как следует, где я поторопился, что ошибочно посчитал, что они должны бы знать. Я не нахожу это чтение скучным. Тем более что некоторые ошибки действительно смешные.

Каждый раз, когда нам кажется, что «проигрыш-выигрыш» существует, это только потому, что мы смотрим на проблему слишком узко.

— Если существует конкуренция за ресурсы, — замечаю я, — критическая цепь может значительно отличаться от критического пути.

- Мы сейчас говорим о конкуренции за ресурс, — начинаю я объяснение. — Вы затрагивали эту проблему на лекциях по управлению производством?
- Конечно, — отвечает Брайен. — Каждый раз, когда перед станком есть очередь и приоритеты неясны, у нас возникает конкуренция за ресурс. Несколько заданий сражаются за то, чтобы быть обработанным тем же самым ресурсом в то же самое время.
— Именно, — подтверждаю я. — И как вы справляетесь с таким случаем? Вы учили, что глупо пытаться составлять график для каждого станка. Что вы должны делать?
— Определить бутылочное горлышко, — говорит Чарли.
— А потом?
— Потом максимально его использовать — сделать график работы для бутылочного горлышка.
— И этим, — говорю я, — вы устраняете любую конкуренцию в ограничении. Вы не просите ограничение сделать две вещи в одно и то же время. А потом? Чарли?
— А потом мы подчиняем. Подчиняем этому все остальные ресурсы.

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

Исходник в моей библиотеке: https://sites.google.com/site/pevgen/home/knigi/goldratt-kriticeskaa-cep

четверг, 8 мая 2014 г.

Настройка удалённого deploy для Tomcat c помощью ant

Сами задачи ant-а нормально описаны здесь : http://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html#Executing_Manager_Commands_With_Ant
Но есть несколько дополнительных особенностей:

Дополнительные роли пользователей для deploy в tomcat-users.xml 

 В настройках пользователей Tomcat, в файлe .../conf/tomcat-users.xml для того пользователя, который будет указан в задачах ant-а для деплоя, добавить роль manager-script.
Т.е. для нужного пользователя строка в tomcat-users.xml будет выглядеть так :

<user name="manager" password="password" roles="admin-gui,manager-gui,manager-script" />


Ошибка PermGen при deploy

Настроить память PermGen при старте Java. Я не мелочился и ставил 256m для максимума. Настраивается в setenv.bat (или "в лоб" в catalina.bat).Если Tomcat стартован как widows-сервис, то настройка производится из пункта меню "Tomcat config"

-XX:PermSize=64m -XX:MaxPermSize=256m

Ошибка undeploy (не удаляется каталог и какие-либо библиотеки)

Суть в том, что при останове приложения часть библиотек (по разным причинам) не считаются Tomcat-ом выгруженными. Это может быть как из-за ваших утечек, так и из-за системных. В моём случае были проблемы с библиотекой oracle jdbc.
Лечится настройкой в файле .../conf/context.xml. Надо изменить строку как показано ниже : 

<Context antiJARLocking="true" antiResourceLocking="true">

четверг, 27 марта 2014 г.

Java-библиотека для работа с файлами свойств

Попалась на глаза интересная библиотека для работы со свойствами (Properties) в java : http://owner.aeonbits.org/

Использовать ещё не пробовал, но набор возможностей впечатляет: и аннотации, и значения по умолчанию, и разнообразные варианты загрузки, и объединение нескольких наборов свойств, и т.д. и т.п. :

  • Loading strategies
  • Importing properties
  • Parametrized properties
  • Type conversion
  • Variables expansion
  • Reload and Hot Reload
  • Accessible and Mutable
  • Debugging
  • Disabling features
  • Metaconfiguring
  • XML support
  • Event support

Лицензия BSD. Соответственно, в исходниках всегда можно покопаться. Документация хорошая.

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