Oracle SQL Developer中查找未显示的Transactions表及日志相关疑问
问题解答:找不到Transactions表的排查与日志相关问题
一、先澄清代码里的Transactions不是数据库表
你看到的代码行 private static readonly ILog logger = LogManager.GetLogger(typeof(Transactions)); 里的 typeof(Transactions) 指的是程序内的一个类名,和数据库表完全无关。这行代码只是给这个类创建日志实例,别被同名误导。
二、查找Transactions表的实际来源
既然Oracle数据库列表里找不到,从这几个方向排查:
- 搜程序代码里的
Transactions相关SQL,看是不是写了视图、同义词,或者存在大小写差异(Oracle表名默认大写,程序里可能用了小写) - 检查ORM配置(比如EF、NHibernate),看该名称是否映射到了其他实际表/视图
- 在Oracle里执行
SELECT * FROM ALL_SYNONYMS WHERE SYNONYM_NAME = 'TRANSACTIONS';,排查是否有指向其他表的同义词 - 排查权限问题:执行
SELECT * FROM ALL_TABLES WHERE TABLE_NAME = 'TRANSACTIONS';(全大写),ALL_TABLES能显示当前账号有权限查看的所有表,而USER_TABLES仅显示当前用户拥有的表
三、日志位置的排查方法
从LogManager判断,程序大概率用了Log4net或NLog这类日志框架,按以下步骤找日志位置:
- 找项目里的日志配置文件,比如
log4net.config、nlog.config,文件里会明确日志输出路径(本地文件、数据库表等) - 如果是文件日志,配置里的
file节点会写明具体路径,比如C:\AppLogs\transactions.log - 如果是数据库日志,配置里会包含连接字符串和对应的日志表名称,直接去对应数据库查询即可
四、程序与Oracle SQL Developer提取数据的逻辑
- 程序提取数据:要么是通过SQL语句直接查询数据库表/视图,要么通过ORM框架映射实体类操作;如果是读日志文件,就是用文件流读取内容后,按日志里的固定格式解析成交易数据
- Oracle SQL Developer:本质是连接数据库后,通过执行SQL语句查询表、视图、同义词来获取数据,和程序的数据库操作逻辑一致,只是用可视化界面操作
内容的提问来源于stack exchange,提问作者Gal Mor
相关产品推荐
相关产品推荐

