Резервное копирование среды SQL Plus во время выполнения скрипта

Некоторые скрипты, которые я унаследовал, будут слепо вызывать SET FEEDBACK OFF или SET ECHO OFF в начале скрипта, а затем устанавливать их в ON или OFF в конце скрипта. Я хотел бы изменить эти сценарии, чтобы определить, какое значение было установлено до запуска сценария, и вернуть среду к этому значению после завершения сценария.

Как запросить значения среды SQL Plus, сохранить их и восстановить после завершения сценария?

Один метод, о котором я подумал:

SPOOL env-backup.sql
SHOW ECHO FEEDBACK TIMING

REM ...

@env-backup.sql

Но

  • Значения, которые выдает SHOW ECHO FEEDBACK TIMING, не могут быть выполнены напрямую (ECHO OFF против SET ECHO OFF)
  • Я бы предпочел не создавать еще один файл (или какие-либо изменения в БД)

Не то чтобы это обязательно было связано, но я использую SqlPlus из Oracle XE (10g) в Windows.


person Merlyn Morgan-Graham    schedule 22.10.2010    source источник


Ответы (4)


В SQL*Plus для этого есть команда STORE. Он выводит файл со всеми настройками среды. Выполнение файла восстановит эти настройки. Введите `HELP STORE' в приглашении SQL*Plus для получения дополнительной информации.

person Adam Hawkes    schedule 22.10.2010
comment
+1. Я бы предпочел не нуждаться в файле, но он есть на 99% :) Я присуждаю это вам, если ни у кого нет лучшего предложения. - person Merlyn Morgan-Graham; 22.10.2010

Вас могут заинтересовать эти скрипты

person Benoit    schedule 22.10.2010
comment
Хороший ответ, но я изучил его, и он сводится к той же команде, что и в решении Адама Хоукса: STORE SET <filename> REPLACE. Хотя эти скрипты выглядят интересно, так что +1 - person Merlyn Morgan-Graham; 22.10.2010

Если вы хотите, чтобы каждый SQL выполнялся независимо, вы можете вызвать их с помощью команды HOST. То есть для некорректно работающих скриптов вызовите HOST SQLPLUS username/password@tnsname @script.sql и он запустится в новом процессе.

person Adam Hawkes    schedule 22.10.2010

Почему бы просто не указать желаемые значения для вашего соединения в предоставленном сценарии glogin.sql?

Обычно он находится в папке %ORACLE_HOME%\sqlplus\admin.

Из моего glogin.sql:

--
-- Copyright (c) 1988, 2005, Oracle.  All Rights Reserved.
--
-- NAME
--   glogin.sql
--
-- DESCRIPTION
--   SQL*Plus global login "site profile" file
--
--   Add any SQL*Plus commands here that are to be executed when a
--   user starts SQL*Plus, or uses the SQL*Plus CONNECT command.
--
-- USAGE
--   This script is automatically run
--
set pagesize 60
set linesize 500
set wrap off

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

person BQ.    schedule 22.10.2010
comment
Это может быть решением, но это не мешает скриптам с плохим поведением испортить настройки, когда они вызываются другими скриптами. Я не указывал это прямо в вопросе, но восстановление состояния после каждого сценария подразумевает, что я пытаюсь избежать необходимости вручную делать что-либо вне/между сценариями. - person Merlyn Morgan-Graham; 22.10.2010