下面我们来看oracle的几个变量。
ORACLE_SID是以环境变量的形式出现的,当操作系统创建oracle进程时,进程的名称会根据这个ORACLE_SID来创建。
参数文件的名称也是根据ORACLE_SID来确定的,如spfile<ORACLE_SID>.ora, init<ORACLE_SID>.ora
bash-3.00$ export ORACLE_SID=uep4x
bash-3.00$ sqlplus "/ as sysdba"
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Jul 6 08:17:24 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup nomount;
ORACLE instance started.
bash-3.00$ ps -ef | grep ora_smon_uep4x
oracle 8535 1 0 08:17:38 ? 0:00 ora_smon_uep4x
oracle 8554 8462 0 08:19:08 pts/6 0:00 grep ora_smon_uep4x
另外,在一个ORACLE_HOME目录下,不能启动ORACLE_SID相同的实例,而在不同的ORACLE_HOME则可以。
Oracle内部的初始化参数INSTANCE_NAME,用来表示数据库的实例,该值缺省就是ORACLE_SID。用过下面两种方法可以获得这个参数:
SQL> select instance_name from v$instance;
INSTANCE_NAME
--------------------------------
uep4x
SQL> show parameter instance_name
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
instance_name string
uep4x
DB_NAME是实例挂接的数据库的名称,关系具体的物理文件。数据库在创建过程中,DB_NAME被记录在数据文件,日志文件和控制文件中。如果数据库启动时,参数文件中的DB_NAME和控制文件中的不一致,则数据库不能启动。
通常,一个实例可以打开任何数据库,但是同时,一个实例只能打开一个数据库;一个数据库可以被多个实例同时使用。
下面先做两个实例启动同一个数据库的实验:
bash-3.00$ grep db_name initdavid.ora
db_name=uep4x
bash-3.00$ sqlplus "/ as sysdba"
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Jul 6 12:35:54 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 2550136832 bytes
Fixed Size 1980808 bytes
Variable Size 536872568 bytes
Database Buffers 1996488704 bytes
Redo Buffers 14794752 bytes
ORA-01102: cannot mount database in EXCLUSIVE mode
说明一个在非并行的模式下,一个数据库只能被一个实例加载。
bash-3.00$ ps -ef | grep ora_dbw
oracle 8529 1 0 08:17:38 ? 0:06 ora_dbw0_uep4x
oracle 15327 1 0 12:37:38 ? 0:00 ora_dbw0_david
oracle 15496 8462 0 12:59:20 pts/6 0:00 grep ora_dbw
可以看到实例已经启动了。
下面再看一个参数文件和控制文件中db_name不同的例子:
bash-3.00$ sqlplus "/ as sysdba"
SQL*Plus: Release 10.2.0.2.0 - Production on Mon Jul 6 13:06:35 2009
Copyright (c) 1982, 2005, Oracle. All Rights Reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 289406976 bytes
Fixed Size 1279820 bytes
Variable Size 92276916 bytes
Database Buffers 192937984 bytes
Redo Buffers 2912256 bytes
ORA-01103: database name 'UEP' in control file is not 'UEPX'