I started off the new year by reading the Oracle Database 19c New Features Guide and I came across a very nice new feature : Oracle Network Log File Segmentation. It is now possible to specify a maximum file size for listener logs and a maximum number of files to keep. In previous versions, only log.xml was segmented in chunks of 10Mb, but not the plain text listener.log.[^1]
+
````markdown
+
## Сегментация логов Oracle Listener в Oracle Database 19c
-
The Net Services Administrator’s Guide briefly describes this feature and the Database Net Services Reference gives a definition of 2 new parameters in listener.ora :
-
- **LOG_FILE_NUM_<listener_name>** : To specify the number of log file segments. At any point of time there can be only n log file segments where n is LOG_FILE_NUM_listener_name. If the log grows beyond this number, then the older segments are deleted.
-
- **LOG_FILE_SIZE_<listener_name>** : To specify the size of each log file segment. The size is in MB.
+
В Oracle Database 19c появилась возможность сегментации сетевых логов (Oracle Network Log File Segmentation). Функциональность позволяет ограничивать максимальный размер файлов логов listener’а и количество хранимых сегментов.
-
Let’s run a quick test with a listener in version 19.4 :
+
В предыдущих версиях Oracle сегментация применялась только к файлу `log.xml` (частями по 10 МБ). Текстовый лог `listener.log` не ротировался.
-
``` bash
+
### Параметры конфигурации
+
+
Функция описана в *Net Services Administrator’s Guide* и *Database Net Services Reference*. Для listener’а в файле `listener.ora` доступны два новых параметра:
+
+
- **LOG_FILE_NUM_<listener_name>**
+
Определяет максимальное количество сегментов логов. При превышении указанного количества самые старые файлы удаляются.
+
+
- **LOG_FILE_SIZE_<listener_name>**
+
Определяет максимальный размер одного сегмента лога в мегабайтах.
+
+
### Пример проверки (Oracle 19.4)
+
+
Проверка состояния listener’а:
+
+
```bash
lsnrctl status listener
+
````
+
+
Файл параметров listener’а:
-
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 03-JAN-2020 21:55:44
-
-
Copyright (c) 1991, 2019, Oracle. All rights reserved.
-
-
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
-
STATUS of the LISTENER
-
------------------------
-
Alias LISTENER
-
Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production
-rw-r-----. 1 oracle oinstall 576K Jan 2 20:51 listener_1.log
-
-rw-r-----. 1 oracle oinstall 556K Jan 2 21:09 listener_2.log
-
-rw-r-----. 1 oracle oinstall 537K Jan 2 21:16 listener_3.log
-
-rw-r-----. 1 oracle oinstall 594K Jan 2 21:21 listener_4.log
-
-rw-r-----. 1 oracle oinstall 594K Jan 2 21:25 listener_5.log
-
-rw-r-----. 1 oracle oinstall 595K Jan 2 21:28 listener_6.log
-
-rw-r-----. 1 oracle oinstall 595K Jan 2 21:32 listener_7.log
-
-rw-r-----. 1 oracle oinstall 595K Jan 2 21:35 listener_8.log
-
-rw-r-----. 1 oracle oinstall 209K Jan 2 21:42 listener.log
+
+
Команда `reload` данные параметры не применяет.
+
+
### Результат сегментации текстовых логов
+
+
После генерации нагрузки на listener в каталоге `trace` создаются текстовые лог-файлы:
+
+
```bash
+
ls -lh
```
-
I do have a number of files as expected, but they are approximately half the size I imagined. I had no idea that actually, the parameter LOG_FILE_SIZE_listener_name rather defines the size of log_*.xml files :
drwxr-xr-x. 14 oracle oinstall 4.0K Aug 13 16:20 ..
-
-rw-r-----. 1 oracle oinstall 1.1M Jan 2 20:51 log_1.xml
-
-rw-r-----. 1 oracle oinstall 1.1M Jan 2 21:09 log_2.xml
-
-rw-r-----. 1 oracle oinstall 1.1M Jan 2 21:16 log_3.xml
-
-rw-r-----. 1 oracle oinstall 1.1M Jan 2 21:21 log_4.xml
-
-rw-r-----. 1 oracle oinstall 1.1M Jan 2 21:25 log_5.xml
-
-rw-r-----. 1 oracle oinstall 1.1M Jan 2 21:28 log_6.xml
-
-rw-r-----. 1 oracle oinstall 1.1M Jan 2 21:32 log_7.xml
-
-rw-r-----. 1 oracle oinstall 1.1M Jan 2 21:35 log_8.xml
-
drwxr-xr-x. 2 oracle oinstall 4.0K Jan 2 21:35 .
-
-rw-r-----. 1 oracle oinstall 363K Jan 2 21:44 log.xml
+
+
Пример вывода:
+
+
```
+
listener_1.log
+
listener_2.log
+
...
+
listener_8.log
+
listener.log
+
```
+
+
Количество сегментов соответствует значению `LOG_FILE_NUM_LISTENER`. Размер файлов составляет около 500–600 КБ.
+
+
### Результат сегментации XML-логов
+
+
Проверка каталога `alert`:
+
+
```bash
+
ls -lh ../alert/
+
```
+
+
Пример вывода:
+
+
```
+
log_1.xml
+
log_2.xml
+
...
+
log_8.xml
+
log.xml
```
-
And plain text listener_*.log files are then rotated accordingly.
-
I will keep this detail in mind when implementing this useful new feature.
+
Файлы `log_*.xml` имеют размер около 1.1 МБ, что соответствует значению `LOG_FILE_SIZE_LISTENER`.
+
+
### Особенности работы
+
+
Параметр `LOG_FILE_SIZE_<listener_name>` управляет размером сегментов XML-логов (`log_*.xml`).
+
Текстовые логи (`listener_*.log`) ротируются синхронно с XML-логами и имеют меньший фактический размер.
+
### Вывод
-
[^1]: взято с https://floo.bar/2020/01/07/new-in-19-oracle-network-log-file-segmentation-with-log_file_num_listener_name-and-log_file_size_listener_name/
+
При настройке сегментации логов Oracle Listener в версии 19c необходимо учитывать, что ограничение размера напрямую применяется к XML-логам, а текстовые логи ротируются производным образом.