OB 常用 SQL(欢迎提问,定期更新)

666 收藏了

没有收藏功能,那就只能收到回复标记收藏了


推荐使用ODC-代码片段功能,一键管理你的常用语句


3 个赞

学到了!感谢分享

必须收藏!!

感谢分享,收藏了!

咨询一下,第一个SQL关于__all_virtual_server_stat表的各字段的含义描述,是从什么渠道了解到的呢,找了官方文档没找到在哪

您好,这块好像漏掉了部分代码,能补充下吗?

花了整1天的时间研究完这10条命令,越读感觉需要学习的越多,非常感谢笔者的分享。特别需要说,OB的学习生态真的做的不错,希望国产数据库越来越好。

2 个赞

ma

收藏了

太棒了

使用select systimestamp from dual;出错,显示未知列在field list中。请问知道这个是什么原因吗?

内部表和虚拟表,不会有文档的

大部分是有对应的GV、CDB、DBA开头的视图表的,可以使用这些视图表来查询信息。
对应视图的文档参考:https://www.oceanbase.com/docs/common-oceanbase-database-cn-10000000001700832

obclient> SELECT SYSTIMESTAMP FROM DUAL;
+-------------------------------------+
| SYSTIMESTAMP                        |
+-------------------------------------+
| 18-NOV-21 10.32.27.176575 AM +08:00 |
+-------------------------------------+
1 row in set

只能在 ORACLE 租户下运行。开源版本的 OB 不支持 ORACLE 租户。

查询租户分区表对应的leader副本和flower副本分布。
4.2x版本

WITH table_locs AS (
SELECT
	t.tenant_id,
	t.database_name,
	t.table_id,
	t.table_name,
	t.table_type tablet_type,
	t.tablet_id,
	REPLACE(concat(t.table_name,':',t.partition_name,':',t.subpartition_name),':NULL','') tablet_name,
	t.tablegroup_name,
	t.ls_id,
	t.ZONE, 
	t.ROLE,
	t.svr_ip
FROM
	oceanbase.CDB_OB_TABLE_LOCATIONS t
WHERE
	t.data_table_id IS NULL 
UNION
SELECT
	i.tenant_id,
	i.database_name,
	i.table_id,
	t.table_name,
	i.table_type tablet_type,
	i.tablet_id,
	REPLACE(
		REPLACE(concat(i.table_name,':',i.partition_name,':',i.subpartition_name) ,concat('__idx_', i.data_table_id, '_'),'')
		,':NULL',''
	) tablet_name,
	i.tablegroup_name,
	i.ls_id,
	i.ZONE, 
	i.ROLE,
	i.svr_ip
FROM
	oceanbase.CDB_OB_TABLE_LOCATIONS i
INNER JOIN oceanbase.__all_virtual_table t ON
	( i.tenant_id = t.tenant_id
		AND i.data_table_id = t.table_id  )
WHERE i.data_table_id IS NOT NULL 
)
SELECT
	t.database_name,
	t.ls_id,
	t.ROLE,
	t.svr_ip,
	t.table_name,
	t.tablet_name,
	-- group_concat(s.table_type,',') tablet_types,
	round(sum(s.size)/1024/1024/1024,2) size_gb
FROM
	table_locs t JOIN oceanbase.GV$OB_SSTABLES s 
		ON (t.tenant_id=s.tenant_id AND t.ls_id=s.ls_id AND t.svr_ip=s.svr_ip AND t.tablet_id=s.tablet_id)
WHERE
	t.tenant_id = 1004
	AND t.database_name IN ('tpccdb')
	AND t.table_name IN ('bmsql_stock2')
	AND s.table_type NOT IN ('MEMTABLE')
	-- AND t.ROLE IN ('LEADER')
GROUP BY
	t.database_name,
	t.ls_id,
	t.ROLE,
	t.svr_ip,
	t.table_name,
	t.tablet_name 
WITH ROLLUP
ORDER BY 
	t.database_name,
	t.ls_id,
	t.ROLE,
	t.svr_ip,
	t.table_name,
	t.tablet_name
;
1 个赞

这个贴比较实用,顶上去,希望大家多多分享经验,加油 :clap: :clap: :clap: