数据字典
任务目标:
- 识别内置数据库对象
- 识别数据字典的内容和用途
- 描述如何创建数据字典视图
- 识别数据字典视图类别
- 查询数据字典和动态性能视图
- 描述管理脚本命名约定
数据库创建的对象
-
表(Tables):表是数据库中存储数据的基本结构,用于组织和存储数据。表由行和列组成,每列定义了表中存储的数据类型和约束条件。
-
视图(Views):视图是基于一个或多个表的查询结果集,类似于虚拟表。视图可以简化复杂查询、隐藏数据细节,并提供安全性控制。
-
索引(Indexes):索引是对表中的列或列组合进行排序的数据结构,用于加快数据检索速度。通过索引,可以快速定位和访问表中的数据。
-
序列(Sequences):序列是数据库中生成唯一数字序列的对象,通常用于生成主键值或其他需要唯一标识的值。
-
存储过程(Stored Procedures):存储过程是一组预编译的 SQL 语句集合,存储在数据库中并可以被多次调用。存储过程可以实现复杂的业务逻辑和数据处理。
-
触发器(Triggers):触发器是与表相关联的数据库对象,当表上发生特定事件(如插入、更新、删除)时触发执行特定的操作。
-
包(Packages):包是存储过程、函数、变量和游标等数据库对象的集合,用于封装和组织相关的数据库逻辑。
-
用户定义类型(User-Defined Types):用户定义类型是用户自定义的数据类型,可以在数据库中创建并用于表的列定义或存储过程参数等。
数据字典
Oracle 数据字典是 Oracle 数据库中的一组特殊表和视图,用于存储有关数据库对象的元数据信息。这些数据字典提供了对数据库结构的详细描述,包括表、视图、索引、约束、列等对象的定义和属性。通过查询数据字典,用户可以了解数据库对象的结构、依赖关系和权限信息,有助于数据库管理、查询优化和安全性控制。
- 是每个Oracle数据库的中心
- 描述了数据库及其对象
- 包含只读表和视图
- 存储在system表空间中
- 属于用户SYS
- 由Oracle服务器维护
- 通过select访问
数据字典的两部分
- 基表
存储了对数据库的描述
使用CREATE DATABASE创建 - 数据字典视图
永固简化基表信息
通过公共同义词访问 Accessed through public synonyms
使用catalog.sql脚本创建
catalog.sql 用于创建常用的数据字典视图和同义词
catproc.sql 用于服务器端PL/SQL所需的脚本
- 数据字典提供以下的信息
逻辑和物理数据库结构、对象的定义和空间分配、完整性约束、用户、角色、特权、审计
数据字典的用途
- Oracle服务器使用它来查找有关的信息(用户、模式对象、存储结构)
- Oracle服务器在执行DDL语句的时候修改它
- 用户和dba将其用作有关数据库信息的只读引用
三组静态视图
在 Oracle 数据库中,三组静态视图指的是 DBA
、ALL
和 USER
这三种视图的分类。这些视图是 Oracle 数据字典中的一部分,用于提供关于数据库对象(如表、视图、索引等)的元数据信息。它们的主要区别在于提供的对象范围和访问权限:
-
DBA 视图:以
DBA_
开头的视图,提供了数据库中所有模式(schemas)的对象信息,包括所有用户创建的对象。只有具有 DBA 权限的用户才能访问这些视图,用于管理整个数据库的对象。 -
ALL 视图:以
ALL_
开头的视图,提供了当前用户可以访问的所有对象的信息,包括其他用户的对象。这些视图显示了当前用户有权限访问的对象,但不包括所有对象。通常用于查询当前用户可以查看的对象信息。 -
USER 视图:以
USER_
开头的视图,提供了当前用户模式(schema)中的对象信息。这些视图显示了当前用户拥有的对象,不需要额外的权限即可访问。通常用于查询当前用户自己创建的对象信息。
使用desc来查看上边的表
desc all_tables;
其他的视图
1. DICTIONARY
- 概述:数据字典是 Oracle 数据库的核心组件,包含了数据库的元数据。它提供了关于数据库对象(如表、视图、索引、用户等)的信息。
- 用途:用于查询数据库结构和对象的属性,帮助用户理解数据库的设计和配置。
2. DICT_COLUMNS
- 概述:这是一个视图,提供了数据字典中各个对象的列信息。
- 用途:用于获取数据字典中所有对象的列名、数据类型及其他属性。
3. DBA_TABLES
- 概述:提供数据库中所有表的详细信息。
-
主要字段:
-
TABLE_NAME
:表名 -
OWNER
:表的拥有者 -
TABLESPACE_NAME
:表所在的表空间 -
NUM_ROWS
:表中的行数 -
CREATED
:表的创建时间
-
- 用途:用于管理和监控数据库中的表。
4. DBA_INDEXES
- 概述:提供数据库中所有索引的详细信息。
-
主要字段:
-
INDEX_NAME
:索引名 -
TABLE_NAME
:索引所关联的表名 -
UNIQUENESS
:索引是否唯一 -
INDEX_TYPE
:索引类型(如 B-tree、Bitmap 等)
-
- 用途:用于优化查询性能,了解索引的使用情况。
5. DBA_TAB_COLUMNS
- 概述:提供数据库中所有表的列信息。
-
主要字段:
-
TABLE_NAME
:表名 -
COLUMN_NAME
:列名 -
DATA_TYPE
:数据类型 -
DATA_LENGTH
:数据长度 -
NULLABLE
:是否允许 NULL 值
-
- 用途:用于查看表的结构,帮助开发人员理解数据模型。
6. DBA_CONSTRAINTS
- 概述:提供数据库中所有约束的信息。
-
主要字段:
-
CONSTRAINT_NAME
:约束名 -
TABLE_NAME
:约束所关联的表名 -
CONSTRAINT_TYPE
:约束类型(如 P:主键,F:外键,U:唯一约束) -
SEARCH_CONDITION
:约束条件
-
- 用途:用于管理数据完整性,确保数据的有效性和一致性。
7. DBA_TABLESPACES
- 概述:提供数据库中所有表空间的详细信息。
-
主要字段:
-
TABLESPACE_NAME
:表空间名 -
STATUS
:表空间状态(如 ONLINE、OFFLINE) -
BLOCK_SIZE
:块大小 -
INITIAL_EXTENT
:初始扩展大小
-
- 用途:用于管理数据库的存储结构,监控表空间的使用情况。
8. DBA_DATA_FILES
- 概述:提供数据库中所有数据文件的信息。
-
主要字段:
-
FILE_NAME
:数据文件名 -
TABLESPACE_NAME
:所属表空间 -
BYTES
:文件大小(以字节为单位) -
STATUS
:文件状态(如 ONLINE、OFFLINE)
-
- 用途:用于监控和管理数据库的物理存储,确保数据文件的可用性。
动态性能表
介绍
- 是一个虚拟表
- 记录当前数据库活动
- 在数据库运行时不断更新
- 从内存和控制文件访问信息
- 用于监视和调优数据库
- 归属sys用户所有
- 在以vs开头的同义词
- 在v$FIXED_TABLE中列出
SQL> desc v$fixed_table;
Name Null? Type
----------------------------------------- -------- ----------------------------
NAME VARCHAR2(30)
OBJECT_ID NUMBER
TYPE VARCHAR2(5)
TABLE_NUM NUMBER
描述一个表或视图的结构。在您提供的输出中,描述了一个名为 V$FIXED_TABLE
的视图的结构,具体如下:
- NAME:列名,数据类型为 VARCHAR2(30)。
- OBJECT_ID:列名,数据类型为 NUMBER。
- TYPE:列名,数据类型为 VARCHAR2(5)。
- TABLE_NUM:列名,数据类型为 NUMBER。
其他的表
当然,让我更详细地向您介绍您提到的这些 Oracle 数据库中的动态性能视图或系统视图:
-
V$CONTROLFILE:
- 描述:提供了有关数据库控制文件的信息,包括控制文件的路径、大小、状态等。
-
常用字段:
-
NAME
:控制文件的名称 -
STATUS
:控制文件的状态 -
CREATION_CHANGE#
:控制文件的创建 SCN 号码 -
BYTES
:控制文件的大小
-
-
V$DATABASE:
- 描述:提供了有关当前数据库的信息,如数据库名称、数据库 ID、数据库版本等。
-
常用字段:
-
NAME
:数据库名称 -
DBID
:数据库 ID -
CREATED
:数据库创建时间 -
VERSION
:数据库版本号
-
-
V$DATAFILE:
- 描述:提供了有关数据文件的信息,包括数据文件的路径、大小、状态等。
-
常用字段:
-
FILE#
:数据文件编号 -
NAME
:数据文件路径 -
STATUS
:数据文件状态 -
BYTES
:数据文件大小
-
-
V$INSTANCE:
- 描述:提供了有关数据库实例的信息,如实例名称、启动时间、当前状态等。
-
常用字段:
-
INSTANCE_NAME
:实例名称 -
STARTUP_TIME
:实例启动时间 -
STATUS
:实例状态(OPEN、MOUNTED、CLOSED)
-
-
V$PARAMETER:
- 描述:提供了有关数据库参数的信息,包括初始化参数的名称、值、描述等。
-
常用字段:
-
NAME
:参数名称 -
VALUE
:参数值 -
DESCRIPTION
:参数描述
-
-
V$SESSION:
- 描述:提供了有关当前会话的信息,如会话 ID、用户名、状态等。
-
常用字段:
-
SID
:会话 ID -
USERNAME
:会话用户名 -
STATUS
:会话状态(ACTIVE、INACTIVE)
-
-
V$SGA:
- 描述:提供了有关系统全局区域(SGA)的信息,包括 SGA 的大小、组件、使用情况等。
-
常用字段:
-
NAME
:SGA 组件名称 -
BYTES
:SGA 组件大小 -
USED
:SGA 组件已使用大小
-
-
V$TABLESPACE:
- 描述:提供了有关表空间的信息,包括表空间名称、大小、使用情况等。
-
常用字段:
-
TABLESPACE_NAME
:表空间名称 -
BYTES
:表空间大小 -
USED_SPACE
:已使用空间大小
-
-
V$THREAD:
- 描述:提供了有关数据库线程的信息,如线程 ID、状态、角色等。
-
常用字段:
-
THREAD#
:线程编号 -
STATUS
:线程状态 -
ROLE
:线程角色(PRIMARY、STANDBY)
-
-
V$VERSION:
- 描述:提供了有关数据库版本的信息,包括数据库版本号、发布日期等。
-
常用字段:
-
BANNER
:数据库版本横幅 -
VERSION
:数据库版本号 -
RELEASE
:数据库发布日期
-
-
$SPPARAMETER:
- 描述:提供了有关数据库的服务器参数的信息,包括服务器参数的名称、值、描述等。
-
常用字段:
-
NAME
:参数名称 -
VALUE
:参数值 -
DESCRIPTION
:参数描述
-
-
VSTABLESPACE:
- 描述:提供了有关表空间的信息,包括表空间名称、数据文件、大小等。
-
常用字段:
-
TABLESPACE_NAME
:表空间名称 -
FILE_NAME
:数据文件名 -
BYTES
:表空间大小
-
-
VSTHREAD:
- 描述:提供了有关数据库线程的信息,如线程 ID、状态、角色等。
-
常用字段:
-
THREAD#
:线程编号 -
STATUS
:线程状态 -
ROLE
:线程角色(PRIMARY、STANDBY)
-
-
VSVERSION:
- 描述:提供了有关数据库版本的信息,包括数据库版本号、发布日期等。
-
常用字段:
-
BANNER
:数据库版本横幅 -
VERSION
:数据库版本号 -
RELEASE
:数据库发布日期
-
管理脚本命名
-
cat*.sql:用于提取目录和数据字典信息的脚本,以 “cat” 开头,后跟描述性名称,以 “.sql” 结尾。
-
dbms*.sql:包含数据库包规范说明的脚本,以 “dbms” 开头,后跟描述性名称,以 “.sql” 结尾。
-
prvt*.plb:包含封装数据库包代码的脚本,以 “prvt” 开头,后跟描述性名称,以 “.plb” 结尾。
-
utl*.sql:包含数据库实用程序视图和表的脚本,以 “utl” 开头,后跟描述性名称,以 “.sql” 结尾。