2010-11-04 12 views
6

में उपयोगकर्ता कैस्केड ड्रॉप करें मुझे किसी भी उपयोगकर्ता इंटरैक्शन के बिना बैच से एक विशिष्ट उपयोगकर्ता (जो सक्रिय सत्र हो सकता है) छोड़ने में सक्षम होना चाहिए। मुझे सक्रिय सत्रों की परवाह नहीं है और उन्हें छोड़ दिया जाना चाहिए और वापस लुढ़का जाना चाहिए। ओरेकल (Windows पर 10 ग्राम XE) के लिए मैं इसे कैसे करते हैंओरेकल

osql -E -S localhost -b -Q "use master if ((select name from sysdatabases where name='%DB%') is not null) begin alter database [%DB%] set single_user with rollback immediate drop database [%DB%] end" 

: Microsoft SQL के लिए मैं एक लाइन के साथ इसी तरह काम करना होगा?

मेरे वर्तमान बैच है:

sqlplus sys/*** as SYSDBA @delete1.sql >delete.log 
sqlplus sys/***@XE as SYSDBA @delete2.sql >>delete.log 

जहां delete1.sql:

startup force; 
exit; 

और delete2.sql:

drop user MYUSER cascade; 
exit; 

यह नरक के रूप में बदसूरत है और बहुत लंबा की तुलना लेता है एमएसएसक्यूएल समाधान के विभाजित दूसरे के लिए।

+2

ओरेकल में उपयोगकर्ता के पास एक स्कीमा है, इसलिए उपयोगकर्ता को छोड़ने में बहुत अधिक शामिल है, खासकर अगर इसके पास बहुत सारी वस्तुएं हैं। एक वैकल्पिक उपयोगकर्ता करने पर विचार करें ... खाता लॉक करें और फिर बाद में इसे अधिक सुविधाजनक समय पर छोड़ दें। –

+0

आपको उपयोगकर्ता को कितनी बार छोड़ने की आवश्यकता है - इसका प्रदर्शन क्यों एक मुद्दा है? –

+0

यह मेरी सीआई प्रक्रिया का हिस्सा है (बिल्ड -> डीबी स्कीमा को फिर से बनाएं -> रन एकीकरण परीक्षण) ताकि इसे लगभग हर प्रतिबद्धता पर निष्पादित किया जा सके। मैं इसके प्रदर्शन के साथ रह सकता हूं लेकिन मुझे चौंका दिया गया है ओरेकल के पास इसका मतलब नहीं है। मैं कुछ खास नहीं पूछ रहा हूँ, क्या मैं? – UserControl

उत्तर

3

यदि आप निम्न स्क्रिप्ट (यहाँ drop_user_with_active_sessions.sql नाम) का उपयोग यह काम करना चाहिए:

set verify off 

begin 

    for s in (
    select 
     sid, serial# 
    from 
     v$session 
    where 
     username = '&1' 
) loop 

    execute immediate 
     'alter system kill session ''' || 
     s.sid  || ',' || 
     s.serial# || ''' immediate'; 

    end loop; 

    execute immediate 'drop user &1'; 

end; 
/

exit 

और

sqlplus username/[email protected] @c:\path\to\drop_user_with_active_session.sql MYUSER 
+0

पंक्ति 1: ओआरए- 01 9 40: वर्तमान में ओआरए-06512: 1 9 – UserControl

0

आप Oracle SQL via the command prompt कर सकते हैं और फिर अपने cascade drop user कर सकते हैं।

मैं एक एसक्यूएल स्क्रिप्ट और executing it from the command line बनाने की अनुशंसा करता हूं।

तो आप अपने cmd/बैच फ़ाइल में कमांड लाइन टेक्स्ट को लपेट सकते हैं।

लेकिन आप पूरी प्रक्रिया मैं में देखने की सलाह देते हैं संभाल करने के लिए ओरेकल चाहते हैं, तो job/schedule environment

0

ऊपर उल्लिखित सिस्टम सिस्टम को बदलने के अलावा "मुझे मारने के लिए भी आवश्यकता है की तरह कुछ के साथ आयन:

execute immediate 'ALTER SYSTEM DISCONNECT SESSION ''' || 
    to_char(s.sid) || ', ' || to_char(s.serial#) || ''' IMMEDIATE' 
0

यह एक बहुत, बहुत बुरा विचार एक डाटाबेस मंच से एक निर्माण लेने के लिए और मान मैं एक अलग मंच पर सटीक एक ही बात चला सकते हैं करने के लिए। उदाहरण के लिए। ओरेकल ने प्रक्रिया बनाएं या बदलें। एमएसएसएस काफी आसान नहीं है। एमएसएसएस आप ओरेकल में #name के साथ "temp" तालिका बना सकते हैं, हम डीडीएल का उपयोग करते हैं। एक नए वातावरण को फिर से बनाने के लिए उपयोगकर्ता को छोड़कर एमएसएसएस पर सबसे आसान दृष्टिकोण हो सकता है, शायद एक ही चीज़ को पूरा करने के लिए ओरेकल केंद्रित तरीका है। आपका तरीका काम नहीं कर रहा है, इसके बजाय कार्य को पूरा करने के तरीके पर सहायता मांगना एक बहुत अच्छा विचार है।

सबसे पहले, क्या ऐप का परीक्षण किया जा रहा है डीडीएल? टेबल और अन्य वस्तुओं के लिए?

यदि यह केवल डेटा बदलता है, तो वे ओरेकल ऐप्स को काम करने के लिए पसंद करते हैं, तो आपको सभी ऑब्जेक्ट्स को फिर से बनाना क्यों है। आपको डेटा को शुरुआती बिंदु पर वापस लाने की आवश्यकता है।

क्या आपने फ्लैशबैक डेटाबेस में देखा है? आपको पुनर्स्थापना बिंदु बनाने में सक्षम होना चाहिए ... जो कुछ भी आप चाहते हैं और फिर समय पर डेटाबेस को फ्लैशबैक करें।

+0

पर एक उपयोगकर्ता को छोड़ नहीं सकता है, मैं ओरेकल विशेषज्ञ नहीं हूं और केवल मेरे लिए वर्णित समाधान (मेरे लिए) समाधान है। मैं इसे बदसूरत मानता हूं और सोचता हूं कि क्या कोई बेहतर है ('कारण यह अन्य डीबीएमएस पर है - उदाहरण के लिए एसक्यूएल सर्वर)। – UserControl

+0

मेरी इच्छा है कि मुझे पता था कि यह एक अच्छा जवाब क्यों नहीं था। फ्लैशबैक डेटाबेस सबकुछ छोड़ने और पुनर्निर्माण करने से कहीं अधिक आसान होगा। –