BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 19 июн 2025, 22:39

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: удаление старых таблиц
СообщениеДобавлено: 16 янв 2014, 19:01 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 24 июн 2009, 17:49
Сообщения: 640
Карма: 10
Добрый день!
За годы работы биллинга накопилось аж 800 таблиц. Многие из них регулярно чищу, какие-то данные храню в течение года, какие-то полгода, что-то не более трех месяцев. В результате - очень много пустых таблиц. Как-то попробовал их дропнуть - биллинг отказался загружаться. Пришлось возвращать бакапы.
Скрипт на вики для удаления старых таблиц видел, странно но он тоже просто дропает старые таблицы...
Хочу попробовать еще раз. Речь про эти таблицы:
bgs_query_log_yyyymm
log_error_1_yyyymm
log_function_process_yyyymm
log_server_1_yyyymm
log_session_net_1_yyyymm
session_account_1_yyyymm
session_detail_1_yyyymm
web_query_log_yyyymm
Можно ли их дропать спокойно или есть на них какие-то линки из других таблиц и биллинг не запустится из-за нарушения целостности базы?


Биллинг 4.6 580


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: удаление старых таблиц
СообщениеДобавлено: 16 янв 2014, 21:12 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Периодически удаляю кроме bgs_query_log_yyyymm ибо временами нужно лезть в предыдущие периоды.
Удаляю скриптом который создает модуль DBA.
По-моему начинал с 5.1/5.2 версии подобным страдать, за 4.6 не могу ничего сказать.

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: удаление старых таблиц
СообщениеДобавлено: 12 фев 2014, 16:57 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
survivor писал(а):
Биллинг 4.6 580

У меня на 5.0 (почти то же самое что и 4.6) сейчас работает вот такой вариант скрипта из вики:
Код:
/**
 * Удаление старых таблиц
 */

import java.sql.*;
import java.util.*;
import java.util.regex.*;

import java.lang.Runtime;
import java.lang.Process;

import bitel.billing.common.*;
import bitel.billing.server.util.*;

public void main(setup, con, conSlave)
{
    private Calendar currentDate = new GregorianCalendar();
    private HashMap checkTables = new HashMap();

    // kernel
    checkTables.put("^bgs_query_log_(\\d{6})$", 3);         // месячная таблица запросов клиентов биллинга к серверу
    checkTables.put("^data_log_error_(\\d{6})$", 1);        // ошибки обработки логов
    checkTables.put("^log_function_process_(\\d{6})$", 1);  // логи обработки событий функциями скриптов
    checkTables.put("^log_gscript_process_(\\d{6})$", 1);   // логи выполнения глобальных скриптов
    checkTables.put("^source_data_(\\d{6})$", 3);           // данные о загруженных часовых логах
    checkTables.put("^web_query_log_(\\d{6})$", 3);         // журнал web-запросов клиентов на странице статистики

    // dialup
    private int dialupModuleId = 1;
    checkTables.put("^log_error_" + dialupModuleId + "_(\\d{6})$", 1);          // ошибки авторизации
    checkTables.put("^log_server_" + dialupModuleId + "_(\\d{6})$", 1);         // радиус запросы сессий
    checkTables.put("^log_session_" + dialupModuleId + "_(\\d{6})$", 13);       // лог сессии
    checkTables.put("^session_account_" + dialupModuleId + "_(\\d{6})$", 13);   // детализации наработки сессии по услугам
    checkTables.put("^session_detail_" + dialupModuleId + "_(\\d{6})$", 13);    // детализация наработки сессии
    // постоянно пустые таблицы
    checkTables.put("^login_account_" + dialupModuleId + "_(\\d{6})$", 1);      // наработка по логину за месяц (используется системой ограничений)
    checkTables.put("^log_session_net_" + dialupModuleId + "_(\\d{6})$", 1);    // сети, маршрутизируемые через выданные сессиям ip адреса
    checkTables.put("^tariff_detail_" + dialupModuleId + "_(\\d{6})$", 1);      // детализация по тарифу (см. модуль бухгалтерии)

    // card
    //private int cardModuleId = 2;
    //checkTables.put("^card_dealer_pay_" + cardModuleId + "_(\\d{6})$", 13);     // платежи дилеров

    // npay
    private int npayModuleId = 3;
    checkTables.put("^npay_add_cost_detail_" + npayModuleId + "_(\\d{6})$", 1); // детализация сумм до которых "доводятся" доводящие абонплаты. используется макросом вычисления суммы позиции модуля bill
    checkTables.put("^npay_detail_" + npayModuleId + "_(\\d{6})$", 13);         // детализация начислений модуля (может использоваться сторонними системами)

    // ipn
    private int ipnModuleId = 4;
    checkTables.put("^ipn_contract_data_" + ipnModuleId + "_(\\d{6})$", 1);     // аггрегированная наработка по адресам

    // mps
    private int mpsModuleId = 5;
    checkTables.put("^mps_payment_" + mpsModuleId + "_(\\d{6})$", 13);          // платежи за месяц

    String backupDir = "/home/backup/old_tables";

    Process mkdir = Runtime.getRuntime().exec(new String[] { "/bin/sh", "-c", "/bin/mkdir -p " + backupDir });
    int mkdirDone = mkdir.waitFor();
    if (mkdirDone != 0)
    {
        return;
    }

    try
    {
        String query = "SHOW TABLES FROM bgbilling WHERE Tables_in_bgbilling REGEXP '_[0-9]{6}$'";
        PreparedStatement ps = con.prepareStatement(query);
        ResultSet rs = ps.executeQuery();
        while (rs.next())
        {
            String tableName = rs.getString(1);
            Boolean dropTable = false;
            for (Map.Entry e : checkTables.entrySet())
            {
                String tableNameRegexp = e.getKey();
                int tableTTL = e.getValue();
                Pattern p = Pattern.compile(tableNameRegexp);
                Matcher m = p.matcher(tableName);
                if (m.matches())
                {
                    String tableDate = m.group(1);
                    int yy = Utils.parseIntString(tableDate.substring(0, 4));
                    int mm = Utils.parseIntString(tableDate.substring(4, 6));
                    if (yy > 0 && mm > 0)
                    {
                        Calendar checkDate = new GregorianCalendar();
                        //checkDate = currentDate.clone();
                        checkDate.set(Calendar.MONTH, mm - 1);
                        checkDate.set(Calendar.YEAR, yy);
                        if (TimeUtils.monthsDelta(checkDate, currentDate) >= tableTTL)
                        {
                            dropTable = true;
                        }
                    }
                }
            }
            if (dropTable)
            {
                String[] args = { "/bin/sh", "-c", "/usr/bin/mysqldump --user=bill --password=bgbilling --quick --single-transaction --default-character-set=cp1251 bgbilling " + tableName + " | /bin/gzip > " + backupDir +"/" + tableName + ".sql.gz" };
                Process dumper = Runtime.getRuntime().exec(args);
                int dumperDone = dumper.waitFor();
                if (dumperDone == 0)
                {
                    print(tableName);
                    PreparedStatement psd = con.prepareStatement("DROP TABLE IF EXISTS " + tableName);
                    psd.executeUpdate();
                    psd.close();
                }
                else
                {
                    print("dumper exit code = " + dumper.exitValue() + " on table: " + tableName);
                }
            }
        }
        ps.close();
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

Вдруг пригодится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: удаление старых таблиц
СообщениеДобавлено: 19 фев 2014, 14:46 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 24 июн 2009, 17:49
Сообщения: 640
Карма: 10
Спасибо :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: удаление старых таблиц
СообщениеДобавлено: 07 мар 2014, 22:51 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
а куда его вставлять?

_________________
Интернет и телефония оптом со склада, или в розницу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: удаление старых таблиц
СообщениеДобавлено: 11 мар 2014, 15:51 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
max писал(а):
а куда его вставлять?

Автоматизация -> Глобальные скрипты поведения
Текущая, рабочая версия скрипта здесь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: удаление старых таблиц
СообщениеДобавлено: 11 мар 2014, 18:08 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
запили на вику чтоль и поддерживай когда обновлятся будеш, как всей толпой поддерживаем синхронизацию услуг ТП

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: удаление старых таблиц
СообщениеДобавлено: 11 мар 2014, 18:37 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
В вики есть скрипт ;) У меня просто чуть переделанный вариант.
Я планирую запилить динкод для чистки inet после запуска у себя 6.0/6.1.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: удаление старых таблиц
СообщениеДобавлено: 12 мар 2014, 05:42 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
snark писал(а):
В вики есть скрипт ;) У меня просто чуть переделанный вариант.
Я планирую запилить динкод для чистки inet после запуска у себя 6.0/6.1.

аха, давай, когда ты уже там перейдешь?

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: удаление старых таблиц
СообщениеДобавлено: 12 мар 2014, 14:58 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
skyb писал(а):
когда ты уже там перейдешь?

Гоу флудить :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.134s | 36 Queries | GZIP : On ]