系统目录是一些表和视图的集合,它们包含了关于数据库的信息。每个数据库都有系统目录,其中定义了数据库的结构,还有数据库所包含数据的信息。举例来说,用于数据库里所有表的数据目录语言(DDL)就保存在系统目录里。
在具体实现里,系统目录的内容会被划分为对象的逻辑组,以表的形式供数据库管理员(DBA)和其他数据库用户访问。
系统目录或者是在数据库创建时自动创建的,或是有DBA在数据库创建之后立即创建的。举例来说,在Oracle里,系统目录的所有者是一个名为SYS的用户,它对数据库具有完全的权限。在Microsoft SQL Server里, SQL服务程序的系统目录位于master数据库里。在MySQL里,系统目录位于mysql数据库里。
系统目录包含的内容有:
- 用户账户和默认设置;
- 权限和其他安全信息;
- 性能统计;
- 对象大小估计;
- 对象变化;
- 表结构和存储;
- 索引结构和存储;
- 数据库其他对象的信息,比如视图、异名、触发器和存储过程;
- 表约束和应用完整性信息;
- 用户会话;
- 审计信息;
- 内部数据库设置;
- 数据库文件的位置。
不同实现里的系统目录表格
产品 | 表格名称 | 内容 |
SQL Server | SYSUSERS | 数据库用户 |
SYS.DATABASES | 全部数据库片断 | |
SYS.DATABASE_PERMISSIONS | 全部数据库权限 | |
SYS.DATABASE_FILES | 全部数据库文件 | |
SYSINDEXES | 全部索引 | |
SYSCONSTRAINTS | 全部约束 | |
SYS.TABLES | 全部数据库表 | |
SYS.VIEWS | 全部数据库视图 | |
Oracle | ALL_TABLES | 用户访问的表 |
USER_TABLES | 用户拥有的表 | |
DBA_TABLES | 数据库里全部表 | |
DBA_SEGMENTS | 片断存储 | |
DBA_INDEXES | 全部索引 | |
DBA_USERS | 数据库里的全部用户 | |
DBA_ROLE_PRIVS | 分配的角色 | |
DBA_ROLES | 数据库里的角色 | |
DBA_SYS_PRIVS | 分配的系统权限 | |
DBA_FREE_SPACE | 数据库剩余空间 | |
V$DATABASE | 数据库的创建 | |
V$SESSION | 当前会话 | |
MySQL | COLUMNS_PRIV | 字段权限 |
DB | 数据库权限 | |
FUNC | 自定义函数的管理 | |
HOST | 与MySQL相关联的主机名称 | |
TABLES_PRIV | 表权限 | |
USER | 表关系 |
警告:不要手动修改系统目录中的表