Архивация списаний

Форум для размещения материалов по реализации различных схем использования ПО, решению частых проблем и предупреждению частых ошибок
Pei0t
Сообщения: 258
Зарегистрирован: Чт дек 13, 2007 20:48

Сообщение Pei0t »

А где таблица с платежами?
Читаем доку, http://www.netup.ru/UTM5/articles/archive_table.php
Нужно заархивировать так же payments, даты должны совпадать с дискаунтами

Аватара пользователя
ZeM
Сообщения: 371
Зарегистрирован: Чт фев 17, 2011 08:38

Сообщение ZeM »

Извините архивировал все скриптом товарища JAO. Экспереминты на тестовой базе, делал так - создал базу mysql -e -p "create database UTM5arc DEFAULT CHARACTER SET=utf8;" затем настроил и выполнил скрипт utm521007_arc. Все прошло без ошибок.
В отчетных периодах прошлых месяцов ничего не отображается типо идет поиск и все пусто, а за текущий месяц все есть.
Что-то надо руками в базе подкрутить, ранее занимался utm не я, поэтому даже не в курсе кто и что там делал с базой. Помогите разобратся плиз.

JAO
Сообщения: 1153
Зарегистрирован: Вт дек 11, 2007 08:17

Сообщение JAO »

У пользователя MySQL, от которого работает биллинг, должны быть права на чтение базы UTM5arc.

Blackmore
Сообщения: 365
Зарегистрирован: Вс фев 06, 2005 09:24
Откуда: подмосковье

Сообщение Blackmore »

протестировал скрипты на 009 - все работает, JAO заслужил пожизненный пивопровод, спасибо

JAO
Сообщения: 1153
Зарегистрирован: Вт дек 11, 2007 08:17

Сообщение JAO »

Пользуйтесь, мне столько пива ни к чему :)

nicol@s
Сообщения: 114
Зарегистрирован: Ср окт 14, 2009 15:52

Сообщение nicol@s »

Добрый день.
В логи стали сыпаться ошибки:

Код: Выделить всё

Debug &#58; Aug 28 08&#58;31&#58;07 DBCtx&#58; <680571904> SQL query&#58; INSERT INTO discount_transactions_all&#40;account_id,incoming_rest,outgoing_rest,discount,discount_with_tax,service_id,service_type,slink_id,discount_date,charge_type,discount_period_id&#41; VALUES&#40;'7505','377.6775001126434','377.6775001126434','0','0','196','3','73242','1346128267','3','6691'&#41;
?Debug &#58; Aug 28 08&#58;31&#58;07 DBCtx&#58; <680571904> MySQL query failed&#58;<Duplicate entry '2147483647' for key 1> Trying to reconnect&#58; 0
?Debug &#58; Aug 28 08&#58;31&#58;10 DBCtx&#58; <680571904> MySQL query failed&#58;<Duplicate entry '2147483647' for key 1> Trying to reconnect&#58; 1
?Debug &#58; Aug 28 08&#58;31&#58;13 DBCtx&#58; <680571904> MySQL query failed&#58;<Duplicate entry '2147483647' for key 1> Trying to reconnect&#58; 2
Раньше мы просто удаляли записи из таблиц discount_transactions_all и discount_transactions_iptraffic_all. При этом ничего не делали с auto_increment. Вот и пришли к тому, что достигли максимального значения.
Нашел похожую проблему
Поменяли тип поля ID на bigint командами:

Код: Выделить всё

ALTER TABLE discount_transactions_all MODIFY COLUMN id bigint NOT NULL AUTO_INCREMENT; 
ALTER TABLE discount_transactions_iptraffic_all MODIFY COLUMN id bigint NOT NULL AUTO_INCREMENT;
Запустили админку. В итоге в одну таблицу данные продолжились вносится с правильным ID, а во вторую таблицу админка посылает такой запрос:

Код: Выделить всё

?Debug &#58; Aug 28 12&#58;20&#58;02 DBCtx&#58; <680573952> SQL query&#58; INSERT INTO discount_transactions_iptraffic_all&#40;id,account_id,discount,discount_with_tax,service_id,slink_id,discount_date,discount_date_hour,discount_date_day,discount_date_month,t_class,base_cost,ipid,bytes,discount_period_id&#41; VALUES&#40;'-2147468507','8025','0','0','159','38405','1346142002','1346140800','1346097600','1343764800','500','0','168058197','2588','6687'&#41;
т.е. вставляется отрицательное значение id.
Почему админка сама отправляет id? Зачем тогда auto increment в этой таблице? Ну и собственно что теперь можно сделать?
Бэкапы, конечно, есть. Но простое восстановление данных из бэкапа проблему не решит.

safarius
Сообщения: 1
Зарегистрирован: Вт сен 11, 2012 07:40
Откуда: Moskow
Контактная информация:

Сообщение safarius »

JAO- а раздавать обездоленным?)) :roll:

JAO
Сообщения: 1153
Зарегистрирован: Вт дек 11, 2007 08:17

Сообщение JAO »

safarius писал(а):JAO- а раздавать обездоленным?)) :roll:
Пиво раздавать? (скрипты вроде уже стоят на раздаче)

ronin
Сообщения: 74
Зарегистрирован: Чт фев 03, 2011 00:57

Сообщение ronin »

JAO писал(а):Скрипт для версии 5.2.1-007 (должен подойти и для 5.2.1-008, судя по документации)

Код: Выделить всё

#!/usr/bin/perl

use DBI;

$db_host = 'localhost';
$db_user = 'root';
$db_pass = '';
$db_name = 'UTM5';
$db_arc_name = 'UTM5arc';

$tbl_count = 7;
@tbl_names = &#40;'discount_transactions_all','discount_transactions_iptraffic_all',	      'tel_sessions_log','tel_sessions_detail','dhs_sessions_log','dhs_sessions_detail','payment_transactions'&#41;;
@tbl_types = &#40;1,2,3,4,5,6,7&#41;;
@tbl_datefields = &#40;'discount_date','discount_date','recv_date','recv_date','recv_date','recv_date','payment_enter_date'&#41;;
@tbl_shortnames = &#40;'dta','dti','tsl','tsd','dsl','dsd','ptr'&#41;;

$dbh = DBI->connect&#40;"DBI&#58;mysql&#58;$db_name&#58;$db_host",$db_user,$db_pass,&#123; RaiseError => 1&#125;&#41; or die "\nConnection failed...\nError&#58; $DBI&#58;&#58;errstr\n"; 
$sth = $dbh->prepare &#40;"SELECT YEAR&#40;NOW&#40;&#41;&#41;"&#41;;
$sth->execute &#40;&#41;;
$y = &#40;$sth->fetchrow_array &#40;&#41;&#41;&#91;0&#93;;
$sth = $dbh->prepare &#40;"SELECT MONTH&#40;NOW&#40;&#41;&#41;"&#41;;
$sth->execute &#40;&#41;;
$m = &#40;$sth->fetchrow_array &#40;&#41;&#41;&#91;0&#93;;
$sth = $dbh->prepare &#40;"SELECT UNIX_TIMESTAMP&#40;'$y-$m-01 0&#58;00&#58;00'&#41;"&#41;;
$sth->execute &#40;&#41;;
$end_date = &#40;$sth->fetchrow_array &#40;&#41;&#41;&#91;0&#93;;
$m--;
if &#40;$m == 0&#41;
&#123; $m = 12;
  $y--;
&#125;
$suffix = sprintf &#40;"%04d_%02d",$y,$m&#41;;
$sth = $dbh->prepare &#40;"SELECT UNIX_TIMESTAMP&#40;'$y-$m-01 0&#58;00&#58;00'&#41;"&#41;;
$sth->execute &#40;&#41;;
$start_date = &#40;$sth->fetchrow_array &#40;&#41;&#41;&#91;0&#93;;
$sth = $dbh->prepare &#40;"SELECT MAX&#40;archive_id&#41; FROM archives"&#41;;
$sth->execute &#40;&#41;;
$arc_id = &#40;$sth->fetchrow_array &#40;&#41;&#41;&#91;0&#93; + 1;
undef $sth;
for &#40;$j = 0;$j < $tbl_count;$j++&#41;
&#123; $tbl_orig = $tbl_names&#91;$j&#93;;
  $tbl_shortname = $tbl_shortnames&#91;$j&#93;;
  $tbl_bkp = 'arc_' . $tbl_shortname;
  $datefield = $tbl_datefields&#91;$j&#93;;
  $tbl_type = $tbl_types&#91;$j&#93;;
  $full_arcname = $db_arc_name . "." . $tbl_shortname . "_" . $suffix;
  print "Processing $tbl_orig\n";
  $dbh->do &#40;"ALTER TABLE $tbl_orig RENAME TO $tbl_bkp"&#41;;
  $dbh->do &#40;"CREATE TABLE $tbl_orig LIKE $tbl_bkp"&#41;;
  $dbh->do &#40;"INSERT INTO $tbl_orig SELECT * FROM $tbl_bkp WHERE $datefield>=$end_date"&#41;;
  $dbh->do &#40;"DELETE FROM $tbl_bkp WHERE $datefield>=$end_date"&#41;;
  $dbh->do &#40;"ALTER TABLE $tbl_bkp ENGINE=MyISAM"&#41;;
  $dbh->do &#40;"CREATE TABLE $full_arcname LIKE $tbl_bkp"&#41;;
  $dbh->do &#40;"ALTER TABLE $full_arcname ENGINE=MyISAM"&#41;;
  $dbh->do &#40;"INSERT INTO $full_arcname SELECT * FROM $tbl_bkp"&#41;;
  $dbh->do &#40;"DROP TABLE $tbl_bkp"&#41;;
  $end_date--;
  $dbh->do &#40;"INSERT INTO archives &#40;archive_id,table_type,table_name,start_date,end_date&#41; VALUES &#40;'$arc_id','$tbl_type','$full_arcname','$start_date','$end_date'&#41;"&#41;;
  $end_date++;
&#125;
$dbh->disconnect &#40;&#41;;
всем привет, хотел попробовать этот скрипт, выдал такую ошибку
Processing discount_transactions_all
DBD::mysql::db do failed: The total number of locks exceeds the lock table size at ./utm5_arch.pl line 52.
utm5.008 up8 база порядка 40гигов

JAO
Сообщения: 1153
Зарегистрирован: Вт дек 11, 2007 08:17

Сообщение JAO »

Это сообщение не скрипта, а MySQL сервера, скрипт лишь повторил его. Разбирайтесь с настройками.

ronin
Сообщения: 74
Зарегистрирован: Чт фев 03, 2011 00:57

Сообщение ronin »

решил вернуться к архивации, вопрос, какие действия необходимы перед запуском скрипта utm521007_arc первый раз, база около 60г, и сколько по времени, он примерно будет работать?

JAO
Сообщения: 1153
Зарегистрирован: Вт дек 11, 2007 08:17

Сообщение JAO »

Бэкап базы. Это единственное действие. Поскольку может навернуться во время выполнения. По времени сложно сказать, многое зависит от характеристик сервера и настроек MySQL.

Antares
Сообщения: 59
Зарегистрирован: Вт мар 11, 2008 08:28

Сообщение Antares »

JAO писал(а):У пользователя MySQL, от которого работает биллинг, должны быть права на чтение базы UTM5arc.
На 5.3 версии тоже не показывает за предыдущие месяцы, с пользователем всё нормально. В логах UTM ошибок нет, видно по дебагу что запрашивает данные.

dimic
Сообщения: 18
Зарегистрирован: Пн май 13, 2013 11:06

Сообщение dimic »

Имеет ли значение поля ID в архивных таблицах? Просто после неведомого глюка при последнем архивировании "Автоматическое приращение" сбросилось на 0, и индекс (поле ID) для таблицы с платежами начался с 1.
Я так понимаю, что приоритет имеет дата? Иначе получается что у меня существуют платежные транзакции с одинаковыми id, но в разных архивных таблицах.
Проблем при выборке отчетов по платежам через админку пока не заметил.

upd. Вообще, чем чревато то, что в таблице с платежами счетчик обнулился?
upd2. По поводу неведомого глюка. Оказалось все банально. Моей ошибкой было запустить скрипт 1 числа месяца в ночь, когда еще не было ни одной платежной транзакции. Соответственно скрипт ничего не перенес в оригинальную таблицу с платежами и отсчет транзакций начался с нуля. Как думаете, есть смысл исправлять подобную проблему? Как я говорил, на выборке данных через амдинку пока никак не отразилось.

NeXuSs
Сообщения: 51
Зарегистрирован: Пт сен 03, 2010 10:31

Re: Архивация списаний

Сообщение NeXuSs »

del

Ответить