3. GBase 8s 常用SQL及脚本

常用SQL及脚本

3.1. 查询表的空间使用

数据库版本:ALL
功能描述:
查询表(普通表和分片表)的行数、空间占用大小(MB)、使用大小(MB)
SQL语句:

-- SQLMODE=gbase
SELECT t.tabname, 'standard' AS tabtype, p.nrows AS nrows, (p.nptotal * t.pagesize)/1024/1024 total_mb, (p.npused * t.pagesize)/1024/1024 used_mb
FROM systables t, sysmaster:sysptnhdr p 
WHERE t.tabid > (SELECT tabid FROM systables WHERE tabname = ' VERSION') 
  AND t.tabtype = 'T'
-- 这里是普通表,需要修改表名
  AND t.tabname = 't1'
  AND t.partnum = p.partnum
UNION ALL
SELECT t.tabname, 'fragment' AS tabtype, sum(p.nrows) AS nrows, sum(p.nptotal * d.pagesize)/1024/1024 total_mb, sum(p.npused * d.pagesize)/1024/1024 used_mb
FROM systables t, sysfragments f, sysmaster:sysptnhdr p, sysmaster:sysdbspaces d
WHERE t.tabid > (SELECT tabid FROM systables WHERE tabname = ' VERSION') 
  AND t.tabtype = 'T'
-- 这里是分片表,需要修改表名
  AND t.tabname = 't1'
  AND t.tabid = f.tabid
  AND f.fragtype = 'T'
  AND f.partn = p.partnum
  AND f.dbspace = d.name
GROUP BY 1;

3.2. 获取实例初始化时间

数据库版本:ALL
功能描述:
获取实例初始化时间,通过rootdbs的创建时间来确定
SQL语句:

-- SQLMODE=gbase
-- 获取实例初始化时间(rootdbs创建时间)
SELECT dbinfo('utc_to_datetime',d.created) AS created 
FROM sysmaster:sysdbstab d 
WHERE dbsnum = 1;

3.3. 获取dbspace的创建时间

数据库版本:ALL
功能描述:
获取dbspace的创建时间,与获取实例初始化时间语句相同
SQL语句:

-- SQLMODE=gbase
-- 获取dbspace的创建时间
SELECT d.name, dbinfo('utc_to_datetime',d.created) AS created
FROM sysmaster:sysdbstab d
-- 指定dbspace名称
WHERE d.name = 'plogdbs';

3.4. 获取数据库的创建时间

数据库版本:ALL
功能描述:
获取数据库的创建时间
SQL语句:

-- SQLMODE=gbase
-- 获取数据库创建时间
SELECT dbinfo('utc_to_datetime',created) AS created 
FROM sysmaster:sysdbspartn 
-- 指定数据库名称
WHERE name = 'testdb';

3.5. 获取表的创建时间

数据库版本:ALL
功能描述:
获取表的创建时间,需要包含标准表和分片表
SQL语句:

-- SQLMODE=gbase
-- 获取表创建时间(本库)
SELECT t.tabname,'Normal' AS tabtype,dbinfo('utc_to_datetime',p.created) AS created
FROM systables t,sysmaster:sysptnhdr p
WHERE t.partnum = p.partnum 
AND t.tabtype = 'T'
-- 这里是普通表,需要修改表名
AND t.tabname = 'tab11'
UNION 
SELECT t.tabname,'Fragment' AS tabtype,dbinfo('utc_to_datetime',p.created) AS created
FROM systables t,sysfragments f,sysmaster:sysptnhdr p
WHERE t.tabid = f.tabid
AND f.partn = p.partnum
AND f.fragtype = 'T'
-- 这里是分片表,需要修改表名
AND t.tabname = 'tab11';

3.6. 获取索引的创建时间

数据库版本:ALL
功能描述:
获取索引的创建时间,如果是分片索引,将返回多行
SQL语句:

-- SQLMODE=gbase
-- 获取索引的创建时间(本库)
SELECT f.indexname,'INDEX' AS tabtype, dbinfo('utc_to_datetime',p.created) AS created
FROM sysfragments f, sysmaster:sysptnhdr p
WHERE f.partn = p.partnum
AND f.fragtype = 'I'
-- 指定索引名称
AND f.indexname = 'ix_tab_1_col1';

-- 按表获取索引创建时间(本库)
SELECT f.indexname,'INDEX' AS tabtype, dbinfo('utc_to_datetime',p.created) AS created
FROM sysfragments f,systables tab,sysmaster:sysptnhdr p
WHERE f.tabid = tab.tabid
AND f.partn = p.partnum 
AND f.fragtype = 'I'
-- 指定表名
AND tab.tabname = 'tab1';

3.7. 获取序列的创建时间

数据库版本:ALL
功能描述:
获取序列的创建时间
SQL语句:

-- SQLMODE=gbase
-- 获取序列创建时间(本库)
SELECT t.tabname,'SEQUENCE' AS tabtype,dbinfo('utc_to_datetime',p.created) AS created
FROM systables t,sysmaster:sysptnhdr p
WHERE t.partnum = p.partnum 
AND t.tabtype = 'Q'
-- 指定序列名称
AND t.tabname = 'seq1';

3.8. 获取视图的创建日期(仅日期)

数据库版本:ALL
功能描述:
获取视图的创建日期(仅日期)
SQL语句:

-- SQLMODE=gbase
-- 获取视图创建日期(本库)
SELECT t.tabname,'VIEW' AS tabtype, t.created AS created
FROM systables t
WHERE t.tabtype = 'V'
-- 指定视图名称
AND t.tabname = 'view_systables';

3.9. 位于rootdbs上的非系统库

数据库版本:ALL
功能描述:
获取位于rootdbs上的非系统库的名称及表名
SQL语句:

-- SQLMODE=gbase
-- 数据库位于rootdbs上
select t.dbsname database, 
       d.name dbspace,
       t.tabname 
from sysdbstab d,syschunks c,sysextents t 
where t.chunk = c.chknum 
and c.dbsnum = d.dbsnum 
and t.dbsname NOT IN ('sysmaster','sysuser','sysutils','sysadmin','sysha','sys','gbasedbt','syscdr','syscdcv1','onpload')
and t.tabname != 'TBLSpace'
and d.name = 'rootdbs';

3.10. 数据库表区段数量检查

数据库版本:ALL
功能描述:
数据库表区段数量检查
SQL语句:

-- SQLMODE=gbase
-- 数据库表区段数量检查
select {+ ordered, index(a, syspaghdridx) } -- necessary
    c.tabname, -- the table or index
    c.dbsname, -- the database
    b.name,    -- the dbspace
    -- 每区段需要10个字节描述
    trunc(a.pg_frcnt / 10) frext    -- the free extents
from sysmaster:sysdbspaces b,
sysmaster:syspaghdr a,
sysmaster:systabnames c
where a.pg_partnum = sysmaster:partaddr(b.dbsnum, 1)
and sysmaster:bitval(a.pg_flags, 2) = 1
and a.pg_nslots = 5
and c.partnum = sysmaster:partaddr(b.dbsnum, a.pg_pagenum)
-- and c.dbsname[1,3] != 'sys'
-- 小于40个区段
and a.pg_frcnt < 400
order by 4 asc; 

3.11. 数据库表索引层数

数据库版本:ALL
功能描述:
数据库表索引层数
SQL语句:

-- SQLMODE=gbase
-- 数据库表索引层数
SELECT FIRST 20 dbinfo('dbname') dbname, t.tabname, i.idxname, i.levels 
FROM systables t, sysindexes i
WHERE t.tabid = i.tabid
AND t.tabid > (SELECT tabid FROM systables WHERE tabname = ' VERSION')
-- 大于4层
AND i.levels > 4
ORDER BY 4 DESC;

3.12. 数据库表索引唯一性

数据库版本:ALL
功能描述:
数据库表索引唯一性(需要统计更新)
SQL语句:

-- SQLMODE=gbase
-- 数据库表索引唯一性
SELECT FIRST 20 dbinfo('dbname')  dbname,
                t.tabname  tabname,
                i.idxname  idxname,
                t.nrows    nrows,
                i.nunique  nunique,
                ROUND((i.nunique/t.nrows)*100,2) pcniq
FROM systables t, sysindexes i
WHERE t.tabid = i.tabid
AND t.tabid > (SELECT tabid FROM systables WHERE tabname = ' VERSION')
AND t.nrows > 0
ORDER BY 4 DESC, 6 DESC;

3.13. 用户使用逻辑日志

数据库版本:ALL
功能描述:
用户会话使用逻辑日志情况
SQL语句:

-- SQLMODE=gbase
-- 用户使用逻辑日志
select
  t.username,
  t.sid,
  tx_logbeg,
  tx_loguniq,
  hex(tx_logpos) tx_logpos
from sysmaster:systrans x, sysmaster:sysrstcb t
where tx_owner = t.address;

3.14. 获取表的锁类型

数据库版本:ALL
功能描述:
获取表的锁类型
SQL语句:

-- SQLMODE=gbase
-- 表锁类型
select tabname,nrows,locklevel
from systables
where tabid > (SELECT tabid FROM systables WHERE tabname = ' VERSION')
and tabtype = 'T'
-- R为行锁,P为页锁
--and locklevel = 'R'
and locklevel = 'P';

3.15. 索引首字段重复

数据库版本:ALL
功能描述:
获取索引首字段重复,用于重复索引判定
SQL语句:

-- SQLMODE=gbase
-- 索引首字段重复
select 
  t.tabname,
  t.tabid,
  -- abs(i.part1) AS idx_col1,
  (SELECT c.colname FROM syscolumns c WHERE c.tabid = t.tabid AND c.colno = abs(i.part1)) AS idx_col1,
  count(*) cnt
from systables t, sysindexes i
where t.tabid = i.tabid 
and t.tabid > (SELECT tabid FROM systables WHERE tabname = ' VERSION')
group by 1,2,3
having count(*) > 1
order by 4 desc;

最后更新日期:2025-10-10