【问题标题】:Backing up SQL Plus environment during script在脚本期间备份 SQL Plus 环境
【发布时间】: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

【问题讨论】:

    标签: oracle 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 本身)后重新连接。

      【讨论】:

      • 这可能是一个解决方案,但这并不能防止表现不佳的脚本在被其他脚本调用时搞砸设置。我没有在问题中直接指定它,但在每个脚本之后恢复状态意味着我试图避免在脚本之外/之间手动执行任何操作。
      猜你喜欢
      • 2020-07-13
      • 1970-01-01
      • 1970-01-01
      • 2020-08-29
      • 2011-10-31
      • 2012-11-13
      • 2021-12-07
      • 2011-05-31
      • 1970-01-01
      相关资源
      最近更新 更多