# Полезные скрипты для работы с БД.

##### Применительно к базам данных Abonement/Shelter.

#### **1. Удаление логов из базы данных.**

1.1. Удаление логирования из таблицы LOG$FIELDS

```
     delete from log$fields;
     commit;                   
```

1.2. Удаление логирования из таблицы LOG$TABLES

```
	delete from log$tables;
	commit;
```

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

 **delete from LOG$TABLES LT where LT.DATE\_TIME &lt; d2dbl('now') - 30;**

 **delete from LOG$FIELDS LF where not LF.LOG\_TABLES\_ID in (select LT.ID from LOG$TABLES LT where LT.ID = LF.LOG\_TABLES\_ID);**

 **commit;**

После выполнения данного скрипта, в БД останутся логи за 30 дней, остальные будут удалены.

 Для уменьшения размера БД необходимо сделать backup / restore.

1.4. Для автоматического удаления логов необходимо в «Планировщик заданий» Windows добавить простую задачу с выполнением .bat файла, рядом с котором должен быть файл script.sql.

 Содержание .bat файла:

 **@rem Указать путь до isql.exe**

 **@echo off**

 **set isql="C:\\Program Files (x86)\\Shelter\\Firebird\\bin\\isql.exe"**

 **set sqlPath=%~dp0**

 **set sqlFile=%sqlPath%script.sql**

 **%isql% -input %sqlFile%**

Содержание script.sql:

 **CONNECT 'localhost/3080:C:\\\_BASE\\SHELTER.FDB' user 'ucs' PASSWORD 'ucs';**

 **delete from LOG$TABLES LT where LT.DATE\_TIME &lt; d2dbl('now') - 30;**

 **delete from LOG$FIELDS LF where not LF.LOG\_TABLES\_ID in (select LT.ID from LOG$TABLES LT where LT.ID = LF.LOG\_TABLES\_ID);**

 **commit;**

#### **2. Запрос и скрипт на перестыковку платежей.** 

2.1. Сначала выполняем запрос в разделе Tools - SQL Editor.

Запрос:

**select distinct cc.CHK**   
**from CHECK\_CONTENTS cc**   
**where not exists(select i.id from INVOICES i where i.id = cc.CHK)**   
**order by 1**

2.2. Если после выполнения запроса в таблице появляются данные (таблица не пуста), то применяем скрипт.

Скрипт:

**delete from CHECK\_CONTENTS\_JOINS ccd where ccd.CHK in (**

**select distinct cc.CHK from CHECK\_CONTENTS cc**   
**where not exists(**

 **select i.id from INVOICES i where i.id = cc.CHK)**   
**);**

**---------------------**  
**delete from CHECK\_CONTENTS ccd where ccd.CHK in (**  
**select**   
**distinct cc.CHK from CHECK\_CONTENTS cc**   
**where**   
**not exists(select i.id from INVOICES i where i.id = cc.CHK)**   
**);**

#### **3. Скрипт для смены адреса глобального сервера обновлений.** 

3.1. Скрипт:

**update DEFAULT\_VALUES dv set dv.STRVALUE = 'udpate.shelter.ru' where dv.STRVALUE = 'shelter2.ucs.ru'**

<span style="color: #ff0000;">// shelter only !!? убрать</span>

#### **4. Получение сведений о клиентских приложениях.**

4.1. Через SQL-Editor:

```
SELECT MON$USER, MON$REMOTE_ADDRESS, MON$REMOTE_PID, MON$TIMESTAMP
FROM MON$ATTACHMENTS
WHERE MON$ATTACHMENT_ID <> CURRENT_CONNECTION
```

4.2. Отключение всех соединений с базой, за исключением своего:

**DELETE FROM MON$ATTACHMENTS  
WHERE MON$ATTACHMENT\_ID &lt;&gt; CURRENT\_CONNECTION**

Обязательный бэкап/рестор после выполнения скриптов!!!