среда, 29 июля 2015 г.

ORACLE. About AUDSID



Что такое AUDSID? (Oracle 11g).

В Oracle есть такое представление как v$session и многие наверняка пользовались этим представлением для того чтобы идентифицировать сессию по паре SID\SERIAL#. Многие DBA используют его для этого. Посмотрим на колонки этой таблицы:



SQL> desc v$session
Name                          Type         Nullable Default Comments
----------------------------- ------------ -------- ------- --------
SADDR                         RAW(8)       Y                        
SID                           NUMBER       Y                        
SERIAL#                       NUMBER       Y                        
AUDSID                        NUMBER       Y                        
PADDR                         RAW(8)       Y                        
USER#                         NUMBER       Y                        
USERNAME                      VARCHAR2(30) Y    


В этой небольшой заметке нам интересна колонка AUD_SID. AUDSID – это уникальный идентификатор для сессии и он используется в таблицах аудита, в частности в sys.aud$, как колонка SESSIONID.  Следует заметить, что по колонкам SESSIONID\SES$TID раньше (до версии Oracle 11g) строился индекс I_AUD1, но с версии Oracle 11g этот индекс больше не используется и был удален из дистрибутива.

См. ID 334486.1\ ID 6023472.8 (Bug 6023472)
As of database version 11g this index is no longer needed, see note 6023472.8

За включение аудита в Oracle (по умолчанию аудит выключен) отвечает параметр AUDIT_TRAIL (см. v$parametr).
Возможные значения AUDIT_TRIAL:


Values
AUDIT_TRAIL
none or false
Аудит БД отключен
Os
Аудит БД включен, аудит перенаправляется в ОС
db or true
Аудит БД включен, все записи хранятся в БД (SYS.AUD$)
db_extended
Аудит БД включен, все записи хранятся в БД (SYS.AUD$). Так же заполняются колонки SQLBIND и SQLTEXT в таблице SYS.AUD$
Xml
Аудит БД включен, все данные пишутся в xml файл ОС
xml,extended
Аудит БД включен, все данные пишутся в xml файл ОС, добавляются колонки SQLBIND и SQLTEXT


Стоит заметить, что за включение аудита пользователей SYS отвечает отдельный параметр -  AUDIT_SYS_OPERATIONS.
Изменения параметров AUDIT_SYS_OPERATIONS\AUDIT_TRAIL требуют рестарта экземпляра.

Все записи аудита ведутся, используя значения колонки AUDSID/SESSIONID, при этом AUDSID никак не связан с SID, SERIAL#, USERNAME и т.д.
Посмотрим на  посмотрим V$session:

select sid, serial# ,audsid ,username,OSUSER,schemaname from v$session

  SID       SERIAL#    AUDSID     USERNAME             OSUSER                    
---------- ---------- ---------- -------------------- -----------
       485       4745     165550 LEX_AAAAAEX          oracle                    
       487      23712     165546 LEX_AAAAAEX          oracle                    
       497      40388          0                      oracle                    
       498      19269          0                      oracle                    
       502      13362     165432 EAAAAA               govanii                   
       505        407     163821 LEXAAAAA             oracle                    
       506       6302 4294967295 SYS                  widlake                   
       511      11702     165518 OAAAAA               backerella                
       512      17076     165490 LEX_AAAAAEX          oracle                    
       518       9066     165507 OAAAAA               Manoled                   
       519       6956     163976 LEX_AAAAAEX          oracle                    
       521      15272 4294967295 SYS                  widlake                   
       523       4825     163975 LEX_AAAAAEX          oracle                    
       536      63941 4294967295 SYS                  backerella                
       524      19740     165548 LEX_AAAAAEX          oracle                    
       525        850     165549 LEX_AAAAAEX          oracle                    
       526      45112     165516 XXX                  backerella                
       527      11086     163963 LEX_AAAAAEX          oracle                    
       529       1662     163818 LEX_AAAAA            oracle                    
       530      62788 4294967295 SYS                  widlake                   
Интересное замечание - на этой БД не включен аудит, а колонка AUDSID все равно заполняется. Так же интересно, что у  всех аккаунтов SYS колонка AUDSID тоже заполнена (0, какое-нибудь значение или 4294967295 (1024*1024*1024*4 - 1)). Почему у некоторых пользователей SYS AUDSID ноль? Потому что это внутренние процессы оракла. Активность PMON, SMON, CKPT не аудируется. Для всех же «нормальных» аккаунтов (обычных пользователей) значения AUDSID  уникальны и имеют некоторое значение. Если посмотреть в таблицу sys.aud$ - SESSIONID с течением времени инкрементируется, это значение берется из последовательности (sequence) AUDSES$:
----
select ds.sequence_name, ds.max_value, ds.cycle_flag, ds.last_number from dba_sequences ds where ds.sequence_name = 'AUDSES$';
----
SEQUENCE_NAME    MAX_VALUE    CYCLE_FLAG    LAST_NUMBER
----------------------   ----------------   ----------------  ------------------- 
AUDSES$                2000000000       Y                    13098046

Максимальное значение счетчика 2 000 000 000, это значит, что его хватит на 2 миллиарда сессий, а после этого счетчик вернется к значению один (CYCLE_FLAG=YES), поэтому после достижения максимального значения аудит нужно будет очистить.

P.S.
Если, например, у нас есть система с подключениями раз  в секунду, то для того чтобы исчерпать все 2 млрд. потребуется 63 года (2 000 000 000/60*60*24*365).




Комментариев нет:

Отправить комментарий