Очистка данных в БД Октелла. MS SQL Express
Очистка данных в БД Октелла. MS SQL Express
Очистка данных в БД Октелла. MS SQL Express. Приветствую.
По умолчанию дистрибутив Октелла поставляется в комплекте с MS SQL Express (разных версий, зависит от релиза Октелла). И все бы ничего - все бесплатно-официально да и Октеллу в общем-то функционала платной версии не требуется, но рано или поздно вы столкнетесь с переполнением БД. В различных версиях MSSQL Express разные ограничения (имею ввиду общий размер БД), но признаки у всех одни:
Невозможность сохранить карту сети. Невозможность добавить нового пользователя Ошибки во время выполнения различных профилактик и очисток БД в настройках Октелла. Объем съедаемой оперативной памяти SQL-сервером резко увеличился. Ошибки в логах или вообще невозможность подключиться к БД сервером Октелла. Не отображаются записи разговора в карточке заказа. Пустая статистика по звонкам (в Октелле)
Это значит, что вам пора зачистить базу от всяких излишеств и порезать ее аппетиты, либо обновиться до более новой/платной версии MSSQL (этот вариант сегодня не рассматриваем). Сначала установим SQL Managment (дальше буду называть его менеджер - просто я ленивый, как мы выяснили ранее). С его помощью мы будем давать команды SQL-серверу , хотя можно и без него обойтись, но так нагляднее и удобнее.
Версии:
Microsoft SQL Server Management Studio Express 2005 Microsoft SQL Server Management Studio Express 2008 2012 идет уже в комплекте с MS SQL 2012. Можно скачать и обновить вашу версию до 2012, но инструкции по обновлению ниже не найдете - вот ровно на столько я злой.
Учтите, что инсталлятор следует выбирать в соответствии с разрядностью Windows.
Далее будут скрины и инструкции для 2012 менеджера, но 2005 и 2008 не сильно от него отличаются, так что справитесь. Также хочу сказать, что данное руководство подходит не только к БД Октелла, но и к любой другой MS SQL-базе, разве что названия таблиц и баз будут вашими. Но В ЛЮБОМ СЛУЧАЕ СДЕЛАЙТЕ БЕКАПЫ БД!
Ну, понаехали.
1. Запускаем установленный менеджер и подключаемся к нашей БД'
В поле имя сервера укажите "IP-адрес вашего sql-сервера"\"Название БД". По умолчанию "Название БД" для Октелла =, вот сюрприз, OKTELL. Выбираем проверку подлинности. можно воспользоваться windows-аутентификацией, но ваш сервер может находиться в другой доменной зоне (в случае, если вы цепляетесь не с компьютера-сервера), а потому лучше зацепиться к нему с помощью Логина: AutelService и пароля: Version2. Нажимайте Соединить.
Открываем вкладку "Базы данных" и видим три базы, которые использует Октелл: oktell, oktell_cc_temp, oktell_settings. Рассказывать про каждую из них я не буду, но по названиям и так ясно. Нажимаем "Создать запрос" (ctrl+N) и начинаем писать всякие "просьбы" нашему серверу. 3. Ищем "толстые" таблицы. В открывшемся поле набираем (копи-пастим): Use Oktell DBCC UPDATEUSAGE (0) create table #t(name varchar(255), row varchar(255), reserved varchar(255), data varchar(255), inxex_size varchar(255), unused varchar(255)) insert into #t exec sp_msforeachtable N'exec sp_spaceused ?' select * from #t drop table #t
Нажимаем F5 (выполнить) и ниже получим список всех таблиц с их размерами:
Обращать внимание следует на столбец reserved - он показывает размер таблицы в килобайтах. В примере видно, что таблица A_Stat_Connetcions_1x1 занимает примерно 140 Мб. Это не много, но в вашем случае это может быть гораздо б'ольшее число, т.к. эта таблица заполняется быстрее остальных, т.к. фиксирует все входящие/исходящие звонки. Просветленный заметит, что в запросе есть строка Use Oktell (в самом начале). С помощью нее можно выбрать БД, которую мы хотим "проверить". В запросе выше я вывел размеры таблиц по базе Oktell, но не плохо бы вывести данные по всем базам: oktell, oktell_settings, oktell_cc_temp. Т.е. чтобы вывести данные по базе oktell_settings достаточно ввести в качестве первой строки Use Oktell_settings. 4. Чистим нужные таблицы.
Сразу отмечу, что чистить таблицы нужно только в том случае, если вы точно уверены в своих знаниях об этой таблице и знаете, что там хранится, т.е. можно случано что-то удалить и вы потеряете статистику/настройки октелла/списки ваших клиентов. БУДЬТЕ АККУРАТНЫ!
Все еще уверены в том, что делаете? Тогда продолжаем. Мы выявили, что таблица A_Stat_Connections_1x1 занимает многовато, по нашему мнению, места. Теперь будем ее подрезать. Снова нажимаем Создать запрос и пишем следующее: use oktell delete from a_stat_connections_1x1 where TimeStart < '2013-09-25 00:00:00' Где 2013-09-25 00:00:00' - дата ДО которой нам не интересны данные таблицы, т.е. статистика (в данном случае из-за таблицы мы говорим о статистике звонков). можно, конечно, убрать из запроса where TimeStart < '2013-09-25 00:00:00' , но тогда вы удалите данные из таблицы совсем, так, что будьте осторожны.
Готово. Таблица очищена. То же самое (возможно уже без указания даты) следует сделать и с остальными "крупными" таблицами в БД. Например A_Streams в базе oktell_settings тоже может много весить, т.к. хранит историю по изменениям в карте сети (видно по датам в названии строк). попробуем очистить от старых сохранений и ее: use oktell_settings delete FROM A_Streams where name like '%copy%'
В данном случае name like '%copy%' удалит из таблицы значения являющиеся копией. обратите внимание, что везде пишу use oktell_settings или use oktell тем самым выбирая нужную мне БД для запроса. Можно обойтись и без таких обращений, но так будет проще понять новичкам.
5. Сложности.
Если таблица, которую вы удаляете очень большая с огромным количеством записей, то может возникнуть ошибка при попытке удаления данных из нее, т.к. вы удаляете очень большой кусок информации и логи по этой базе не лезут в ограничения по умолчанию. Это можно поправить снятием ограничений.
В менеджере тыкаем правой клавишей по базе oktell и выбираем "Свойства". Слева выбираем "Файлы". В колонке расширение у файла oktell_log выбираем пункт неограниченный рост размера файлов. Нажимаем ОК.
Теперь снова попытайте удачу с очисткой таблиц. Если удаляться будет ОЧЕНЬ долго или снова будете получать ошибку, то попробуйте удалять кусами, например, за определенный период.
6. Обрезаем логи.
После всех манипуляций у нас резко возрастет размер баз-логов. Как не странно, но они тоже учитываются при расчете ограничений на вашу версию MS SQL. а потому беспощадно их зарежем запросом:
use master backup log oktell with truncate_only use oktell DBCC SHRINKFILE (oktell_Log,20)
backup log oktell_settings with truncate_only use oktell_settings DBCC SHRINKFILE (oktell_settings_Log,20)
backup log oktell_cc_temp with truncate_only use oktell_cc_temp DBCC SHRINKFILE (oktell_cc_temp_Log,20)
Готово. Теперь можете дальше делать все, что хотите. Симптомы переполнения БД должны пропасть, а все процедуры по очистке и переиндексации в настройках Октелла должны работать.