场景
- 想知道 表、视图、存储过程等 最后一次更新的时间?
结论
SELECT t.last_ddl_time,
t.*
FROM dba_objects t
WHERE t.owner = ''
AND t.object_name = '';
请注意:
dab_objects、 all_objects、 user_objects: DDL 语句最后一个编译的时间
1. 对象进行了编译(如: create or replace)
2. 包含 grant、revoke 语句
3. 包含 truncate 语句
额外知识点之 truncate
- 数据库的表是由:段、区、块 组成
- truncate 相当于 “摧毁” 之前的 ‘段头’,生成一个新的 ‘段头’
在 dba_objects 中对应的 data_object_id(会发生改变)
演示
CREATE TABLE scott.table_test (
ID NUMBER,
NAME VARCHAR2(30)
);
-- 请注意:insert、update、delete 是 DML 语句,不会引起 last_ddl_time 变化
INSERT INTO scott.table_test(ID, NAME) VALUES(1, '瑶瑶');
INSERT INTO scott.table_test(ID, NAME) VALUES(2, '悠悠');
INSERT INTO scott.table_test(ID, NAME) VALUES(3, '倩倩');
COMMIT;
测试语句:
GRANT SELECT ON scott.table_test TO hr;
REVOKE SELECT ON scott.table_test FROM hr;
TRUNCATE TABLE scott.table_test;
SELECT t.last_ddl_time,
t.*
FROM dba_objects t
WHERE t.owner = 'SCOTT'
AND t.object_name = 'TABLE_TEST';
测试结果: