19cOCP 9月周末班 正在授课 欢迎试听         RHCE9 9月周末班 正在授课 欢迎试学         PGCE 认证专家,周末班报名中,欢迎垂询         数据库运维工程师招聘         RHCE认证培训钜惠学习         OCP认证培训组团活动特惠中!!!         MySQL认证周末班 正在招生 欢迎垂询!         

在11.2RAC上如何手工添加一个数据库实例

更新时间: 2019-03-27 16:27

有些情况下,需要添加一个新的实例到数据库上,推荐用dbca来添加新的实例,但是有的情况下无法使用dbca,比如这个数据库是从11.2之下升级上来的,还在使用裸设备,但是dbca中已经不支持用裸设备来添加数据库文件,这种情况下需要手工添加这个实例。

    下面是在11.2上添加一个实例RACDB2的过程,已有实例为RACDB1。 已有节点为rac1,新节点为rac2。
     在11.2上,一般会使用grid用户来管理GI,使用oracle用户来管理数据库,下面的操作都是用oracle用户来执行。

1. 确保参数文件中日志相关的路径已经存在,如果不存在,需要提前创建相关的目录:
audit_file_dest, background_dump_dest, user_dump_dest 和core_dump_dest等。

比如audit_file_dest=/u01/app/oracle/admin/RACDB/adump,如果这个目录不存在,那么启动实例会报错:
ORA-09925: Unable to create audit trail file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 9925

2. 在已有的数据库实例上执行下面的命令来添加新实例相关的参数:

SQL> alter system set instance_number=2 scope=spfile sid='RACDB2';
SQL> alter system set thread=2 scope=spfile sid='RACDB2';
SQL> alter system set undo_tablespace='UNDOTBS2' scope=spfile sid='RACDB2';
SQL> alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.0.2.122)(PORT=1521))))' sid='RACDB2'; <=====192.0.2.122是节点2的VIP

3. 拷贝已有节点的DB的$ORACLE_HOME/dbs/init<sid>.ora 到新节点的DB的$ORACLE_HOME/dbs/init<sid>.ora,一定要修改对应的实例名。
保证init<sid>.ora 只有一行,用来指定spfile的位置:
=======================
SPFILE='+DATA/racdb/spfileracdb.ora'

比如:
[oracle@rac1 ~]$ scp $ORACLE_HOME/dbs/initRACDB1.ora rac2:$ORACLE_HOME/dbs/initRACDB2.ora <===文件名修改为实例2

4.  修改新节点的/etc/oratab,保证其中有类似下面的内容:
RACDB2:/u01/app/oracle/product/11.2.0/dbhome_1:N      

5.  拷贝已有节点的密码文件: DB的$ORACLE_HOME/dbs/ora<sid>.pwd 到新节点DB的$ORACLE_HOME/dbs/ora<sid>.pwd,一定要修改对应的实例名。

比如:
[oracle@rac1 dbs]$ scp $ORACLE_HOME/dbs/orapwRACDB1 rac2:$ORACLE_HOME/dbs/orapwRACDB2 <==修改为实例2

6.  在已有的实例执行下面的命令,为新建的实例添加UNDO TABLESPACE。

比如:
SQL>CREATE UNDO TABLESPACE "UNDOTBS2" DATAFILE '/dev/….' SIZE 4096M ;

或者使用磁盘组:
SQL>CREATE UNDO TABLESPACE "UNDOTBS2" DATAFILE '+DATA' SIZE 4096M ;

7.  在已有的实例执行下面的命令,为新建的实例添加redo thread和redo log:

比如:
SQL> alter database add logfile thread 2
     group 3 ('/dev/...', '/dev/...') size 1024M,
     group 4 ('/dev/...','dev/...') size 1024M;

或者使用磁盘组:
SQL> alter database add logfile thread 2
     group 3 ('+DATA','+RECO') size 1024M,
     group 4 ('+DATA','+RECO') size 1024M;

SQL> alter database enable thread 2; <==启动这个thread

8.  在新节点上启动新实例,保证环境变量设置的是正确的:
[oracle@rac2 admin]$su - oracle
[oracle@rac2 admin]$export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
[oracle@rac2 admin]$export ORACLE_SID=RACDB2

[oracle@rac2 admin]$ sqlplus / as sysdba
SQL> startup <==如果启动成功,说明之前的实例2相关的参数应该设置正确了

9. 添加实例到OCR中来被GI管理,这个命令可以在任意节点执行:
$srvctl add instance -d <database name> -i <new instance name> -n <new node name>

Example of srvctl add instance command:
============================
[oracle@rac2 ~]$ srvctl add instance -d racdb -i RACDB2 -n rac2  <==注意实例的大小写,可以执行ps -ef|grep smon来查看

[oracle@rac2 dbs]$ ps -ef|grep smon
root      3453     1  1 Jun12 ?        04:03:05 /u01/app/11.2.0/grid/bin/osysmond.bin
grid      3727     1  0 Jun12 ?        00:00:19 asm_smon_+ASM2
oracle    5343  4543  0 14:06 pts/1    00:00:00 grep smon
oracle   28736     1  0 Jun25 ?        00:00:03 ora_smon_RACDB2 <========实例名大写的

10. 查看实例的状态:
$su - grid
[grid@rac2 ~]$ crsctl stat res -t
...
ora.racdb.db
      1        ONLINE  ONLINE       rac1                     Open               
      2        OFFLINE OFFLINE            

rac2已经添加,但是状态显示offline,实际上这个实例之前已经被sqlplus启动了
可以用sqlplus把实例先停掉,然后用srvctl启动:

[grid@rac2 ~]$ su  - oracle
Password:
[oracle@rac2 ~]$ sqlplus / as sysdba
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit

[oracle@rac2 ~]$ srvctl start instance -d racdb -i RACDB2

[oracle@rac2 ~]$ su - grid
Password:
[grid@rac2 ~]$ crsctl stat res -t
ora.racdb.db
      1        ONLINE  ONLINE       rac1                     Open               
      2        ONLINE  ONLINE       rac2                     Open               

11. 检查数据库的依赖性:
[oracle@rac2 ~]$ crsctl stat res ora.racdb.db -p
NAME=ora.racdb.db
TYPE=ora.database.type
ACL=owner:oracle:rwx,pgrp:oinstall:rwx,other::r--
ACTION_FAILURE_TEMPLATE=
ACTION_SCRIPT=
ACTIVE_PLACEMENT=1
AGENT_FILENAME=%CRS_HOME%/bin/oraagent%CRS_EXE_SUFFIX%
AUTO_START=restore
CARDINALITY=2
CHECK_INTERVAL=1
CHECK_TIMEOUT=30
CLUSTER_DATABASE=true
DATABASE_TYPE=RAC
DB_UNIQUE_NAME=RACDB
DEFAULT_TEMPLATE=PROPERTY(RESOURCE_CLASS=database) PROPERTY(DB_UNIQUE_NAME= CONCAT(PARSE(%NAME%, ., 2), %USR_ORA_DOMAIN%, .))
ELEMENT(INSTANCE_NAME= %GEN_USR_ORA_INST_NAME%) ELEMENT(DATABASE_TYPE= %DATABASE_TYPE%)
DEGREE=1
DESCRIPTION=Oracle Database resource
ENABLED=1
FAILOVER_DELAY=0
FAILURE_INTERVAL=60
FAILURE_THRESHOLD=1
GEN_AUDIT_FILE_DEST=/u01/app/oracle/admin/RACDB/adump
GEN_START_OPTIONS=
GEN_START_OPTIONS@SERVERNAME(rac1)=open
GEN_START_OPTIONS@SERVERNAME(rac2)=open
GEN_USR_ORA_INST_NAME=
GEN_USR_ORA_INST_NAME@SERVERNAME(rac1)=RACDB1
HOSTING_MEMBERS=
INSTANCE_FAILOVER=0
LOAD=1
LOGGING_LEVEL=1
MANAGEMENT_POLICY=AUTOMATIC
NLS_LANG=
NOT_RESTARTING_TEMPLATE=
OFFLINE_CHECK_INTERVAL=0
ONLINE_RELOCATION_TIMEOUT=0
ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
ORACLE_HOME_OLD=
PLACEMENT=restricted
PROFILE_CHANGE_TEMPLATE=
RESTART_ATTEMPTS=2
ROLE=PRIMARY
SCRIPT_TIMEOUT=60
SERVER_POOLS=ora.RACDB
SPFILE=+DATA/RACDB/spfileRACDB.ora
START_DEPENDENCIES=hard(ora.DATA.dg,ora.RECO.dg) weak
(type:ora.listener.type,global:type:ora.scan_listener.type,uniform:ora.ons,global:ora.gns) pullup(ora.DATA.dg,ora.RECO.dg)

START_TIMEOUT=600
STATE_CHANGE_TEMPLATE=
STOP_DEPENDENCIES=hard(intermediate:ora.asm,shutdown:ora.DATA.dg,shutdown:ora.RECO.dg)
STOP_TIMEOUT=600
TYPE_VERSION=3.2
UPTIME_THRESHOLD=1h
USR_ORA_DB_NAME=RACDB
USR_ORA_DOMAIN=
USR_ORA_ENV=
USR_ORA_FLAGS=
USR_ORA_INST_NAME=
USR_ORA_INST_NAME@SERVERNAME(rac1)=RACDB1
USR_ORA_INST_NAME@SERVERNAME(rac2)=RACDB2
USR_ORA_OPEN_MODE=open
USR_ORA_OPI=false
USR_ORA_STOP_MODE=immediate
VERSION=11.2.0.3.0

由于在11.2,在OCR中只有database资源,没有实例资源,所以实例的属性都是通过database来设置的。
由于database的属性已经存在,而且是正确的,所以不需要再对这个实例设置针对ASM或者磁盘组的的依赖性了。

 附:dbca 中添加新实例的大概步骤:

在已有的节点上用oracle用户打开dbca:
su - oracle
dbca
选择 RAC database
选择 Instance Management
选择 add an instance
会列出active rac database
输入新的实例名
添加undo和redo信息

开班信息MORE>>

课程名称 开课时间 上课类型 状态
RHCE培训 11月 周末班 授课中...
OCP培训 10月 周末班 授课中...
PGCE 专家 11月 周末班 报名中...
OCP培训 12月 精英班 报名中...
OCM培训 11月 周末班 报名中...
RHCE培训 常年 周末班 报名中...
MySQL培训 常年 周末班 报名中...
<<