如何通过查询语句获取Oracle数据库中指定表的创建用户信息
Oracle查询表创建用户方案
场景1:获取表所属Schema用户(绝大多数场景下的创建人)
你正在使用的DBA_OBJECTS视图本身就包含该信息,直接查询OWNER字段即可,这也是日常场景中默认的表创建人,示例语句如下:
SELECT OWNER AS 表创建用户, OBJECT_NAME AS 表名, CREATED AS 创建日期 FROM DBA_OBJECTS WHERE OBJECT_TYPE = 'TABLE' AND OWNER = '你的目标SCHEMA名' -- Oracle Schema名默认全大写,特殊小写命名需要加双引号包裹 AND OBJECT_NAME IN ('表名1', '表名2', '需查询的表名列表');
如果你的账号没有DBA权限,可将视图名替换为ALL_OBJECTS,仅能查询你有访问权限的表信息。
场景2:获取实际执行建表操作的账号(适配跨Schema建表场景)
如果存在A账号持有CREATE ANY TABLE权限,在B账号的Schema下建表的特殊场景,DBA_OBJECTS的OWNER字段仅会返回表所属的B账号,无法返回实际操作的A账号,这类场景需要按以下方式查询:
- 已开启数据库标准审计的前提下,可查询
DBA_AUDIT_TRAIL视图追溯:
SELECT USERNAME AS 实际建表操作人, OBJ_NAME AS 表名, OWNER AS 表所属Schema, TIMESTAMP AS 建表时间 FROM DBA_AUDIT_TRAIL WHERE ACTION_NAME = 'CREATE TABLE' AND OWNER = '你的目标SCHEMA名' AND OBJ_NAME IN ('表名1', '表名2', '需查询的表名列表');
- 未开启审计的前提下,仅能查询最近一段时间的SQL缓存记录,无法追溯太久远的操作,示例语句:
SELECT PARSING_SCHEMA_NAME AS 执行建表操作的用户, SQL_TEXT AS 建表语句, FIRST_LOAD_TIME AS 首次执行时间 FROM V$SQL WHERE SQL_TEXT LIKE '%CREATE TABLE%你要查询的表名%' AND COMMAND_TYPE = 1;
内容的提问来源于stack exchange,提问作者maseed ilyas
相关产品推荐
相关产品推荐

