Oracle 11g R2 Grid常用操作


Oracle 升级至11g R2之后,新增了Grid组件安装包,集成了强大的ASM、CRS等管理工具,操作使用与我们以往常用的版本有很大不同,
如Oracle数据文件使用ASM管理不再支持LVM中的裸设备,CRS集群管理软件增加资源管理等,本文对Grid常用操作命令做一下简单介绍。


背景知识:
ASM   :  Automatic Storage Management ,自动存储管理,Oracle自有的文件系统,替代了原先使用的LVM,但它又不是通用的文件系统,
        只用于管理Oracle的数据文件、日志文件、控制文件以及参数文件等;
DG    :  Disk Groups  磁盘组,ASM通过DG管理表空间数据文件,不是直接使用表空间。
CRS   :  Cluster Ready Services, Oracle集群就绪服务 ,Oracle自有的集群软件,在RAC(Real Application Clusters)版本中推出;
OHAS  :  Oracle High Availability Services , Oracle高可用服务
EVM   :  Event Manager 事件管理器
CSS   :  Cluster Synchronization Services 集群同步服务
ASM  CRS等都是Oracle 11g之前就有的产物,在11g R2中被Grid整合了。


Grid使用独立的用户安装,有自己的环境变量配置,与Oracle软件保持独立:
linux:~ # su - oracle 
oracle@linux:~> env | grep ORACLE
ORACLE_SID=ora11g
ORACLE_BASE=/opt/oracle
ORACLE_TERM=xterm
ORACLE_HOME=/opt/oracle/product/11gR2/db
oracle@linux:~> exit
logout
linux:~ # su  - grid
grid@linux:~> env | grep ORACLE
ORACLE_SID=+ASM
ORACLE_BASE=/opt/oracrs/base
ORACLE_TERM=xterm
ORACLE_HOME=/opt/oracrs/product/11gR2/grid
grid@linux:~>




Grid有自己的监听,并且默认监听端口为1521监听别名为LISTENER,所以原先Oracle监听的1521端口和LISTENER别名就不能再继续使用了都要重新配置, 
比如我们为Oracle规划的新端口为1526,监听别名为LISTENER_ORA。
linux:~ # su - oracle 
oracle@linux:~> lsnrctl status LISTENER_ORA


LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 15-JUL-2013 19:27:16


Copyright (c) 1991, 2011, Oracle.  All rights reserved.


Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.9.12)(PORT=1526)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_ORA
Version                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production
Start Date                08-JUL-2013 15:47:26
…………………….
gR2/db/network/admin/listener.ora
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.9.12)(PORT=1526)))
Services Summary...
…………………….
oracle@linux:~> exit


linux:~ # su - grid
grid@linux:~> lsnrctl status LISTENER


LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 15-JUL-2013 20:44:00


Copyright (c) 1991, 2011, Oracle.  All rights reserved.


Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production
…………………….
Listener Parameter File   /opt/oracrs/product/11gR2/grid/network/admin/listener.ora
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
…………………….
grid@linux:~>


下面开始介绍常用操作:


一. DG相关操作:
1. 创建DG
有两种创建方法,一种是用sysasm登录sqlplus用sql命令创建,一种是命令行静默命令创建
1.sqlplus环境创建
 linux:~ # su - grid
grid@linux:~>sqlplus / as sysasm
SQL> create diskgroup DG_TEST external redundancy disk '/dev/sdd';
SQL>
该命令将创建出一个名为DG_TEST的磁盘组,使用的物理磁盘为/dev/sdd,冗余方式为external redundancy   
其中 ’/dev/sdd‘也可以是指向/dev/sdd的链接
ASM提供了三种冗余方式:
(1) external redundancy : 外部冗余方式,镜像管理功能由外部存储系统实现,比如通过RAID技术,Oracle不帮你管理镜像
(2)normal redundancy : Oracle提供2路镜像来保护数据,最少需要两块盘,此为Oracle默认冗余方式。
(3)high redundancy  : 表示Oracle提供3路镜像来保护数据。


注意:登录sqlplus的角色为 sysasm,相当于oracle用户下常用的sysdba


2.命令行创建
linux:~ # su - grid
grid@linux:~> asmca -silent -createDiskGroup -diskGroupName DG_TEST -disk '/dev/diskgroup/dg_test' -redundancy EXTERNAL -au_size 1


这里/dev/diskgroup/dg_test其实就是一个链接文件,指向/dev/sdd


2. 查询DG信息
linux:~ # su - grid
grid@linux:~>sqlplus / as sysasm
SQL>select path from v$asm_disk; 
NAME                     PATH
-------------------------        -------------------------       
DG_ORA_0000            /dev/diskgroup/dg_ora
DG_TEST_0000            /dev/sdd
SQL>select name ,state from v$asm_diskgroup;
NAME                    STATE
--------------------            ----------------
DG_ORA                 MOUNTED
DG_TEST                 MOUNTED
SQL>
其中v$asm_disk的字段更多一些,可以查询到更多的信息。


3. 删除DG
grid@linux:~>sqlplus / as sysasm
SQL>drop diskgroup DG_TEST including contents;
删除DG之前,DG必须是干净的,上面不能有表空间数据文件。
强制删除语句
SQL>drop diskgroup DG_TEST force including contents;


4. 挂载/去挂载DG
磁盘组创建后,是有状态的,可以是MOUNTED,也可以是DISMOUNTED,状态可以手工互相切换
grid@linux:~>sqlplus / as sysasm
SQL>alter diskgroup dg_test dismount;
SQL>alter diskgroup dg_test mount;


dismount 为去挂载,mount为挂载,也可以同时对所有DG进行操作
SQL>alter diskgroup all mount;


5. 在DG上面创建目录
DG创建后,是要在上面创建表空间数据文件的,如果有多个不同组件的表空间共用一个DG,那么可以再在DG上面增加目录,加以区分。
grid@linux:~>sqlplus / as sysasm
SQL> alter diskgroup DG_TEST add directory '+ DG_TEST/test1';
Diskgroup altered.
SQL> alter diskgroup DG_TEST add directory '+ DG_TEST/test2';
Diskgroup altered.
这样就在DG上面创建了test1 test2两个目录,不同的表空间数据文件可以分别存放到test1和test2目录下。


与添加目录相对的操作是删除目录,将add置换为drop即可。
SQL> alter diskgroup DG_TEST drop directory '+ DG_TEST/test2';
Diskgroup altered.


6. 在DG上面创建表空间
创建表空间,要在Oracle用户下使用sysdba角色创建。
linux:~ # su - oracle
oracle@linux:~>sqlplus / as sysdba
SQL>create tablespace test1 logging datafile '+DG_TEST/test1/test1.dbf' size 100M autoextend off;
SQL>create tablespace test2 logging datafile '+ DG_TEST /test2/test2.dbf' size 100M autoextend off;
这样就创建了两个表空间,表空间test1的数据文件创建在DG的test1目录下,test2的数据文件创建在test2的目录下。


注意:ASM管理时,根目录为 '+', DG_TEST为2级目录,test1和test2为3级目录




二. 资源相关操作
Grid中集成了CRS OHAS后,有了资源的概念(资源类型有 ora.ons.type、ora.evm.type、ora.cssd.type、ora.diskmon.type、ora.asm.type、ora.diskgroup.type等),
通过srvctl 和 crsctl可以做一些资源、集群相关的操作。


1. srvctl 相关命令
(1)增加监听器资源 
grid有自己独立的监听,配置完监听文件后,需要添加监听器资源
grid@linux:~> srvctl add listener -l LISTENER -o $ORACLE_HOME


LISTENER 为监听别名
资源添加完成后即可进行启动、停止、状态查看的操作
grid@linux:~> srvctl start listener
grid@linux:~> srvctl status listener
Listener LISTENER is enabled
Listener LISTENER is running on node(s): linux
grid@linux:~> srvctl stop listener
grid@linux:~> srvctl status listener
Listener LISTENER is enabled
Listener LISTENER is not running


也可以通过命令将资源设置成可用、不可用
grid@linux:~> srvctl disable listener
grid@linux:~> srvctl status listener
Listener LISTENER is disabled
Listener LISTENER is running on node(s): linux
grid@linux:~> srvctl stop listener
grid@linux:~> srvctl start listener
PRCR-1079 : Failed to start resource ora.LISTENER.lsnr
CRS-2501: Resource 'ora.LISTENER.lsnr' is disabled
grid@linux:~> srvctl enable listener
grid@linux:~> srvctl start listener
grid@linux:~> srvctl status listener
Listener LISTENER is enabled
Listener LISTENER is running on node(s): linux
资源设置成disable之后,将无法启动,只有重新设置成enable才可以进行启动


(2)增加asm实例资源
# su  - grid
grid@linux:~>srvctl add asm -l LISTENER -p $ORACLE_HOME/dbs/spfile+ASM.ora -d "/dev/diskgroup/*"


spfile+ASM.ora 为grid的spfile文件
asm资源同样可以是 srvctl start|stop|status|disable|enable asm 进行操作


(3) 查询其他资源状态
grid@linux:~> srvctl status home -o $ORACLE_HOME -s status.txt
Disk Group ora.DG_TEST.dg is running on linux
Disk Group ora.DG_ORA.dg is running on linux
ASM is running on linux
Listener LISTENER is running on node linux


grid@linux:~> srvctl status diskgroup -g DG_ORA
Disk Group DG_ORA is running on linux


status.txt 是指定一个临时文件用来保存状态查询结果


(4) 删除监听器资源和asm实例资源
与添加资源相反的操作是删除资源,删除资源对应的指令是srvctl remove 
grid@linux:~> srvctl remove listener
grid@linux:~> srvctl remove asm


删除资源前,必须要先将资源停止,否则会删除失败。如在监听器启动的情况下删除资源:
grid@linux:~> srvctl remove listener
PRCR-1025 : Resource ora.LISTENER.lsnr is still running


2. crsctl相关命令
(1) 操作OHAS  
Grid启动各资源之前,首先要启动OHAS,然后再启动其他资源
grid@linux:~> crsctl start has
CRS-4123: Oracle High Availability Services has been started.
grid@linux:~> crsctl check has
CRS-4638: Oracle High Availability Services is online
grid@linux:~> crsctl stop has [-f]
CRS-2791: Starting shutdown of Oracle High Availability Services-managed resources on 'linux'
CRS-2673: Attempting to stop 'ora.LISTENER.lsnr' on 'linux'
CRS-2673: Attempting to stop 'ora.asm' on 'linux'
CRS-2677: Stop of 'ora.LISTENER.lsnr' on 'linux' succeeded
CRS-2677: Stop of 'ora.asm' on 'linux' succeeded
……………….
CRS-2793: Shutdown of Oracle High Availability Services-managed resources on 'linux' has completed
CRS-4133: Oracle High Availability Services has been stopped.
grid@linux:~> crsctl check has
CRS-4639: Could not contact Oracle High Availability Services
grid@mplus02:~> crsctl disable has
CRS-4621: Oracle High Availability Services autostart is disabled.
grid@mplus02:~> crsctl enable has
CRS-4622: Oracle High Availability Services autostart is enabled.


检查OHAS状态使用 crsctl check 这是与查看其他资源状态区别的地方
停止OHAS会将其他资源也都停止,使用 –f参数表示强制停止


(2)操作DG资源
我们在grid节点创建DG之后,DG资源信息是自动添加了的,但是如果是oracle双机的话,此时新增的DG信息,在备机节点是不存在的,
我们需要在主机节点将DG信息导出,然后在备机手工添加进去。
使用 crsctl status resource [resource name] –p 导出资源静态配置信息 –f导出全量配置信息,crsctl add resource 添加资源,
crsctl start resource <resource name>启动资源
grid@linux:~> crsctl stat res ora.DG_TEST.dg -p > ora.DG_ TEST.dg


grid@linux:~> crsctl add res ora.DG_ TEST.dg -type ora.diskgroup.type -file ora.DG_ TEST.dg
grid@linux:~> crsctl start resource ora.DG_ TEST.dg
将DG信息导出到文件中,上传到备机,再在备机导入
有些资源只能在一个节点启动,如diskgroup类型的资源,那么启动前要确保在其他节点是停止的。


(3)查询资源状态 crsctl status resource,可以简写为 crsctl stat res,此种输出是按行输出,使用 –t 参数可以格式化为表格输出
grid@linux:~> crsctl status resource 
NAME=ora.DG_ORA.dg
TYPE=ora.diskgroup.type
TARGET=ONLINE
STATE=ONLINE on linux


NAME=ora.asm
TYPE=ora.asm.type
TARGET=ONLINE
STATE=ONLINE on linux


NAME=ora.cssd
TYPE=ora.cssd.type
TARGET=ONLINE
STATE=ONLINE on linux


NAME=ora.diskmon
TYPE=ora.diskmon.type
TARGET=OFFLINE
STATE=OFFLINE


NAME=ora.evmd
TYPE=ora.evm.type
TARGET=ONLINE
STATE=ONLINE on linux


NAME=ora.ons
TYPE=ora.ons.type
TARGET=OFFLINE
STATE=OFFLINE
grid@linux:~> crsctl stat res -t
--------------------------------------------------------------------------------
NAME         TARGET    STATE    SERVER    STATE_DETAILS --------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DG_ORA.dg
            ONLINE   ONLINE       linux
ora.asm
            ONLINE   ONLINE       linux        Started
ora.ons
            OFFLINE  OFFLINE      linux
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
 1          ONLINE    ONLINE       linux
ora.diskmon
1          OFFLINE   OFFLINE                                                   
ora.evmd
     1          ONLINE    ONLINE       linux


grid@ linux:~> crsctl stat res ora.asm
NAME=ora.asm
TYPE=ora.asm.type
TARGET=ONLINE
STATE=ONLINE on linux
grid@ linux:~> 
grid@ linux:~> crsctl stat res ora.DG_ORA.dg
NAME=ora.DG_ORA.dg
TYPE=ora.diskgroup.type
TARGET=ONLINE
STATE=ONLINE on linux
grid@ linux:~>




三. ASMCMD操作
asmcmd是Oracle的一个管理维护ASM磁盘组的命令行工具,提供一些类似于linux shell的命令,具操作起来比较方便,
进入asmcmd命令行中输入help,可以获取oracle提供的命令列表。asmcmd中的命令与linux shell命令存在一些区别,
输入help <命令> 可以显示每个命令的详细使用方法。这里简单罗列几条示例:
1. pwd /ls/cd/mkdir/rm
linux:~ # su - grid 
grid@linux:~> asmcmd
ASMCMD> pwd
+
ASMCMD> ls
DG_ORA /
DG_TEST /
ASMCMD> ls -l
State        Type     Rebal   Name
MOUNTED  EXTERN  N      DG_ORA/
MOUNTED  EXTERN  N      DG_TEST/
ASMCMD> cd DG_ORA
ASMCMD> pwd
+DG_ORA
ASMCMD> ls 
ASM/
ORA11G/
ASMCMD> cd ASM
ASMCMD> pwd
+DG_ORA/ASM
ASMCMD> cd ../ora11g
ASMCMD> pwd
+DG_ORA/ora11g
ASMCMD> cd + DG_TEST
ASMCMD> pwd
+ DG_TEST
ASMCMD> mkdir test
ASMCMD> cd test
ASMCMD> mkdir test2
ASMCMD> cd ..
ASMCMD> rm test
ORA-15032: not all alterations performed
ORA-15178: directory 'test' is not empty; cannot drop this directory (DBD ERROR: OCIStmtExecute)
ASMCMD> cd test
ASMCMD> rm test2
ASMCMD> cd ..
ASMCMD> rm test
进入asmcmd命令行,pwd显示当前所在目录,asmcmd的根目录是+,这是与linux shell中根目录为/区别的地方。
列出目录的内容也是使用ls,通过观察ls的输出内容,我们看到创建的DG在asm中是以目录显示出来的,从DG所在的目录开始,目录间隔符也是使用/进行分隔的


使用cd进行目录切换时,可以使用相对路径切换,也可以使用绝对路径切换,并且目录名大小写不敏感。


mkdir创建asm目录,上文中在sqlplus环境中alter diskgroup add directory的操作可以用asmcmd中使用mkdir代替。


rm用来删除文件或目录,当删除一个目录时,必须先删除目录中的内容,否则会报错。


2. lsdsk 列出此ASM实例可见的所有磁盘 
ASMCMD> lsdsk 
Path
/dev/diskgroup/dg_ora
/dev/sdd


3. lsdg 列出磁盘组及其属性
ASMCMD> lsdg DG_TEST
State    Type    Rebal  Sector  Block   AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Voting_files  Name


MOUNTED  EXTERN  N         512   4096  1048576     20480     1117                0            1117              0             N  DG_TEST/


你可能感兴趣的:(Oracle 11g R2 Grid常用操作)