Обработка ошибок в скрипте Oracle - PullRequest
5 голосов
/ 07 августа 2010

Я уже некоторое время пытаюсь понять это, и я думаю, что пришло время обратиться за помощью. Я создаю сценарий подготовки схемы и хочу добавить некоторые выходные данные сценария и обработку ошибок. Идея состоит в том, что окно вывода скрипта будет показывать только ключевые сообщения без шума.

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

В мире SQL Server я обычно просто делал бы это с Пакетом SQL Red Gate , который его выяснил (подсказка, подсказка Red Gate - нам нужна версия Oracle :)). Любые мысли о том, с чего начать с Oracle, чтобы получить что-то подобное?

Ответы [ 2 ]

2 голосов
/ 07 августа 2010

В Oracle вы определяете границы транзакций - вы фиксируете, когда вы закончите, и каждый оператор является атомарным.

Если вы используете SQL * Plus и вообще не хотите, чтобы что-либо фиксировалось, если что-то пойдет не так, вы можете поместить в скрипт SQL следующее:

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

-- run your code or DML statements

COMMIT;
EXIT;

При первом обнаружении ошибки он будет разорван, поэтому оператор ошибки будет в конце файла журнала. Он также будет откатывать любые изменения, так как пока нет никаких COMMIT с (или операторов, которые их вызывают, например CREATE, ALTER, DROP, GRANT или REVOKE), тогда все обновление будет «все или ничего». *

0 голосов
/ 07 августа 2010

В большинстве случаев, которые я видел, такие (повторяющиеся) задачи автоматизируются с помощью сценариев.

В настоящее время один из способов сделать это - сценарий UNIX, который запускает все файлы .sql в заданном каталоге игенерирует файл .logВ конце процесса мы выполняем grep файла журнала и видим, есть ли какие-либо ошибки.

Вам не нужно печатать какие-либо ошибки вручную, потому что sqlplus уже распечатывает ошибку, и она фиксируется в файле журнала..

Ниже приведен очень простой пример ...

.ksh file

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

sqlplus scott/tiger@oracle102 > file1.log << !
@file1.sql
@file1.sql
!

echo "end of provisioning script"

И содержимое файла file.s.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

Вы можете подготовить скрипт по этим направлениям ... и затем искать любые ошибки в файле журнала ... после завершения выполнения.Вы можете использовать различные команды сеанса sqlplus, чтобы избавиться от всех нежелательных комментариев и тому подобного.

Мне не известны какие-либо автоматизированные инструменты, которые делают то же самое.Причина, по которой я всегда

Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...