2010-10-22 47 views
3

我繼承的一些腳本會在腳本的開頭盲目地調用SET FEEDBACK OFFSET ECHO OFF,然後在腳本的末尾將它們設置爲ONOFF。我想修改這些腳本以確定在腳本運行之前設置了什麼值,並在腳本完成時將環境設置回該值。在腳本期間備份SQL Plus環境

如何查詢SQL Plus環境值,存儲它們,並在腳本完成後還原它們?

一種方法我已經想到了:

SPOOL env-backup.sql 
SHOW ECHO FEEDBACK TIMING 

REM ... 

@env-backup.sql 

  • SHOW ECHO FEEDBACK TIMING吐出不能直接執行(ECHO OFF VS SET ECHO OFF
  • 我寧可不創建還有另一個文件(或對DB的任何修改)

這不是必須的,但我在Windows上使用Oracle XE(10g)的SqlPlus

回答

7

SQL * Plus的命令STORE就是爲此而設計的。它輸出一個包含所有環境設置的文件。執行該文件將恢復這些設置。從SQL * Plus提示符輸入`HELP STORE'以獲取更多信息。

+2

+1有趣。今天學到一些東西,謝謝! – 2010-10-22 18:19:43

+0

+1。我寧願不需要該文件,但這是99%有:)如果沒有人有更好的建議,將獎勵給你。 – 2010-10-22 19:05:36

0

爲什麼不直接在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 

然後只需運行改變你的環境的任何腳本後reconnnect(或運行@ glogin.sql中:

它在%ORACLE_HOME%\ sqlplus的\ ADMIN

從我的glogin.sql中發現正常本身)。

+0

這可能是一個解決方案,但是這並不能防止糟糕的行爲腳本在被其他腳本調用時破壞設置。我沒有直接在問題中指定它,但在每個腳本之後恢復狀態意味着我試圖避免在腳本之外/之間手動執行任何操作。 – 2010-10-22 19:02:18

1

如果希望每個SQL可以獨立運行,你可以使用HOST命令調用它們,您可能會感興趣those scripts

+0

好的答案,但我仔細研究了它,並歸結爲與Adam Hawkes解決方案相同的命令:'STORE SET REPLACE'。這些腳本看起來很有趣,所以+1 – 2010-10-22 19:13:48

1

。也就是說,對於行爲不端的腳本,請致電HOST SQLPLUS username/passwor[email protected] @script.sql,它將運行在新過程中。

+0

+1。也是一個很好的選擇/探索。 – 2010-10-23 02:09:58