База данных
===============

Инструменты для создания базы данных, подключения к ней, а также для извлечения и сравнения метаданных находятся во вкладке База Данных.

.. figure:: img/database.png

    Вкладка ``База Данных``

Создание подключения
------------------------

РБДЭксперт позволяет одновременно использовать несколько подключений к базе данных.
Информацию о подключении отображает ``«Браузер баз данных»``.

.. figure:: img/browser.png

    Браузер баз данных

Для создания подключения выберите соответствующий пункт в меню База данных или нажмите на кнопку ``Создать подключение`` в панели инструментов. 
Заполните поля в открывшемся окне и нажмите на кнопку ``Подключиться``. Кнопка ``Тест`` устанавливает подключение с указанными параметрами, 
но не сохраняет его в ``Дереве подключений``. Кнопка ``Сохранить`` применяет изменения в параметрах подключения, но не устанавливает соединение. 
Кнопка ``Закрыть`` закрывает окно редактирования подключения без сохранения изменений в параметрах.

.. note::

    При попытке подключения может возникнуть ошибка шифрования сетевого соединения. 
    Для поддержки шифрования необходима версия ``Java`` не ниже ``21`` или установленное ``Java Cryptography Extension (JCE)`` дополнение. 
    В противном случае следует изменить значение параметра ``WireCrypt = Disabled`` в ``firebird.conf``.

Нативное подключение
~~~~~~~~~~~~~~~~~~~~~

Нативное подключение выполняется через ISC API и использует клиентскую библиотеку fbclient, которая поставляется вместе с РБДЭксперт.

При подключении с клиентской библиотекой становится доступной опция ``Использовать новое OO API``,
что позволяет использовать пакеты (batch) при генерации тестовых данных.

Встроенный сервер
~~~~~~~~~~~~~~~~~~~~~

Режим встроенного сервера позволяет работать с базой данных, когда сервер СУБД не доступен или не установлен на локальный компьютер.
Для подключения нужен только файл базы данных, на который у пользователя, запустившего РБДЭксперт, есть права на чтение и запись.
Но режим встроенного сервера накладывает некоторые ограничения, перечисленные далее.

В режиме встроенного сервера поддерживается работа только с базами данных, созданными на РЕД Базе Данных 5.

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

Пользователи и задания не отображаются во встроенном режиме.

SSH туннель
~~~~~~~~~~~~~~~~

Есть возможность подключиться к базе данных через ``SSH-туннель``. 
Как и при любом ``SSH-соединении``, весь трафик между вами и БД будет шифроваться.
Для этого заполните параметры для ``SSH-соединения``. 

.. figure:: img/ssh.png

    SSH туннель

Сертификат
~~~~~~~~~~~~~~~~

Для аутентификации по сертификату необходимо заполнить следующую форму:

.. figure:: img/certificate.png

    Сертификат

Расширенные параметры подключения
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Дополнительные свойства соединения можно ввести, выбрав вкладку ``«Расширенные»``. 
На ней можно увидеть таблицу с двумя столбцами. Левый соответствует параметру подключения, а правый его значению. 
Обратитесь к документации ``JDBC`` драйвера, чтобы узнать, какие дополнительные параметры подключения к базе данных могут быть установлены.

Также можно выбрать уровень изоляции транзакций. 
Различные уровни изоляции транзакций определяют поведение данного клиентского приложения,
запустившего эту транзакцию по отношению к другим параллельным процессам на любом компьютере локальной сети, 
которые одновременно выполняют чтение или изменение в той же базе данных, что и текущий процесс.
Для Ред Базы Данных и Firebird по умолчанию используется ``READ_COMMITED``.
Подробное описание расширенных параметров подключения см. в разделе :ref:`db_extended_connection`.

Подключение к другим серверам
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

РБДЭксперт позволяет подключаться к другим серверам (не ``Firebird`` или ``RedDatabase``).
Для установки такого подключения нужно выполнить следующее:

1. Добавить драйвер для работы с выбранной СУБД, используя меню ``Система`` :math:`\to` ``Драйверы`` :math:`\to` ``Кнопка "Добавить драйвер"``. 
   В открывшемся окне заполните все поля и нажмите кнопку ``Сохранить``.

    .. figure:: img/add_driver.png

        Добавление драйвера InterBase

2. Создать подключение, используя меню ``База данных`` :math:`\to` ``Создать подключение``. 
   В открывшейся вкладке выбрать подходящий ``JDBC драйвер`` и ``Сервер``, заполнить все поля и нажать кнопку ``Подключиться``:

    .. figure:: img/ib_con.png

        Подключение к базе данных InterBase

.. note::

    На данный момент работа с такими подключениями поддерживается только ``Редактором запросов`` и инструментом ``Выполнить SQL-скрипт из файла``.

Создание базы данных
-----------------------------

Для создания базы данных выберите соответствующий пункт в меню ``База данных`` 
или нажмите на кнопку ``Создать базу данных`` в панели инструментов. 
Заполните поля в открывшемся окне и нажмите на кнопку ``Создать``. 
Подробное описание полей см. в разделе :ref:`db_connection`.

.. figure:: img/create_db.png

    Создание базы данных

.. note::
    
    При попытке создания базы данных может возникнуть ошибка шифрования сетевого соединения. 
    Для поддержки шифрования необходима версия ``Java`` не ниже ``21`` или установленное ``JCE`` дополнение. 
    В противном случае следует изменить значение параметра ``WireCrypt = Disabled`` в ``firebird.conf``.

Выполнить SQL-скрипт из файла
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Выберите открытое соединение и укажите путь к файлу с SQL-скриптом и нажмите кнопку ``Начать``.
Сделайте ``commit`` или ``rollback`` транзакции, нажав на соответствующие кнопки.

.. figure:: img/execute_from_file.png

    Выполнить SQL-скрипт из файла

Импорт подключения
-----------------------

Для тех, у кого уже есть настроенные в ``IBExpert`` подключения, разработана опция импорта подключений.
Запустите РБДЭксперт и подключитесь к нужной пользовательской базе данных. 
Выберите пункт меню ``База данных`` :math:`\to` ``Импортировать подключения`` :math:`\to` ``Импортировать из базы данных`` и выберите нужное подключение в открывшемся окне.

.. figure:: img/import_connection.png

    Импорт подключения из базы данных

Также доступен импорт подключения из файла:

.. figure:: img/import_connection_file.png

    Импорт подключения из файла

Экспорт подключения
-----------------------

Для экспорта подключения в файл выберите пункт меню ``База данных`` :math:`\to` ``Экспортировать подключения`` и выберите нужное подключение в открывшемся окне.

.. figure:: img/export_connection.png

    Экспорт подключения

Конвертация базы данных InterBase
------------------------------------

Для конвертации базы данных ``InterBase`` в ``RedDatabase`` выберите пункт меню ``База данных`` :math:`\to` ``Конвертировать базу данных``
или в дереве объектов нажмите правой кнопкой мыши по активному подключению к ``InterBase`` и в открывшемся меню выберите пункт ``Конвертировать на RedDatabase``.

Конвертация базы данных выполняется в 6 этапов: 

1. Выбрать подключение - определение базы данных, которую нужно конвертировать:

    .. figure:: img/ib_convert.png

        Конвертация базы данных InterBase

2. Извлечь метаданные - извлечение метаданных базы-источника в SQL-скрипт, валидация метаданных: 

    * Экранирование имён объектов двойными кавычками при совпадении идентификатора с ключевыми/зарезервированными словами.
    * Удаление оператора ``SUSPEND`` из тела неселективных процедур.
    * Преобразование выражений ``GROUP BY``. Выражения в запросах с группировкой должны быть агрегатными функциями или частями выражений в предложении ``GROUP BY``.
    * Преобразование внешних функций (``UDF``), использующих модуль ``ib_udf``, в хранимые функции ``RedDatabase``.
3. Создать базу данных - определение базы данных ``RedDatabase``, которая будет создана в результате конвертации:

    .. figure:: img/create_convert_db.png

        Создание базы данных RedDatabase
    
    * Драйвер - драйвер, используемый для создания базы данных.
    * База данных - путь, по которому будет создана сконвертированная база данных.
    * Сервер - сервер, на котором запущена Ред База Данных.
    * Порт - порт, на котором работает Ред База Данных. 
    * Пользователь - пользователь, от имени которого будет создана база данных.
    * Пароль - пароль пользователя.
    * Кодировка - кодировка базы данных, рекомендуется указать кодировку базы-источника.
    * Размер страницы - размер страницы, с которым будет создана база данных RedDatabase.
    * Сохранить как - добавить в дерево подключений соединение с указанным именем.
4. Восстановить метаданные - для восстановления метаданных применяет сгенерированный на 2ом этапе SQL-скрипт к новой базе данных. 
   При этом триггеры и индексы создаются деактивированными (``INACTIVE``), а таблицы без ограничений.
5. Восстановление данных - добавление данных из базы-источника в сконвертированную базу данных. 

    .. warning::

        Поля типа ``ARRAY`` в сконвертированной базе данных будут заполнены значениями ``NULL``.

6. Активировать ограничения - активация триггеров и индексов, добавление табличных ограничений (``PK``, ``FK``, ``UK``).

Резервное копирование и восстановление
----------------------------------------

Для выполнения резервного копирования или восстановления выберите пункт меню База данных :math:`\to` Резервное копирование и восстановление.

.. figure:: img/backup.png

    Резервное копирование и восстановление

Опции резервного копирования соответсвуют ключам ``gbak``:

* Игнорировать контрольные суммы - ``gbak -ignore``;
* Только метаданные - ``gbak -meta_data``;
* Без сборки мусора - ``gbak -garbage_collect``;
* Непереносимое резервное копирование - ``gbak -nt``.

Опции восстановления из резервной копии тоже соответсвуют ключам ``gbak``:

* Переписать файл базы данных - ``gbak -replace_database``;
* Восстановление без теней - ``gbak -kill``;
* Деактивировать индексы - ``gbak -inactive``;
* Без проверки валидности - ``gbak -no_validity``;
* Только метаданные - ``gbak -meta_data``;
* Восстанавливать по одному - ``gbak -one_at_a_time``.
