मैं हमारे oracle DB पर कुछ अप्रयुक्त स्कीमा हटाना चाहता था।
मैं सभी स्कीमा नामों के लिए कैसे क्वेरी कर सकता हूं?
मैं हमारे oracle DB पर कुछ अप्रयुक्त स्कीमा हटाना चाहता था।
मैं सभी स्कीमा नामों के लिए कैसे क्वेरी कर सकता हूं?
जवाबों:
Sqlplus का उपयोग करना
sqlplus / sysdba के रूप में
Daud:
चुनते हैं * Dba_users से
क्या आपको केवल उपयोगकर्ता नाम निम्नलिखित करने चाहिए:
उपयोगकर्ता नाम चुनें Dba_users से
सबसे अधिक संभावना है, आप चाहते हैं
SELECT username
FROM dba_users
यह आपको सिस्टम के सभी उपयोगकर्ताओं को दिखाएगा (और इस प्रकार सभी संभावित स्कीमा)। यदि आपकी "स्कीमा" की परिभाषा स्कीमा के खाली होने की अनुमति देती है, तो आप यही चाहते हैं। हालांकि, एक शब्दार्थ भेद हो सकता है जहां लोग केवल किसी स्कीमा को कॉल करना चाहते हैं यदि यह वास्तव में कम से कम एक वस्तु का मालिक है ताकि सैकड़ों उपयोगकर्ता खाते जो कभी भी किसी भी ऑब्जेक्ट के मालिक नहीं होंगे, को बाहर रखा जाएगा। उस स्तिथि में
SELECT username
FROM dba_users u
WHERE EXISTS (
SELECT 1
FROM dba_objects o
WHERE o.owner = u.username )
यह मानते हुए कि जिसने भी स्कीमा बनाया है, वह डिफ़ॉल्ट तालिकाओं को निर्दिष्ट करने और यह मानने के बारे में समझदार था कि आप उन स्कीमाओं में रुचि नहीं रखते हैं, जो ओरेकल ने वितरित किए हैं, आप उन स्कीमाओं को विधेय पर जोड़कर फ़िल्टर कर सकते हैं default_tablespace
, अर्थात
SELECT username
FROM dba_users
WHERE default_tablespace not in ('SYSTEM','SYSAUX')
या
SELECT username
FROM dba_users u
WHERE EXISTS (
SELECT 1
FROM dba_objects o
WHERE o.owner = u.username )
AND default_tablespace not in ('SYSTEM','SYSAUX')
ऐसी प्रणाली में आना कोई बहुत असामान्य बात नहीं है, जहां किसी ने गलत तरीके से गैर-प्रणाली उपयोगकर्ता default_tablespace
को दिया हो SYSTEM
, हालाँकि, इतना निश्चित हो कि इस तरह से ओरेकल-डिलीवर स्कीमा को फ़िल्टर करने की कोशिश करने से पहले धारणाएं पकड़ लें।
select distinct owner from dba_objects
?
SELECT username FROM all_users ORDER BY username;
dba_users
(उदाहरण के लिए: त्रुटि ORA-00942 : table or view does not exist
)
select distinct owner
from dba_segments
where owner in (select username from dba_users where default_tablespace not in ('SYSTEM','SYSAUX'));
नीचे sql उन सभी स्कीमा को सूचीबद्ध करता है जो oracle में होती हैं जो स्थापना के बाद बनाई जाती हैं ORACLE_MAINTAINED = 'N' फ़िल्टर है। यह कॉलम 12 सी में नया है।
अलग-अलग उपयोगकर्ता नाम का चयन करें, dAC_users से ORACLE_MAINTAINED जहाँ ORACLE_MAINTAINED = 'N';
निम्न SQL में से कोई भी Oracle DB में सभी स्कीमा लौटाएगा।
select owner FROM all_tables group by owner;
select distinct owner FROM all_tables;