在脚本期间备份 SQL Plus 环境
Posted
技术标签:
【中文标题】在脚本期间备份 SQL Plus 环境【英文标题】:Backing up SQL Plus environment during script 【发布时间】:2010-10-22 18:00:57 【问题描述】:我继承的一些脚本会在脚本开头盲目调用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
vs SET ECHO OFF
)
我宁愿不再创建另一个文件(或对数据库进行任何修改)
不一定相关,但我在 Windows 上使用来自 Oracle XE (10g) 的 SqlPlus
【问题讨论】:
【参考方案1】:SQL*Plus 有STORE
命令专门用于此目的。它输出一个包含所有环境设置的文件。执行该文件将恢复这些设置。在 SQL*Plus 提示符下键入“HELP STORE”以获取更多信息。
【讨论】:
+1。我宁愿不需要该文件,但那里有 99% :) 如果没有人有更好的建议,我会奖励给你。【参考方案2】:你可能对those scripts感兴趣
【讨论】:
很好的答案,但我调查了一下,它归结为与 Adam Hawkes 解决方案中相同的命令:STORE SET <filename> REPLACE
。这些脚本看起来很有趣,所以 +1【参考方案3】:
如果您希望每个 SQL 独立运行,您可以使用 HOST
命令调用它们。也就是说,对于行为不端的脚本调用HOST SQLPLUS username/password@tnsname @script.sql
,它将在新进程中运行。
【讨论】:
【参考方案4】:为什么不将所需的连接值放在提供的 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 本身)后重新连接。
【讨论】:
这可能是一个解决方案,但这并不能防止表现不佳的脚本在被其他脚本调用时搞砸设置。我没有在问题中直接指定它,但在每个脚本之后恢复状态意味着我试图避免在脚本之外/之间手动执行任何操作。以上是关于在脚本期间备份 SQL Plus 环境的主要内容,如果未能解决你的问题,请参考以下文章