YashanDB数据字典

简介: YashanDB数据字典

数据字典指YashanDB用于管理和显示数据库元数据信息的一组系统表、系统视图和动态视图。数据字典中存储了数据库中各级对象的元数据,在数据库运行的各个场景均可能被使用。

例如,YashanDB客户端工具或用户程序通过YashanDB驱动程序连接数据库时,数据库会从用户相关的数据字典中查找尝试登录的用户的身份信息(用户名、密码、角色等),从权限相关数据字典中查看该用户是否具备创建会话的权限。

当用户执行一条SQL语句,例如:

SELECT id, name FROM employees WHERE id < 100

Copied!

数据库的语法解析器会解析该语句,分析出该语句试图查询employees对象,获取id、name两个字段的值。此外,数据库还需要通过数据字典确认以下信息:

  • employees对象是否存储,对象的类型是否是表或视图。
  • 当前用户是否对employees对象拥有select或read权限。
  • id,name是否为employees表的列。
  • id,name列的数据类型、长度。
  • employees表的id列是否有索引。
  • employees表的统计信息。

# 系统表

系统表由YashanDB自动维护,通常在用户执行数据声明语言(DDL)时,会引起系统表的变更。系统表中记录的信息是数据库及数据库中对象的关键元数据信息,其表结构、字段含义与YashanDB内部机制紧密相关,因此,不建议数据库管理员自行修改系统表中的数据。

# 系统视图

系统视图是基于系统表创建的一组视图,将用户关心的元数据信息以便于理解的方式进行呈现。

下表是常用的三组系统视图:

视图名称前缀 使用者 显示内容
DBA_ 数据库管理员 数据库中所有对象的元数据
ALL_ 所有用户 当前用户可访问的所有对象的元数据
USER_ 所有用户 属于当前用户模式的所有对象的元数据

# DBA视图

以DBA_开头的视图用于让拥有DBA权限的用户查看数据库中所有对象。

例如,查看数据库中所有用户的所有对象:

SELECT OWNER, OBJECT_TYPE, OBJECT_NAME FROM DBA_OBJECTS ORDER BY 1, 2, 3;

Copied!

# ALL视图

以ALL_开头的视图用于让所有用户查看自己拥有访问权限的数据库对象的元数据,即从该用户视角所能看到的所有对象的元数据。

ALL_视图可以看到的对象包括:

  • 属于该用户模式的所有对象。
  • 其他用户授权该用户访问的对象,包括其他用户将访问权限授权给PUBLIC的对象。
  • PUBLIC模式下的所有对象。

例如,查看数据库中所有可以访问的对象:

SELECT OWNER, OBJECT_TYPE, OBJECT_NAME FROM ALL_OBJECTS ORDER BY 1, 2, 3;

Copied!

# USER视图

以USER_开头的视图用于让所有用户查看所有者为自己的对象元数据。

USER视图返回的数据通常是ALL视图的子集,相对于ALL视图,USER视图一般没有OWNER列。

# 动态视图

动态视图是将实例、数据库运行阶段等一些未记录在系统表中的关键元数据通过内部机制以表的方式呈现出来。

例如,使用V$DATABASE查看数据库状态:

SELECT owner, object_type FROM DBA_OBJECTS WHERE object_name='V$DATABASE';

OWNER                                                            OBJECT_TYPE           

PUBLIC                                                           SYNONYM    

SELECT table_owner, table_name FROM DBA_SYNONYMS WHERE synonym_name='V$DATABASE';

TABLE_OWNER                                                      TABLE_NAME                                                       

SYS                                                              V_$DATABASE

Copied!

通过系统视图可以看到V$DATABASE是SYS.V_$DATABASE的一个公共同义词。

SELECT owner, text FROM DBA_VIEWS WHERE view_name='V_$DATABASE'; 

OWNER                                                            TEXT                                                             

SYS                                                              select "DATABASE_ID","DATABASE_NAME","CREATE_TIME","LOG_MODE","OPEN_MODE","PROTECTION_MODE","PROTECTION_LEVEL","DATABASE_ROLE","BLOCK_SIZE","CURRENT_SCN","STATUS","RCY_POINT","FLUSH_POINT","RESET_POINT","PLATFORM_NAME","HOST_NAME","RESTORE_TIME","SWITCHOVER_STATUS","SUPPLEMENTAL_LOG_DATA_MIN","SUPPLEMENTAL_LOG_DATA_PK","SUPPLEMENTAL_LOG_DATA_ALL","SUPPLEMENTAL_LOG_TABLE_TYPE" from v$database

Copied!

从定义可以看到V_$DATABASE是由SYS用户定义的一个视图,其数据来源为SYS模式下的V$DATABASE对象。此处的V$DATABASE是一个动态视图,不作为记录在系统表中的模式对象,但是在实例启动、数据库加载过程中,会在内存中加载该对象的定义。

用户可以通过查询V$DYNAMIC_VIEWS视图查看所有动态视图。

数据字典缓存


在数据库运行过程中可能需要频繁访问数据字典,尤其是存储在系统表中的用户账号、模式对象相关的元数据,若每次访问时都只能通过扫描系统表获取数据,会严重影响系统的响应速度。

YashanDB支持数据字典缓存,在内存中以特定的数据结构对其关键元数据进行缓存。根据其使用频率、数量、内存占用大小,数据字典缓存可分为常驻缓存和动态缓存。

# 常驻缓存

对于使用频率高、数据量相对较少、占用内存较小的系统对象,缓存加载后常驻内存,例如用户账户信息。

# 动态缓存

对于数量多、内存占用较大的对象,仅在使用时动态生成缓存,例如表的元数据。当缓存内存不足时,可能暂时淘汰部分暂不使用的对象缓存。

相关文章
|
SQL 存储 关系型数据库
DataX - 全量数据同步工具(2)
DataX - 全量数据同步工具
|
并行计算 Linux Go
export GOMP_CPU_AFFINITY=0-(((npro
export GOMP_CPU_AFFINITY=0-(((nproc --all) - 1 )) 是一条 Linux 命令,用于设置 GOMP(Go 语言的 OpenMP 支持库)使用的 CPU 亲和性。
661 1
|
11月前
|
传感器 人工智能 物联网
健康监测设备的技术革命:AI+物联网如何让你随时掌握健康数据?
健康监测设备的技术革命:AI+物联网如何让你随时掌握健康数据?
1341 19
|
人工智能 安全 算法
上交大、上海人工智能实验室开源首个多轮安全对齐数据集 SafeMTData
最近,以 OpenAI o1 为代表的 AI 大模型的推理能力得到了极大提升,在代码、数学的评估上取得了令人惊讶的效果。OpenAI 声称,推理可以让模型更好的遵守安全政策,是提升模型安全的新路径。
|
存储 算法 Unix
操作系统(13)-----文件管理3
操作系统(13)-----文件管理
1177 0
操作系统(13)-----文件管理3
|
数据采集 人工智能 数据可视化
「AI工程师」数据处理与分析-工作指导
**数据分析师工作指南概要** 该工作指导书详细阐述了数据分析师的职责,包括数据收集、清洗、整合处理以及分析挖掘。分析师需确保数据质量,运用统计和机器学习方法发现洞察,并通过可视化报告支持决策。此外,他们需维护高效的工作流程,使用编程工具优化处理,并遵循数据收集、分析及报告编写规范。成功执行此角色要求深厚的技术基础、沟通协作能力以及持续学习的态度。
681 1
「AI工程师」数据处理与分析-工作指导
|
算法 Python
Python函数的嵌套调用:深入理解与应用
Python函数的嵌套调用:深入理解与应用
629 1
|
Python
深入理解Python中的类方法、类实例方法和静态方法
深入理解Python中的类方法、类实例方法和静态方法
603 0
|
算法 数据中心 Python
Python雪花代码
在这段代码中,`SnowFlake`类用于生成唯一的ID。每次调用 `generate_id`方法时,它都会生成一个新的、唯一的ID。这个ID由时间戳、数据中心ID、工作机器ID和序列号组成,确保了在不同的时间、不同的数据中心、不同的工作机器上都能生成唯一的ID。
384 1
|
存储 SQL 安全
【绝密攻略】Flask应用如何抵御黑客入侵?七大安全技巧助你构建固若金汤的Web防线!
【8月更文挑战第31天】安全性是Web应用开发中的关键部分。Flask作为一款轻量级且高度可定制的框架,虽灵活但需开发者确保应用安全。本文介绍如何通过具体措施加固Flask应用,包括更新依赖项、启用CSRF保护、使用HTTPS、安全存储密码、防止SQL注入及清理用户输入等。通过示例代码展示如何在实际开发中应用这些策略,帮助提升应用安全性,为用户提供更可靠的服务。
668 0

热门文章

最新文章