Приветствую.
По умолчанию дистрибутив Октелла поставляется в комплекте с 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.
- Нажимайте Соединить.
2. Изучаем, к чему подключились. Открываем окно нового запроса.
- Открываем вкладку "Базы данных" и видим три базы, которые использует Октелл: 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. Чистим нужные таблицы.
Сразу отмечу, что чистить таблицы нужно только в том случае, если вы точно уверены в своих знаниях об этой таблице и знаете, что там хранится, т.е. можно случано что-то удалить и вы потеряете статистику/настройки октелла/списки ваших клиентов. БУДЬТЕ АККУРАТНЫ!
Все еще уверены в том, что делаете? Тогда продолжаем.
P.S.
И таки да. Не хочу нести ответственности, а потому не несу.
Все еще уверены в том, что делаете? Тогда продолжаем.
- Мы выявили, что таблица A_Stat_Connections_1x1 занимает многовато, по нашему мнению, места. Теперь будем ее подрезать.
- Снова нажимаем Создать запрос и пишем следующее:
use oktellГде 2013-09-25 00:00:00' - дата ДО которой нам не интересны данные таблицы, т.е. статистика (в данном случае из-за таблицы мы говорим о статистике звонков). можно, конечно, убрать из запроса where TimeStart < '2013-09-25 00:00:00' , но тогда вы удалите данные из таблицы совсем, так, что будьте осторожны.
delete from a_stat_connections_1x1 where TimeStart < '2013-09-25 00:00:00'
- Готово. Таблица очищена. То же самое (возможно уже без указания даты) следует сделать и с остальными "крупными" таблицами в БД. Например A_Streams в базе oktell_settings тоже может много весить, т.к. хранит историю по изменениям в карте сети (видно по датам в названии строк). попробуем очистить от старых сохранений и ее:
use oktell_settingsВ данном случае name like '%copy%' удалит из таблицы значения являющиеся копией. обратите внимание, что везде пишу use oktell_settings или use oktell тем самым выбирая нужную мне БД для запроса. Можно обойтись и без таких обращений, но так будет проще понять новичкам.
delete FROM A_Streams where name like '%copy%'
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)
P.S.
И таки да. Не хочу нести ответственности, а потому не несу.
Комментариев нет:
Отправить комментарий