数据字典与系统表
地址:http://weibo.com/p/1001603822234199319043
数据字典描述了数据库系统的基本信息,如表结构的定义。它描述了数据库的元信息,任何数据库对象都需要相应的数据字典对象来描述。数据字典的表现形式为一组系统表,
在达梦7中以SYS开头的表都是系统表,它的拥有者是系统内建的SYS用户。
使用系统表存放数据字典并不是唯一的数据字典表示形式。有些系统,比如MySQL对每个表有一个对应的FRM文件来描述表结构,这种方式实现容易,但是需要特殊的语法来查询,比如show语句。
使用系统表的优势在于可以方便使用标准的SQL语言来查询(例如sqlserver select * from sys.dm_exec_xxxx)。达梦7的系统表,包括系统性能动态视图(V$)都可以使用复杂的SQL标准语法来访问,
这也是关系数据库的关系准则之一。
达梦7的核心系统表大概只有几十个,尽量保持简单。对于一些扩展功能,如:自动工作负载AWR, 定时任务系统等,也用一些系统表来管理,但是这些相应功能模块需要额外的创建工作。
系统表记录的信息主要包括:
?用户、角色
?模式及模式对象, 包括表、视图、索引、约束、序列、存储过程、触发器、包等
?权限, 授权信息
?安全、审计信息
?系统的一些静态信息,如: 错误码、关键字清单
?系统的动态性能信息(V$)
系统表的信息反应了系统的管理对象和当前运行状态,授权用户可以查询,但不能直接修改系统表。系统表由达梦7自动维护,用户只能通过DDL来间接修改系统表。
为了使用方便, 系统定义了一些系统视图,如all_tables, user_tables等反应系统的一些特定对象信息。很多视图具有和Oracle对应视图基本一致的字段和信息。
SYSOBJECTS是最重要的系统表之一,它的每一行表示了一个数据库对象,比如每创建一个表、视图,系统都会在SYSOBJECTS插入一条记录。
大部分对象,还需要其他的系统表来存放额外信息,比如:表的列信息存放在SYSCOLUMNS里,获取一个表的完整对象信息需要访问多个系统表,
这就需要做关联操作。
达梦7提供了一个工具DMINIT来创建数据库的物理文件。这个工具的主要工作就是创建这些系统表。类似SYSOBJECTS/SYSCOLUMNS这样的系统表,一开始就包含了不少数据,因为它们需要描述自身。
这些数据需要DMINIT硬编码来创建(就像install_db脚本 安装数据库的时候自动安装系统数据库),而普通的用户表创建,则可以通过对系统表的insert语句来实现。