Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

चल रहे चयन कथन को कैसे मारें

जैसा कि आप परिणामों के पृष्ठ प्राप्त करते रहते हैं, मैं मान रहा हूं कि आपने सत्र को SQL * प्लस में शुरू किया है। अगर ऐसा है, तो आसान काम है ctrl . को बैश करना + ब्रेक कई बार, कई बार रुकने तक।

अधिक जटिल और अधिक सामान्य तरीके (ओं) को मैं नीचे विस्तार से बताता हूं ताकि बढ़ती क्रूरता/बुराई हो। पहला शायद आपके लिए काम करेगा लेकिन अगर ऐसा नहीं होता है तो आप सूची में नीचे जा सकते हैं।

इनमें से अधिकतर अनुशंसित नहीं हैं और इसके अनपेक्षित परिणाम हो सकते हैं।


<एच3>1. ओरेकल स्तर - डेटाबेस में प्रक्रिया को समाप्त करें

ObiWanKenobi के उत्तर और ALTER SESSION दस्तावेज़ीकरण के अनुसार

alter system kill session 'sid,serial#';

sid को खोजने के लिए , सत्र आईडी, और serial# , सीरियल नंबर, निम्न क्वेरी चलाएँ - OracleBase से सारांशित - और अपना सत्र खोजें:

select s.sid, s.serial#, p.spid, s.username, s.schemaname
     , s.program, s.terminal, s.osuser
  from v$session s
  join v$process p
    on s.paddr = p.addr
 where s.type != 'BACKGROUND'

यदि आप एक आरएसी चला रहे हैं तो आपको कई उदाहरणों को ध्यान में रखते हुए इसे थोड़ा बदलना होगा, inst_id यही उनकी पहचान करता है:

select s.inst_id, s.sid, s.serial#, p.spid, s.username
     , s.schemaname, s.program, s.terminal, s.osuser
  from Gv$session s
  join Gv$process p
    on s.paddr = p.addr
   and s.inst_id = p.inst_id
 where s.type != 'BACKGROUND'

यदि आप RAC नहीं चला रहे हैं तो यह क्वेरी भी काम करेगी।

यदि आप पीएल/एसक्यूएल डेवलपर जैसे टूल का उपयोग कर रहे हैं तो सत्र विंडो भी इसे ढूंढने में आपकी सहायता करेगी।

थोड़े मजबूत "किल" के लिए आप IMMEDIATE कीवर्ड निर्दिष्ट कर सकते हैं, जो डेटाबेस को लेनदेन पूरा होने की प्रतीक्षा नहीं करने का निर्देश देता है:

alter system kill session 'sid,serial#' immediate;
<एच3>2. ओएस स्तर - SIGTERM जारी करें
kill pid

यह मानता है कि आप लिनक्स या किसी अन्य * निक्स संस्करण का उपयोग कर रहे हैं। एक SIGTERM ऑपरेटिंग सिस्टम से विशिष्ट प्रक्रिया के लिए एक टर्मिनेट सिग्नल है जो इसे चलना बंद करने के लिए कहता है। यह प्रक्रिया को इनायत से समाप्त करने की कोशिश करता है।

इसे गलत करने के परिणामस्वरूप आप आवश्यक OS प्रक्रियाओं को समाप्त कर सकते हैं इसलिए टाइप करते समय सावधान रहें।

आप pid पा सकते हैं , प्रक्रिया आईडी, निम्न क्वेरी चलाकर, जो आपको टर्मिनल जैसी उपयोगी जानकारी भी बताएगी जिससे प्रक्रिया चल रही है और उपयोगकर्ता नाम जो इसे चला रहा है ताकि आप सुनिश्चित कर सकें कि आपने सही चुना है।

select p.*
  from v$process p
  left outer join v$session s
    on p.addr = s.paddr
 where s.sid = ?
   and s.serial# = ?

एक बार फिर, यदि आप आरएसी चला रहे हैं तो आपको इसे थोड़ा बदलना होगा:

select p.*
  from Gv$process p
  left outer join Gv$session s
    on p.addr = s.paddr
 where s.sid = ?
   and s.serial# = ?

where बदलना क्लॉज टू where s.status = 'KILLED' आपको पहले से ही समाप्त हो चुकी प्रक्रिया को खोजने में मदद मिलेगी जो अभी भी "चल रही" है।

<एच3>3. ओएस - SIGKILL जारी करें
kill -9 pid

उसी pid का उपयोग करना आपने 2 में उठाया, एक सिगकिल ऑपरेटिंग सिस्टम से एक विशिष्ट प्रक्रिया के लिए एक संकेत है जो प्रक्रिया को तुरंत समाप्त करने का कारण बनता है। टाइप करते समय एक बार फिर सावधान रहें।

यह शायद ही कभी आवश्यक होना चाहिए। यदि आप डीएमएल या डीडीएल कर रहे थे तो यह किसी भी रोलबैक को संसाधित होने से रोक देगा और मई विफलता की स्थिति में डेटाबेस को एक सुसंगत स्थिति में पुनर्प्राप्त करना कठिन बना देता है।

<ब्लॉकक्वॉट>

शेष सभी विकल्प सभी सत्रों को मार देंगे और आपके डेटाबेस में परिणाम देंगे - और 6 और 7 सर्वर के मामले में भी - अनुपलब्ध हो जाएंगे। इनका उपयोग केवल अति आवश्यक होने पर ही किया जाना चाहिए...

<एच3>4. ओरेकल - डेटाबेस को शट डाउन करें
shutdown immediate

यह वास्तव में SIGKILL . की तुलना में विनम्र है , हालांकि स्पष्ट रूप से यह आपकी विशिष्ट प्रक्रिया के बजाय डेटाबेस में सभी प्रक्रियाओं पर कार्य करता है। यह हमेशा है अपने डेटाबेस के प्रति विनम्र होना अच्छा है।

डेटाबेस को शट डाउन करना केवल आपके डीबीए की सहमति से ही किया जाना चाहिए, यदि आपके पास एक है। डेटाबेस का उपयोग करने वाले लोगों को भी बताना अच्छा लगता है।

यह डेटाबेस को बंद कर देता है, सभी सत्रों को समाप्त कर देता है और एक rollback करता है सभी अप्रतिबंधित लेनदेन पर। यदि आपके पास बड़े अप्रतिबंधित लेनदेन हैं जिन्हें वापस रोल करने की आवश्यकता है तो इसमें कुछ समय लग सकता है।

5. ओरेकल - डेटाबेस को शट डाउन करें (कम अच्छा तरीका)

shutdown abort

यह लगभग SIGKILL . के समान है , हालांकि एक बार फिर डेटाबेस में सभी प्रक्रियाओं पर। यह सब कुछ तुरंत रोकने और मरने के लिए डेटाबेस के लिए एक संकेत है - एक कठिन दुर्घटना। यह सभी सत्रों को समाप्त करता है और कोई रोलबैक नहीं करता है; इस वजह से इसका मतलब यह हो सकता है कि डेटाबेस startup . में अधिक समय लेता है दोबारा। आग लगाने वाली भाषा के बावजूद shutdown abort शुद्ध बुराई नहीं है और इसे सामान्य रूप से सुरक्षित रूप से इस्तेमाल किया जा सकता है।

पहले की तरह लोगों को पहले संबंधित लोगों को सूचित करें।

<एच3>6. ओएस - सर्वर को रीबूट करें
reboot

जाहिर है, यह न केवल डेटाबेस को रोकता है बल्कि सर्वर भी सावधानी के साथ और डीबीए, डेवलपर्स, क्लाइंट और उपयोगकर्ताओं के अलावा आपके sysadmins की सहमति के साथ उपयोग करता है।

<एच3>7. ओएस - अंतिम चरण

मैंने रिबूट किया है काम नहीं किया... एक बार जब आप इस स्तर पर पहुंच जाते हैं तो आप बेहतर उम्मीद करते हैं कि आप वीएम का उपयोग कर रहे हैं। हमने इसे हटा दिया...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle में SQL क्वेरी से लौटाए गए रिकॉर्ड को सीमित करना

  2. ओरेकल ब्लॉब टेक्स्ट सर्च

  3. Oracle SQL डेवलपर में tnsnames.ora का उपयोग करें

  4. Oracle दिनांक कॉलम में संग्रहीत अमान्य (दूषित) मानों की पहचान कैसे करें

  5. 12.2 आरएसी/जीआई नई विशेषताएं