我有一个非常大的Apex应用程序。需要存储此应用程序的详细使用日志。有关APEX_WORKSPACE_ACTIVITY_LOG的信息是不够的,因为我需要知道每个用户在每个页面上运行的查询。
我的第一个想法是获取实际的Oracle查询日志(V $ SQL等),但它们不提供有关用户的信息(就数据库而言,所有查询都是由APEX_PUBLIC_USER进行的)。我在V $ ACTIVE_SESSION_HISTORY上有关于用户的一些信息,但这是不完整的,因为它以1秒的间隔存储活动会话的样本及其SQL查询,因此我错过了太多查询。
所以现在我要实现应用程序级别的日志记录。这种“正确”的方法是遍历我的应用程序中的所有页面,并创建一个日志记录过程来存储每个页面的相关信息(用户名和一些页面项)。但我想知道是否有更简单的东西可以解决问题。
如果我理解正确,“应用程序进程”将由应用程序中的每个页面运行。因此,如果我可以让应用程序进程迭代页面项列表,我可以将它们全部存储在数据库中并完成它。像
这样的东西for item in page_items {
log(username, item_name, item, date)
}
可以这样做吗?或许我需要的信息已经在数据库中了,我没有看到它?
答案 0 :(得分:3)
您可以查询元数据表以获取特定页面的所有项目,然后使用它来获取其值。
select item_name, v(item_name) item_value
from apex_application_page_items
where application_id = :APP_ID
and page_id = :APP_PAGE_ID;
这将捕获页面上的所有项目。不要忘记,如果您使用第0页(全局页面)上的项目,您可能也想查询该页面。
此外,您可能还想捕获应用程序级别的项目。
select item_name, v(item_name) item_value
from apex_application_items
where application_id = :APP_ID;