当用户单击数据库浏览器以检查模式、表、视图等时,图形数据库客户端(如 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 元会话中哪些 statemets 被发送到数据库:
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 客户端 DB Visualizer 的会话,您无法轻易区分用户会话和元会话。对于客户端 DBeaver,它类似于 Exaplus。您可以在 EXA_ALL_SESSIONS、EXA_DBA_SESSIONS_LAST_DAY 和 EXA_DBA_AUDIT_SESSIONS 的 CLIENT 列中找到类似“DBeaver-Meta 6.0.1.201903251040”的值。
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')));