在脚本期间备份 SQL Plus 环境

Posted

技术标签:

【中文标题】在脚本期间备份 SQL Plus 环境【英文标题】:Backing up SQL Plus environment during script 【发布时间】:2010-10-22 18:00:57 【问题描述】:

我继承的一些脚本会在脚本开头盲目调用SET FEEDBACK OFFSET ECHO OFF,然后在脚本末尾设置为ONOFF。我想修改这些脚本以确定在脚本运行之前设置的值,并在脚本完成时将环境设置回该值。

如何查询 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 环境的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本中的SQL*Plus的环境变量

SQL*Plus中怎么执行多个*sql脚本文件

SQL*Plus环境变量设置浅析

SQL*Plus 不执行 SQL Developer 执行的 SQL 脚本

SQL*PLUS的相关命令

Shell 脚本中的 SQL* PLUS 连接问题