OceanBase之oracle租户的使用体验

oceanbase2.2集群——oracle租户的使用体验

1、创建oracle兼容类型的租户

注意:
(1)、创建资源池,资源池最小规格要求是1c5g,如果不满足最小资源要求,就会报错。详见上一篇mysql租户的体验文章。
MySQL [oceanbase]> create resource pool mysql_pool_test unit = ‘my_unit_1c2g’, unit_num = 1;
ERROR 1235 (0A000): unit min memory less than __min_full_resource_pool_memory not supported
MySQL [oceanbase]>

(2)、另外,还要注意,每个资源池,指定的unit_num数量,不能超过每个zone下的observer服务器个数,否则也会报错。
可以创建不同的资源池,每个不同的资源池对应的unit单元规格可以相同。详见上一篇mysql租户的体验文章。
MySQL [oceanbase]> create resource pool mysql_pool_test unit = ‘my_unit_1c2g’, unit_num =2;
ERROR 4656 (HY000): resource pool unit num is bigger than zone server count
MySQL [oceanbase]>

(3)、在上一篇mysql租户的体验文章里也说了,同一个资源池resource pool 只能属于一个租户。也就是说,一个资源池已经分配给某个租户了,不能再分配给其它租户。不然会报以下错误:
MySQL [oceanbase]> create tenant ora_test_tent resource_pool_list=(‘mysql_pool_test’), primary_zone=‘RANDOM’,comment ‘oracle tenant/instance’, charset=‘utf8’ set ob_tcp_invited_nodes=’%’, ob_compatibility_mode=‘oracle’;
ERROR 4626 (HY000): resource pool ‘mysql_pool_test’ has already been granted to a tenant
MySQL [oceanbase]>

开始创建资源单元和资源池:
$ mysql -h172.16.18.81 -uroot@sys#obdemo -P2883 -padmin123 -c -A oceanbase
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 49
Server version: 5.6.25 OceanBase 2.2.30 (r20200515183156-366007805d18f72e1fbd8568ada91849305c53ac) (Built May 15 2020 19:45:08)

Copyright © 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

MySQL [oceanbase]>
MySQL [oceanbase]> select unit_config_id,name,max_cpu,min_cpu,round(max_memory/1024/1024/1024) max_mem_gb, round(min_memory/1024/1024/1024) min_mem_gb, round(max_disk_size/1024/1024/1024) max_disk_size_gb
-> from __all_unit_config
-> order by unit_config_id;
±---------------±----------------±--------±--------±-----------±-----------±-----------------+
| unit_config_id | name | max_cpu | min_cpu | max_mem_gb | min_mem_gb | max_disk_size_gb |
±---------------±----------------±--------±--------±-----------±-----------±-----------------+
| 1 | sys_unit_config | 5 | 2.5 | 13 | 11 | 40 |
| 1002 | my_unit_1c5g | 1 | 1 | 5 | 5 | 10 |
±---------------±----------------±--------±--------±-----------±-----------±-----------------+
2 rows in set (0.00 sec)

MySQL [oceanbase]>

这里基于已有的资源单元unit,创建一个新的资源池,供oracle租户使用:
MySQL [oceanbase]> create resource pool ora_pool_test unit = ‘my_unit_1c5g’, unit_num = 1;
Query OK, 0 rows affected (0.08 sec)

MySQL [oceanbase]> select t1.name resource_pool_name, t2.name unit_config_name, t2.max_cpu, t2.min_cpu,
-> round(t2.max_memory/1024/1024/1024) max_mem_gb, round(t2.min_memory/1024/1024/1024) min_mem_gb,
-> t3.unit_id, t3.zone, concat(t3.svr_ip,’:’,t3.svr_port) observer,t4.tenant_id, t4.tenant_name
-> from __all_resource_pool t1 join __all_unit_config t2 on (t1.unit_config_id=t2.unit_config_id)
-> join __all_unit t3 on (t1.resource_pool_id = t3.resource_pool_id)
-> left join __all_tenant t4 on (t1.tenant_id=t4.tenant_id)
-> order by t1.resource_pool_id, t2.unit_config_id, t3.unit_id
-> ;
±-------------------±-----------------±--------±--------±-----------±-----------±--------±------±------------------±----------±----------------+
| resource_pool_name | unit_config_name | max_cpu | min_cpu | max_mem_gb | min_mem_gb | unit_id | zone | observer | tenant_id | tenant_name |
±-------------------±-----------------±--------±--------±-----------±-----------±--------±------±------------------±----------±----------------+
| sys_pool | sys_unit_config | 5 | 2.5 | 13 | 11 | 1 | zone1 | 172.16.18.81:2882 | 1 | sys |
| sys_pool | sys_unit_config | 5 | 2.5 | 13 | 11 | 2 | zone2 | 172.16.18.82:2882 | 1 | sys |
| sys_pool | sys_unit_config | 5 | 2.5 | 13 | 11 | 3 | zone3 | 172.16.18.91:2882 | 1 | sys |
| mysql_pool_test | my_unit_1c5g | 1 | 1 | 5 | 5 | 1001 | zone1 | 172.16.18.81:2882 | 1001 | mysql_test_tent |
| mysql_pool_test | my_unit_1c5g | 1 | 1 | 5 | 5 | 1002 | zone2 | 172.16.18.82:2882 | 1001 | mysql_test_tent |
| mysql_pool_test | my_unit_1c5g | 1 | 1 | 5 | 5 | 1003 | zone3 | 172.16.18.91:2882 | 1001 | mysql_test_tent |
| ora_pool_test | my_unit_1c5g | 1 | 1 | 5 | 5 | 1004 | zone1 | 172.16.18.81:2882 | NULL | NULL |
| ora_pool_test | my_unit_1c5g | 1 | 1 | 5 | 5 | 1005 | zone2 | 172.16.18.82:2882 | NULL | NULL |
| ora_pool_test | my_unit_1c5g | 1 | 1 | 5 | 5 | 1006 | zone3 | 172.16.18.91:2882 | NULL | NULL |
±-------------------±-----------------±--------±--------±-----------±-----------±--------±------±------------------±----------±----------------+
9 rows in set (0.00 sec)

MySQL [oceanbase]>

创建oracle类型的租户
创建租户的需指定租户使用的资源池、数据分布策略(primary_zone为RANDOM)、租户字符集(默认utf8,也可以改为gbk)、租户访问白名单(ob_tcp_invited_nodes)、租户兼容级别(ob_compatibility_mode)。

MySQL [oceanbase]> create tenant ora_test_tent resource_pool_list=(‘ora_pool_test’), primary_zone=‘RANDOM’,comment ‘oracle tenant/instance’, charset=‘utf8’ set ob_tcp_invited_nodes=’%’, ob_compatibility_mode=‘oracle’;
Query OK, 0 rows affected (4.06 sec)

MySQL [oceanbase]>

查看OB集群所有租户信息: 租户类别compatibility_mode,0为mysql兼容模式的租户, 1为oracle兼容模式的租户
MySQL [oceanbase]> select tenant_id, tenant_name, compatibility_mode,zone_list, locality ,gmt_modified from __all_tenant;
±----------±----------------±-------------------±------------------±--------------------------------------------±---------------------------+
| tenant_id | tenant_name | compatibility_mode | zone_list | locality | gmt_modified |
±----------±----------------±-------------------±------------------±--------------------------------------------±---------------------------+
| 1 | sys | 0 | zone1;zone2;zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL

<think>好的,我现在需要帮助用户了解如何在OceanBaseOracle租户中查看表索引是否是分区索引。首先,我得回想一下OceanBase的相关文档和Oracle租户的特性。OceanBaseOracle租户兼容Oracle的语法和部分功能,所以可能和原生Oracle的方法类似,但也有一些差异。 用户的问题核心是判断表索引是否为分区索引。在Oracle中,可以通过查询数据字典视图如ALL_INDEXES、ALL_IND_PARTITIONS等来查看索引的分区信息。但在OceanBase中,可能需要使用特定的系统视图。我需要确认OceanBase是否支持类似的数据字典,或者是否有自己的系统表。 首先,应该考虑用户如何获取索引的基本信息。比如,在OceanBase中,可能有一个类似于DBA_INDEXES或USER_INDEXES的系统视图,用来存储索引的信息。查看这些视图中的分区相关字段,比如PARTITIONED,可能可以判断是否是分区索引。例如,PARTITIONED字段的值是否为YES。 接下来,如果索引是分区的,可能需要进一步查询分区相关的系统视图,比如DBA_IND_PARTITIONS,来查看具体的分区情况。但需要确认OceanBase是否支持这些视图,或者是否有其他替代的视图名称。 另外,可能需要用户有相应的权限才能访问这些系统视图。比如,DBA_权限可能需要DBA角色,而普通用户可能需要查询USER_开头的视图。 此外,可能还需要考虑索引的类型,比如全局索引或局部索引,是否影响分区属性的判断。例如,在Oracle中,全局索引可以是分区的,而局部索引则自动继承表的分区结构。不过,在OceanBase中,分区索引的实现可能有所不同,需要进一步确认。 为了验证思路,我可以先假设OceanBaseOracle租户支持类似Oracle的系统视图。例如,查询USER_INDEXES视图的PARTITIONED字段: SELECT index_name, partitioned FROM USER_INDEXES WHERE table_name = '表名'; 如果PARTITIONED字段的值是YES,则说明该索引是分区索引。否则,不是。 如果这个字段不存在,可能需要查找其他系统表或视图。比如,检查是否存在ALL_PART_INDEXES这样的视图,或者是否有其他的系统表记录索引的分区信息。 另外,还可以通过查看建表语句来确认索引的分区情况。使用SHOW CREATE TABLE或者类似的命令,观察索引定义中是否包含PARTITION相关的子句。例如: SHOW CREATE TABLE 表名; 这会输出表的定义,包括索引的创建语句。如果索引定义中有PARTITION BY ...的部分,说明是分区索引。 但这种方法依赖于用户能够访问建表语句,并且需要手动检查,可能不够自动化。 此外,可能需要检查OceanBase的官方文档,确认相关系统视图的存在和用法。例如,在OceanBase中,可能使用__all_virtual_table_index之类的内部表,但这对普通用户可能不可见,因此推荐使用兼容Oracle的系统视图。 总结步骤应该是: 1. 使用USER_INDEXES或DBA_INDEXES视图,检查PARTITIONED字段。 2. 如果存在分区索引,进一步查询分区详细信息,比如USER_IND_PARTITIONS。 3. 使用SHOW CREATE TABLE查看表结构,直接观察索引定义。 4. 确保用户有足够的权限查询这些系统视图。 需要注意的是,OceanBase的不同版本可能有差异,某些功能可能在较新版本中支持。因此,建议用户参考对应版本的官方文档,或者进行实际环境测试。 可能还需要提醒用户,如果查询结果中没有PARTITIONED字段,可能需要使用其他方法,比如检查索引是否在分区键上,或者是否存在分区子句。 另外,如果用户无法访问系统视图,可能需要授予相应的权限,如SELECT_CATALOG_ROLE,或者提示用户联系管理员获取权限。 最后,整理这些步骤,以清晰的方式呈现给用户,确保他们能够逐步操作,验证索引是否为分区索引。</think>在OceanBaseOracle租户中,查看表索引是否为分区索引,可以通过以下步骤实现: --- ### **方法1:通过系统视图 `USER_INDEXES` 或 `DBA_INDEXES`** 1. **查询索引的分区属性** 执行以下SQL,通过 `PARTITIONED` 字段判断索引是否为分区索引(`YES`表示分区索引): ```sql SELECT index_name, partitioned FROM USER_INDEXES WHERE table_name = '表名'; -- 替换为实际表名 ``` - 若结果中 `PARTITIONED` 值为 `YES`,则为分区索引。 - 若使用 `DBA_INDEXES`,需确保用户有DBA权限: ```sql SELECT index_name, partitioned FROM DBA_INDEXES WHERE table_name = '表名'; ``` --- ### **方法2:通过分区索引详情视图 `USER_IND_PARTITIONS`** 若索引已分区,进一步查询分区详情: ```sql SELECT index_name, partition_name FROM USER_IND_PARTITIONS WHERE index_name = '索引名'; -- 替换为实际索引名 ``` - 若能查到记录,则说明该索引是分区索引。 --- ### **方法3:通过 `SHOW CREATE TABLE` 查看表结构** 直接查看表的定义语句,观察索引是否包含分区子句: ```sql SHOW CREATE TABLE 表名; -- 替换为实际表名 ``` - 在输出结果中,若索引定义包含 `PARTITION BY ...`,则为分区索引。 示例: ```sql CREATE TABLE test ( id NUMBER, col1 VARCHAR2(50), PRIMARY KEY(id) ) PARTITION BY HASH(id) PARTITIONS 4; CREATE INDEX idx_col1 ON test(col1) PARTITION BY HASH(col1) PARTITIONS 4; -- 分区索引 ``` --- ### **注意事项** 1. **权限问题** - 使用 `DBA_INDEXES` 或 `DBA_IND_PARTITIONS` 需具备 `DBA` 角色。 - 普通用户建议使用 `USER_INDEXES` 或 `ALL_INDEXES`。 2. **兼容性差异** OceanBaseOracle租户与原生Oracle存在部分差异,建议通过实际环境验证。 3. **全局索引与局部索引** - 如果索引是“局部索引”(`LOCAL`),则其分区方式与表一致,无需显式指定。 - 全局分区索引需显式定义分区键。 --- ### **总结步骤** 1. 通过 `USER_INDEXES` 检查 `PARTITIONED` 字段。 2. 若为分区索引,通过 `USER_IND_PARTITIONS` 查看分区详情。 3. 通过 `SHOW CREATE TABLE` 直接验证索引定义。 如有权限问题或语法错误,请联系DBA协助排查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时倾 | 职业人生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值