系统目录表跟踪的对象
系统目录表维护有关数据库的信息,包括数据库对象的以下类别: 表、视图、同义词和表分段 列、约束、索引和索引分段 表、索引和分段的分发统计信息 表上的触发器和视图上的 INSTEAD OF 触发器 过程、函数、例程和关联的消息 存取数据库对象的授权用户、角色和特权 LBAC 安全策略、组件、标签和豁免权 数据类型和强制转型 用户定义的聚集函数 访问方法和运算符类 序列对象 BLOB 和 CLOB 对象的存储空间 外部优化器伪指令 继承关系 XA 数据源和 XA 数据源类型 可信用户和代理用户信息
2.2 使用系统目录
GBase 8s 在您创建数据库时自动生成系统目录表。可以如同查询数据库中的任何其他
表那样查询系统目录表。新创建的数据库的系统目录表位于称为数据库空间的公共磁盘区
域中。每个数据库都有它自己的系统目录表。系统目录中的所有表和视图都有前缀 sys(例
如:系统目录表 systables)。
并非所有具有前缀 sys 的表都是系统目录表。例如:数据库 syscdr 支持 Enterprise
Replication 功能部件。但是,非目录表具有大于等于 100 的 tabid。系统目录表都具有
小于 100 的 tabid。有关数据库服务器指定给表、视图、同义词和(GBase 8s 中)序列
对象的 tabid 号码的更多信息,请参阅本节后面部分和 SYSTABLES。
提示: 不要混淆数据库的系统目录表与 sysmaster、sysutils、syscdr 或(用于 GBase 8s)sysadmin 和 sysuser 数据库中的表。这些数据库中的表的名称也具有 sys 前缀,但 这些表包含有关整个数据库服务器的信息,数据库服务器可管理多个数据库。sysadmin、
sysmaster、sysutils、syscdr 和 sysuser 表中的信息主要对数据库服务器管理员 (DBSA) 有 帮助。另请参阅《GBase 8s 管理员指南》和《GBase 8s 管理员参考》。
数据库服务器经常访问系统目录。每次处理 SQL 语句时,数据库服务器都会访问系统 目录来确定系统特权、添加或验证表或列名等等。 例如:以下 CREATE SCHEMA 块将 customer 表及其索引和特权添加至 stores_demo 数 据库中。此块还添加了一个视图 california,它将 customer 表的数据限制为仅住在 California 的所有客户的客户姓名、公司名称和电话号码。
CREATE SCHEMA AUTHORIZATION maryl CREATE TABLE customer (customer_num SERIAL(101), fname CHAR(15), lname CHAR(15), company CHAR(20), address1 CHAR(20), address2 CHAR(20), city CHAR(15), state CHAR(2), zipcode CHAR(5), phone CHAR(18)) GRANT ALTER, ALL ON customer TO cathl WITH GRANT OPTION AS maryl GRANT SELECT ON customer TO public GRANT UPDATE (fname, lname, phone) ON customer TO nhowe CREATE VIEW california AS SELECT fname, lname, company, phone FROM customer WHERE state = 'CA' CREATE UNIQUE INDEX c_num_ix ON customer (customer_num) CREATE INDEX state_ix ON customer (state) 要处理此 CREATE SCHEMA 块,数据库服务器首先访问系统目录来验证以下信息: 新表和视图名在数据库中尚未存在。(如果数据库符合 ANSI 标准,那么数据库服务 器将验证指定所有者的新名称是否尚不存在。) 用户具有创建表和授予用户特权的许可权。
CREATE VIEW 和 CREATE INDEX 语句中的列名在 customer 表中存在。
除了验证此信息和创建两个新表之外,数据库服务器还将新行添加至下列系统目录表:
systables syscolumns syscolumnsext sysviews systabauth syscolauth sysindexes sysindices
1 添加到 systables 系统目录表中的行
2 添加到 syscolumns 或 syscolumnsext 系统目录表中的行
3 添加到 sysviews 系统目录表中的行
数据库服务器还将行添加至 sysviews 系统目录表中,该表的 viewtext 列包含定义视 图的 CREATE VIEW 语句的每一行。该列中,在语句中列名前面的 x0(例如:x0.fname) 起别名的作用,用来区分在自连接中使用的相同列。
4 添加到 systabauth 系统目录表中的行
CREATE SCHEMA 块还将行添加至 systabauth 系统目录表。这些行对应于对 customer 和 california 表授予的用户特权。
tabauth 列指定授予用户的对 customer 和 california 表的表级别特权。此列使用 8 字节模式(如 s(选择)、u(更新)、*(列级别特权)、i(插入)、d(删除)、x(索 引)、a(改变)和 r(引用))来标识特权的类型。在此示例中,用户 nhowe 具有对 customer 表的列级别特权。连字符 (-) 表示未向用户授予 tabauth 值中由连字符占据其位置的特 权。 如果 tabauth 特权代码是大写的(例如,表示 Select 的 S),那么用户具有此特权, 并可将该特权授予他人;但是,如果特权代码是小写的(例如:表示 Select 的 s),那 么用户不能将该特权授予他人。
5 添加到 syscolauth 系统目录表中的行
另外,有三行被添加至 syscolauth 系统目录表。这些行对应于对 customer 表中的特 定列授予的用户特权。
colauth 列指定对 customer 表授予的列级别特权。此列使用 3 字节模式(如 s (Select)、u (Update) 和 r (References))来标识特权类型。例如:用户 nhowe 具有对
customer 表(由 tabid 值 101 指示)的第二个列(因为 colno 值是 2)的 Update 特权。
6 添加到 sysindexes 或 sysindices 表中的行
CREATE SCHEMA 块将两行添加至 sysindexes 系统目录表(GBase 8s 的 sysindices 表)。 这些行对应于对 customer 表创建的索引。




