访问sqlplus中的Oracle setenv参数

时间:2015-06-06 09:11:28

标签: sql oracle sqlplus

我想编写一个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' - >我怎样才能在声明中嵌入这个变量?

我希望我的问题足够明确。任何提示都赞赏。

1 个答案:

答案 0 :(得分: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。最后一个“define”命令只列出了所有变量。扩展脚本以删除/处理特殊变量(如$ _)和带引号的变量,或者只使用它来包含所需的变量。如果每次都需要,也不要忘记使用$ ORACLE_HOME / sqlplus / admin / glogin.sql自动调用它。