2010-12-14 16 views
31

ओरेकल में, क्या कोई विशेष तालिका बनाई जाने पर पता लगाने का कोई तरीका है?ओरेकल में कोई विशेष तालिका कब बनाई गई थी, यह जानने के लिए कैसे?

इसी तरह, क्या कोई विशेष पंक्ति डालने/आखिरी अपडेट होने पर पता लगाने का कोई तरीका है?

उत्तर

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

आपको बता देंगे पॉप्युलेट कर सकते हैं जब एक मेज का गठन किया गया (यदि आपके पास DBA_OBJECTS तक पहुंच नहीं है, तो आप टेबल पर SELECT विशेषाधिकार प्राप्त करने के बजाय ALL_OBJECTS का उपयोग कर सकते हैं)।

हालांकि, पंक्ति से टाइमस्टैम्प प्राप्त करने का सामान्य उत्तर यह है कि यदि आप उस जानकारी को ट्रैक करने के लिए कॉलम जोड़ चुके हैं तो आप केवल उस डेटा को प्राप्त कर सकते हैं (मान लीजिए कि आपका एप्लिकेशन स्तंभों को भी पॉप्युलेट करता है)। हालांकि, कई विशेष मामले हैं। यदि डीएमएल अपेक्षाकृत हाल ही में हुआ (पिछले कुछ घंटों में सबसे अधिक संभावना है), तो आपको फ्लैशबैक क्वेरी से टाइमस्टैम्प प्राप्त करने में सक्षम होना चाहिए। यदि डीएमएल पिछले कुछ दिनों में हुआ (या जब तक आप अपने संग्रहित लॉग रखते हैं), तो आप टाइमस्टैम्प निकालने के लिए लॉगमिनेर का उपयोग कर सकते हैं, लेकिन यह एक बहुत ही महंगी ऑपरेशन होने जा रहा है, खासकर यदि आपको कई पंक्तियों के लिए टाइमस्टैम्प मिल रहे हैं। आप (डिफ़ॉल्ट नहीं) ROWDEPENDENCIES सक्षम के साथ तालिका का निर्माण, तो आप

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

का उपयोग पंक्ति के लिए अंतिम संशोधन दिनांक और SCN (प्रणाली परिवर्तन संख्या) प्राप्त करने के लिए कर सकते हैं। डिफ़ॉल्ट रूप से, हालांकि, बिना किसी ROWDEPENDENCIES के, एससीएन केवल ब्लॉक स्तर पर है। SCN_TO_TIMESTAMP फ़ंक्शन भी एससीएन के टाइमस्टैम्प को हमेशा के लिए मैप करने में सक्षम नहीं होगा।

7

आप डेटा शब्दकोश/सूची विचारों क्वेरी पता लगाने के लिए कर सकते हैं जब एक वस्तु पिछले DDL के समय वस्तु को शामिल (उदाहरण: तालिका में परिवर्तन) के रूप में भी बनाया गया था

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

स्तंभ "निर्मित" ऑब्जेक्ट बनाया गया था जब आपको बताता है। कॉलम "LAST_DDL_TIME" आपको बताता है कि ऑब्जेक्ट के विरुद्ध अंतिम डीडीएल कब किया गया था।

के लिए जब किसी विशेष पंक्ति सम्मिलित किया गया था/अद्यतन, तो आपको "insert_timestamp" कॉलम की तरह लेखा परीक्षा स्तंभों का उपयोग या एक ट्रिगर का उपयोग करें और एक लेखा परीक्षा तालिका

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

और यह 4 साल के पुराने स्वीकृत उत्तर से अलग कैसे है? –

+0

यहां मैं अलग-अलग टेबल का उपयोग नहीं कर रहा हूं। [Dba_object और user_object के बीच अंतर] (https://community.oracle.com/thread/929286?tstart=0) –

+0

कृपया अपना कोड कैसे संपादित करें और यह ओपी की समस्या को हल करने का स्पष्टीकरण जोड़ने के लिए अपना उत्तर संपादित करें। कई SO पोस्टर नए हैं और आपके द्वारा पोस्ट किए गए कोड को समझ नहीं पाएंगे। –

2

आप निम्न कोड कॉपी और पेस्ट करते हैं। यह नाम और बनाया गया दिनांक

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

नोट के साथ सभी तालिकाओं को प्रदर्शित करेगा: तालिका नाम आप देख रहे हैं के साथ '% TABLE_NAME%' बदलें।

-2

इस क्वेरी का प्रयास करें: schema_name.table_name से

चयन sysdate;

यह उस टाइमस्टैम्प को प्रदर्शित करना चाहिए जिसकी आपको आवश्यकता हो सकती है।