Oracle RAC集群资源的两种配置方式,Admin Managed 和 Policy Manager,以及实验

对于Oracle RAC集群数据库,有两种资源管理方式:Administrator Managed(管理员管理的),Policy Managed(策略管理的)

要理解这两个概念,首先应该了解Server Pools(服务器池),以下内容译自Oracle官方文档

服务器池是集群的逻辑拆分————集群被拆分到服务器池中,这被分配用于承载数据库或应用程序。服务器池由crsctl命令和srvctl命令来管理。

在集群中,服务器池的名字必须唯一,也就是不同服务器池不能有相同的名字。

服务器池管理有两种风格,即“Administrator Managed(管理员管理的)”和“Policy Managed(策略管理的)”

Administrator Managed(管理员管理的)
由数据库管理员来指定数据库资源应该在哪些服务器上运行,并在需要时手工放置资源。这种管理策略是在以前的版本中使用的。

Policy Managed(策略管理的)
数据库管理员指定数据库在哪个服务器池(除generic和free之外)中运行。由Oracle Clusterware负责把数据库资源放到某个服务器。

以下是实验操作,实验环境是一套两节点的11.2.0.4 RAC

查看已有的Server Pools(由grid用户执行)
[grid@yyjdb01 ~]$ crsctl status serverpool -f
NAME=Free
IMPORTANCE=0
MIN_SIZE=0
MAX_SIZE=-1
SERVER_NAMES=
PARENT_POOLS=
EXCLUSIVE_POOLS=
ACL=owner:grid:rwx,pgrp:oinstall:rwx,other::r-x
ACTIVE_SERVERS=

NAME=Generic
IMPORTANCE=0
MIN_SIZE=0
MAX_SIZE=-1
SERVER_NAMES=yyjdb01 yyjdb02
PARENT_POOLS=
EXCLUSIVE_POOLS=
ACL=owner:grid:r-x,pgrp:oinstall:r-x,other::r-x
ACTIVE_SERVERS=yyjdb01 yyjdb02

NAME=ora.yyj11g_test_db
IMPORTANCE=0
MIN_SIZE=0
MAX_SIZE=-1
SERVER_NAMES=yyjdb01 yyjdb02
PARENT_POOLS=Generic
EXCLUSIVE_POOLS=
ACL=owner:oracle:rwx,pgrp:oinstall:rwx,other::r--
ACTIVE_SERVERS=yyjdb01 yyjdb02

NAME=ora.yyj11gsrvpool
IMPORTANCE=0
MIN_SIZE=0
MAX_SIZE=2
SERVER_NAMES=
PARENT_POOLS=
EXCLUSIVE_POOLS=
ACL=owner:oracle:rwx,pgrp:oinstall:rwx,other::r--
ACTIVE_SERVERS=

其中的Free、Generic是默认已有的,不能分配给数据库
ora.yyj11g_test_db是当前数据库的,虽然该数据库不是Policy Managed,但只要创建了数据库就会有一个同名的服务器池分配给它
ora.yyj11gsrvpool是通过dbca创建的,这是尝试用dbca静默创建一个Policy Managed数据库失败后的产物


也可以使用srvctl命令查看当前已有的server pools,比如
[grid@yyjdb01 ~]$ srvctl config srvpool
Server pool name: Free
Importance: 0, Min: 0, Max: -1
Candidate server names: 
Server pool name: Generic
Importance: 0, Min: 0, Max: -1
Candidate server names: yyjdb01,yyjdb02
Server pool name: yyj11gsrvpool
Importance: 0, Min: 0, Max: 2
Candidate server names: 

注意上面用srvctl config srvpool查看的内容不包含yyj11g_test_db

尝试删除yyj11gsrvpool池(这个命令执行后没有反馈直接回到命令行就说明已删除)
srvctl remove srvpool -g yyj11gsrvpool

再用srvctl查看就已经没有了
[grid@yyjdb01 ~]$ srvctl config srvpool
Server pool name: Free
Importance: 0, Min: 0, Max: -1
Candidate server names: 
Server pool name: Generic
Importance: 0, Min: 0, Max: -1
Candidate server names: yyjdb01,yyjdb02


尝试添加一个新的server pool,先看一下命令帮助
[grid@yyjdb01 ~]$ srvctl add srvpool -h

Adds a server pool to the Oracle Clusterware.

Usage: srvctl add srvpool -g <pool_name> [-l <min>] [-u <max>] [-i <importance>] [-n "<server_list>"] [-f]
    -g <pool_name>           Server pool name
    -l <min>                 Minimum size of the server pool (Default value is 0)
    -u <max>                 Maximum size of the server pool (Default value is -1 for unlimited maximum size)
    -i <importance>          Importance of the server pool (Default value is 0)
    -n "<server_list>"       Comma separated list of candidate server names
    -f                       Force the operation even though some resource(s) will be stopped
    -h                       Print usage

参数解释
-g  服务器池的名字
-l  服务器池的最小尺寸(默认为0)
-u  服务器池的最大尺寸(默认为-1,也就是无限制,在使用dbca创建policy managed数据库时,这个值就是节点的个数)
-i  服务器池的重要程度(默认为0)
-n  逗号分开的候选服务器名列表
-f  强制,即使某些资源将被停止也执行操作

添加一个名叫yyjsrvpool的服务器池(无反馈直接回到命令行说明添加成功)
srvctl add srvpool -g yyjsrvpool -n "yyjdb01,yyjdb02"

查看一下刚刚创建的yyjsrvpool服务器池
[grid@yyjdb01 ~]$ srvctl config srvpool
Server pool name: Free
Importance: 0, Min: 0, Max: -1
Candidate server names: 
Server pool name: Generic
Importance: 0, Min: 0, Max: -1
Candidate server names: yyjdb01,yyjdb02
Server pool name: yyjsrvpool
Importance: 0, Min: 0, Max: -1
Candidate server names: yyjdb01,yyjdb02


查看一下yyj11g_test_db数据库的配置(注意最后一行指出是Admin Managed)
[grid@yyjdb01 ~]$ srvctl config database -d yyj11g_test_db
Database unique name: yyj11g_test_db
Database name: 
Oracle home: /u01/app/oracle/product/11.2/dbhome_1
Oracle user: oracle
Spfile: +DATA/yyj11g_test_db/spfileyyj11g.ora
Domain: 
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools: yyj11g_test_db
Database instances: yyj11g1,yyj11g2
Disk Groups: DATA,ARCH
Mount point paths: 
Services: 
Type: RAC
Database is administrator managed


把yyj11g_test_db数据库指派给新建的yyjsrvpool服务器池
srvctl modify database -d yyj11g_test_db -g yyjsrvpool

但是报错了,提示没有权限
[grid@yyjdb01 ~]$ srvctl modify database -d yyj11g_test_db -g yyjsrvpool
PRCD-1130 : Failed to convert administrator-managed database yyj11g_test_db into a policy-managed database to use server pool yyjsrvpool
PRCR-1071 : Failed to register or update resource ora.yyj11g_test_db.db
CRS-0245:  User doesn't have enough privilege to perform the operation

改用oracle用户执行(无反馈回到命令行,说明成功)
[root@yyjdb01 ~]# su - oracle
Last login: Tue Nov 15 21:28:39 CST 2022
[oracle@yyjdb01 ~]$ srvctl modify database -d yyj11g_test_db -g yyjsrvpool
[oracle@yyjdb01 ~]$ 

检查一下数据库配置,发现已变成Policy Managed
[oracle@yyjdb01 ~]$ srvctl config database -d yyj11g_test_db
Database unique name: yyj11g_test_db
Database name: 
Oracle home: /u01/app/oracle/product/11.2/dbhome_1
Oracle user: oracle
Spfile: +DATA/yyj11g_test_db/spfileyyj11g.ora
Domain: 
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools: yyjsrvpool
Database instances: 
Disk Groups: DATA,ARCH
Mount point paths: 
Services: 
Type: RAC
Database is policy managed


上面的操作成功的把yyj11g_test_db数据库从Admin Managed改成了Policy Managed,那么是不是可以反过来更改呢?
没有直接的命令能把一个Oracle数据库从Policy Managed改成Admin Managed,但可以通过把数据库从RAC集群中移除再加入,使其重新回到Admin Managed状态


1. 关闭集群数据库
srvctl stop database -d yyj11g_test_db

2. 把数据库从集群中移除
[oracle@yyjdb01 ~]$ srvctl remove database -d yyj11g_test_db
Remove the database yyj11g_test_db? (y/[n]) y

3. 把数据库重新加入集群(注意yyj11g_test_db是数据库db_unique_name的值)
srvctl add database -d yyj11g_test_db -p "+DATA/yyj11g_test_db/spfileyyj11g.ora" -o $ORACLE_HOME

4. 添加数据库实例
srvctl add instance -d yyj11g_test_db -i yyj11g1 -n yyjdb01
srvctl add instance -d yyj11g_test_db -i yyj11g2 -n yyjdb02

5. 开启数据库
srvctl start database -d yyj11g_test_db


再查看数据库配置,就可以看到是Admin Managed模式了(最后一行)
[oracle@yyjdb01 ~]$ srvctl config database -d yyj11g_test_db
Database unique name: yyj11g_test_db
Database name: 
Oracle home: /u01/app/oracle/product/11.2/dbhome_1
Oracle user: oracle
Spfile: +DATA/yyj11g_test_db/spfileyyj11g.ora
Domain: 
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools: yyj11g_test_db
Database instances: yyj11g1,yyj11g2
Disk Groups: DATA,ARCH
Mount point paths: 
Services: 
Type: RAC
Database is administrator managed

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值