C#. Работа с почтой через OpenPop
Недавно была задача обработки писем по pop3 протоколу. Перекопал кучу компонент, но наконец нашёл подходящую во всех отношениях библиотеку OpenPop. У одних были проблемы с кодировками, другие «кушали» много ресурсов, третьи ещё чем-то не подошли.
Качать тут: http://hpop.sourceforge.net/
Привожу код, который, надеюсь, кому-то когда-то поможет
Закончилось место под счетчик в таблице Integer IDENTITY runs out of scope
Если у вас в таблице есть автоинкрементное поле, к примеру, типа int , и следующее автоинкрементное значение превышает максимальное значение для типа этого поля, не отчаивайтесь — это не беда
Такое происходит с большими таблицами, откуда часто удаляют и вставляют новые значения. Таким образом в нумерации имеются провалы из-за удаления данных, а максимальное значение для типа данных счетчика быстро достигается. Ошибка будет примерно такой такой: Server: Msg 8115, Level 16, State 1, Line 2 Arithmetic overflow error converting IDENTITY to data type int. Arithmetic overflow occurred.
Варианты решения:
- Расширьте тип данных. Если у вас был int, поставьте bigint. Помните, если у вас значение этого поля использовалось в процедурах и прочем коде, вам придется их исправить на использование нового типа!
- Второй вариант ленивый. Если у Вас данные в таблице постоянно обновляются и есть большой кусок места до минимального значения счетчика( selectmin(auto_inc_field) fromyour_table) в этом поле, если смотреть от нуля, и если вы уверены, что если вы начнете нумерацию с нуля, то пока вы заполните этот промежуток, старые данные уже будут удалены, соответственно блок нумерации счетчика освободится, то этот вариант для Вас! Вы можете элементарно начать нумерацию заново или с какого-то конкретного стартового номера следующей командой:
DBCC CHECKIDENT ("your_table", RESEED, 1); GOЭта команда заменяет значение следующего автоинкрементного значение на 1. То есть, это есть замена текущего автоикремента.
- Вариант для тех у кого есть время и в случае если строк в таблице меньше чем вариантов значений счетчика. Вариант один из наиболее надёжных. Создаете копию таблицы (желательно без индексов) и порциями копируете данные из старой таблицы в новую. Таким образом вы получаете все ваши данные с индексацией с нуля плотно упакованные относительно значений счетчика.
Конечно, если у вас есть связанные таблицы по этому полю, Вам конечно ещё придется обновить старые значения счетчиков на новые.
Если есть вопросы или другие способы решения проблемы, то милости прошу, в коменты!
Снова в строю !
Наконец-то выкупил доменное имя и восстановил свой блог. Ожидайте скоро много новостей
Во время восстановления наткнулся на проблему с обновлением wordpress. Оказывается, нужно было добавить строку
define(‘WP_TEMP_DIR’,'/tmp’);
в файл конфига. Нужно было также добавить эту папку и дать на неё права на запись.
SQL Server Driver for PHP 1.1 — October 2009
Майкрософт выпустил собственный драйвер для PHP, с поддержкой возможностей Native SQL Client. Доступен также его исходный код:
http://sqlsrvphp.codeplex.com/SourceControl/ListDownloadableCommits.aspx#DownloadLatest
Сам драйвер можно скачать тут:
История одного восстановления БД(MS SQL Server 2005). Часть 2
Продолжаю тему восстановления БД, начатую тут. Закончилось всё довольно таки успешно.
Итак…. Не помог мне
ALTER DATABASE ‘DatabaseName’SET SINGLE_USER
DBCC CHECKDB(‘DatabaseName’, REPAIR_REBUILD)
ALTER DATABASE ‘DatabaseName’ SET MULTI_USER
не помог и
DBCC CHECKDB(‘DatabaseName’, REPAIR_ALLOW_DATA_LOSS)
Так как удалось найти битую таблицу(в ней как раз наибольшее кол-во строк), принялся её реанимировать нестандартными способами. Попробовал сделать выборку данных- выкинуло в ошибку, но успело вернуть несколько миллионов записей. Попробовал сделать выборку, с ключом desc — таким образом вытащил ещё кусок данных с конца таблицы. Кстати, select стал выбирать больше записей после того как убил все индексы кроме Primary Key. Пошаманив ещё несколько часов и не получив желаемого результата, создал клон битой таблицы без данных и с помощью:
insert into tablename(fields) select top КОЛ-ВО_СТРОК1 * from tableoriginal order by fieldnamePK asc
insert into tablename(fields) select top КОЛ-ВО_СТРОК2 * from tableoriginal order by fieldnamePK desc
заполнил новую таблицу данными. Старую удалил, а эту переименовал так как нужно.
Должен сказать, что таким образом удалось восстановить почти все записи.
Для остальных БД выполнил DBCC CHECKDB() , откуда узнал какие из таблиц битые. Им помогла DBCC DBReidex(‘Tablename’) для битых таблиц.
На этом всё и закончилось.
Желаю вам надёжных хардов и меньше подобных проблем!
GPS мониторинг.
Продолжаем работать с системами GPS мониторинга. Скоро выйдет версия v2.0, с множеством новых функций, которые приятно удивят пользователей системы. Сейчас, упор как раз и делаем на онлайновую web версию. Она имеет ряд преимуществ по сравнению с классической оффлайновой версией. Пользователю системы не нужно дополнительное программное обеспечение, сервер с базой данных, а нужен лишь доступ в интернет и простой интернет браузер. При этом открываются широчайшие возможности по мониторингу, анализу, контролю передвижения и прочие, которыми вы можете пользоваться из любой точки мира с доступом в интернет. За считанные секунды вы получаете доступ к системе со всем её функционалом в независимости от вашего местоположения: дома, на работе, в отпуске на островах.
Не смотря на быстрое развитие WEB версии, не забываем и об оффлайновых системах. Для них мы разрабатываем новые отчёты, улучшаем интерфейс и интегрируем с такими картами как Google, Bing, Yandex и т.п.
В целом, нашу систему уже можно представить как гибрид — объединёние оффлайновой и онлайновой версии. При этом обе части полноценны.
Ознакомиться с WEB версией можно тут: http://www.monitoring-gps.com.ua/gps_monitoring/index.php
Подробнее можно узнать тут: http://monitoring-gps.com.ua/
Продолжение следует…
История одного восстановления БД(MS SQL Server 2005)
История началась с того, что умер винт в RAID(0). Слава Богам, удалось создать виртуальный образ с помощью RAID Reconstructor от Runtime Software. С помощью приложения Captain Nemo(от того же Runtime Software) часов за 8-10(два винта по 300 ГБ) удалось построить структуру и файловой системы опираясь на виртуальный образ созданный RAID Reconstructor»ом. Ещё за несколько часов восстановились базы, общим весом около 10 ГБ. 70% работы, казалось бы, выполнено! Особо не радуясь, принялся восстанавливать сервер.
Взял новые винты. Установил ту же систему, тот же SQL Server 2005 с тем же collation. Сделал Attach DataBase для всех восстановленных баз, кроме системных. Для того, чтобы избежать лишних проблем, базы нужно размещать в те же папки что и до того как система упала. Заменил базу master на свою восстановленную(о том как перемещать системные базы, в том числе master и MSDB, читал тут http://msdn.microsoft.com/ru-ru/library/ms345408.aspx; позже выложу у себя весь текст статьи).
Выполнил несколько селектов — кажется, всё ок.
Запускаю приложение, использующие эти базы… и на одной из форм получаю красивенький exception: «SQL Server detected a logical consistency-based i/o error: incorrect pageid».
Выполняю DBCC DBReindex() — не спасло.
Пробую DBCC CHECKDB(‘DatabaseName’) - после ряда сообщений, команда прерывается с сообщением об ошибке:
Msg 8967, Level 16, State 216, Line 1
An internal error occurred in DBCC which prevented further processing. Please contact Product Support.
Выполнение остановилось как раз на самой большой таблице в базе.
Деваться некуда, запускаю
ALTER DATABASE ‘DatabaseName’SET SINGLE_USER
DBCC CHECKDB(‘DatabaseName’, REPAIR_REBUILD)
ALTER DATABASE ‘DatabaseName’ SET MULTI_USER
REPAIR_REBUILD-попробует восстановить БД без потери данных.
Жду завершения выполнения команды.
Если не восстановит, буду пробовать
DBCC CHECKDB(‘DatabaseName’, REPAIR_ALLOW_DATA_LOSS)
Обязательно отпишусь чем всё закончилось. Ещё не выполнял DBCC CHECKDB(‘DatabaseName’) для остальных баз.
Поиск оптимального маршрута в Google Maps теперь для пользователей Украины!
Наконец, стала доступной долгожданная функция поиска оптимального маршрута на картах Google по территории Украины!
Вы получаете возможность прокладки оптимального пути(для хотьбы или авто) по указанным пунктам назначения(до 25 точек). Сервис очень гибкий и удобный. http://maps.google.com/
Использование данного сервиса не территории Украины стало возможным благодаря компании Transnavicom
API Google Maps тут: http://code.google.com/intl/ru/apis/maps/
GPS Monitoring ONLINE
Работаем над GPS Monitoring http://online.monitoring-gps.com.ua/.
Обновились вот до версии v1.2
Как-нибудь напишу о сложностях, с которыми пришлось столкнуться при проектировании БД.
MySQL 5.1 vs 5.4
За MySQL взялся и GOOGLE, что обнадёживает
Читая о новостях в разработке MySQL, наткнулся на несколько интересных статеек. Всем, кто имеет непосредственное отношение к БД, да и тем, кто раздумывает над выбором СУБД, рекомендую ознакомиться:
1. http://dev.mysql.com/doc/mysql-5.4-features/en/smp-improvements.html MySQL 5.4 Scalability Improvements
2. http://dev.mysql.com/tech-resources/articles/mysql-54.html A Quick Look at MySQL 5.4; В статье приведены интересные графики сравнения веток 5.1 и 5.4 по производительности. Описаны улучшения, касающиеся подзапросов(кстати те, которых ждали от ветки 6.0, но так и не дождались
), JOIN и другого.
В бонус можно почитать о создании plugin для MySQL(аналог расширенных хранимых процедур в MS SQL Server )
http://dev.mysql.com/doc/refman/5.1/en/plugin-api.html
Скачать MySQL 5.4 можно тут: http://dev.mysql.com/downloads/mysql/5.4.html