对一个数据库打开多个实例

来源:互联网 发布:淘宝返利怎么提现 编辑:程序博客网 时间:2024/05/27 09:45

对于Oracle数据库来说,db_name和instance_name可以不同。
我们来看一下Oracle文档中对于db_name的定义:

DB_NAME必须是一个不超过8个字符的文本串.在数据库创建过程中,db_name被记录在数据文件,日志文件和控制文件中。如果数据库实例启动过程中参数文件中的db_name和控制文件中的数据库名称不一致,则数据库不能启动。

一个实例可以mount并打开任何数据库,但是同一时间一个实例只能打开一个数据库。
一个数据库可以被一个或多个实例所mount并打开(在OPS/RAC环境下,一个数据库可以被多个实例所打开).

我们看一下我的数据库:

[oracle@jumper dbs]$ grep name initeygle.ora 
*.db_name='eygle'
*.instance_name='eygle'

 

当前参数设置下的数据库: 

 

SQL> select name from v$datafile;

NAME
-----------------------------------------------------
/opt/oracle/oradata/eygle/system01.dbf
/opt/oracle/oradata/eygle/undotbs01.dbf
/opt/oracle/oradata/eygle/users01.dbf
/opt/oracle/oradata/eygle/eygle01.dbf

SQL
> show parameter db_name

NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------
db_name                              string      eygle
SQL
> show parameter instance_name

NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------
instance_name                        string      eygle
SQL
> create pfile from spfile;

File created.

SQL
> exit
Disconnected 
from Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning option
JServer Release 
9.2.0.4.0 - Production

 

我们创建一个新的pfile为julia这个新的实例使用:

 

[oracle@jumper oracle]$ cd $ORACLE_HOME/dbs
[oracle@jumper dbs]$ cp initeygle.ora initjulia.ora
[oracle@jumper dbs]$ ll init*
-rw-r--r--    1 oracle   dba           982 Jul 25 14:03 initeygle.ora
-rw-r--r--    1 oracle   dba           982 Jul 25 14:04 initjulia.ora
-rw-r--r--    1 oracle   dba          8385 Mar  9  2002 init.ora

 

修改这个文件更改:
instance_name = julia

修改后的参数设置:

 

[oracle@jumper dbs]$ grep name initjulia.ora 
*.db_name='eygle'
*.instance_name='julia'

 

然后我们启动实例名称为julia的instance:

 

[oracle@jumper dbs]$ export ORACLE_SID=julia
[oracle@jumper dbs]$ sqlplus "/ as sysdba"

SQL
*Plus: Release 9.2.0.4.0 - Production on Tue Jul 25 14:04:15 2006

Copyright (c) 
19822002, Oracle Corporation.  All rights reserved.

Connected 
to an idle instance.

SQL
> startup mount;
ORACLE instance started.

Total System Global Area  
139531744 bytes
Fixed Size                   
452064 bytes
Variable Size             
121634816 bytes
Database Buffers           16777216 bytes
Redo Buffers                 
667648 bytes
ORA
-01102: cannot mount database in EXCLUSIVE mode

SQL
> exit
Disconnected 
from Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning option
JServer Release 
9.2.0.4.0 - Production

 

注意,此时试图加载数据库时出现错误,因为当前数据库被另外一个实例(instance)加载。在非并行模式(Ops/RAC)下,一个数据库同时只能被一个实例加载。

此时已经启动了两个数据库实例,从后台进程可以看出:

 

[oracle@jumper dbs]$ ps -ef|grep ora
oracle   
27321     1  0 Jul14 ?        00:00:00 ora_pmon_eygle
oracle   
27323     1  0 Jul14 ?        00:00:00 ora_dbw0_eygle
oracle   
27325     1  0 Jul14 ?        00:00:00 ora_lgwr_eygle
oracle   
27327     1  0 Jul14 ?        00:00:00 ora_ckpt_eygle
oracle   
27329     1  0 Jul14 ?        00:00:32 ora_smon_eygle
oracle   
27331     1  0 Jul14 ?        00:00:00 ora_reco_eygle
oracle   
27333     1  0 Jul14 ?        00:00:00 ora_cjq0_eygle
root     
15388   656  0 14:02 ?        00:00:00 sshd: oracle [priv]
oracle   
15390 15388  0 14:02 ?        00:00:00 sshd: oracle@pts/2
oracle   
15391 15390  0 14:02 pts/2    00:00:00 -bash
oracle   
15445     1  0 14:04 ?        00:00:00 ora_pmon_julia
oracle   
15447     1  0 14:04 ?        00:00:00 ora_dbw0_julia
oracle   
15449     1  0 14:04 ?        00:00:00 ora_lgwr_julia
oracle   
15451     1  0 14:04 ?        00:00:00 ora_ckpt_julia
oracle   
15453     1  0 14:04 ?        00:00:00 ora_smon_julia
oracle   
15455     1  0 14:04 ?        00:00:00 ora_reco_julia
oracle   
15457     1  0 14:04 ?        00:00:00 ora_cjq0_julia
oracle   
15459 15391  0 14:04 pts/2    00:00:00 ps -ef
oracle   
15460 15391  0 14:04 pts/2    00:00:00 grep ora

 

我们关闭eygle这个数据库实例:

 

[oracle@jumper dbs]$ export ORACLE_SID=eygle
[oracle@jumper dbs]$ sqlplus "/ as sysdba"

SQL
*Plus: Release 9.2.0.4.0 - Production on Tue Jul 25 14:04:39 2006

Copyright (c) 
19822002, Oracle Corporation.  All rights reserved.


Connected 
to:
Oracle9i Enterprise Edition Release 
9.2.0.4.0 - Production
With the Partitioning option
JServer Release 
9.2.0.4.0 - Production

SQL
> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL
> exit
Disconnected 
from Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning option
JServer Release 
9.2.0.4.0 - Production

 

此时就可以通过实例julia加载并打开db_name=eygle的数据库了:

 

[oracle@jumper dbs]$ export ORACLE_SID=julia
[oracle@jumper dbs]$ sqlplus "/ as sysdba"

SQL
*Plus: Release 9.2.0.4.0 - Production on Tue Jul 25 14:05:06 2006

Copyright (c) 
19822002, Oracle Corporation.  All rights reserved.


Connected 
to:
Oracle9i Enterprise Edition Release 
9.2.0.4.0 - Production
With the Partitioning option
JServer Release 
9.2.0.4.0 - Production

SQL
> alter database mount;
alter database mount
*
ERROR at line 
1:
ORA
-01990: error opening password file '/opt/oracle/product/9.2.0/dbs/orapw'
ORA
-27037: unable to obtain file status
Linux Error: 
2: No such file or directory
Additional information: 
3


SQL
> alter database open;

Database altered.

SQL
> select name from v$datafile;

NAME
----------------------------------------------------------------------------
/opt/oracle/oradata/eygle/system01.dbf
/opt/oracle/oradata/eygle/undotbs01.dbf
/opt/oracle/oradata/eygle/users01.dbf
/opt/oracle/oradata/eygle/eygle01.dbf

SQL
> ! ps -ef|grep ora
root     
15388   656  0 14:02 ?        00:00:00 sshd: oracle [priv]
oracle   
15390 15388  0 14:02 ?        00:00:00 sshd: oracle@pts/2
oracle   
15391 15390  0 14:02 pts/2    00:00:00 -bash
oracle   
15445     1  0 14:04 ?        00:00:00 ora_pmon_julia
oracle   
15447     1  0 14:04 ?        00:00:00 ora_dbw0_julia
oracle   
15449     1  0 14:04 ?        00:00:00 ora_lgwr_julia
oracle   
15451     1  0 14:04 ?        00:00:00 ora_ckpt_julia
oracle   
15453     1  0 14:04 ?        00:00:00 ora_smon_julia
oracle   
15455     1  0 14:04 ?        00:00:00 ora_reco_julia
oracle   
15457     1  0 14:04 ?        00:00:00 ora_cjq0_julia
oracle   
15513 15391  0 14:05 pts/2    00:00:00 sqlplus            
oracle   
15514 15513  3 14:05 ?        00:00:01 oraclejulia (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle   
15515 15513  0 14:05 pts/2    00:00:00 /bin/bash -c  ps -ef|grep ora
oracle   
15516 15515  0 14:05 pts/2    00:00:00 ps -ef

SQL
> show parameter instance_name

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
instance_name                        string      julia
SQL
> show parameter db_name

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_name                              string      eygle

 

我们再看看如果参数文件中的db_name和控制文件中的db_name不一致会出现什么错误.
修改参数db_name:

 

[oracle@jumper dbs]$ grep name initjulia.ora 
*.db_name='julia'
*.instance_name='julia'

 

在启动过程中,我们看到,在mount阶段,数据库会对参数文件和控制文件进行比较,如果两者记录的db_name不一致,则数据库无法启动:

 

SQL> startup nomount;
ORACLE instance started.

Total System Global Area  
139531744 bytes
Fixed Size                   
452064 bytes
Variable Size             
121634816 bytes
Database Buffers           16777216 bytes
Redo Buffers                 
667648 bytes
SQL
> alter database mount;
alter database mount
*
ERROR at line 
1:
ORA
-01103database name 'EYGLE' in controlfile is not 'JULIA'

 

另外的一个区别是,db_name通常限制在8个字符之内;instance_name最多应该支持21个字符。通常我们都是设置db_name和instance_name一致。需要注意的是如果db_name设置过长,则会被Oracle截断为8个字符,而instance_name仍然会保留在21个字符之内,如果你的环境变量设置的instance_name=db_name,则启动时就会出现问题,你需要重建pfile/spfile并且修改环境变量才能启动实例,加载数据库。

这个问题可以参考Itpub曾经出现的案例:

http://www.itpub.net/showthread.php?threadid=604507

本文通过实例来介绍instance_name和db_name的区别,希望大家能对这两个参数以及instance和database有进一步的认识。

 

个人补充:

对于Windows 用户来说,在为eygle数据库建立新实例julia是参照下面的动作。(针对oracle 9i)

1.   拷贝eygle数据库的参数文件 INITeygle.ORA 为 INITjulia.ORA,并设置 instancename = julia,也可以动态生成 spfile 文件,启动的时候使用该spfile。

 

2.   为实例 julia 生成新的 password file, 可以拷贝 PWDEYGLE.ora 然后改名为 PWDJULIA.ora,或者使用 orapwd命令:

orapwd file=%ORACLE_HOME%datebase¥PWDJULIA.ora password={password} entries=10

 

3.   为实例 julia 生成Windows Service

oradim -new -sid JULIA -intpwd password -startmode a -pfile %ORACLE_HOME%database¥INITjulia.ORA

 

4.   将实例添加到 TNS Listener 位于%ORALCE_HOME%¥network¥admin下的配置文件 listener.ora 和 tnsnames.ora 中

 

5.   reload TNS listener

lsnrctl reload

 

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 医院发票法院要保险也要怎么办 上海社保里生育险暂停参保怎么办? 痔疮手术后大姨妈来了怎么办 微创痔疮术后第五天涨出血怎么办? 肚子胀疼大便拉不出来怎么办 得痔疮了该怎么办昆明东大治 下体痒还没去检查就来月经了怎么办 直肠造口手术后造口肠子突出怎么办 痔疮pph手术瘢痕两年了该怎么办 肛瘘挂线术后六天腹泻了怎么办 刚满月的孩子鼻子不通气怎么办 齐鲁医院挂的号晚了怎么办 手机微信安装后注册失败怎么办 舞蹈基本功胸怎么都转不动怎么办 饥荒手机版第10天遇到的狗怎么办 饥荒海难手游石墙老是放歪怎么办 小燕子从窝里掉下来了怎么办 二岁宝宝晚上睡觉不踏实怎么办 脚扭伤了有点痛但没肿该怎么办 落地扇的机头摇摆的地方坏了怎么办 跌倒在楼梯上右侧肋骨骆上怎么办 1岁3个月害怕自己不敢走路怎么办 苹果手机没开定位丢了怎么办 我和我老婆每天都吵架怎么办 现在在学注册消防师好枯燥怎么办 店铺台阶太高顾客不愿进来怎么办? 上古卷轴5跑步要沉下去怎么办 1岁半宝宝半夜醒来不睡觉怎么办 上古卷轴5不小心偷了东西怎么办 47牙缺失17号长长了怎么办 碎纸机过热件亮了卡住纸了怎么办 汽车买贵了2万多怎么办 宝宝眼皮被蚊子咬肿了怎么办 一岁宝宝撞头咬到舌头有伤口怎么办 二胎快生了老大特别粘人怎么办 生二胎不舍得大宝跟奶奶睡怎么办 怀二胎婆婆不帮忙带孩子怎么办 注册过的高铁用户名忘了怎么办 硕士延期毕业找好的工作怎么办 竞彩足球绑定信用卡提不了现怎么办 qq启动出现问题请卸载重装怎么办