星期三 四月 02, 2014

Oracle数据库坏块(corruption)-物理坏块




概述

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

数据库坏块(corruption) 的类型可以按照坏块所属对象的不同,分为用户数据坏块,数据字典坏块,Undo坏块,控制文件坏块,Redo坏块,Lob坏块,index坏块等等;也可以按照坏块产生的原因,分为物理坏块(physical corruption)和逻辑坏块(logical corruption )。

本文主要讨论用户数据发生物理坏块(physical corruption)分析和解决方法。


物理坏块

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

常见的物理坏块(Physical Block Corruptions)有块头和块尾信息不一致(Fractured/Incomplete),checksum值无效,数据块信息全部为0等情况,并且可能伴随错误ORA-1578和ORA-1110



为了及时发现物理坏块和准确定位坏块产生的原因,oracle建议设置初始化参数DB_BLOCK_CHECKSUM=TYPICAL(默认值)。一般情况下,物理坏块是由于底层OS/disk系统错误/损坏,导致数据块被修改,数据块标志为坏块(corruption)。



Case分享

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

数据块的Checksum值无效是一种常见的物理坏块,当数据库初始化参数DB_BLOCK_CHECKSUM=TYPICAL(默认值)时,DBWR进程将数据块写入disk时会计算数据块的Checksum,并且将Checksum值记录在数据块的位置offset 16和17;当从disk读取该数据块时,oracle重新计算数据块的Checksum,并且与记录在数据块中的Checksum做异或运算(Xor),如果异或结果为非0,说明数据块被修改过,数据块为坏块(corruption)。



1. 当前数据库初始化参数配置DB_BLOCK_CHECKSUM=TYPICAL,因此从disk读取数据块时校验checksum:

SQL> show parameter DB_BLOCK_CHECKSUM



NAME                                 TYPE        VALUE

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

db_block_checksum                    string      TYPICAL



2. 查询表dept时发现有坏块,报错信息ORA-1578和ORA-1110,坏块为file # 4, block # 133



SQL> select * from dept;

 select * from dept

*

ERROR at line 1:

ORA-01578: ORACLE data block corrupted (file # 4, block # 133)

ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'



3. 出现以上错误的同时在alert log中也有详细错误信息,这些错误信息说明数据块(file # 4, block # 133)损坏的原因是checksum无效。数据块中记录的checksum值为0x8167(这个值是上一次DBWR写入磁盘时计算的),读取数据块时重新计算得到的checksum是0x8122,checksum值异或运算(Xor)的结果是0x45 (computed block checksum)。由于两次checksum值不同(即异或结果为非0),说明数据块被修改过,数据块为坏块(corruption)。



Alert log错误信息:

Hex dump of (file 4, block 133) in trace file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_20892.trc

Corrupt block relative dba: 0x01000085 (file 4, block 133)

Bad check value found during multiblock buffer read  <<<<<<<<<<<<<< 说明坏块的原因是checksum无效

Data in bad block:

 type: 6 format: 2 rdba: 0x01000085

 last change scn: 0x0000.0023d69a seq: 0x5 flg: 0x06

 spare1: 0x0 spare2: 0x0 spare3: 0x0

 consistency value in tail: 0xd69a0605

 check value in block header: 0x8167   <<<<<<<<<<<<<< 数据块中记录的checksum值为0x8167

 computed block checksum: 0x45         <<<<<<<<<<<<<< 0x8167与0x8122异或运算(Xor)的结果是0x45

Reading datafile '/u01/app/oracle/oradata/orcl/users01.dbf' for corruption at rdba: 0x01000085 (file 4, block 133)

Reread (file 4, block 133) found same corrupt data (no logical check)

Sun Mar 23 22:53:40 2014

Corrupt Block Found

         TSN = 4, TSNAME = USERS

         RFN = 4, BLK = 133, RDBA = 16777349

         OBJN = 14343, OBJD = 14343, OBJECT = DEPT, SUBOBJECT = 

         SEGMENT OWNER = JAMES, SEGMENT TYPE = Table Segment         <<<<<<<<<<<<<< 坏块对应的object ID

Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_20892.trc  (incident=182595):

ORA-01578: ORACLE data block corrupted (file # 4, block # 133)

ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'



4.1 对应的orcl_ora_20892.trc中也有数据块的信息,其中数据块上记录的checksum值是0x8167(chkval)

Block dump from disk:

buffer tsn: 4 rdba: 0x01000085 (4/133)

scn: 0x0000.0023d69a seq: 0x05 flg: 0x06 tail: 0xd69a0605

frmt: 0x02 chkval: 0x8167 type: 0x06=trans data

Hex dump of block: st=0, typ_found=1


4.2 通过dd也查看数据块中记录的checksum值, offset 16,17 对应的是checksum值0x8167

$ dd if=/u01/app/oracle/oradata/orcl/users01.dbf bs=8192 count=1 skip=133 of=/tmp/dd133.out



$ od -x /tmp/dd133.out

0000000 a206 0000 0085 0100 d69a 0023 0000 0605

0000020 8167 0000 0001 0000 3807 0000 2fef 000c

^^^^



5. 修复数据坏块的方法可以通过备份恢复或者DBMS_REPAIR.SKIP_CORRUPT_BLOCKS跳过坏块。

5.1 方法#1 RMAN数据块恢复:

RMAN> run {blockrecover datafile 4 block 133;}



SQL> select * from dept;



    DEPTNO DNAME          LOC

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

        10 ACCOUNTING     DALIAN

        20 RESEARCH       DALLAS

        30 SALES          CHICAGO

        40 OPERATIONS     BOSTON



5.2 方法#2 DBMS_REPAIR.SKIP_CORRUPT_BLOCKS跳过坏块,然后将dept表中的其他数据导出重建表

SQL> alter session set db_file_multiblock_read_count=1;

SQL> execute DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('JAMES','DEPT'); 


SQL> create table dept_new as select * from dept;

参与此主题的后续讨论,请回复blog,或者访问我们的中文社区,跟帖"分享:Oracle数据库坏块(corruption)-物理坏块"���





星期三 三月 26, 2014

也来谈谈tnsping


[Read More]

星期二 三月 25, 2014

如何安装11.2单机Grid Infrastructure(Oracle Restart)?

本文通过图示给出了安装单机的11.2 Grid Infrastructure (也称Oracle Restart)的步骤。


在11.2及之上,如果要使用ASM,必须安装集群件Grid Infrastructure; 在11.2之前,ASM 不属于集群件,可以单独安装ASM。

请下载:How_To_Install_Standalone_GI(OracleRestart).pdf

星期一 二月 10, 2014

RAC中误将数据文件创建在本地盘时的修正


用户创建表空间时误将数据文件放到了本地盘,重启数据库时一个实例启动不了,只能offline该表空间后启动数据库。现用户想知道怎样能把这个表空间数据文件中的数据恢复出来。

测试目的:验证RAC中误将数据文件创建在本地盘时的修复办法
环境说明:
两节点RAC,数据库名为db10g 版本10.2.0.5
使用了ASM作为共享存储解决方案。



1
,场景准备

1
)节点2:创建表空间test1,数据文件不放到ASM,而是放到本地盘:

SQL> create tablespace test1 datafile '/home/oracle/test1.dbf' size 10m;


Tablespace created.


SQL> select name,status from v$datafile;


NAME

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

STATUS

-------

+DG/db10g/datafile/system.256.821723567

SYSTEM


+DG/db10g/datafile/undotbs1.258.821723569

ONLINE


+DG/db10g/datafile/sysaux.257.821723569

ONLINE



NAME

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

STATUS

-------

+DG/db10g/datafile/users.259.821723569

ONLINE


+DG/db10g/datafile/undotbs2.264.821723755

ONLINE


/home/oracle/test1.dbf

ONLINE



6 rows selected.


2
)节点2:在表空间test1中创建表没问题


SQL> create table test1 (id int) tablespace test1;


Table created.

SQL> create table test2 tablespace test1 as select * from dba_tables;


Table created.


3
)节点1:能查到表空间test1,但创建表报错

SQL> select name ,status from v$datafile;


NAME

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

STATUS

-------

+DG/db10g/datafile/system.256.821723567

SYSTEM


+DG/db10g/datafile/undotbs1.258.821723569

ONLINE


+DG/db10g/datafile/sysaux.257.821723569

ONLINE



NAME

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

STATUS

-------

+DG/db10g/datafile/users.259.821723569

ONLINE


+DG/db10g/datafile/undotbs2.264.821723755

ONLINE


/home/oracle/test1.dbf

ONLINE



6 rows selected.


SQL> create table test1 (id int) tablespace test1;

create table test1 (id int) tablespace test1

*

ERROR at line 1:

ORA-01157: cannot identify/lock data file 6 - see DBWR trace file

ORA-01110: data file 6: '/home/oracle/test1.dbf'


4
)重启数据库,会发现节点1实例起不来,因为节点1无法读取节点2本地盘上的/home/oracle/test1.dbf

[oracle@rac10g2 ~]$ srvctl stop database -d db10g

[oracle@rac10g2 ~]$ srvctl start database -d db10g

PRKP-1001 : Error starting instance db10g1 on node rac10g1

CRS-0215: Could not start resource 'ora.db10g.db10g1.inst'.

[oracle@rac10g2 ~]$ crs_stat -t

Name          
Type          
Target    State    
Host        

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

ora.db10g.db   application    ONLINE   
ONLINE    rac10g1     

ora....g1.inst application    ONLINE   
OFFLINE             
 

ora....g2.inst application    ONLINE   
ONLINE    rac10g2     

ora....SM1.asm application    ONLINE   
ONLINE    rac10g1     

ora....G1.lsnr application    ONLINE   
ONLINE    rac10g1     

ora....0g1.gsd application    ONLINE   
ONLINE    rac10g1     

ora....0g1.ons application    ONLINE   
ONLINE    rac10g1     

ora....0g1.vip application    ONLINE   
ONLINE    rac10g1     

ora....SM2.asm application    ONLINE   
ONLINE    rac10g2     

ora....G2.lsnr application    ONLINE   
ONLINE    rac10g2     

ora....0g2.gsd application    ONLINE   
ONLINE    rac10g2     

ora....0g2.ons application    ONLINE   
ONLINE    rac10g2     

ora....0g2.vip application    ONLINE   
ONLINE    rac10g2   


2
,处理过程


由于该过程中需要从本地盘把数据文件迁移到ASM共享存储,ASM文件的访问无法通过操作系统级别直接进行。


10gR2中,我们可以使用RMAN命令备份和恢复ASM文件,使用ASMCMD命令可以浏览和操纵目录结构。不过,Oracle 10g包中的DBMS_FILE_TRANSFER是处理ASM的另一种方式。 DBMS_FILE_TRANSFER可以在同一台Oracle服务器上或两台Oracle 服务器之间复制文件。它使用目录对象来指定源目录和目的目录,因为目录对象支持ASM路径名称,所以DBMS_FILE_TRANSFER也支持ASM路径名。这使得从常规文件系统的ASM存储区移入和移出文件变得十分简单,使用它可以完成如下的迁移:


ASM->ASMASM->OS
Flie
OS File->ASMOS
File->OS File



建错的表空间test1数据文件在节点2,所以只能从节点2上打开。可在节点2上将表空间offline之后使用dbms_file_transfer将数据文件移到ASM共享存储(如使用的是集群文件系统,直接拷贝数据文件即可)


1)为两个数据文件路径创建目录


节点2:创建两个directory,一个指向本地盘该数据文件目录;一个指向ASM数据文件目录。

SQL> create directory test1 as '/home/oracle';


Directory created.


SQL> create directory test2 as '+DG/db10g/datafile';


Directory created.


2
offline表空间


节点2offline表空间test1

SQL> alter tablespace test1 offline;


Tablespace altered.


3
)拷贝数据文件到ASM


节点2:使用dbms_file_transfer拷贝该数据文件到ASM

SQL> exec
dbms_file_transfer.copy_file('TEST1','test1.dbf','TEST2','test1.dbf');


PL/SQL procedure successfully completed.


4
)修改控制文件中的数据文件路径


节点2

SQL> alter database rename file '/home/oracle/test1.dbf' to
'+DG/db10g/datafile/test1.dbf'

SQL> /


Database altered.


5
online表空间test1


节点2online表空间test1

SQL> alter tablespace test1 online;


Tablespace altered.


6
)启动实例1

[oracle@rac10g2 ~]$ srvctl start instance -d db10g -i db10g1

[oracle@rac10g2 ~]$ crs_stat -t

Name          
Type          
Target    State    
Host        

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

ora.db10g.db   application    ONLINE   
ONLINE    rac10g1     

ora....g1.inst application    ONLINE   
ONLINE    rac10g1     

ora....g2.inst application    ONLINE   
ONLINE    rac10g2     

ora....SM1.asm application    ONLINE   
ONLINE    rac10g1     

ora....G1.lsnr application    ONLINE   
ONLINE    rac10g1     

ora....0g1.gsd application    ONLINE   
ONLINE    rac10g1     

ora....0g1.ons application    ONLINE   
ONLINE    rac10g1     

ora....0g1.vip application    ONLINE   
ONLINE    rac10g1     

ora....SM2.asm application    ONLINE   
ONLINE    rac10g2     

ora....G2.lsnr application    ONLINE   
ONLINE    rac10g2     

ora....0g2.gsd application    ONLINE   
ONLINE    rac10g2     

ora....0g2.ons application    ONLINE   
ONLINE    rac10g2     

ora....0g2.vip application    ONLINE   
ONLINE    rac10g2     


7
)节点1:检查数据文件状态和表空间内数据

SQL> select name ,status from v$datafile;


NAME

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

STATUS

-------

+DG/db10g/datafile/system.256.821723567

SYSTEM


+DG/db10g/datafile/undotbs1.258.821723569

ONLINE


+DG/db10g/datafile/sysaux.257.821723569

ONLINE



NAME

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

STATUS

-------

+DG/db10g/datafile/users.259.821723569

ONLINE


+DG/db10g/datafile/undotbs2.264.821723755

ONLINE


+DG/db10g/datafile/test1.dbf

ONLINE



6 rows selected.


SQL> select count(*) from test2;


  COUNT(*)

----------

      1522 




3、备注


以上迁移数据文件时是采用 dbms_file_transfer.copy_file迁移数据文件的方法,也可以使用RMAN来做:




SQL>select tablespace_name,file_name,status,online_status from
dba_data_files;

需要对表空间进行OFFLINE
登录RMAN

 RMAN> sql "alter tablespace test1 offline";


  RMAN> copy datafile '/home/oracle/test1.dbf' to
'+DG/rac10g/datafile/test1.dbf';




SQL> alter database rename file '/home/oracle/test1.dbf' to
'+DG/rac10g/datafile/test1.dbf';


SQL> alter tablespace test1 online;



参与此主题的后续讨论,请回复blog,或者访问我们的中文社区,跟帖"测试:RAC中误将数据文件创建在本地盘时的修正"

星期四 十二月 05, 2013

12c GI/RAC 安装文档

最近,很多读者希望我们共享一份12c GI/RAC的安装文档,所以花了一些时间做了一些测试,写了这篇文档。希望对大家安装12c 集群有所帮助,同时,了解些12c 的新特性。


这篇文档包含了12c GI/RAC step-by-step的安装文档,同时也包含了使用dbca 创建数据库的过程。另外,也对安装过程中涉及到的12c 新特性和一些其他的12c 新特性做了简单的介绍。


注意: 这篇文章只是为了向大家展示12c GI/RAC的安装过程,而且以测试为目的。如果您希望以此文档作为您的生产系统安装文档,请进行充分的测试并根据需要进行修改。


OS:OEL 6.3 64-bit 12c 已经不再支持32位操作系统了)


版本 12.1


节点数: 3


详细的安装文档,请在这里下载。 

Vote disk 迁移失败 ORA-15274: Not enough failgroups (3) to create voting files

在一些特殊的情况下,比如存储迁移等,需要将vote disk从一个ASM disk group迁移到另外一个ASM disk group。

- 当前vote disk位于VOTE diskgroup

$crsctl query css votedisk

##  STATE    File Universal Id                File Name Disk group

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

1. ONLINE   7971b4acbea54fbabf17d0cc091ed451 (/dev/rhdisk42) [VOTE]

2. ONLINE   56cb40af1ff64f9fbff79bfadd03d432 (/dev/rhdisk82) [VOTE]

3. ONLINE   40228e87536e4f9dbfdb7c6f90fbe917 (/dev/rhdisk2) [VOTE]

Located 3 voting disk(s).



- 迁移vote disk到+data diskgroup,命令失败:

$crsctl replace votedisk +data

Failed to create voting files on disk group data.

Change to configuration failed, but was successfully rolled back.

CRS-4000: Command Replace failed, or completed with errors.



- GI_HOME/log/<hostname>/client/crsctl_log.txt 错误信息

2013-08-14 10:32:01.767: [  CRSCTL][1]crsctl_replace_votedisk: calling kgfdvfPushDiskString

2013-08-14 10:32:03.153: [  CRSCTL][1]function crsctl_replace_votedisk, error 1 [clsuSlosFormatDiag called with non-error slos.]

2013-08-14 10:32:03.153: [  CRSCTL][1]crsctl_replace_votedisk: pushed the ASM DS to the profile 1

[   CLWAL][1]clsw_Initialize: OLR initlevel [30000]

2013-08-14 10:32:03.386: [  CRSCTL][1]crsctl_format_diskgroup: creating diskgroup data

2013-08-14 10:32:05.855: [  CRSCTL][1]function crsctl_format_diskgroup, error 1 SLOS: cat=-1, opn=(none), dep=(none), loc=ORA-01405: f

2013-08-14 10:32:05.856: [  CRSCTL][1]crsctl_format_diskgroup: diskgroup data creation with status 1. Please check the alert log file for ASM



- asm alert log 错误信息:

NOTE: Creating voting files in diskgroup DATA

NOTE: Voting File refresh pending for group 1/0xad5e996c (DATA)

NOTE: Attempting voting file creation in diskgroup DATA

NOTE: voting file allocation on grp 1 disk DATA_0000

NOTE: voting file allocation on grp 1 disk DATA_0001

ERROR: Voting file allocation failed for group DATA

Errors in file /app/base/diag/asm/+asm/+ASM1/trace/+ASM1_ora_43581494.trc:

ORA-15274: Not enough failgroups (3) to create voting files



- 问题原因:存放vote disk的diskgroup必须满足下面的要求:

1. 如果diskgroup是normal redundant,那么要求有3个failure group才能存放vote disk。

2. 如果diskgroup是high redundant,那么要求有5个failure group才能存放vote disk。



+DATA diskgroup是normal redundant diskgroup,但是只有2个failure group,不满足上面的要求,因此失败,

查看diskgroup的failure group信息:

select GROUP_NUMBER,name,type from v$asm_diskgroup;

GROUP_NUMBER NAME                           TYPE

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

           2 DATA                           NORMAL  

<<<<<<<<<<< +DATA是normal redundant diskgroup   


select group_number,disk_number,name,path,failgroup from v$asm_disk where GROUP_NUMBER=2;    

GROUP_NUMBER DISK_NUMBER NAME                           PATH       FAILGROUP

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

           2           0 ASMDISK1                   ORCL:ASMDISK1 CONTROLLER1

           2           1 ASMDISK2                   ORCL:ASMDISK2 CONTROLLER2

<<<<<<<<<<<+DATA只有2个failure group,CONTROLLER1和CONTROLLER2



- 解决方法:创建一个normal redundant diskgroup,并且有3个failure group,然后再迁移.



方法#1 指定3个disk,并且设置3个failure group

CREATE DISKGROUP temp1 NORMAL REDUNDANCY

FAILGROUP controller1 DISK '/dev/ASMDISK1' NAME ASMDISK1

FAILGROUP controller2 DISK '/dev/ASMDISK2' NAME ASMDISK2

FAILGROUP controller3 DISK '/dev/ASMDISK3' NAME ASMDISK3;



方法#2 指定3个disks,默认每个disk为自己的failure group

CREATE DISKGROUP temp1 NORMAL REDUNDANCY

DISK '/dev/ASMDISK1' NAME ASMDISK1

DISK '/dev/ASMDISK2' NAME ASMDISK2

DISK '/dev/ASMDISK3' NAME ASMDISK3;

-迁移vote disk

$crsctl replace votedisk +temp1



参考在线文档:http://docs.oracle.com/cd/E11882_01/install.112/e41961/storage.htm#CWLIN290

Disk groups containing voting files must have at least 3 failure groups for normal redundancy or at least 5 failure groups for high redundancy. 



参与此主题的后续讨论,可以访问我们的中文社区,跟帖“共享:Vote disk 迁移失败 ORA-15274: Not enough failgroups (3) to create voting files"。 

星期一 十一月 25, 2013

在11.2RAC上如何恢复全部丢失的OCR和VotingDisk(存储在集群文件系统)

   在11.2 集群中常见的OCR和Voting disk都是安装在ASM的diskgroup上,但也有一些情况是把OCR和Voting disk安装在集群文件系统上的。由于存储故障或者误删除等可能导致了OCR和Voting disk全部丢失

   在My Oracle Support上有一篇文档是恢复针对存储在ASM磁盘组上的OCR和Voting disk:
   How to restore ASM based OCR after complete loss of the CRS diskgroup on Linux/Unix systems (Doc ID 1062983.1)

   对于存储在集群文件系统(CFS)上的OCR和Voting disk,请按照下面的步骤进行恢复:

下面的操作都用root执行。

1. 找到最新的OCR备份所在的节点(OCR的备份会自动执行,大概每4小时一次):
在所有节点查看:
$ls -lrt $GRID_HOME/cdata/集群名/

2. 在所有节点都停止CRS:
#crsctl stop crs -f
由于OCR和Voting disk丢失后,集群基本上会异常终止,但是有一些进程可能没有停止,因此用-f来强制停止集群。

3. 在拥有最新的OCR备份的节点,用独占模式启动GI:
11.2.0.1:
# crsctl start crs -excl

11.2.0.2及以上:
# crsctl start crs -excl -nocrs

-excl 表示用独占模式启动CRS,不需要OCR和Voting disk。
-nocrs 表示不启动crsd.bin

4. 恢复OCR备份:
# cd $GRID_HOME/cdata/集群名/
# $GRID_HOME/bin/ocrconfig -restore OCR备份集的名字

如果在执行上面的命令恢复OCR的时候,报错 PROT-21: Invalid parameter (10.2/11.) 或者 PROT-30 The Oracle Cluster Registry location to be added is not accessible (for 11.2):

那么需要先在集群文件系统上手工创建OCR文件:

比如:
用root 用户:
# touch /cluster_fs/ocrdisk.dat <======请把这些文件的名字建成与原来同名的
# touch /cluster_fs/ocrmirror.dat
# chown root:oinstall /cluster_fs/ocrdisk.dat  /cluster_fs/ocrmirror.dat
# chmod 640 /cluster_fs/ocrdisk.dat  /cluster_fs/ocrmirror.dat

对于Voting disk不需要预先touch文件。

5. 确认OCR已经恢复成功:
# $GRID_HOME/bin/ocrcheck

对于11.2.0.1,需要执行下面的命令来启动crsd,这步在建voting file时需要(对于11.2.0.2及之上,不需执行):
# $CRS_HOME/bin/crsctl start res ora.crsd -init
CRS-2672: Attempting to start 'ora.crsd' on 'racnode1'
CRS-2676: Start of 'ora.crsd' on 'racnode1' succeeded

6. 用下面的命令列出Votingdisk的信息:
#crsctl query css votedisk

7. 用下面的命令删除原有的Voting disk:
#crsctl delete css votedisk voting_disk_GUID <==这个GUID是上面query命令列出来的


8. 用下面的命令添加新的Voting disk(和原来的文件同名):
#crsctl add css votedisk  path_to_voting_disk <==包括具体的路径和文件名

9.如果有多块voting disk盘,那么重复上面的7和8步。

10.在当前的这台节点执行下面的命令停止GI:
# crsctl stop crs -f

11.在所有节点都启动GI:
#crsctl start crs

12.检查CRS运行正常:
# crsctl check cluster -all
**************************************************************
racnode1:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
racnode2:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************

# /crsctl stat res -t



参考官方文档:
http://docs.oracle.com/cd/E11882_01/rac.112/e41959/votocr.htm#CWADD90961
Oracle® Clusterware Administration and Deployment Guide
11g Release 2 (11.2)
E41959-03
Restoring Oracle Cluster Registry
Restoring Voting Disks

星期三 九月 04, 2013

如何升级Oracle Grid Infrastructure和RAC从11.2.0.3到11.2.0.4?

把GI 和 RAC从 11.2.0.3升级到11.2.0.4的主要步骤:

1. 升级GI


1) 下载11.2.0.4 GI软件:
11.2.0.4的下载链接:
https://updates.oracle.com/download/13390677.html
p13390677_112040_platform_3of7.zip是 Oracle Grid Infrastructure (includes Oracle ASM, Oracle Clusterware, and Oracle Restart)。
2) 安装11.2.0.4 GI到一个新的ORACLE_HOME(不要停止旧的GI,所有节点GI都启动)。
3) 安装的时候选择“Upgrade Oracle Grid Infrastructure or Oracle Automatic Storage Management”。
4) 安装结束时,根据提示用root用户在各个节点依次执行rootupgrade.sh 。
5) 修改grid用户的环境变量ORACLE_HOME 和 PATH 等到新的路径
6) 参考 11.2 GI 升级的官方文档:
Oracle® Grid Infrastructure Installation Guide
11g Release 2 (11.2) for Linux
E41961-02
F How to Upgrade to Oracle Grid Infrastructure 11g Release 2
http://docs.oracle.com/cd/E11882_01/install.112/e41961/procstop.htm#BABEHGJG

2. 升级RAC数据库软件
1) 下载 11.2.0.4数据库软件:
https://updates.oracle.com/download/13390677.html
p13390677_112040_platform_1of7.zip
p13390677_112040_platform_2of7.zip
上面的两个补丁包是Oracle Database (includes Oracle Database and Oracle RAC)。
2) 在安装前一定要取消oracle用户的ORACLE_BASE, ORACLE_HOME, ORACLE_SID等的设置。
3) 安装 11.2.0.4 RAC 到一个新的ORACLE_HOME,选择只安装软件不建库(Install database software only)
4) 在安装11.2.0.4的过程中设置正确的ORACLE_BASE and ORACLE_HOME.
5) 安装的要求请参考11.2官方文档:
Oracle® Real Application Clusters Installation Guide
11g Release 2 (11.2) for Linux and UNIX
E41962-03
http://docs.oracle.com/cd/E11882_01/install.112/e41962/chklist.htm

3. 升级已有的数据库
1) 升级前一定要备份数据库。
2) 运行utlu112i.sql 来进行升级前的检查(数据库是启动的):
su - oracle
export ORACLE_HOME=旧的ORACLE_HOME
export ORACLE_SID=实例名
$ORACLE_HOME/bin/sqlplus / as sysdba
SQL> @/u01/app/oracle/product/11.2.0/dbhome_1/rdbms/admin/utlu112i.sql <==这是新的ORACLE_HOME下面的脚本,修正这个脚本所发现的所有问题。
3) 运行11.2.0.4的DBUA来升级数据库:
<新的ORACLE_HOME>/bin/dbua
DBUA 将会执行的工作:
-DBUA会从/etc/oratab获得数据库的信息
- 停止数据库和DBConsole
- 在新的ORACLE_HOME创建密码文件
- 拷贝spfile到新的ORACLE_HOME 并且去除obsolete的参数
- 在DBUA中可以选择备份数据库
- 在DBUA中可以把数据文件从file system/raw devices 迁移到ASM (需要保证diskgroup是mount的)
4) 修改oracle用户的环境变量ORACLE_HOME 和 PATH 等到新的路径
5) 请参考 数据库升级到11.2的官方文档:
Oracle® Database Upgrade Guide
11g Release 2 (11.2)
E23633-09
http://docs.oracle.com/cd/E11882_01/server.112/e23633/upgrade.htm

请下载具体的步骤和截图文档:


How_To_Upgrade_11.2.0.3_To_11.2.0.4.zip.001,


How_To_Upgrade_11.2.0.3_To_11.2.0.4.zip.002


右键点击“保存”下载,下载两个文件后解压。


关于这个问题的讨论,请参与中文数据库社区帖子: 把GI 和 RAC从 11.2.0.3升级到11.2.0.4的步骤(带截屏)

星期三 八月 14, 2013

如何在11.2集群中添加/删除资源?

     在11.2,数据库、监听、VIP、ASM、磁盘组等都属于GI所管理的资源,有的时候需要添加、删除、修改资源属性等,都是使用crsctl命令来操作的。
     注意在集群中添加和删除资源只是将它从OCR中注册或者移除,并不是真正的将这个资源删掉。比如diskgroup这个资源,用crsctl add/delete并不会把这个磁盘组删除。


     下面列出了GI所管理的资源:
-bash-3.00$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
               ONLINE  ONLINE       rac1                                     
               ONLINE  ONLINE       rac2                                     
ora.LISTENER.lsnr
               ONLINE  ONLINE       rac1                                     
               ONLINE  OFFLINE      rac2                                     
ora.OCR_VOTE.dg
               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
               ONLINE  OFFLINE      rac1                                     
               ONLINE  OFFLINE      rac2                                     
ora.net1.network
               ONLINE  ONLINE       rac1                                     
               ONLINE  OFFLINE      rac2                                     
ora.ons
               ONLINE  ONLINE       rac1                                     
               ONLINE  OFFLINE      rac2                                     
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       rac1                                     
ora.cvu
      1        ONLINE  ONLINE       rac1                                     
ora.rac1.vip
      1        ONLINE  ONLINE       rac1                                     
ora.rac2.vip
      1        ONLINE  INTERMEDIATE rac1                 FAILED OVER         
ora.oc4j
      1        ONLINE  ONLINE       rac1                                     
ora.rac11g2.db
      1        ONLINE  ONLINE       rac1                 Open                
      2        ONLINE  ONLINE       rac2                 Open                
ora.scan1.vip
      1        ONLINE  ONLINE       rac1                          

官方文档中有添加、删除、修改资源的详细命令和解释:
http://docs.oracle.com/cd/E11882_01/rac.112/e16794/crsref.htm#CHDFEFBJ
Oracle Clusterware Administration and Deployment Guide
11g Release 2 (11.2)
E16794-17

添加资源:
crsctl add resource resource_name -type resource_type [-file file_path |
-attr "attribute_name=attribute_value,attribute_name=attribute_value,..."]
[-i] [-f]

resource_name A short, descriptive name for the resource. (
resource_name: 资源名)
-type resource_type The type of resource that you are adding preceded by the -type flag.(-type 资源类型)
-file file_path Path name (either absolute or relative) for a text file containing line-separated attribute name-value pairs that define the resource.
-attr "attribute_name= attribute_value (-attr: 资源属性以及对应的值,不同类型的资源对应的属性不同)
-i If you specify -i, then the command returns an error if processing this command requires waiting for Oracle Clusterware to unlock the resource or its dependents. Sometimes, Oracle Clusterware locks resources or other objects to prevent commands from interfering with each other.
-f Use the force option:(-f : 强制添加,忽略依赖性)
    To add a resource that has dependencies on other resources that do not yet exist. The force option overrides checks that would prevent a command from being completed.
    To add a resource if the resource has hard dependencies on other resources and the owner of the resources does not execute permissions on one or more of the dependencies. If you do not specify the force option in this case, an error displays.
    To add resources of application type because you may need to move servers into the Generic server pool. If the servers currently host resources that must be stopped, then the force option is required

删除资源:
crsctl delete resource resource_name [-i] [-f]

resource_name Specify the name of the resource you want to remove.
-i If you specify -i, then the command returns an error if processing this command requires waiting for Oracle Clusterware to unlock the resource or its dependents. Sometimes, Oracle Clusterware locks resources or other objects to prevent commands from interfering with each other.
-f Use the force option to remove either running resources, or remove this resource even though other resources have a hard dependency on it.(-f 强制删除,即使这个资源在运行或者有其他资源依赖于它)

修改资源:
crsctl modify resource resource_name -attr "attribute_name=attribute_value"
[-i] [-f] [-delete]

resource_name The name of the resource you want to modify.
-attr "attribute_name=attribute_value"
-i If you specify -i, then the command returns an error if processing this command requires waiting for Oracle Clusterware to unlock the resource or its dependents. Sometimes, Oracle Clusterware locks resources or other objects to prevent commands from interfering with each other.
-f Use the -f option when:
    The resource has a hard dependency on a non-existing resource
    The owner of the resource does not have execute permissions on one or more hard dependencies
    The modification results in servers being moved into the Generic pool and resources being stopped or relocated to accomplish the server move
-delete If you specify the -delete option, then Oracle Clusterware deletes the named attribute.

下面是在11.2.0.3上删除和添加diskgroup ora.RECO.dg的例子:

主要用到的命令:
su - grid

1. 停止依赖于磁盘组ora.RECO.dg的所有数据库:
$ srvctl stop database -d <db_name>

2. 查看ora.RECO.dg的配置信息:
-bash-3.00$ crsctl stat  res ora.RECO.dg -p   
NAME=ora.RECO.dg                                                          
TYPE=ora.diskgroup.type                                                    
ACL=owner:grid:rwx,pgrp:oinstall:rwx,other::r-- <===这个信息在添加资源的使用需要                           
...
VERSION=11.2.0.3.0    

3. 停止ora.RECO.dg:
-bash-3.00$ crsctl stop  res ora.RECO.dg -f                            

4. 从集群中移除ora.RECO.dg:
-bash-3.00$ crsctl delete  res ora.RECO.dg -f  

5. 将ora.RECO.dg添加到集群中:
-bash-3.00$ crsctl add  res ora.RECO.dg -type ora.diskgroup.type -attr "ACL='owner:grid:rwx,pgrp:oinstall:rwx,other::r-
-',AUTO_START=always,VERSION=11.2.0.3.0" -i


6. 检查资源的配置信息是正确的:
-bash-3.00$ crsctl stat  res ora.RECO.dg -p

7. 将这个资源启动:
-bash-3.00$ crsctl start  res ora.RECO.dg        
-bash-3.00$ crsctl stat  res -t

8. 启动所有依赖于这个磁盘组的数据库:
$ srvctl start database -d <db_name>

具体的测试过程及输出:

su - grid

1. 停止依赖于磁盘组ora.RECO.dg的所有数据库:
$ srvctl stop database -d RAC11G2

2. 查看ora.RECO.dg的配置信息:

-bash-3.00$ crsctl stat  res ora.RECO.dg -p                                
NAME=ora.RECO.dg                                                          
TYPE=ora.diskgroup.type                                                    
ACL=owner:grid:rwx,pgrp:oinstall:rwx,other::r--                            
ACTION_FAILURE_TEMPLATE=                                                  
ACTION_SCRIPT=                                                            
AGENT_FILENAME=%CRS_HOME%/bin/oraagent%CRS_EXE_SUFFIX%                    
ALIAS_NAME=                                                                
AUTO_START=always                                                          
CHECK_INTERVAL=300                                                        
CHECK_TIMEOUT=30                                                          
DEFAULT_TEMPLATE=                                                          
DEGREE=1                                                                  
DESCRIPTION=CRS resource type definition for ASM disk group resource      
ENABLED=1                                                                  
LOAD=1                                                                    
LOGGING_LEVEL=1                                                            
NLS_LANG=                                                                  
NOT_RESTARTING_TEMPLATE=                                                  
OFFLINE_CHECK_INTERVAL=0                                                  
PROFILE_CHANGE_TEMPLATE=                                                  
RESTART_ATTEMPTS=5                                                        
SCRIPT_TIMEOUT=60                                                          
START_DEPENDENCIES=hard(ora.asm) pullup(ora.asm)                          
START_TIMEOUT=900                                                          
STATE_CHANGE_TEMPLATE=                                                    
STOP_DEPENDENCIES=hard(intermediate:ora.asm)                              
STOP_TIMEOUT=180                                                          
TYPE_VERSION=1.2                                                          
UPTIME_THRESHOLD=1d                                                        
USR_ORA_ENV=                                                              
USR_ORA_OPI=false                                                          
USR_ORA_STOP_MODE=                                                        
VERSION=11.2.0.3.0                                                        

3. 停止ora.RECO.dg:
-bash-3.00$ crsctl stop  res ora.RECO.dg -f                            
CRS-2673: Attempting to stop 'ora.RECO.dg' on 'rac2'              
CRS-2673: Attempting to stop 'ora.RECO.dg' on 'rac1'              
CRS-2677: Stop of 'ora.RECO.dg' on 'rac2' succeeded                
CRS-2677: Stop of 'ora.RECO.dg' on 'rac1' succeeded                

4. 从集群中移除ora.RECO.dg:
-bash-3.00$ crsctl delete  res ora.RECO.dg   <==如果有不加-f, 当有资源依赖于这个磁盘组时会报错                          
CRS-2730: Resource 'ora.rac11g2.db' depends on resource 'ora.RECO.dg'   
CRS-4000: Command Delete failed, or completed with errors.            

-bash-3.00$ crsctl delete  res ora.RECO.dg -f      <=====需要使用-f来强制删除

5. 将ora.RECO.dg添加到集群中:
-bash-3.00$ crsctl add  res ora.RECO.dg -type ora.diskgroup.type -attr "ACL='owner:grid:rwx,pgrp:oinstall:rwx,other::r-

-',AUTO_START=always,VERSION=11.2.0.3.0" -i

6. 检查资源的配置信息是正确的:

-bash-3.00$ crsctl stat  res ora.RECO.dg -p
NAME=ora.RECO.dg
TYPE=ora.diskgroup.type
ACL=owner:grid:rwx,pgrp:oinstall:rwx,other::r--
ACTION_FAILURE_TEMPLATE=
ACTION_SCRIPT=
AGENT_FILENAME=%CRS_HOME%/bin/oraagent%CRS_EXE_SUFFIX%
ALIAS_NAME=
AUTO_START=always
CHECK_INTERVAL=300
CHECK_TIMEOUT=30
DEFAULT_TEMPLATE=
DEGREE=1
DESCRIPTION=CRS resource type definition for ASM disk group resource
ENABLED=1
LOAD=1
LOGGING_LEVEL=1
NLS_LANG=
NOT_RESTARTING_TEMPLATE=
OFFLINE_CHECK_INTERVAL=0
PROFILE_CHANGE_TEMPLATE=
RESTART_ATTEMPTS=5
SCRIPT_TIMEOUT=60
START_DEPENDENCIES=hard(ora.asm) pullup(ora.asm)
START_TIMEOUT=900
STATE_CHANGE_TEMPLATE=
STOP_DEPENDENCIES=hard(intermediate:ora.asm)
STOP_TIMEOUT=180
TYPE_VERSION=1.2
UPTIME_THRESHOLD=1d
USR_ORA_ENV=
USR_ORA_OPI=false
USR_ORA_STOP_MODE=
VERSION=11.2.0.3.0

7. 将这个资源启动:
-bash-3.00$ crsctl start  res ora.RECO.dg        
CRS-2672: Attempting to start 'ora.RECO.dg' on 'rac1'
CRS-2672: Attempting to start 'ora.RECO.dg' on 'rac2'
CRS-2676: Start of 'ora.RECO.dg' on 'rac1' succeeded
CRS-2676: Start of 'ora.RECO.dg' on 'rac2' succeeded

-bash-3.00$ crsctl stat  res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       Local Resources
--------------------------------------------------------------------------------
ora.RECO.dg
              ONLINE  ONLINE       rac1                                    
              ONLINE  ONLINE       rac2                                    

8.启动所有依赖于这个磁盘组的数据库:
$ srvctl start database -d RAC11G2 


 参与此主题的后续讨论,可以访问我们的中文社区,跟帖“如何在11.2集群中添加/删除资源?"。

星期四 六月 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

如何 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]

星期五 五月 17, 2013

Oracle 11gr2 软件安装和数据库创建步骤详解


本文是一篇step-by-step 文档,演示了如何安装oracle 数据库软件以及使用DBCA创建数据库。 同时,我们对每一步的功能,注意事项和容易犯的错误都进行了描述。希望对大家了解数据库安装过程有所帮助。


请在此链接下载全文: Oracle 11gr2 软件安装和数据库创建步骤详解


参与此主题的后续讨论,可以访问我们的中文社区,跟帖 共享 : Oracle 11gr2 软件安装和数据库创建步骤详解



星期四 五月 09, 2013

Oracle 11gR2 在裸设备上创建数据库

Oracle 11.2开始Oracle Universal Installer (OUI) 和 Database Configuration Assistant (DBCA)不再支持将数据文件和GRID集群文件( OCR and Voting Disks)放在raw/block设备上。 但是命令行方式仍然支持裸设备。

对于一些特殊需求,希望将数据文件放在裸设备上的数据库,可以采用下面的方法:

1. 如果11.2之前的数据库使用的是裸设备,那么升级到11.2后,可以继续使用裸设备。

2. 用命令行的方法创建数据库。

3. 数据库创建完成后,在SQLPLUS中创建表空间在裸设备上。

本文的测试案例采用命令行的方式创建数据库在裸设备。本文的测试环境为Linux(OEL5),另外在操作系统层面创建裸设备的步骤在本文中已省略。

注意:oracle计划在之后的版本中将不再支持裸设备,包括OUI,DBCA,命令行。


测试过程请参考附件:Oracle_112_create_database_on_raw_device(v1.0).pdf


参与此主题的后续讨论,可以访问我们的中文社区,跟帖“共享:Oracle 11gR2 在裸设备上创建数据库"


星期二 四月 23, 2013

安装Oracle Grid Infrastructure Patch Set Update(GI PSU)的主要步骤

         安装任何补丁时一定要仔细阅读补丁对应的 readme 文件,因为每个补丁的安装步骤可能有所不同。下面以GI PSU 11.2.0.3.6 (补丁号16083653)为例,介绍一下打GI PSU 的主要步骤和注意事项:

      由于在Grid Infrastructure Patch Set Update(以下简称GI PSU)中包括了DB的PSU,所以只要下载并按照GI PSU 的readme安装补丁,并使用opatch auto 就可以把GI和数据库的PSU都安装上,而且使用opatch auto 的好处是完全的自动化,不需要手工停止/启动GI。安装完成后,在GI和DB的ORACLE_HOME会分别安装了GI和DB的PSU,也就是每个ORACLE_HOME下都有两个PSU,一个是GI的,一个是DB的。推荐这种安装方法,因为有的Bug既需要在GI中修复,又需要在DB中修复。


需要注意的是,如果在数据库(RDBMS)的ORACLE_HOME下没有创建任何数据库,也就是在OCR中找不到这个ORACLE_HOME下的数据库,那么opatch auto 并不会把PSU安装在这个ORACLE_HOME下,只会把PSU安装在GI的ORACLE_HOME下。这种情况下,如果要对数据库的ORACLE_HOME安装PSU,需要另外执行: # opatch auto <UNZIPPED_PATCH_LOCATION> -oh <RAC_HOME>,见MOS文档1361802.1和1479651.1。

    安装PSU的过程是滚动的(Rolling),也就是先在一台节点按照readme中的步骤安装这个PSU,当这台执行完毕,所以资源都启动后,依次在其它节点执行。注意,opatch auto不能在多个节点同时执行。


     下面列出GI PSU 的主要步骤和需要注意的事项:

(下面的章节号与readme相对应)

2.1.1. 推荐下载最新的补丁安装工具opatch :
$ <ORACLE_HOME>/OPatch/opatch version
保证opatch的版本高于readme中要求的版本,否则的话,请下载最新的opatch:
https://updates.oracle.com/download/6880880.html

把 GRID_HOME和DB_HOME上的<ORACLE_HOME>/OPatch/进行备份,然后将下载的补丁6880880解压为<ORACLE_HOME>/OPatch。
$ unzip <OPATCH-ZIP> -d <ORACLE_HOME>
$ <ORACLE_HOME>/OPatch/opatch version

2.1.2 如果没有配置OCM,按照下面的步骤执行:
As grid user: $GRID_HOME/OPatch/ocm/bin/emocmrsp
It will be created in /u01/app/11.2.0/grid/OPatch/ocm/bin/ocm.rsp

2.1.3 执行下面的命令来确保输出的结果正确:
su - grid
$ <GRID_HOME>/OPatch/opatch lsinventory -detail -oh <GRIG_HOME>
su - oracle
$ <DB_HOME>/OPatch/opatch lsinventory -detail -oh <ORACLE_HOME>

2.1.4 下载并解压GI PSU  11.2.0.3.6 :
https://updates.oracle.com/download/16083653.html

用grid 用户来上传到服务器并且解压(不要上传到/tmp)。
$ cd <UNZIPPED_PATCH_LOCATION>
$ unzip p16083653_112030_AIX64-5L.zip

比如:
$ cd /u01/oracle/patches
$ unzip p16083653_112030_AIX64-5L.zip

2.1.5 在安装或者回滚PSU前必须用数据库的属主(一般为oracle)把EM agent停止:
su - oracle
$ <DB_HOME>/bin/emctl stop dbconsole

2.2 检查补丁冲突
用grid用户:
$ cd <UNZIPPED_PATCH_LOCATION>
$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail  -phBaseDir ./

2.4 补丁安装
Case 1:: 适用于GI和DB的ORACLE_HOME都在本地盘, 不在共享盘,而且没有使用ACFS

必须用root身份安装补丁(不需要停止GI)

# opatch auto <UNZIPPED_PATCH_LOCATION> -ocmrf <ocm response file>

比如:
# opatch auto /u01/oracle/patches -ocmrf  /u01/app/11.2.0/grid/OPatch/ocm/bin/ocm.rsp

执行了这个命令后,会自动停止这个节点上的GI和所有资源;
然后在GI和DB的ORACLE_HOME下都安装GI 和DB的PSU;
最后会将这个节点上的GI和资源都启动。

上面的所有步骤在一台节点执行完后,在其他节点依次执行。千万不要同时在两个节点执行opatch auto 命令。

2.5 Patch Post-InstallationInstructions
2.5.2 在任意一台节点用oracle用户连接到数据库上(只需在一台节点执行一次,不需要所有节点都执行):

cd $ORACLE_HOME/rdbms/admin
sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> STARTUP
SQL> @catbundle.sql psu apply
SQL> QUIT

2.5.3 如果您使用了RMAN,需要将您的RMAN catalog库升级一下,执行:
$ rman catalog username/password@alias
RMAN> UPGRADE CATALOG;

上面是主要的步骤,请参考readme来查看具体的信息。

About

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

Search

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