मैंने देखा है कि ज्यादातर मामलों में, स्क्रिप्ट का उपयोग करके ऐसे (दोहराने) कार्यों को स्वचालित किया जाता है।
एक तरीका यह है कि हम वर्तमान में यह एक यूनिक्स स्क्रिप्ट है जो किसी दिए गए निर्देशिका में सभी .sql फ़ाइलों को चलाता है और एक .log फ़ाइल उत्पन्न करता है। प्रक्रिया के अंत में, हम लॉग फ़ाइल को grep करते हैं और देखते हैं कि कोई त्रुटि है या नहीं।
आपको मैन्युअल रूप से किसी भी त्रुटि को मुद्रित करने की आवश्यकता नहीं है, क्योंकि sqlplus पहले से ही त्रुटि को प्रिंट करता है और यह लॉग फ़ाइल में कब्जा कर लिया जाता है।
नीचे एक बहुत ही सरल उदाहरण है ...
.ksh फ़ाइल
#!/usr/bin/ksh
echo "Starting provisioning script.."
sqlplus scott/[email protected] > file1.log << !
@file1.sql
@file1.sql
!
echo "end of provisioning script"
और file1.sql की सामग्री (जो इस उदाहरण के लिए एक ही निर्देशिका में है)
create table test123(
id number,
name varchar2(200)
);
जब मैं इस स्क्रिप्ट को चलाता हूं, पहला निर्माण सफल होता है और दूसरा विफल रहता है .. और लॉग फ़ाइल .. ..
SQL*Plus: Release 10.2.0.4.0 - Production on Fri Aug 6 20:44:08 2010
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>
Table created.
SQL> create table test123(
*
ERROR at line 1:
ORA-00955: name is already used by an existing object
SQL> Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
आप इन पंक्तियों के साथ एक स्क्रिप्ट तैयार कर सकते हैं .. और फिर लॉग फ़ाइल में किसी भी त्रुटि की तलाश करें .. निष्पादन पूर्ण होने के बाद। आप विभिन्न स्क्लप्लस सत्र कमांड का उपयोग सभी अवांछित टिप्पणियों से छुटकारा पाने के लिए कर सकते हैं।
मुझे ऐसा कोई भी स्वचालित उपकरण नहीं पता है जो ऐसा करता है। कारण मैं हमेशा है
आशा इस मदद करता है ...
स्रोत
2010-08-06 20:34:15
_ मैं स्कीमा प्रावधान स्क्रिप्ट_ का निर्माण कर रहा हूं यदि आपका मतलब है कि आप टेबल बना रहे हैं और ऐसे में बदलाव कर रहे हैं; रोलबैक मदद नहीं करेगा। ओरेकल के भीतर, एक डीडीएल कमांड वर्तमान लेनदेन करता है, यदि कोई बकाया है, तो लेनदेन के भीतर खुद को चलाता है, और सफलता पर चलता है, विफलता पर वापस रोल करता है। इस प्रकार एक डीडीएल कमांड चलाने के बाद कोई बकाया लेनदेन नहीं होगा।एक पर्स त्रुटि होने पर एकमात्र अपवाद है, तो डीबी को पता नहीं है कि इसे डीडीएल कमांड चलाने वाला था, और पहली अंतर्निहित प्रतिबद्धता नहीं करेगा, न ही डीडीएल के लिए लेनदेन शुरू करेगा। यह SQL सर्वर से बहुत अलग है। –
मेरी टिप्पणी एक उत्तर नहीं प्रदान करती है, यह केवल उस गड़बड़ी को इंगित करने के लिए है जहां आप जानते हैं या नहीं जानते हैं। –
@ शैनन - धन्यवाद, वास्तव में यह बेकार है कि आप एक व्यापक स्कॉप्ड लेनदेन नहीं कर सकते जिसमें डीडीएल शामिल है। कुछ गलत होने पर डेटाबेस को आधे बेक्ड राज्य में छोड़कर प्रावधान प्रक्रिया में वास्तव में त्रुटि को और अधिक कठिन बनाता है। –