2010-08-06 14 views
5

Şimdi bunu biraz anlamaya çalışıyorum ve yardım isteme zamanı geldiğini düşünüyorum. Şema oluşturma komut dosyası yapıyorum ve bazı komut dosyası çıktılarını eklemek istiyorum. hata işleme. Buradaki fikir şudur ki, komut çıktısı penceresi tüm gürültü olmadan sadece bana anahtar mesajları gösterecektir. o (- biz Oracle versiyonu :) gerek ipucu, Kırmızı Kapısı ipucu) öğrendiyse Normalde sadece Red Gate's SQL Packager bu yapardın SQL Server dünyasında Bir Oracle Komut Dosyası İçinde Hata Giderme

Create Temporary Error Table 
Begin Transaction 

-- begin work block 
Print "Doing some types of work" 
-- do work here 

If Error and Active Transactions > 0 Then Rollback 
If Active Transactions = 0 Then Insert Error In Temp Error Table and Start Another Transaction 
-- end work block 

-- once all all work complete 
If Active Transactions > 0 Then Commit Transactions 

. Benzer bir şey elde etmek için Oracle ile nereden başlayacağınıza dair herhangi bir düşünce var mı?

+2

_ Şema oluşturma komut dosyası yapıyorum. Eğer tablolar yaratıyorsanız/değiştiriyorsanız; geri alma yardımcı olmaz. Oracle içinde, bir DDL komutu, mevcut işlemin, eğer varsa, bir işlemi kendi içinde işlemeye başladığını taahhüt eder ve başarıyı taahhüt eder, başarısızlığa geri döner. Böylece bir DDL komutunu çalıştırdıktan sonra bekleyen işlem olmaz.Bir ayrıştırma hatası varsa, bunun tek istisnası, DB'nin bir DDL komutunu çalıştırması gerektiğini bilmez ve ilk örtük işlemi yapmayacak ve DDL için bir işlem başlatmayacaktır. Bu SQL Server'dan çok farklı. –

+0

Benim yorumum bir cevap vermez, sadece sizin farkında olabileceğiniz ya da edemeyeceğiniz bir tehlikeye dikkat çekmek içindir. –

+0

@Shannon - Teşekkürler, bu DDL'yi içeren daha geniş kapsamlı bir işlem yapamayacağınız için gerçekten berbat. Bir şeylerin yanlış gitmesi durumunda veritabanını yarı-pişmiş bir halde bırakarak gerçekten sağlama işlemini çok daha zor hale getirir. –

cevap

2

ettik, sen işlem sınırlarını tanımlar.

SET ECHO ON 
SPOOL /some/path/to/logfile.log 
WHENEVER SQLERROR EXIT SQL.CODE ROLLBACK 

-- run your code or DML statements 

COMMIT; 
EXIT; 

Bu dışarı bombalayacak: Eğer SQL kullanarak ediyorsanız şey yanlış giderse

* Artı ve işlemek için hiç bir şey istemiyoruz, SQL komut dosyasına koymak yapabilirsiniz ilk kez bir hatayla karşılaşır, bu nedenle hata bildirimi günlük dosyasının sonunda olur. Ayrıca, COMMIT s (veya CREATE, ALTER, DROP, GRANT veya REVOKE gibi nedenlere neden olan ifadeler) olmadığı sürece tüm değişiklikleri geri alır, sonra yükseltme tümüyle veya hiç değildir.

0

Gördüğüm çoğu durumda, böylesi (yinelenen) görevler komut dosyaları kullanılarak otomatikleştirilir.

Bunu yapmanın bir yolu, bir dizinde tüm .sql dosyalarını çalıştıran ve bir .log dosyası oluşturan bir UNIX betiğidir. Sürecin sonunda, günlük dosyasını grepliyor ve herhangi bir hata olup olmadığını görüyoruz.

Herhangi bir hatayı manuel olarak yazdırmaya gerek yoktur, çünkü sqlplus zaten hatayı yazdırır ve günlük dosyasında yakalanır. Aşağıda

çok basit bir örnektir

...

.ksh dosya

#!/usr/bin/ksh 
echo "Starting provisioning script.." 

sqlplus scott/[email protected] > file1.log << ! 
@file1.sql 
@file1.sql 
! 

echo "end of provisioning script" 

Ve (bu örnek için aynı dizinde) file1.sql içeriği

create table test123(
    id number, 
    name varchar2(200) 
); 

Bu betiği çalıştırdığımda, ilk oluşturma başarılı olur ve ikincisi başarısız olur ... ve günlük dosyası .. gibi ..

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 

Bu satırlar boyunca bir komut dosyası hazırlayabilirsiniz .. ve daha sonra, yürütme tamamlandıktan sonra günlük dosyasındaki hatalara bakın. İstenmeyen yorumlardan ve benzerlerinden kurtulmak için çeşitli sqlplus oturum komutlarını kullanabilirsiniz.

Bunu yapan herhangi bir otomatik aracın farkında değilim. İşin bitince size taahhüt ve her deyimi atomik olduğunu - neden hep bu yardımcı olur

Umut ... Oracle

+0

Mümkünse kabuk komut dosyalarından uzak durmaya çalışıyorum. Çok fazla bağımlılık yaratır. –