Клиенты графической базы данных, такие как DB Visualizer, DBeaver или Exaplus, отправляют запросы в базу данных Exasol, когда пользователь щелкает через браузер базы данных для проверки схем, таблиц, представлений и т. Д. Это запросы к системным таблицам, таким как EXA_ALL_TABLES, EXA_ALL_COLUMNS и т. Д. на. Также функции автозаполнения в других клиентах отправляют такие запросы.
Когда вы просматриваете системную таблицу EXA_DBA_SESSIONS (или EXA_ALL_SESSIONS), вы видите, что каждое окно Exaplus открывает две сессии: например, одну с CLIENT = 'EXAplus 6.0.8' и одну с CLIENT = '[Meta] EXAplus 6.0. 8' . Запросы на просмотр базы данных отправляются в последнем сеансе «Мета». Во-первых, не смешивать мета-запросы и ваши собственные запросы в таблицах аудита и т. Д., А во-вторых, не блокировать браузер схемы, когда в данный момент выполняется запрос.
Вы можете использовать следующий запрос, чтобы узнать, какие наборы состояний были отправлены в базу данных в рамках метасеанса Exaplus:
SELECT q.sql_text
FROM EXA_DBA_AUDIT_SESSIONS s JOIN EXA_DBA_AUDIT_SQL q ON s.SESSION_ID=q.SESSION_ID
WHERE s.client LIKE '[Meta] EXAplus %';
Для сессий клиентской базы данных SQL Visualizer вы не можете так легко отличить пользовательские сессии от мета-сессий. Для клиента DBeaver это похоже на Exaplus. Вы найдете значение типа «DBeaver-Meta 6.0.1.201903251040» в столбце КЛИЕНТА EXA_ALL_SESSIONS, EXA_DBA_SESSIONS_LAST_DAY и EXA_DBA_AUDIT_SESSIONS.
Exaplus и другие клиенты имеют локальную историю запросов. Они сохраняются на клиентском компьютере. С другой стороны, EXA_DBA_AUDIT_SQL управляется базой данных. Каждый запрос, который отправляется в базу данных, записывается там. Но только если в настройках базы данных в Exaoperation включен аудит.
Невозможно выборочно включить аудит. Все или ни один из запросов не записан в системные таблицы.
То, что вы можете сделать, это периодически (например, раз в ночь) вставлять все записи таблиц аудита, которые не принадлежат мета-сеансам, в другую таблицу. А затем используйте TRUNCATE AUDIT LOGS для очистки таблиц аудита.
Но обычно в этом нет необходимости, поскольку и пользовательские запросы, и мета-запросы должны регистрироваться - или ни один из них.
Вот некоторые запросы, которые Exaplus отправлял в базу данных Exasol при нажатии на схемы, таблицы, пользователей, роли и соединения:
select COLUMN_NAME, COLUMN_TYPE, COLUMN_IS_DISTRIBUTION_KEY, COLUMN_DEFAULT, COLUMN_IS_NULLABLE, COLUMN_IDENTITY, COLUMN_COMMENT from SYS.EXA_ALL_COLUMNS where COLUMN_SCHEMA='RF' and COLUMN_TABLE='TEST' order by COLUMN_ORDINAL_POSITION;
SELECT GRANTEE, PRIVILEGE, ADMIN_OPTION from SYS.EXA_DBA_SYS_PRIVS;
select OBJECT_NAME, OBJECT_TYPE, OBJECT_ID, CREATED,LAST_COMMIT, OWNER, OBJECT_COMMENT, OBJECT_IS_VIRTUAL from SYS.EXA_ALL_OBJECTS where ((OBJECT_TYPE = 'TABLE') or (OBJECT_TYPE = 'VIEW')) and (ROOT_ID = 35510272);
select "OBJECT_NAME", "OBJECT_TYPE", "SCHEMA_NAME", "OBJECT_COMMENT"from SYS.EXA_SYSCAT;
SELECT GRANTEE, GRANTED_ROLE, ADMIN_OPTION from SYS.EXA_DBA_ROLE_PRIVS;
select OBJECT_NAME, OBJECT_TYPE, OBJECT_ID, CREATED,LAST_COMMIT, OWNER, OBJECT_COMMENT, OBJECT_IS_VIRTUAL from SYS.EXA_ALL_OBJECTS where ((OBJECT_TYPE = 'TABLE') or (OBJECT_TYPE = 'VIEW')) and (ROOT_ID = 35510272);
SELECT GRANTEE, GRANTED_CONNECTION, ADMIN_OPTION from SYS.EXA_DBA_CONNECTION_PRIVS;
SELECT C.CONSTRAINT_TYPE C_TYPE, C.CONSTRAINT_NAME C_NAME, ORDINAL_POSITION, COLUMN_NAME, REFERENCED_SCHEMA, REFERENCED_TABLE, REFERENCED_COLUMN, CONSTRAINT_ENABLED FROM SYS.EXA_ALL_CONSTRAINT_COLUMNS CC join SYS.EXA_ALL_CONSTRAINTS C on C.CONSTRAINT_SCHEMA = CC.CONSTRAINT_SCHEMA and C.CONSTRAINT_TABLE = CC.CONSTRAINT_TABLE and C.CONSTRAINT_NAME = CC.CONSTRAINT_NAME WHERE C.CONSTRAINT_SCHEMA like 'RF' and C.CONSTRAINT_TABLE like 'TEST' and CC.CONSTRAINT_SCHEMA like 'RF' and CC.CONSTRAINT_TABLE like 'TEST' ORDER BY C.CONSTRAINT_NAME,ORDINAL_POSITION
select OBJECT_NAME, OBJECT_TYPE, OBJECT_ID, ROOT_ID, CREATED, LAST_COMMIT, OWNER, OBJECT_COMMENT from SYS.EXA_DBA_OBJECTS where ((ROOT_ID = 35510272) and ((OBJECT_TYPE = 'FUNCTION') or (OBJECT_TYPE = 'PROCEDURE') or (OBJECT_TYPE = 'SCRIPT')));