Многие спрашивают: где взять очередное обновление Informix ? Отвечаю: на сайте ibm :)
Ну а если точнее то на сайте IBM Fix Central
Выбираем в списке Product Group группу InformationManagement, появляется список Product в котором выбираем Informix Dynamic Server. В следующем списке выбираем нужную версию и затем платформу. Далее жмем Continue. Будет предложено ввести ваш логин и пароль (или зарегистрируйтесь). После успешной регистрации можно будет найти обновление по номеру или тексту, либо посмотреть все рекомендуемые обновления для выбранной версии, если такие имеются. Если обновление найдено, то его можно будет скачать.
четверг, 2 апреля 2009 г.
среда, 1 апреля 2009 г.
Вышел фикспак 11.50.xC3W2
Список обновлений можно почитать здесь
Особенно важными считаю исправления проблем, связанных с добавлением или отсоединением разделов на фрагментированных таблицах.
Особенно важными считаю исправления проблем, связанных с добавлением или отсоединением разделов на фрагментированных таблицах.
вторник, 24 февраля 2009 г.
Бэкап: Что еще я должен зарезервировать?
Бэкап данных сервера сам по себе является отличной идеей на любых промышленных системах - периодически делая резервные копии можно в некоторой степени быть уверенным в том что в случае поломки оборудования или потери данных, данные можно восстановить на момент предшествующий сбою. Однако самой по себе резервной копии данных явно недостаточно для того, чтобы впоследствии восстановить их. Это напоминает конструктор: куча разных деталей из которых можно собрать все что угодно (или почти) в пространстве возможных реализаций но чтобы собрать что то правильно в контексте идеи разработчика конструктора, надо иметь некую инструкцию, описывающую как эту сборку производить. Эта метаинформация хранит данные о том когда и что было зарезервировано. Вот этот список файлов, которые необходимо архивировать, после каждого бэкапа:
Однако как показывает практика, даже этого недостаточно чтобы быть кое в чем уверенным!
- Файл конфигурации сервера ONCONFIG
- Emergency boot file, известный как ixbar.$SERVERNUM
- sm_versions описывающий storage manager
- sqlhosts
- Файл oncfg_severname.servernum
- Конфигурации storage manager
Однако как показывает практика, даже этого недостаточно чтобы быть кое в чем уверенным!
понедельник, 16 февраля 2009 г.
Как узнать конфигурацию сервера
Недавно сервер, на котором работал инстанс информикса упал и пришлось в срочном порядке поднимать его на другом сервере. Однако на новом сервере не оказалось линков на чанки с данными информикса. В таком случае всю конфигурацию устройств информикса можно узнать, даже если он будет выключен. Для этого надо воспользоваться командой oncheck -pr. Она выдаст необходимую информацию, включая линки на устройства с данными. Конечно перед запуском команды надо установить переменные окружения INFORMIXDIR и INFORMIXSERVER, а также ONCONFIG.
среда, 4 февраля 2009 г.
Скоро очередное обновление Informix 11.50.UC4
IBM предлагает поучаствовать желающим в тестировании беты перед выходом основной версии. Что нового собираются включить в UC4:
- сжатие данных
- упрощенное администрирование, установка и мониторинг ER с помощью OpenAdmin Tool
- поддержка вычислительного окружения Amazon EC2
- поддержка виртуализации VMWare
понедельник, 12 января 2009 г.
Работа с разделами в 11.50.xC3
В версии информикса 11.50.xC3 обнаружил неприятный баг (а когда баги бывают приятными?): при попытке добавить новый раздел (partitions) к фрагментированной по условию таблице, либо при попытке удалить раздел, происходит (не всегда) полное сканирование таблицы, и сам процесс удаления/добавления разделов происходит очень долго либо приводит к длинной транзакции если таблица большая. В предыдущих версиях такая операция даже на больших (размер каждого фрагмента десятки гигабайт) занимала неск.секунд.
Однако такой баг уже вроде бы исправили в версии 11.50.xC3W1 Fix List см. очень похожий APAR IC59271 ADDING A FRAGMENT USING THE BEFORE CLAUSE SCANS ALL FRAGMENTS
Однако такой баг уже вроде бы исправили в версии 11.50.xC3W1 Fix List см. очень похожий APAR IC59271 ADDING A FRAGMENT USING THE BEFORE CLAUSE SCANS ALL FRAGMENTS
среда, 10 декабря 2008 г.
Копирование данных без длинных транзакций
Как быть если требуется перенести большой объем данных из одной таблицы в другую? Можно воспользоваться например выгрузкой данных в промежуточный файл. Если данных не очень много то можно попробовать использовать прямую вставку с помощью insert into ... select ... from ... однако такой способ не будет работать если данных очень много, поскольку высока вероятность длинной транзакции. Напрашивается способ использования таблицы без журналирования (raw table) однако он не подходит если сервер используется в паре HDR.
Следующий способ был бы универсальным однако он не реализован:
Таким образом приходится придумывать свои способы. Один из таких способов это использование хранимой процедуры и объявления курсора через foreeach. Этот способ позволяет делать commit через нужное число вставленных строк. Вот примерная реализация этого способа (нечто подобное обсуждали как то на конференции comp.databases.informix):
commitrows в параметре процедуры это число записей, через которые последует очередной commit. Таким способом можно перенести любое число записей не опасаясь длинной транзакции, надо лишь задавать реалистичное значение commitrows, которое выбирается индивидуально исходя из настроек сервера и размера записи в таблице-источнике. Опционально можно эксклюзивно блокировать таблицу источник и таблицу приемник, выставлять нужный уровень изоляции и т.д.
Следующий способ был бы универсальным однако он не реализован:
insert into t1 select ... from t2 where ... commitrows N;
Таким образом приходится придумывать свои способы. Один из таких способов это использование хранимой процедуры и объявления курсора через foreeach. Этот способ позволяет делать commit через нужное число вставленных строк. Вот примерная реализация этого способа (нечто подобное обсуждали как то на конференции comp.databases.informix):
CREATE PROCEDURE batch_move(commitrows int);
...
DEFINE count_rows INT;
...
LET count_rows = 0;
BEGIN WORK;
...
lock table table2 in exclusive mode;
FOREACH cur_ins WITH HOLD FOR
SELECT список полей INTO список переменных FROM table1
LET count_rows = count_rows + 1;
INSERT INTO table2 values (список переменных);
IF mod(count_rows, commitrows) = 0 THEN
COMMIT WORK;
BEGIN WORK;
lock table table2 in exclusive mode;
END IF;
END FOREACH;
COMMIT WORK;
...
END PROCEDURE;
commitrows в параметре процедуры это число записей, через которые последует очередной commit. Таким способом можно перенести любое число записей не опасаясь длинной транзакции, надо лишь задавать реалистичное значение commitrows, которое выбирается индивидуально исходя из настроек сервера и размера записи в таблице-источнике. Опционально можно эксклюзивно блокировать таблицу источник и таблицу приемник, выставлять нужный уровень изоляции и т.д.
Подписаться на:
Сообщения (Atom)