RAC-日常管理(2)

应用层管理--CRS_STAT 

crs_stat
– crs_stat 这个命令用于查看CRS维护的所有资源的运行状态,如果不带任何参数时,显示所有资源的概要信息。
[grid@RAC1 ~]$ crs_stat -t

Name           Type           Target    State     Host        

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

ora.DATA.dg    ora....up.type ONLINE    ONLINE    rac1        

ora....ER.lsnr ora....er.type ONLINE    ONLINE    rac1        

ora....N1.lsnr ora....er.type ONLINE    ONLINE    rac1        

ora.READATA.dg ora....up.type ONLINE    ONLINE    rac1        

ora.RECOVER.dg ora....up.type ONLINE    ONLINE    rac1        

ora.asm        ora.asm.type   ONLINE    ONLINE    rac1        

ora.gsd        ora.gsd.type   OFFLINE   OFFLINE               

ora....network ora....rk.type ONLINE    ONLINE    rac1        

ora.oc4j       ora.oc4j.type  OFFLINE   OFFLINE               

ora.ons        ora.ons.type   ONLINE    ONLINE    rac1        

ora.oradb.db   ora....se.type OFFLINE   OFFLINE               

ora....ice.svc ora....ce.type OFFLINE   OFFLINE               

ora....SM1.asm application    ONLINE    ONLINE    rac1        

ora....C1.lsnr application    ONLINE    ONLINE    rac1        

ora.rac1.gsd   application    OFFLINE   OFFLINE               

ora.rac1.ons   application    ONLINE    ONLINE    rac1        

ora.rac1.vip   ora....t1.type ONLINE    ONLINE    rac1        

ora.rac2.vip   ora....t1.type ONLINE    ONLINE    rac1        

ora....ry.acfs ora....fs.type ONLINE    ONLINE    rac1        

ora.scan1.vip  ora....ip.type ONLINE    ONLINE    rac1

这个命令是用来查看各种资源状态的命令,可以将CRS管理的所有资源都列出来。

从上面就可以查看到CRS的一些问题了,正常情况下应该将目光放在state这一列,如果这一列的值和target的值不一样就有问题了,正常情况下这个命令还会显示其他节点的信息,但是这里没有显示,只显示了一个节点的资源状态。RAC2上面的CRS起不来,导致RAC2上面所有的资源也起不来。

crs_stat这个命令可以查看到CRS管理的所有节点,假设是一个三个节点的RAC,那么就会将三个节点的资源列出来。

name这一列显示的是资源的名称。可以看到有ASM资源,VIP资源,LSNR资源等等。Host是主机名的列。Target是指这个资源本应该的状态,而stat是指资源实际的状态。

 

 

ora.rac1.vip   ora....t1.type ONLINE    ONLINE    rac1        

ora.rac2.vip   ora....t1.type ONLINE    ONLINE    rac1        

ora....ry.acfs ora....fs.type ONLINE    ONLINE    rac1

[grid@RAC1 ~]$ cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.56.88    rac1

192.168.56.11    rac1-vip

10.10.10.1       rac1-priv

 

192.168.56.99    rac2

192.168.56.12    rac2-vip

10.10.10.2       rac2-priv

 

192.168.56.103    scan

[grid@RAC1 ~]$ ifconfig

eth0      Link encap:Ethernet  HWaddr 08:00:27:92:93:E3  

          inet addr:192.168.56.88  Bcast:192.168.56.255  Mask:255.255.255.0

          inet6 addr: fe80::a00:27ff:fe92:93e3/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:272 errors:0 dropped:0 overruns:0 frame:0

          TX packets:214 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:30319 (29.6 KiB)  TX bytes:29686 (28.9 KiB)

 

eth0:1    Link encap:Ethernet  HWaddr 08:00:27:92:93:E3  

          inet addr:192.168.56.103  Bcast:192.168.56.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

 

eth0:2    Link encap:Ethernet  HWaddr 08:00:27:92:93:E3  

          inet addr:192.168.56.12  Bcast:192.168.56.255  

通过上面可以有意思的看到ora.rac2.vip   ora....t1.type ONLINE    ONLINE    rac1 RAC2上面的VIP资源在主机RAC1上面启动了,之前已经说过,当其中一个节点坏掉的时候VIP会自动的飘到另外一个节点上面去,通过查看网卡也可以看到在RAC1上面的网卡绑定了RAC2的VIP,这样的话,RAC2一旦宕机了,它的VIP就直接飘到了RAC1上面启动。这样的好处就是当用户去链接RAC2的时候不需要等待网络的超时,链接到RAC1上面的VIP,发现上面没有监听,直接返回给客户端错误。

VIP的目的并不是将用户的链接转到另外一个实例上面继续操作,而是快速的让用户接受到一个错误。

ora.oradb.db   ora....se.type OFFLINE   OFFLINE  

这个表示现在数据库的状态是open的。可以看到这里只有这一个资源,因为RAC其实就是一台数据库。多个实例共享一个数据库,所以db资源只有一个。

 

现在将RAC2上面的CRS启动起来,再到RAC1上面使用crs_stat -t来查看

正常情况下应该是下面状态

[grid@RAC1 ~]$ crs_stat -t

Name           Type           Target    State     Host        

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

ora.DATA.dg    ora....up.type ONLINE    ONLINE    rac1        

ora....ER.lsnr ora....er.type ONLINE    ONLINE    rac1        

ora....N1.lsnr ora....er.type ONLINE    ONLINE    rac1        

ora.READATA.dg ora....up.type ONLINE    ONLINE    rac1        

ora.RECOVER.dg ora....up.type ONLINE    ONLINE    rac1        

ora.asm        ora.asm.type   ONLINE    ONLINE    rac1        

ora.gsd        ora.gsd.type   OFFLINE   OFFLINE               

ora....network ora....rk.type ONLINE    ONLINE    rac1        

ora.oc4j       ora.oc4j.type  OFFLINE   OFFLINE               

ora.ons        ora.ons.type   ONLINE    ONLINE    rac1        

ora.oradb.db   ora....se.type ONLINE    ONLINE    rac1        

ora....ice.svc ora....ce.type ONLINE    ONLINE    rac2        

ora....SM1.asm application    ONLINE    ONLINE    rac1        

ora....C1.lsnr application    ONLINE    ONLINE    rac1        

ora.rac1.gsd   application    OFFLINE   OFFLINE               

ora.rac1.ons   application    ONLINE    ONLINE    rac1        

ora.rac1.vip   ora....t1.type ONLINE    ONLINE    rac1        

ora....SM2.asm application    ONLINE    ONLINE    rac2        

ora....C2.lsnr application    ONLINE    ONLINE    rac2        

ora.rac2.gsd   application    OFFLINE   OFFLINE               

ora.rac2.ons   application    ONLINE    ONLINE    rac2        

ora.rac2.vip   ora....t1.type ONLINE    ONLINE    rac2        

ora....ry.acfs ora....fs.type ONLINE    ONLINE    rac1        

ora.scan1.vip  ora....ip.type ONLINE    ONLINE    rac1  

 

应用层管理--CRSCTL

 crsctl

– 这个工具可以操作下面的几种资源:Database,Instance,ASM,Service,Listener 和 Node
Application,其中Node application又包括GSD,ONS,VIP。 这些资源除了使用srvctl工具统一管理外,某些资源还有自己独立的管理工具,比如ONS可以使用onsctl命令进行管理;

Listener 可以通过lsnrctl 管理


应用层管理--SRVCTL
查看注册到CRS中的数据库,实例等资源信息
srvctl config database
srvctl config database -d rdatabasename
srvctl config database -d racdb -a
srvctl config listener -n rac3
srvctl config asm -n rac3

 

srvctl config database(用来查看所有注册到CRS里面数据库的信息,CRS和数据库并不是1对1的关系,一套CRS可以管理多套数据库)

 

srvctl config database -d rdatabasename(查看数据库相关信息)

[grid@RAC1 ~]$ srvctl config database -d oradb

Database unique name: oradb

Database name: oradb

Oracle home: /u01/app/oracle/product/11.2.0/db_1

Oracle user: oracle

Spfile: +READATA/oradb/spfileoradb.ora

Domain:

Start options: open

Stop options: immediate

Database role: PRIMARY

Management policy: AUTOMATIC

Server pools: oradb

Database instances: oradb1,oradb2

Disk Groups: READATA,RECOVER

Mount point paths:

Services: newservice

Type: RAC

Database is administrator managed

 

[grid@RAC1 ~]$ srvctl config database -d oradb -a

Database unique name: oradb

Database name: oradb

Oracle home: /u01/app/oracle/product/11.2.0/db_1

Oracle user: oracle

Spfile: +READATA/oradb/spfileoradb.ora

Domain:

Start options: open

Stop options: immediate

Database role: PRIMARY

Management policy: AUTOMATIC

Server pools: oradb

Database instances: oradb1,oradb2

Disk Groups: READATA,RECOVER

Mount point paths:

Services: newservice

Type: RAC

Database is enabled

Database is administrator managed

 

[grid@RAC1 ~]$ srvctl config listener -n RAC1(节点名)查看节点上面监听信息

Warning:-n option has been deprecated and will be ignored.

Name: LISTENER

Network: 1, Owner: grid

Home: <CRS home>

End points: TCP:1521

 

[grid@RAC1 ~]$ srvctl config asm -n RAC1查看节点1上面ASM信息

Warning:-n option has been deprecated and will be ignored.

ASM home: /u01/app/11.2.0/grid

ASM listener: LISTENER


应用层管理--SRVCTL
 添加资源到CRS中
srvctl add database -d newdb -o $ORACLE_HOME
srvctl add instance -d newdb -n rac1 -i newdb1
srvctl add instance -d newdb -n rac2 -i newdb2
srvctl add service -d dbname -s service_name -r instance_name_1 -a instance_name_2 -P BASIC -m basic -z 10 -e select

添加资源就是将新添加的资源注册到OCR磁盘里面去。让新建立的资源成为CRS管理资源的一部分,资源还是得自己手动创建的,资源创建好之后还是得添加到CRS中,即注册到OCR里面。上面是添加数据库实例和服务到CRS里面。

 

上面添加服务是用来区分不同的业务,比如RAC是两个节点,现在有两个业务,一个是用户的查询,一种是用户的加载,可以将其中一个节点给一个用户,一个用户对应于其上面的查询业务,另外一个节点上面对应于另外一个用户的加载业务,两个业务分别使用两个不同的服务,一个服务指向其中一个节点,另外一个服务指向另外一个节点。

查询的应用在TNS里面配置指向第一个节点服务的名字,加载的应用在TNS里面配置指向另外一个节点的服务的名字,TNS里面有servicesname这一项,要实现这个就先要在CRS里面将服务添加进去。

 

 

应用层管理--SRVCTL
启用或禁止某些资源随crs启动
srvctl disable(enable) database -d racdb
srvctl disable(enable) instance -d db_name -i instance_name_n
srvctl disable(enable) service -d db_name -s service_name -i instance_name_n

 

[oracle@RAC1 ~]$ srvctl enable database -d oradb

PRCC-1010 : oradb was already enabled

PRCR-1002 : Resource ora.oradb.db is already enabled

这个命令就是让数据库随着CRS一起启动。

[oracle@RAC1 ~]$ srvctl enable instance -d oradb -i oradb1

让实例一起启动

 

应用层管理--SRVCTL
从CRS中删除先关的资源
srvctl remove service -d racdb -s myservice
srvctl remove instance -d racdb -i rac3
srvctl remove database -d racdb

删除相关资源就是相对于将其从OCR里面的注册表里面删除。

 

 

应用层管理--SRVCTL
停止或启动相关的资源
srvctl start database -d racdb
srvctl start database -d racdb -i rac3 -o mount
srvctl start database -d racdb -i rac3 -o nomount
srvctl stop instance -d racdb -i rac3 -o immediate
srvctl stop instance -d racdb -i rac3 -o abort
srvctl start service -d racdb -s myservice -i rac1
srvctl stop service -d racdb -s myservice -i rac1

RAC下面,最常用的启动方式有几种,最常用的就是登入每个节点下面的数据库(使用sqlplus)来关闭和启动。

使用srvctl这条命令来启停数据库比上面方法的好处就是:这条命令执行完之后操作的资源的状态,比如数据库,它的状态立刻会体现到CRS里面。如果使用sqlplus将数据库关闭,状态可能不会立刻反应到CRS里面。使用SRVCTL最大的好处就是可以立刻更新CRS的状态。


应用层管理--SRVCTL
 命令的跟踪
export SRVM_TRACE=TRUE
srvctl config database -d racdb

这个是给环境变量设置一个值,设置为true,之后的操作都可以通过trace出来。这条命令没有太多的意义,如果有故障可以使用一下。

 

应用层管理--ONSCTL
onsctl
[oracle@rac3 ~]$ onsctl
usage: /opt/ora10g/product/10.2.0/db_1/bin/onsctl start|stop|ping|reconfig|debug
start - Start opmn only.
stop - Stop ons daemon
ping - Test to see if ons daemon is running
debug - Display debug information for the ons daemon
reconfig - Reload the ons configuration
help - Print a short syntax description (this).
detailed - Print a verbose syntax description.

 

应用层管理--ONSCTL
[oracle@rac3 ~]$ onsctl ping(查看ons在当前节点是否正常运行)
Number of onsconfiguration retrieved, numcfg = 2
onscfg[0]
{node = rac3, port = 6200}
Adding remote host rac3:6200
onscfg[1]
{node = rac4, port = 6200}
Adding remote host rac4:6200
ons is not running ...
[oracle@rac3 ~]$ onsctl debug
Number of onsconfiguration retrieved, numcfg = 2
onscfg[0]
{node = rac3, port = 6200}
Adding remote host rac3:6200
onscfg[1]
{node = rac4, port = 6200}
Adding remote host rac4:6200
CONNECT: Connection refused

上面onsctl的命令主要是用来关注ons这个进程的状态的。

 

 

RAC的参数文件
 各个实例可以使用自己本地独立的参数文件,也可以使用一个共同的参数文件,当使用同一个参数
文件时,应将参数文件放在所有实例都可以访问的共享存储上。
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string +DISKGROUP1/conf/spfileracdb.ora
[oracle@rac3 dbs]$ pwd
/opt/ora10g/product/10.2.0/db_1/dbs
[oracle@rac3 dbs]$ more initracdb1.ora
SPFILE='+DATE/racdb/spfileracdb.ora'

所有实例共用一个参数文件的好处就是便于管理,不会出现预想不到的错误。

怎么让oracle知道参数文件在共享存储上面呢?这个需要在本地的文件里面写一条路径,因为oracle启动实例的时候默认到本地路径下面去读和实例名相同的ora文件,里面写了spfil的值oracle就会去找值里面对应的参数文件。

[oracle@RAC1 ~]$ cd $ORACLE_HOME/dbs

[oracle@RAC1 dbs]$ ls

hc_oradb1.dat  init.ora  initoradb1.ora  orapworadb1

[oracle@RAC1 dbs]$ cat initoradb1.ora

SPFILE='+READATA/oradb/spfileoradb.ora'

 

如果要把参数文件放在ASM上面,需要在本地默认的参数文件里面制定一个路径,oracle通过这个路径找到共享存储上面的spfile。

 

 

 

RAC的UNDO,REDO,TEMP
每个实例有各自的undo表空间
 每个实例有独立的redo日志文件
 所有实例共享TEMP临时表空间

 

(1)每个实例需要自己的undo,这样避免了每个实例对undo的征用。这样将每个事务放在自己的undo表空间上面。

(2)当其中一个实例坏了,它的redo数据可以被其他节点访问,可以通过坏了的实例上面的undo数据可以将未提交的事务进行回滚。

(3)临时表空间是用来排序的,因为在排序上面不存在对空间的征用,就是所有实例在一个表空间上面操作和分别在各自的临时表空间上面操作是一样的。

我的环境里面有两个节点

SQL> select instance_name from gv$instance order by 1;

 

INSTANCE_NAME

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

oradb1

oradb2

每一个thread就表示一个实例,可以看到每一个实例有自己的2个redo日志组。

SQL> select thread#,group#,sequence# from v$log order by 1,2;

 

   THREAD#     GROUP#  SEQUENCE#

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

 1    1      21

 1    2      20

 2    3      25

 2    4      26

 

可以看到两个实例分别各自有自己的undo表空间

SQL> col name for a20;

SQL> col value for a20;

SQL> select inst_id,name,value from gv$parameter where name='undo_tablespace' order by 1;

 

   INST_ID NAME VALUE

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

 1 undo_tablespaceUNDOTBS1

 2 undo_tablespaceUNDOTBS2

 

所有实例共用一个tmp表空间

SQL> select tablespace_name from dba_temp_files;

 

TABLESPACE_NAME

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

TEMP

 

 

RAC的备份和恢复
 数据文件的备份
归档的备份
SQL> show parameter log_archive_dest_1;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1 string LOCATION=+diskgroup1/db/archivelog

每个实例有自己的redo,即每个实例要产生自己的归档,这样就要在每一个节点上面备份归档,还有一种就是将所有节点参生的归档集中的放在ASM上面,通过配置log_archive_dest_1这个参数让日志放在ASM上面。备份等待时候直接备份这地方就可以了,就不需要去每个实例上面备份上面归档日志了。

丢了一个归档就无法恢复数据了,因为redo是连续的,中间断了一点点就不行。在RAC环境下还是要将归档集中管理,将其放在ASM上面。首先是安全,因为ASM一般会做外部冗余,其次归档统一管理。

alter system set log_archive_dest_1='location=+diskgroup1/db/archivelog'; 

将这个参数只需要在其中一个节点设置,因为设置会在spfile里面生效。


猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/80517004