Архивирование таблиц списаний - кому интересно - читайте.

Технические вопросы по UTM 5.0
ratelcom
Сообщения: 31
Зарегистрирован: Сб май 07, 2005 04:07

Сообщение ratelcom »

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

eucariot
Сообщения: 3
Зарегистрирован: Ср фев 02, 2011 14:14

Сообщение eucariot »

ratelcom писал(а):А нельзя разработчиков попросить... кхм - сразу по уму сделать архивацию в ядре системы, чтобы оно само создавало новую таблицу каждый месяц, а то непонятные пляски с бубном вокруг легко решаемого со стороны разработчика вопроса.
Полностью согласен. В документации описаны правила архивирования, но даже ни слова о том, как его делать.
Добавить простейший скрипт в систему не составит сложностей и непонятно, почему производитель этого не сделает.

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

Сообщение JAO »

Чтобы мы это сделали. Только вот неизвестно, как эту архивацию на постгресе делать.

murano
Сообщения: 67
Зарегистрирован: Ср окт 14, 2009 06:53

re

Сообщение murano »

А что за проблема? Можно подробности?

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

Сообщение JAO »

Сам не проверял. Однако тут так и не сказали про постгрес ничего определенного.

xxxupg
Сообщения: 457
Зарегистрирован: Вс май 02, 2010 10:00

Сообщение xxxupg »

Уважаемые! такой вопрос...
Создал архив, создаю новую таблицу достаточно ли сделать это так:

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

CREATE TABLE IF NOT EXISTS `discount_transactions_all` (
  `id` int(11) NOT NULL auto_increment,
  `account_id` int(11) NOT NULL default '0',
  `incoming_rest` double NOT NULL default '0',
  `outgoing_rest` double NOT NULL default '0',
  `discount` double NOT NULL default '0',
  `discount_with_tax` double NOT NULL default '0',
  `service_id` int(11) NOT NULL default '0',
  `service_type` int(11) NOT NULL default '0',
  `discount_period_id` int(11) NOT NULL default '0',
  `slink_id` int(11) NOT NULL default '0',
  `discount_date` int(11) NOT NULL default '0',
  `charge_type` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB;");

-- --------------------------------------------------------
либо надо указывать что :

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

 PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=44160303 ;
т.к. указывать в таблице с какого id ей начинать?

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

Сообщение JAO »

При архивации указывать автоинкремент обязательно. Но вычислять его заморочно. Поэтому я сделал переименование таблицы в архивную ALTER TABLE discount_transactions_all RENAME TO arc_dta и создание основной по образцу архивной вот так CREATE TABLE discount_transactions_all LIKE arc_dta. При этом автоинкремент успешно переезжает в рабочую таблицу с минимальными заморочками. После этого я вставляю кусок данных за текущий месяц в рабочую таблицу и удаляю этот кусок из архивной. На этом действия по нервированию биллинга завершаются. Занимает операция с подменой таблички доли секунды. Всё прекрасно работает, после можно уже заняться разбором архива.

xxxupg
Сообщения: 457
Зарегистрирован: Вс май 02, 2010 10:00

Сообщение xxxupg »

JAO спасибо!

xxxupg
Сообщения: 457
Зарегистрирован: Вс май 02, 2010 10:00

Сообщение xxxupg »

а можно каким-то запросом узнать какое значение последнее в данный момент в поле "id"?

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

Сообщение JAO »

SELECT MAX(id) FROM discount_transactions_all

xxxupg
Сообщения: 457
Зарегистрирован: Вс май 02, 2010 10:00

Сообщение xxxupg »

Спасибо :)

Siny
Сообщения: 88
Зарегистрирован: Ср ноя 16, 2005 13:15
Контактная информация:

Сообщение Siny »

JAO писал(а):При архивации указывать автоинкремент обязательно. Но вычислять его заморочно.
select `AUTO_INCREMENT` from information_schema.TABLES where TABLE_NAME='discount_transactions_all'

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

sub move_table_tmp {
    my $t_name = shift;
    my $SQL = "SHOW CREATE TABLE $t_name";
    my $SQL2 = "select `AUTO_INCREMENT` from information_schema.TABLES
                where TABLE_NAME='$t_name'";
    $sth = $dbh->prepare($SQL2);
    $sth->execute() or die "DB Error: $DBI::errstr\n";
    my ($auto_inc)=$sth->fetchrow_array;
    $sth = $dbh->prepare($SQL);
    $sth->execute() or die "DB Error: $DBI::errstr\n";
    my ($t_name,$t_conf_sql)=$sth->fetchrow_array;
    if ($auto_inc > 1) {
        $t_conf_sql = $t_conf_sql . " AUTO_INCREMENT=$auto_inc";
    };
    print "Movie $t_name to $t_name" . "_bak\n\n";
    print "SQL: $t_conf_sql\n\n";


    $SQL = "RENAME TABLE `".$DBname."`.`".$t_name."` TO `".$DBname."`.`".$t_name."_bak`";
    $dbh->do($SQL);
    $dbh->do($t_conf_sql);
}

Ответить