oracle 查询最近被收集统计信息的表
时间: 2024-10-20 18:07:26 浏览: 5
在Oracle中,你可以通过SQL动态查询来找出最近被收集统计信息(例如`ANALYZE TABLE`、`DBMS_STATS.GATHER_TABLE_STATS`等操作)的表。这里有一个基本的例子,假设你想要查找在过去特定时间内(比如一天)内有记录的表:
```sql
DECLARE
start_time TIMESTAMP := SYSDATE - INTERVAL '1 DAY'; -- 昨天的时间点
l_sql VARCHAR2(4000);
BEGIN
l_sql := 'SELECT DISTINCT owner, table_name '
'FROM dba_segments s '
'JOIN dba_table_stats ts ON s.table_id = ts.table_id '
'WHERE ts.last_analyzed > :start_time';
EXECUTE IMMEDIATE l_sql BULK COLLECT INTO l_tables
USING start_time;
-- 然后你可以打印或进一步处理l_tables的结果
DBMS_OUTPUT.PUT_LINE('Tables collected statistics in the last 24 hours:');
FOR i IN 1..l_tables.COUNT LOOP
DBMS_OUTPUT.PUT(l_tables(i).table_name || ', owned by ' || l_tables(i).owner);
END LOOP;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error occurred: ' || SQLERRM);
END;
```
这个查询会列出在过去一天内有统计信息更新的所有表及其拥有者。
阅读全文