商业数据库 - oracle -数据字典
Oracle的数据字典是由Oracle服务器创建的一组只可读的系统表,包含了数据库和数据库对象的信息,Oracle就是依赖这些数据来维护和管理数据库的。
数据字典在数据库需求分析阶段建立,并在设计过程中不断修改和完善,为数据库的运行提供系统信息。
Oracle的数据字典存储在SYSTEM表空间中。
数据字典是Oracle服务器创建和维护的一组只读的系统表,这些表和视图包含了数据库和数据库对象的信息,Oracle依赖这些数据来维护和管理数据库。
除了和审计有关的数据字典(以AUD$开头的表)可以修改外,其他数据字典表和视图对于所有用户(包括DBA)都是只读的,用户只能通过SELECT语句访问查询数据,数据的维护与管理由Oracle数据库服务器内部完成。
数据字典视图分为多种类型,如DBA__、ALL__、USER__和CDB__(在Oracle 12c及更高版本中的容器数据库中)等,这些视图提供了不同级别的数据访问权限。DBA__视图提供了整个数据库中对象的信息,通常需要DBA权限才能访问;ALL__视图提供了当前用户有权访问的所有对象的信息;USER_*视图则包含了当前用户自己创建的对象信息。
此外,Oracle还提供了一组动态性能视图(以V或GV开头),这些视图记录了当前数据库的行为和统计数据,并实时更新以反映数据库的当前状态。DBA可以使用这些视图来监视和调优数据库性能。
综上所述,Oracle的数据字典是存储在SYSTEM表空间中的一组系统表和视图,它们提供了关于数据库和数据库对象的详细信息,并用于数据库的维护和管理。
一、数据字典的构成
数据字典的内容主要包括:
- 数据库描述信息:包括数据项的描述信息和映像信息。
- 存储管理信息:涉及数据的物理特性,例如数据在存储介质上的组织方式。
- 控制信息:包括完整性约束条件表、用户权限表、并发控制状态表,以及检查点控制信息等。
- 用户管理信息:涵盖用户口令登记表、用户工作区分配和使用需求信息等。
- 系统事务管理信息:例如完整性检查、安全性检查、并发操作管理等。
二、查询数据字典的方法
在Oracle中,可以通过查询数据字典视图来查看数据字典的信息。数据字典视图是基表数据的转换形式,使得数据更易于理解。以下是一些常用的查询方法:
-
查询用户信息:
- 查看当前用户的缺省表空间:
SELECT username, default_tablespace FROM user_users;
- 查看当前用户的角色:
SELECT * FROM user_role_privs;
- 查看当前用户的系统权限和表级权限:
SELECT * FROM user_sys_privs; SELECT * FROM user_tab_privs;
-
查询表信息:
- 查看用户下所有的表:
SELECT * FROM user_tables;
- 查看某表的创建时间:
SELECT object_name, created FROM user_objects WHERE object_name = UPPER('&table_name');
- 查看某表的大小:
SELECT SUM(bytes) / (1024 * 1024) AS size(M) FROM user_segments WHERE segment_name = UPPER('&table_name');
-
查询索引信息:
- 查看索引个数和类别:
SELECT index_name, index_type, table_name FROM user_indexes ORDER BY table_name;
- 查看索引被索引的字段:
SELECT * FROM user_ind_columns WHERE index_name = UPPER('&index_name');
-
查询其他对象信息:
- 查看序列号:
SELECT * FROM user_sequences;
- 查看视图的名称和创建视图的select语句:
SELECT view_name FROM user_views; SELECT text FROM user_views WHERE view_name = UPPER('&view_name');
- 查看同义词的名称:
SELECT * FROM user_synonyms;
- 查看某表的约束条件:
SELECT constraint_name, constraint_type, search_condition, r_constraint_name FROM user_constraints WHERE table_name = UPPER('&table_name');
-
查询存储过程和函数:
- 查看函数和过程的状态:
SELECT object_name, status FROM user_objects WHERE object_type = 'FUNCTION'; SELECT object_name, status FROM user_objects WHERE object_type = 'PROCEDURE';
- 查看函数和过程的源代码:
sql复制代码SELECT text FROM all_source WHERE owner = USER AND name = UPPER('&plsql_name');
-
查询触发器:
可以使用相应的SQL语句来查看触发器的定义和相关信息。
三、注意事项
- 权限问题:某些数据字典视图可能需要特定的权限才能访问。如果没有足够的权限,可能会遇到访问被拒绝的错误。
- 视图名称:数据字典视图的名称通常遵循一定的命名规则,例如以
USER_
、DBA_
或V$
开头。了解这些命名规则有助于快速找到所需的信息。 - 动态性能视图:
V$
视图是动态性能视图,它们提供了关于数据库当前状态的信息。这些视图对于监控和调优数据库非常有用。
综上所述,Oracle的数据字典是数据库管理系统中的核心部分,通过查询数据字典视图可以获取数据库和数据库对象的详细信息。掌握查询数据字典的方法对于数据库管理员和开发人员来说至关重要。
要查询到Oracle数据库的所有数据字典,你可以使用以下几种方法和工具:
一、使用Oracle SQL Developer
Oracle SQL Developer是一个免费的集成开发环境(IDE),它提供了一个数据字典功能,可以生成和浏览数据库对象的详细信息。你可以使用SQL Developer的Data Dictionary视图来查看表、列、索引、约束等的元数据信息。
- 打开Oracle SQL Developer并连接到你的数据库。
- 在左侧的树状视图中,展开你要查询的数据库连接。
- 展开“Data Dictionary”节点,你将看到各种数据字典视图的分类,如“Tables”、“Views”、“Indexes”等。
- 点击你想要查看的视图类别,然后在右侧窗口中你将看到该类别下的所有对象及其详细信息。
二、查询系统视图
Oracle数据库本身提供了一组系统视图,这些视图包含了关于数据库对象的元数据信息。你可以查询这些视图来获取关于表、列、索引、约束、触发器等的详细信息。
例如,以下是一些常用的系统视图及其查询示例:
DBA_TABLES
:显示数据库中所有表的信息。
SELECT * FROM DBA_TABLES;
DBA_TAB_COLUMNS
:显示表中列的信息。
SELECT * FROM DBA_TAB_COLUMNS WHERE TABLE_NAME = '你的表名';
DBA_INDEXES
:显示索引的信息。
SELECT * FROM DBA_INDEXES WHERE TABLE_NAME = '你的表名';
三、使用其他数据库管理工具
除了Oracle SQL Developer外,还有其他一些流行的数据库管理工具也可以用来查询Oracle数据库的数据字典。
- TOAD:TOAD是一款流行的数据库管理工具,它支持多种数据库,包括Oracle。TOAD提供了一些功能来生成和查看数据库的数据字典。你可以使用TOAD的对象浏览器来浏览和检索表、列、约束等的详细信息。
- PL/Scope:PL/Scope是Oracle数据库的一个功能,可以收集和存储程序单元(如存储过程、函数)的编译时元数据信息。通过启用PL/Scope,你可以生成包括程序单元、变量、参数和调用关系等信息的数据字典。
四、第三方工具
还有一些第三方工具可用于生成Oracle数据库的数据字典,例如:
- dbForge Studio for Oracle
- ER/Studio
- Aqua Data Studio
这些工具都提供了数据字典生成和浏览功能,可以帮助你更方便地查询和管理Oracle数据库的数据字典。
五、注意事项
- 权限问题:某些数据字典视图可能需要特定的权限才能访问。如果没有足够的权限,可能会遇到访问被拒绝的错误。
- 视图名称:数据字典视图的名称通常遵循一定的命名规则,了解这些命名规则有助于快速找到所需的信息。
- 工具选择:根据你的需求和偏好选择合适的工具。不同的工具有不同的特点和功能,选择适合你的工具可以提高工作效率。
综上所述,你可以通过Oracle SQL Developer、查询系统视图、使用其他数据库管理工具或第三方工具来查询Oracle数据库的所有数据字典。选择合适的方法和工具可以帮助你更有效地管理和查询数据库对象的信息。
参考资料
《oracle database 12c DBA官方手册》