SYSTABLES

systables 系统目录表对在数据库(包括系统目录的表和视图)中定义的每个表对象(表、视图、同义词或 GBase 8s 中的序列)包含一行。

表 1. SYSTABLES 表列描述
类型 解释
tabname VARCHAR(128) 表、视图、同义词或序列的名称
owner CHAR(32) 表的所有者(系统目录表的用户 gbasedbt 和数据库表的 username
partnum INTEGER 物理存储位置代码
tabid SERIAL 系统指定的顺序标识编号
rowsize SMALLINT 最大行大小,以字节计 ( < 32,768)
ncols SMALLINT 表中的列数
nindexes SMALLINT 表的索引数
nrows FLOAT 表中的行数
created DATE 创建或上次修改表时的日期
version INTEGER 改变表时更改的数字
tabtype CHAR(1) 指示表对象类型的代码:
  • T = 表
  • E = 外部表
  • V = 视图
  • Q = 序列
  • P = 专用同义词
  • S = 公共同义词
(类型 S 在符合 ANSI 标准的数据库中不可用。)
locklevel CHAR(1) 表的锁定方式:
  • B = 页面和行级别
  • P = 页面级别
  • R = 行级别
npused FLOAT 数据库服务器曾经在 tablespace 中启动过的数据页数
fextsize INTEGER 初始扩展数据块的大小 (KB)
nextsize INTEGER 所有后续扩展数据块的大小 (KB)
flags SMALLINT 用于对永久表分类的代码:
ROWID
1 - 已定义行标识列
UNDER
2 - 在超表之下创建的表
VIEWREMOTE
4 - 视图基于远程表
CDR
8 - 已定义 CDRCOLS
RAW
16 - (GBase 8s) RAW 表
EXTERNAL
32- 外部表
AUDIT
64 - 审计表属性 - FGA
AQT
128 - 视图是用于卸载 DWA 的 AQT
VIRTAQT
256 - 视图是虚拟 AQT
site VARCHAR(128) 保留供将来使用
dbname VARCHAR(128) 保留供将来使用
type_xid INTEGER sysxtdtypes.extended_id 中的代码(对于类型表),或者 0(对于无类型表)
am_id INTEGER 访问方法代码(sysams 表的关键字)

NULL 或 0 表示内置存储管理器

ustlowts DATETIME YEAR TO FRACTION (5) 上次记录表、行和页计数统计信息的时间
secpolicyid INTEGER 已与表连接的安全策略的标识。 NULL 表示不受保护的表
protgranularity CHAR(1) LBAC 粒度级别:
  • R:行级别粒度
  • C:列级别粒度
  • B:行和列的粒度
  • “空白”表示不受保护的表
statlevel CHAR(1) 统计信息级别
  • T = 表
  • F = 分段
  • A = 自动
statchange SMALLINT 仅供内部使用

systables 表中记录的每个表、视图、序列和同义词指定 tabid,它是系统指定的、唯一标识该对象的 SERIAL 值。保留前 99 个 tabid 值用于系统目录。数据库中第一个用户定义的表对象的 tabid 始终为 100。

tabid 列建立了索引,且该列只包含唯一值。tabnameowner 列的组合索引也需要唯一值。

version 列包含创建新表时存储在 systables 中的已编码数字。当对表执行数据定义的语句(例如,ALTER INDEX、ALTER TABLE、DROP INDEX 和 CREATE INDEX)时,此值的一部分会增大。

flags 列中,ST_RAW 表示支持事务日志记录的数据库中的非日志记录永久表。

SQL_LOGICAL_CHAR 参数的设置会编码到描述 VERSION 表的行中的 systables.flags 列值。注意此由系统生成的表的标识中有一个前导空格。

要确定数据库是否启用可将逻辑字符语义应用到字符列声明的 SQL_LOGICAL_CHAR 配置参数,您可以执行以下查询:

SELECT flags INTO $value FROM 'gbasedbt'.systables WHERE tabname = ' VERSION';
由于 SQL_LOGICAL_CHAR 设置以“VERSION.flags”值的两个最不重要数位编码,因此您可以依据以下公式从返回的 flags 值计算其设置:
SQL_LOGICAL_CHAR = (value & 0x03) + 1
此处的 & 是位 AND 运算符。任何大于 1 的 SQL_LOGICAL_CHAR 设置表示创建数据库时已启用 SQL_LOGICAL_CHAR,且字符列的显式或缺省最大大小规范将乘以该设置。

当执行引用数据库表的预编译语句时,会检查版本值以确保自预编译语句以来没有进行任何更改。如果修改了表模式的 DDL 操作更改了版本值并且 SET ENVIRONMENT 语句的 IFX_AUTO_REPREPARE 设置已禁用了自动重新编译,那么不会执行预编译语句,并且必须再次预编译该语句。

npused 列既不反映用于 BYTE 或 TEXT 数据的页数,也不反映 DELETE 或 TRUNCATE 操作中释放的页数。

nrows 列和 npused 列可能无法准确反映由外部表使用的行数和数据页数,除非在创建外部表时指定了 NUMROWS 子句。请参阅《GBase 8s 管理员指南》以获取更多信息。

systables 表有两行用来存储有关数据库语言环境的信息:GL_COLLATE(其 tabid90)和 GL_CTYPEtabid91)。要查看这些行,请输入以下 SELECT 语句:
SELECT * FROM systables WHERE tabid=90 OR tabid=91;