【问题标题】:Access Oracle setenv parameters within sqlplus在 sqlplus 中访问 Oracle setenv 参数
【发布时间】:2025-11-25 01:45:01
【问题描述】:

我想编写一个 SQL 脚本来创建一个数据库。我想对其进行参数化,以便能够将其重用于未来的数据库。作为基础,我想使用 Oracle 文档页面中的脚本:

CREATE DATABASE mynewdb
   USER SYS IDENTIFIED BY sys_password
   USER SYSTEM IDENTIFIED BY system_password
   LOGFILE GROUP 1 ('/u01/app/oracle/oradata/mynewdb/redo01.log') SIZE 100M,
           GROUP 2 ('/u01/app/oracle/oradata/mynewdb/redo02.log') SIZE 100M,
           GROUP 3 ('/u01/app/oracle/oradata/mynewdb/redo03.log') SIZE 100M
   MAXLOGFILES 5
   MAXLOGMEMBERS 5
   MAXLOGHISTORY 1
   MAXDATAFILES 100
   CHARACTER SET US7ASCII
   NATIONAL CHARACTER SET AL16UTF16
   EXTENT MANAGEMENT LOCAL
   DATAFILE '/u01/app/oracle/oradata/mynewdb/system01.dbf' SIZE 325M REUSE
   SYSAUX DATAFILE '/u01/app/oracle/oradata/mynewdb/sysaux01.dbf' SIZE 325M REUSE
   DEFAULT TABLESPACE users
      DATAFILE '/u01/app/oracle/oradata/mynewdb/users01.dbf'
      SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
   DEFAULT TEMPORARY TABLESPACE tempts1
      TEMPFILE '/u01/app/oracle/oradata/mynewdb/temp01.dbf'
      SIZE 20M REUSE
   UNDO TABLESPACE undotbs
      DATAFILE '/u01/app/oracle/oradata/mynewdb/undotbs01.dbf'
      SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

要运行 Oracle-sqlplus,必须设置一些系统变量,例如 ORACLE_SID。

  • 如何从脚本中访问此 ORACLE_SID?例如。我想用 CREATE DATABASE ORACLE_SID 替换 CREATE DATABASE mynewdb
  • 在我的例子中,'/u01/app/oracle/oradata/mynewdb/redo01.log' 等于 '/oradata/ORACLE_SID/redo01.log' -> 如何在语句中嵌入这个变量?李>

我希望我的问题足够清楚。任何提示表示赞赏。

【问题讨论】:

  • 您是否必须从客户端环境中获取值,或者您可以提示它们吗?你can get arbitrary variables,但可能过分了。根据您打算如何调用它,您还可以在命令行上传递值,并使用位置替换变量。你能缩小你的要求吗?
  • 谢谢@AlexPoole。提示就足够了,传递的值并不多。不知道有没有这种可能,谢谢指点。

标签: sql oracle sqlplus


【解决方案1】:

Alex 为您提供了最好的实用帮助,但对于任何有兴趣或供参考的人,请参见下文。

如果您需要在 sqlplus 中引用 shell 环境变量,我使用的方法是运行一个将 shell 变量转换为 sqlplus DEFINE 语句的脚本,例如

cat shell2define.sh
set | grep '=' | sed 's/^/define /' > shell.sql

然后在sqlplus中:

SQL> ! ./shell2define.sh
SQL> @shell.sql
SQL> define 

现在您可以像引用任何 sqlplus DEFINEd 变量一样引用 shell 变量,例如&ORACLE_SID。最后一个“定义”命令仅列出所有变量。扩展脚本以删除/处理特殊变量,如 $_ 和带引号的变量,或者仅使用它来包含您需要的变量。如果每次都需要,不要忘记使用 $ORACLE_HOME/sqlplus/admin/glogin.sql 来自动调用它。

【讨论】: