Действия при переполнении базы данных — различия между версиями

Материал из Oktell
Перейти к: навигация, поиск
Строка 24: Строка 24:
  
 
  exec A_DB_HelpTables
 
  exec A_DB_HelpTables
 +
 +
[[Файл:ПереполнениеБД-001.png | center| 600px]]
  
 
'''Шаг 3.''' Очищение таблиц. Воспользуйтесь следующим запросом:
 
'''Шаг 3.''' Очищение таблиц. Воспользуйтесь следующим запросом:
Строка 41: Строка 43:
 
* Если база данных переполнена настолько, что не дает выполнить данный запрос, попробуйте удалять записи не по неделям (по 7 дней), а по 3 дня. Для этого измените значение в первом условии 7 на 3. Этим же способом, можно увеличить количество удаляемых записей с недели на месяц, изменив значение на 30.  
 
* Если база данных переполнена настолько, что не дает выполнить данный запрос, попробуйте удалять записи не по неделям (по 7 дней), а по 3 дня. Для этого измените значение в первом условии 7 на 3. Этим же способом, можно увеличить количество удаляемых записей с недели на месяц, изменив значение на 30.  
  
Нажмите '''F5''' для выполнения запроса. В случае удачного выполнения из таблицы удалятся записи за неделю. Нажмите '''F5''' еще несколько раз, пока не увидите, что '''обработано 0 строк.'''
+
Нажмите '''F5''' для выполнения запроса. В случае удачного выполнения из таблицы удалятся записи за неделю. Нажмите '''F5''' еще несколько раз, пока не увидите в сообщениях, что '''обработано 0 строк.'''  
 +
 
 +
<center>[[Файл:ПереполнениеБД-002.png | 500px]][[Файл:ПереполнениеБД-003.png| 500px]]</center>
 +
 
 +
Для проверки правильности выполнения предлагается использоваться следующий запрос:
 +
 
 +
select timestart from A_Stat_Connections_1x1
 +
 
 +
[[Файл:ПереполнениеБД-004.png | center| 600px]]

Версия 09:38, 6 декабря 2013

В данной статье описываются действия при переполнении базы данных.

SQL SERVER 2005 Express имеет ограничение на размер базы данных 4 Гб, SQL SERVER 2008 Express - 8 Гб, SQL SERVER 2012 Express - 10 Гб. Превышение размера баз данных, как правило происходит из за роста следующих таблиц (обратите внимание на базы данных):

  • Статистика соединений АТС [oktell].[dbo].[A_Stat_Connections_1x1]
  • Статистика соединений Call-центра [oktell_cc_temp].[dbo].[A_Cube_CC_EffortConnections]

В случае переполнения базы данных у вас могут проявляться следующие симптомы: не отображается статистика АТС, система не запускается, зависание линий и др.

Перед началом работы обязательно сделайте бэкапы баз данных. Зайдите в Администрирование - Общие настройки - Управление базами данных - Произвести резервное копирование БД.

Вы можете использовать встроенные методы для очистки баз данных. Зайдите в Администрирование - Общие настройки - Управление базами данных - Произвести общую профилактику БД и Удалить данные и перестроить индексы. Обратите внимание на количество дней, которые необходимо оставить в вашей статистике.

ВНИМАНИЕ: Если сделать "Профилактика БД и удаление данных 2 дня", то база может "упасть" и восстанавливать ее можно только из бэкапа. Происходит это из за того, что запрос может выполняться долгое время и если его прервать, то восстановить БД уже будет сложно. Дело в том, что при выполнении данной процедуры создается некоторый кэш внутри бд. Если база переполнена — он не создастся.

Шаг 1. Обязательно сделайте бэкапы баз данных. Зайдите в Администрирование - Общие настройки - Управление базами данных - Произвести резервное копирование БД.

Шаг 2. Определение таблиц, которые занимают больше всего места в вашей базе данных. Воспользуйтесь хранимой процедурой A_DB_HelpTables. Выполните в SSMS следующий запрос:

exec A_DB_HelpTables
ПереполнениеБД-001.png

Шаг 3. Очищение таблиц. Воспользуйтесь следующим запросом:

DELETE FROM [oktell].[dbo].[A_Stat_Connections_1x1]
WHERE 
TimeStart< DATEADD ( dd, 7 , (SELECT MIN(timestart) FROM a_stat_connections_1x1 ) ) 
AND 
TimeStart< DATEADD ( DD, -30, GETDATE())

DBCC SHRINKDATABASE  (oktell,  TRUNCATEONLY)

Описание запроса: Запрос удаляет записи из таблицы [oktell].[dbo].[A_Stat_Connections_1x1] по неделям, начиная с самой последней (первое условие в запросе). При этом запрос, в любом случае, оставит записи за последний месяц (второе условие). После выполнения запроса производится очистка таблицы от временных записей (логи, транзакции) командой SHRINK.

  • Чтобы не потерять данные в результате запроса, например за последние три месяца, измените во втором условии значение -30 на -90.
  • Если база данных переполнена настолько, что не дает выполнить данный запрос, попробуйте удалять записи не по неделям (по 7 дней), а по 3 дня. Для этого измените значение в первом условии 7 на 3. Этим же способом, можно увеличить количество удаляемых записей с недели на месяц, изменив значение на 30.

Нажмите F5 для выполнения запроса. В случае удачного выполнения из таблицы удалятся записи за неделю. Нажмите F5 еще несколько раз, пока не увидите в сообщениях, что обработано 0 строк.

ПереполнениеБД-002.pngПереполнениеБД-003.png

Для проверки правильности выполнения предлагается использоваться следующий запрос:

select timestart from A_Stat_Connections_1x1
ПереполнениеБД-004.png