2010-12-14 82 views

回答

46
SELECT created 
    FROM dba_objects 
WHERE object_name = <<your table name>> 
    AND owner = <<owner of the table>> 
    AND object_type = 'TABLE' 

會告訴你創建一個表時(如果您無權訪問DBA_OBJECTS,則可以使用ALL_OBJECTS,假設您在表上具有SELECT權限)。

但是,從一行中獲取時間戳的一般答案是,如果您添加了列來跟蹤該信息(當然,假設您的應用程序也填充了列),則只能獲取該數據。然而,有各種特殊情況。如果DML最近發生(最可能在最近幾個小時內),您應該能夠從閃回查詢中獲取時間戳。如果DML發生在最近幾天(或者您保留存檔日誌的時間很長),您可以使用LogMiner來提取時間戳,但這將是一個非常昂貴的操作,特別是如果您獲得多行的時間戳。如果你建立並啓用ROWDEPENDENCIES表(不是默認的),你可以使用

SELECT scn_to_timestamp(ora_rowscn) last_modified_date, 
     ora_rowscn last_modified_scn, 
     <<other columns>> 
    FROM <<your table>> 

獲得該行的最後修改日期和SCN(系統改變號)。但是,默認情況下,沒有ROWDEPENDENCIES,SCN只在塊級別。 SCN_TO_TIMESTAMP函數也無法將SCN永久映射到時間戳。

7

您可以查詢數據字典/目錄視圖找出當一個對象被創建,以及最後的DDL涉及的對象的時候(例如:ALTER TABLE)

select * 
    from all_objects 
where owner = '<name of schema owner>' 
    and object_name = '<name of table>' 

列「創造」告訴你何時創建對象。 「LAST_DDL_TIME」列告訴你何時針對對象執行最後的DDL。

由於插入特定行時/更新,您可以使用審覈列像一個「insert_timestamp」列或使用觸發器和填充審計表

4
SELECT CREATED FROM USER_OBJECTS WHERE OBJECT_NAME='<<YOUR TABLE NAME>>' 
+1

這與4歲接受的答案有什麼不同? – 2014-10-26 16:45:18

+0

這裏我使用不同的表。 [dba_object和user_object之間的區別](https://community.oracle.com/thread/929286?tstart=0) – 2014-10-26 16:52:06

+0

請編輯您的答案,以添加關於您的代碼如何工作以及如何解決OP問題的說明。許多SO海報是新手,不會理解你發佈的代碼。 – 2014-10-26 17:49:23

2

您複製並粘貼下面的代碼。它會顯示所有表與名稱和創建日期

SELECT object_name,created FROM user_objects 
WHERE object_name LIKE '%table_name%' 
AND object_type = 'TABLE'; 

注:更換「%表名%」你正在尋找的表名。

-2

試試此問題:

SELECT sysdate FROM schema_name.table_name;

這應顯示您可能需要的時間戳。

相關問題