星期四 六月 27, 2013

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

       有些情况下,需要添加一个新的实例到数据库上,推荐用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信息

星期五 六月 14, 2013

如何在ASM磁盘组中复制一个新的控制文件

     在一些情况下,可能需要增加控制文件的镜像文件,或者复制一个控制文件来替换原有的控制文件。比如一个控制文件损坏了,另外一个镜像的控制文件是好的,这种情况下可以按照下面的方法复制一个控制文件来替换原有的损坏的控制文件。

     在下面的例子中,假设控制文件+DATA/rac11g2/controlfile/current.260.815940667上发生了坏块,我们需要用没有问题的控制文件+RECO/rac11g2/controlfile/current.256.815940675来复制一个新的控制文件来替换已损坏的这个控制文件。

Wed May 23 14:11:50 2013
Read from controlfile member '+DATA/rac11g2/controlfile/current.260.815940667' has found a corrupted block (blk# 4, seq# 0) Hex
dump of (file 0, block 4) in trace file /u01/app/oracle/admin/racdb/bdump/racdb1_lmon_332342.trc
Corrupt block relative dba: 0x00000004 (file 0, block 4)
Bad check value found during control file block read
Data in bad block:
type: 21 format: 2 rdba: 0x00000004
last change scn: 0x0000.00000000 seq: 0x1 flg: 0x04
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0x00001501
check value in block header: 0xdcca
computed block checksum: 0x2

   下面是针对控制文件在ASM磁盘组中的情况,演示如何在ASM磁盘组上复制一个控制文件来替换原来的一个控制文件。主要用到了rman 的命令 restore controlfile to '...' from '...' 。

   下面的大部分命令都是连接到数据库实例上执行,但是asmcmd命令需要设置环境变量ORACLE_SID和ORACLE_HOME为ASM对应的值来执行。针对11.2,需要注意是用grid用户还是oracle用户来执行。

1. 首先备份一下数据库实例的spfile(不是ASM实例):
SQL>create pfile='/tmp/pfile' from spfile;

如果没有使用spfile,直接备份pfile即可。

2.确定数据库实例当前的controlfile的文件名:

SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
+DATA/rac11g2/controlfile/current.260.815940667
+RECO/rac11g2/controlfile/current.256.815940675

3. 停止使用这个控制文件的数据库实例(ASM 要保持启动)。如果是RAC,需要停止所有节点上使用这个控制文件的数据库实例

4. 启动数据库实例到nomount。对于RAC系统,只需启动任何一个实例,比如实例1。注意连接的是数据库实例,不是ASM实例。一般使用oracle用户登录到sqlplus。

su - oracle
sqlplus / as sysdba
SQL>startup nomount;

5. 使用RMAN来复制一个controlfile,源文件是'+RECO/rac11g2/controlfile/current.256.815940675',目标是建立到磁盘组'+DATA'中。


su - oracle
$ rman target /
RMAN> restore controlfile to '+DATA' from '+RECO/rac11g2/controlfile/current.256.815940675';

Starting restore at 06-JUN-13
using channel ORA_DISK_1

channel ORA_DISK_1: copied control file copy
Finished restore at 06-JUN-13

如果需要复制多个控制文件,重复这步即可。

注意,如果实例没有停止,那么执行上面的命令会报错:
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 06/13/2013 20:53:12
ORA-19607: +RECO/racdb/controlfile/current.256.783272801 is an active control file
ORA-19600: input file is control file  (+RECO/racdb/controlfile/current.256.783272801)
ORA-19601: output file is control file  (+DATA)

6. 利用asmcmd 找到新建的controlfile的名字:
如果是11.2,一般会使用grid用户来执行asmcmd,如果是10g, 11.1,一般还是使用oracle用户。
但是不论是哪个用户,都要确保ORACLE_SID设置为了ASM实例,并且保证ORACLE_HOME设置为了ASM实例所在的ORACLE_HOME。

$export ORACLE_SID=+ASM1 <==设置为ASM实例
$export ORACLE_HOME=...

$asmcmd
ASMCMD> cd +DATA/rac11g2/controlfile
ASMCMD> ls
ASM
Current.260.815940667 <==旧的
current.268.817385067 <==新的

7. 设置数据库实例的初始化参数来使用新的控制文件:
export ORACLE_SID=RAC11G22 <==要设置为数据库实例
sqlplus / as sysdba
SQL>alter system set control_files='+DATA/RAC11G2/CONTROLFILE/Current.268.817385067','RECO/RAC11G2/CONTROLFILE/Current.256.815940675' scope=spfile id='*';

注意,如果有多个控制文件,它们要分别用''括起来,否则执行上面的命令会报错。

SQL> show parameter control_files

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      +DATA/rac11g2/controlfile/curr <===这时还是旧的值
                                                ent.260.815940667, +RECO/rac11
                                                g2/controlfile/current.256.815
                                                940675
8.  重启实例:
SQL>shutdown immediate
SQL>startup
SQL> show parameter control_files;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      +DATA/rac11g2/controlfile/curr
                                                ent.268.817385067, +RECO/rac11 <==已经设置为了新的
                                                g2/controlfile/current.256.815
                                                940675

SQL> select name from gv$controlfile;

NAME
--------------------------------------------------------------------------------
+DATA/rac11g2/controlfile/current.268.817385067 <==用了新的
+RECO/rac11g2/controlfile/current.256.815940675

9. 对于RAC,启动其它节点的数据库实例。

参考MOS文档:
How To Move Controlfile To ASM [ID 468458.1]
How to duplicate a controlfile when ASM is involved [ID 345180.1]


参与此主题的后续讨论,可以访问我们的中文社区,跟帖“分享: 如何在ASM磁盘组中复制一个新的控制文件? "

星期四 六月 13, 2013

TFA Collector 介绍

1.TFA的目的:
TFA是个11.2版本上推出的用来收集Grid Infrastructure/RAC环境下的诊断日志的工具,它可以用非常简单的命令协助用户收集RAC里的日志,以便进一步进行诊断;TFA是类似diagcollection的一个oracle 集群日志收集器,而且TFA比diagcollection集中和自动化的诊断信息收集能力更强大。TFA有以下几个特点:
1.    TFA可以在一台机器上执行一条简单的命令把所有节点的日志进行打包,封装;
2.    TFA可以在收集的过程中对日志进行”trim”操作,减少数据的收集量;
3.    TFA可以收集用来诊断用的“一段时间内”的数据;
4.    TFA可以把所有节点的日志收集并封装好放在某一个节点上以便传输阅读;
5.    TFA可以指定Cluster中的某一部分组件进行日志收集,如:ASM ,RDBMS,Clusterware
6.    TFA可以根据条件配置对告警日志进行实时扫描(DB Alert Logs, ASM Alert Logs, Clusterware Alert Logs, etc);
7.    TFA可以根据实时扫描的结果自动的收集诊断日志;
8.    TFA可以根据指定的错误进行对告警日志的扫描;
9.    TFA可以根据指定的错误扫描后的结果收集诊断日志;    
2.    TFA的安装要求:

平台:

目前TFA支持以下几种平台:    
Intel Linux(Enterprise Linux, RedHat Linux, SUSE Linux)
Linux Itanium
Oracle Solaris SPARC
Oracle Solaris x86-64
AIX (requires bash shell version 3.2 or higher installed)
HPUX Itanium
HPUX PA-RISC

2.支持的数据库版本:

TFA目前的设计是脱离RDBMS和CRS进行设计的,所以设计的初衷是针对所有的版本而设计的,不受RDBMS或者CRS的版本限制;

下载 TFA Collector:

该版本的TFA和相关TFA用户指南可以通过点击下面的相关下载链接。

TFA 收集器:

https://mosemp.us.oracle.com/epmos/main/downloadattachmentprocessor?attachid=1513912.1:TFA_NOJRE&clickstream=no
TFA 用户手册:
https://mosemp.us.oracle.com/epmos/main/downloadattachmentprocessor?attachid=1513912.1:TFA_USER_GUIDE&clickstream=no

3.    TFA快速安装指南:

安装:

注意:在安装之前请确保您的环境上已经安装了JRE1.6或者是更高版本的JRE,如果没有,请先安装JRE1.6
1.    请使用root用户登录系统
2.    在所有的节点上为TFA准备一个安装的位置,注意这个位置不要放在Cluster file system中;
3.    在节点1上执行installTFALite.sh来启动安装过程:
---------------------------------
[root@rac1 tmp]# ./installTFALite.sh
Starting TFA installation
---------------------------------
4.    当系统提示安装位置,输入在第2步中选择的位置的TFA安装,:
---------------------------------
Enter a location for installing TFA [/opt/oracle/tfa]:/opt/oracle/tfa
Checking for available space in /opt/oracle/tfa/
---------------------------------
5.    请输入之前安装了JRE1.6的JAVA_HOME,注意这个位置需要在所有的节点上都相同:
---------------------------------
Enter a Java Home that contains Java 1.6 or later : /usr/java/jre1.7.0_11
Running Auto Setup for TFA as user root...
---------------------------------
6.    按照以下说明完成安装:
------------------------------------------------------------------
Would you like to do a [L]ocal only or [C]lusterwide installation ? [L|l|C|c] [C] :
The following installation requires temporary use of SSH.
If SSH is not configured already then we will remove SSH
when complete.
  Do you wish to Continue ? [Y|y|N|n] [N] Y
Installing TFA at /opt/oracle/tfa in all hosts
Discovering Nodes and Oracle resources
Checking whether CRS is up and running

Getting list of nodes in cluster

Checking ssh user equivalency settings on all nodes in cluster

Node rac2 is configured for ssh user equivalency for root user


Searching for running databases . . . . .

.
List of running databases registered in OCR
1. ORCL
. .

Checking Status of Oracle Software Stack - Clusterware, ASM, RDBMS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

TFA Will be Installed on the Following Nodes
++++++++++++++++++++++++++++++++++++++++++++

Install Nodes
=============
rac1
rac2
Do you wish to make changes to the Node List ? [Y/y/N/n] [N]

TFA will scan the following Directories
++++++++++++++++++++++++++++++++++++++++++++

.----------------------------------------------------------------.
|                             rac2                               |
+-----------------------------------------------------+----------+
| Trace Directory                                     | Resource |
+-----------------------------------------------------+----------+
| /u01/app/11.2.0/grid/cfgtoollogs                    | INSTALL  |
| /u01/app/11.2.0/grid/crs/log                        | CRS      |
| /u01/app/11.2.0/grid/css/log                        | CRS      |
| /u01/app/11.2.0/grid/cv/log                         | CRS      |
| /u01/app/11.2.0/grid/evm/admin/log                  | CRS      |
| /u01/app/11.2.0/grid/evm/admin/logger               | CRS      |
| /u01/app/11.2.0/grid/evm/log                        | CRS      |
| /u01/app/11.2.0/grid/install                        | INSTALL  |
| /u01/app/11.2.0/grid/log/                           | CRS      |
| /u01/app/11.2.0/grid/network/log                    | CRS      |
| /u01/app/11.2.0/grid/oc4j/j2ee/home/log             | CRSOC4J  |
| /u01/app/11.2.0/grid/opmn/logs                      | CRS      |
| /u01/app/11.2.0/grid/racg/log                       | CRS      |
| /u01/app/11.2.0/grid/rdbms/log                      | ASM      |
| /u01/app/11.2.0/grid/scheduler/log                  | CRS      |
| /u01/app/11.2.0/grid/srvm/log                       | CRS      |
| /u01/app/oraInventory/ContentsXML                   | INSTALL  |
| /u01/app/oraInventory/logs                          | INSTALL  |
| /u01/app/oracle/cfgtoollogs                         | CFGTOOLS |
| /u01/app/oracle/diag/asm/+asm/+ASM2/trace           | ASM      |
| /u01/app/oracle/diag/rdbms/orcl/ORCL2/trace         | RDBMS    |
| /u01/app/oracle/diag/tnslsnr                        | TNS      |
| /u01/app/oracle/diag/tnslsnr/rac2/listener/trace    | TNS      |
| /u01/app/oracle/product/11.2.0/dbhome_1/cfgtoollogs | INSTALL  |
| /u01/app/oracle/product/11.2.0/dbhome_1/install     | INSTALL  |
'-----------------------------------------------------+----------'

.----------------------------------------------------------------.
|                             rac1                               |
+-----------------------------------------------------+----------+
| Trace Directory                                     | Resource |
+-----------------------------------------------------+----------+
| /u01/app/11.2.0/grid/cfgtoollogs                    | INSTALL  |
| /u01/app/11.2.0/grid/crs/log                        | CRS      |
| /u01/app/11.2.0/grid/css/log                        | CRS      |
| /u01/app/11.2.0/grid/cv/log                         | CRS      |
| /u01/app/11.2.0/grid/evm/admin/log                  | CRS      |
| /u01/app/11.2.0/grid/evm/admin/logger               | CRS      |
| /u01/app/11.2.0/grid/evm/log                        | CRS      |
| /u01/app/11.2.0/grid/install                        | INSTALL  |
| /u01/app/11.2.0/grid/log/                           | CRS      |
| /u01/app/11.2.0/grid/network/log                    | CRS      |
| /u01/app/11.2.0/grid/oc4j/j2ee/home/log             | CRSOC4J  |
| /u01/app/11.2.0/grid/opmn/logs                      | CRS      |
| /u01/app/11.2.0/grid/racg/log                       | CRS      |
| /u01/app/11.2.0/grid/rdbms/log                      | ASM      |
| /u01/app/11.2.0/grid/scheduler/log                  | CRS      |
| /u01/app/11.2.0/grid/srvm/log                       | CRS      |
| /u01/app/oraInventory/ContentsXML                   | INSTALL  |
| /u01/app/oraInventory/logs                          | INSTALL  |
| /u01/app/oracle/cfgtoollogs                         | CFGTOOLS |
| /u01/app/oracle/diag/asm/+asm/+ASM1/trace           | ASM      |
| /u01/app/oracle/diag/rdbms/orcl/ORCL1/trace         | RDBMS    |
| /u01/app/oracle/diag/tnslsnr                        | TNS      |
| /u01/app/oracle/diag/tnslsnr/rac1/listener/trace    | TNS      |
| /u01/app/oracle/product/11.2.0/dbhome_1/cfgtoollogs | INSTALL  |
| /u01/app/oracle/product/11.2.0/dbhome_1/install     | INSTALL  |
'-----------------------------------------------------+----------'

Do you wish to change the Trace Directory List ? [Y/y/N/n] [N]
Installing TFA on rac1
Installing TFA on rac2
TFA is running
Successfully added host: rac2
.--------------------------------.
| Host   | Status of TFA | PID   |
+--------+---------------+-------+
| rac1 | RUNNING         | 11685 |
| rac2 | RUNNING         |  5081 |
'--------+---------------+-------'
Setting TFA cookie in all nodes
Successfully set cookie=77411b8fff446d2954d5c080225052ac
TFA Cookie: 77411b8fff446d2954d5c080225052ac
Summary of TFA Installation
.-----------------------------------------------------------.
|                           rac1                            |
+---------------------+-------------------------------------+
| Parameter           | Value                               |
+---------------------+-------------------------------------+
| Install location    | /opt/oracle/tfa/tfa_home            |
| Repository location | /opt/oracle/tfa/tfa_home/repository |
| Repository usage    | 0 MB out of 10240 MB                |
'---------------------+-------------------------------------'

.-----------------------------------------------------------.
|                           rac2                            |
+---------------------+-------------------------------------+
| Parameter           | Value                               |
+---------------------+-------------------------------------+
| Install location    | /opt/oracle/tfa/tfa_home            |
| Repository location | /opt/oracle/tfa/tfa_home/repository |
| Repository usage    | 0 MB out of 10240 MB                |
'---------------------+-------------------------------------'

TFA is successfully installed..
------------------------------------------------------------------

4.TFA启动和停止:

TFA运行在Linux和Unix平台上的init,所以,这将是在服务器启动时自动启动。
默认的情况我们把这个脚本命名为init.tfa;
所在位置取决于不同平台,如:
Linux and Solaris: /etc/init.d/init.tfa
Aix: /etc/init.tfa
HP-UX: /sbin/init.d/init.tfa
以下命令式在Linux平台下作为例子:
启动:
# /etc/init.d/init.tfa start
停止:
# /etc/init.d/init.tfa stop
重启:
# /etc/init.d/init.tfa restart

5.手动收集诊断信息:

我们通过调用tfactl的命令和诊断动词diagnostic来控制TFA收集我们期望的诊断信息。Tfactl 提供给用户多种可选择的模式进行收集,如 ,收集一个时间段内的日志信息来减少我们收集日志的量;
具体操作的命令您可以通过以下方式看到:
--------------------------------------------------------------
#$TFA_HOME/bin/tfactl diagcollect -h
Usage: /u01/app/tfa/tfa_home/bin/tfactl diagcollect [-all | -database | -asm | -crs | -os | -install | -node | -tag ]
        [-since <n><h|d>| -from <time> -to <time> | -for <time>]
        [-copy | -nocopy] [-symlink][-notrim]

Options:
  -all       Collect logs of all types
  -crs        Collect only CRS logs
  -asm        Collect only ASM logs
  -database  Collect only database logs from databases specified
  -os         Collect only OS files
  -install    Collect only INSTALL files
  -node       Specify comma separated list of host names for collection.
  -copy       Copy back the zip files to master node from all nodes
  -nocopy    Does not copy back the zip files to master node from all nodes
  -notrim     Does not trim the files collected
  -symlink    This option should be used with -for.
              Creates symlinks for files which are updated during the input time.
  -since <n><h|d>   Files from past 'n' [d]ays or 'n' [h]ours
  -from <time>        From time
  -to <time>         To time
  -for <time>        Specify a incident time.
  -z <file>           Output file name
  -tag <description>  Enter a tag for the zip(s) created

--------------------------------------------------------------


在下面的例子中,我们使用了 -all,并告诉TFA收集诊断所有类型的日志,从午夜1月21日至1月21日13:00 进行收集。该命令将启动指定的诊断在后台收集所有群集节点上,压缩成zip文件放置在每个节点的TFA_HOME中:


--------------------------------------------------------------


# $TFA_HOME/bin/tfactl diagcollect -all -from "Jan/21/2013" -to "Jan/21/2013 13:00:00"


time: Jan/21/2013
Valid pattern
Month : 1
time: Jan/21/2013 13:00:00
Valid pattern
Month : 1
rac1:startdiagcollection: -database -asm -crs -os -install -from Jan/21/2013 -to Jan/21/2013 13:00:00 -z Mon_Jan_21_11_52_20_EST_2013 -node all -copy
Logs are collected to:
/opt/oracle/tfa/tfa_home/repository/rac1.Mon_Jan_21_11_52_20_EST_2013.zip
/opt/oracle/tfa/tfa_home/repository/rac2.Mon_Jan_21_11_52_20_EST_2013.zip

--------------------------------------------------------------
6.诊断问题or上传诊断信息给Oracle Support工程师:

无论我们用哪种方法对诊断信息进行收集,日志信息都会被打包好放置在$TFA_HOME/repository的目录下,以便您上传该文件给Oracle的support工程师

7.推荐参考文档:
TFA Collector- The Preferred Tool for Automatic or ADHOC Diagnostic Gathering Across All Cluster Nodes [ID 1513912.1]

如何 Relink 11.2 Grid Infrastructure(GI) 和 11.2 RAC?

     对于Oracle Clusterware(CRS) 10g 和11.1, CRS 的binary 不能被 relink。CRS 中的client shared libraries可以被relink, 但是这个relink只有当OS升级或者给OS打补丁出现问题后才需要,大部分时候不需要relink CRS。

     如果想对CRS中的client shared libraries做relink, 请参考MOS文档中的步骤:
     Will an Operating System Upgrade Affect Oracle Clusterware? [ID 743649.1]

     对于Oracle Grid Infrastructure(GI) 11.2 及之后的版本,在GRID HOME中有一些binary需要在OS升级或者打补丁后被relink。
     对于数据库软件(RDBMS binary),在OS升级或者OS打补丁后推荐做relink, RAC 的binary也是一样的,需要relink。

     下面是在11.2 集群环境中执行relink的过程,包括了对GI和RAC做relink的步骤:

1. 首先停止这个节点上的所有数据库实例,这是因为之后停止CRS时虽然会停止数据库实例,但是是以shutdown abort的方式,我们需要以shutdown immediate或者normal来停止数据库实例:
$su - oracle
$srvctl stop instance -d <db_name> -i <instance_name> -o immediate

2. 如果业务需要高可用性,确保这个实例上的service已经切换到了其它节点的实例上。
$ srvctl status service -d <db_name>

3. 用root用户执行<GRID_HOME>/crs/install/rootcrs.pl -unlock来修改相应目录权限并停止GI:
[root@rac1 ~]# cd /u01/app/11.2.0/grid/crs/install
[root@rac1 install]# perl rootcrs.pl -unlock
Using configuration parameter file: ./crsconfig_params


CRS-2791: Starting shutdown of Oracle High Availability Services-managed resources on 'rac1'
CRS-2673: Attempting to stop 'ora.crsd' on 'rac1'
CRS-2790: Starting shutdown of Cluster Ready Services-managed resources on 'rac1'
CRS-2673: Attempting to stop 'ora.rac2.vip' on 'rac1'
CRS-2673: Attempting to stop 'ora.oc4j' on 'rac1'
CRS-2673: Attempting to stop 'ora.LISTENER_SCAN1.lsnr' on 'rac1'
CRS-2673: Attempting to stop 'ora.cvu' on 'rac1'
CRS-2677: Stop of 'ora.rac2.vip' on 'rac1' succeeded
CRS-2677: Stop of 'ora.LISTENER_SCAN1.lsnr' on 'rac1' succeeded
CRS-2673: Attempting to stop 'ora.scan1.vip' on 'rac1'
CRS-2677: Stop of 'ora.scan1.vip' on 'rac1' succeeded
CRS-2677: Stop of 'ora.oc4j' on 'rac1' succeeded
CRS-2677: Stop of 'ora.cvu' on 'rac1' succeeded
CRS-2673: Attempting to stop 'ora.LISTENER.lsnr' on 'rac1'
CRS-2673: Attempting to stop 'ora.CRS.dg' on 'rac1'
CRS-2673: Attempting to stop 'ora.racdb.db' on 'rac1'
CRS-2677: Stop of 'ora.LISTENER.lsnr' on 'rac1' succeeded
CRS-2673: Attempting to stop 'ora.rac1.vip' on 'rac1'
CRS-2677: Stop of 'ora.rac1.vip' on 'rac1' succeeded
CRS-2677: Stop of 'ora.CRS.dg' on 'rac1' succeeded
CRS-2677: Stop of 'ora.racdb.db' on 'rac1' succeeded
CRS-2673: Attempting to stop 'ora.DATA.dg' on 'rac1'
CRS-2673: Attempting to stop 'ora.RECO.dg' on 'rac1'
CRS-2677: Stop of 'ora.DATA.dg' on 'rac1' succeeded
CRS-2677: Stop of 'ora.RECO.dg' on 'rac1' succeeded
CRS-2673: Attempting to stop 'ora.asm' on 'rac1'
CRS-2677: Stop of 'ora.asm' on 'rac1' succeeded
CRS-2673: Attempting to stop 'ora.ons' on 'rac1'
CRS-2677: Stop of 'ora.ons' on 'rac1' succeeded
CRS-2673: Attempting to stop 'ora.net1.network' on 'rac1'
CRS-2677: Stop of 'ora.net1.network' on 'rac1' succeeded
CRS-2792: Shutdown of Cluster Ready Services-managed resources on 'rac1' has completed
CRS-2677: Stop of 'ora.crsd' on 'rac1' succeeded
CRS-2673: Attempting to stop 'ora.mdnsd' on 'rac1'
CRS-2673: Attempting to stop 'ora.crf' on 'rac1'
CRS-2673: Attempting to stop 'ora.ctssd' on 'rac1'
CRS-2673: Attempting to stop 'ora.evmd' on 'rac1'
CRS-2673: Attempting to stop 'ora.asm' on 'rac1'
CRS-2677: Stop of 'ora.mdnsd' on 'rac1' succeeded
CRS-2677: Stop of 'ora.crf' on 'rac1' succeeded
CRS-2677: Stop of 'ora.evmd' on 'rac1' succeeded
CRS-2677: Stop of 'ora.ctssd' on 'rac1' succeeded
CRS-2677: Stop of 'ora.asm' on 'rac1' succeeded
CRS-2673: Attempting to stop 'ora.cluster_interconnect.haip' on 'rac1'
CRS-2677: Stop of 'ora.cluster_interconnect.haip' on 'rac1' succeeded
CRS-2673: Attempting to stop 'ora.cssd' on 'rac1'
CRS-2677: Stop of 'ora.cssd' on 'rac1' succeeded
CRS-2673: Attempting to stop 'ora.gipcd' on 'rac1'
CRS-2677: Stop of 'ora.gipcd' on 'rac1' succeeded
CRS-2673: Attempting to stop 'ora.gpnpd' on 'rac1'
CRS-2677: Stop of 'ora.gpnpd' on 'rac1' succeeded
CRS-2793: Shutdown of Oracle High Availability Services-managed resources on 'rac1' has completed
CRS-4133: Oracle High Availability Services has been stopped.
Successfully unlock /u01/app/11.2.0/grid

注意,如果在$GRID_HOME/rdbms/audit下面的audit文件很多,会导致rootcrs.pl执行很长时间,这样的话可以将$GRID_HOME/rdbms/audit/*.aud 文件备份到GRID_HOME之外,然后删除。

4. 禁止GI在OS重启后自动启动,这是因为升级OS或者打OS补丁后,可能需要重启主机,这样的话,需要在relink之前禁止GI启动。
用root用户:
[root@rac1 install]# crsctl disable crs
CRS-4621: Oracle High Availability Services autostart is disabled.

5. 备份GI和RDBMS的ORACLE_HOME。

6. 升级OS或者给OS打补丁,包括重启主机等(如果需要)。

7. 用GI的属主用户来对GI binary进行relink:

[root@rac1 audit]# su - grid
[grid@rac1 ~]$ export ORACLE_HOME=/u01/app/11.2.0/grid

确保GI是停止的,然后再执行relink:
[grid@rac1 ~]$ ps -ef|grep d.bin
grid      3408  3360  0 17:09 pts/0    00:00:00 grep d.bin

[grid@rac1 ~]$ crsctl stat res -t
CRS-4535: Cannot communicate with Cluster Ready Services
CRS-4000: Command Status failed, or completed with errors.

[grid@rac1 ~]$ $ORACLE_HOME/bin/relink
writing relink log to: /u01/app/11.2.0/grid/install/relink.log

[grid@rac1 ~]$ <===relink结束后,并不会有任何信息提示,只是显示命令提示符。

需要检查/u01/app/11.2.0/grid/install/relink.log, 查看是否有错误。

下面截取了末尾的一些行,如下:
...
 - Linking Oracle
rm -f /u01/app/11.2.0/grid/rdbms/lib/oracle
gcc  -o /u01/app/11.2.0/grid/rdbms/lib/oracle -m64 -L/u01/app/11.2.0/grid/rdbms/lib/ -L/u01/app/11.2.0/grid/lib/ -
...
lsnls11 -lnls11 -lcore11 -lnls11 -lasmclnt11 -lcommon11 -lcore11 -laio    `cat /u01/app/11.2.0/grid/lib/sysliblist` -Wl,-
rpath,/u01/app/11.2.0/grid/lib -lm    `cat /u01/app/11.2.0/grid/lib/sysliblist` -ldl -lm   -L/u01/app/11.2.0/grid/lib
test ! -f /u01/app/11.2.0/grid/bin/oracle ||\
           mv -f /u01/app/11.2.0/grid/bin/oracle /u01/app/11.2.0/grid/bin/oracleO
mv /u01/app/11.2.0/grid/rdbms/lib/oracle /u01/app/11.2.0/grid/bin/oracle
chmod 6751 /u01/app/11.2.0/grid/bin/oracle

8. 用RDBMS的属主对数据库binary做relink:
su - oracle
确保$ORACLE_HOME设置为了数据库的ORACLE_HOME,然后执行:

[oracle@rac1 ~]$ $ORACLE_HOME/bin/relink all
writing relink log to: /u01/app/oracle/product/11.2.0/dbhome_1/install/relink.log
<===relink结束后,并不会有任何信息提示,只是显示命令提示符。

需要检查/u01/app/oracle/product/11.2.0/dbhome_1/install/relink.log, 查看是否有错误。

截取relink.log中部分内容:

Starting Oracle Universal Installer... <<<<<<开头
...
le/product/11.2.0/dbhome_1/lib/sysliblist` -ldl -lm   -L/u01/app/oracle/product/11.2.0/dbhome_1/lib
test ! -f /u01/app/oracle/product/11.2.0/dbhome_1/bin/oracle ||\
           mv -f /u01/app/oracle/product/11.2.0/dbhome_1/bin/oracle /u01/app/oracle/product/11.2.0/dbhome_1/bin/
oracleO
mv /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/oracle /u01/app/oracle/product/11.2.0/dbhome_1/bin/oracle
chmod 6751 /u01/app/oracle/product/11.2.0/dbhome_1/bin/oracle <<<<<<结尾

9. 用root用户执行<GRID_HOME>/crs/install/rootcrs.pl -patch来修改相应目录权限并启动GI:

[root@rac1 ~]# cd /u01/app/11.2.0/grid/crs/install
[root@rac1 install]# perl rootcrs.pl -patch
Using configuration parameter file: ./crsconfig_params
CRS-4123: Oracle High Availability Services has been started.

10. Enable CRS来保证主机重启后可以自动启动GI:
[root@rac1 install]# crsctl enable crs
CRS-4622: Oracle High Availability Services autostart is enabled.

11. 确认所有的应启动的资源都已启动:
[root@rac1 install]#  crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS      
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.CRS.dg
               ONLINE  ONLINE       rac1                                        
               ONLINE  ONLINE       rac2                                        
ora.DATA.dg
               ONLINE  ONLINE       rac1                                        
               ONLINE  ONLINE       rac2                                        
ora.LISTENER.lsnr
               ONLINE  ONLINE       rac1                                        
               ONLINE  ONLINE       rac2                                        
ora.RECO.dg
               ONLINE  ONLINE       rac1                                        
               ONLINE  ONLINE       rac2                                        
ora.asm
               ONLINE  ONLINE       rac1                     Started            
               ONLINE  ONLINE       rac2                     Started            
ora.gsd
               OFFLINE OFFLINE      rac1                                        
               OFFLINE OFFLINE      rac2                                        
ora.net1.network
               ONLINE  ONLINE       rac1                                        
               ONLINE  ONLINE       rac2                                        
ora.ons
               ONLINE  ONLINE       rac1                                        
               ONLINE  ONLINE       rac2                                        
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       rac2                                        
ora.cvu
      1        ONLINE  ONLINE       rac2                                        
ora.oc4j
      1        ONLINE  ONLINE       rac2                                        
ora.rac1.vip
      1        ONLINE  ONLINE       rac1                                        
ora.rac2.vip
      1        ONLINE  ONLINE       rac2                                        
ora.racdb.db
      1        ONLINE  ONLINE       rac2                     Open               
      2        OFFLINE OFFLINE                               Instance Shutdown  
ora.scan1.vip
      1        ONLINE  ONLINE       rac2                                        

如果发现实例没有启动,可以手工启动:
$srvctl start instance -d <db_name> -i <instance_name>

12. 可以用下面的MOS文档中的方法来确认oracle 的binary是RAC的:
How to Check Whether Oracle Binary/Instance is RAC Enabled and Relink Oracle Binary in RAC [ID 284785.1]

方法1:如果下面的命令能查出kcsm.o ,说明binary是RAC的:
su - oracle
$ar -t $ORACLE_HOME/rdbms/lib/libknlopt.a|grep kcsm.o
kcsm.o

在AIX上命令是不同的:
 ar -X32_64 -t $ORACLE_HOME/rdbms/lib/libknlopt.a|grep kcsm.o

方法2:查看RAC特有的后台进程是否存在,比如:
[grid@rac1 ~]$ ps -ef|grep lmon
grid      7732     1  0 17:59 ?        00:00:17 asm_lmon_+ASM1
oracle   18605     1  0 20:49 ?        00:00:00 ora_lmon_RACDB1 <===========
grid     20992 10160  0 21:10 pts/2    00:00:00 grep lmon

上面的所有步骤需要在集群的各个节点上依次执行。

上述relink GI的过程来源于下面MOS文档中章节 “Do I need to relink the Oracle Clusterware / Grid Infrastructure home after an OS upgrade?”
 RAC: Frequently Asked Questions [ID 220970.1]


参与此主题的后续讨论,可以访问我们的中文社区,跟帖“分享: 如何 Relink 11.2 Grid Infrastructure(GI) 和 11.2 RAC?"


注意上面的过程适用于集群环境,对于单机版的GI (即Restart),请参考MOS下面的文档来进行relink:
How To Relink The Oracle Grid Infrastructure Standalone (Restart) Installation (Non-RAC). [ID 1536057.1]

星期二 六月 04, 2013

Oracle 11.2 RAC One Node配置与管理


1. 概述

  RAC One Node是11.2的新特性, 是RAC数据库中的一个实例运行在GRID集群中,并且可以实现failover。

  这个功能有些类似于我们以前俗称的"HA数据库" <HA - high availability>, "HA数据库"是利用其他厂商的集群软件来管理Oracle单机数据库,实现数据库的高可用。而RAC One Node是通过ORACLE 集群软件(GRID)来管理数据库,实现数据库可以在集群中节点上切换(failover/relocate),达到数据库高可用的特点。RAC One Node是完全由Oracle提供的一整套高可用的解决方案。

  在11.2之前,为了实现数据库的高可用<俗称"HA数据库">,通常的做法是将单机数据库部署在其他厂商集群环境中(比如 HP MC/SG, IBM HACMP 等)管理,来实现数据库的高可用。即单机数据库运行在主节点上,当主节点需要维护或者异常中断的情况下,通过厂商集群软件将服务IP资源组和数据文件资源组切换(failover)到备节点,将数据库在备用节点重新启动。这个过程我们一般称为cold failover,因为数据库在切换的过程中是先shutdown再open。

  RAC One Node的原理与以前的HA数据库不同,RAC One Node是基于RAC数据库,并且通过Oracle集群软件(GRID)管理实现只启动RAC数据库的一个实例,当运行实例的节点需要维护停机的情况下,可以通过online database relocation的方式将数据库实例切换到集群中的其他节点上运行。



2.  RAC One Node 特点

+ RAC One Node 数据库很容易转变成RAC数据库, 转变过程是online的,不需要停RAC One node数据库.

+ 在GRID环境中可以创建多个RAC One Node数据库,分别运行在不同的节点上,增强了硬件的利用率。

+ RAC One Node配置全部采用oracle产品,管理维护和故障排除也变的更加简单。

+ 如果当前运行节点需要维护(OS 打patch等)或者服务器资源不足等等,可以手动切换数据库(relocate)到备用服务器,采用online database relocation,可以减少业务中断时间(应用需要配置TAF).

+ 对比RAC数据库,RAC One Node 数据库在性能方面也有优势,比如减少了RAC实例之间消息/数据请求传输的时间以及GC等待时间。



3.  到目前为止RAC One Node 发展经历了2 个阶段,阶段一是11.2.0.1,阶段二是11.2.0.2及以后.在11.2.0.1版本上,运行脚本raconeinit.sh来配置RAC One,运行omotion 脚本来手动切换(relocate),但是到11.2.0.2及以后,安装配置集成在DBCA,切换动作也集成在srvctl命令中。



4. 参考文档:

http://docs.oracle.com/cd/E11882_01/rac.112/e16795/onenode.htm

-- 4 Administering Oracle RAC One Node

Oracle RACOne Node -- Changes in 11.2.0.2 (Doc ID 1232802.1)




RAC One Node 安装配置具体测试过程请下载附件:Oracle_11gR2_RAC_One_node_configure_and_admin(v0.2).pdf


参与此主题的后续讨论,可以访问我们的中文社区,跟帖"共享:Oracle RAC One Node VS "HA数据库"。 



About

本博客由Oracle全球技术支持中国区的工程师维护。为中文用户提供数据库相关的技术支持信息,包括常用的诊断工具、诊断方法、产品新特性、案例分析等。此外,MOS也陆续推出各类中文内容:技术通讯统一发布在Note 1529795.1 中,中文文档列表更新在Note 1533057.1 中,网上讲座请查看MOS文档 1456176.1,在"Archived"中可以下载历史的录音和文档。

Search

Archives
« 六月 2013 »
星期日星期一星期二星期三星期四星期五星期六
      
1
2
3
5
6
7
8
9
10
11
12
15
16
17
18
19
20
21
22
23
24
25
26
28
29
30
      
今天