关于Oracle体系结构
基于Oracle11g体系结构
目标:
- 了解Oracle体系结构
- 掌握逻辑存储结构
- 掌握物理存储结构
- 熟悉Oracle服务器结构
- 熟悉常用的数据字典
Oracle数据库管理中的重要的三个概念
- 实例(instance):实例是指一组Oracle后台进程以及在服务器中分配的共享内存区域
- 数据库:数据库是由基于磁盘的数据文件、控制文件、日志文件、参数文件和归档日志文件等组成的物理文件集合
- 数据库的主要功能就是存储数据,数据库存储数据的方式通常称为存储结构。
- 物理存储结构:物理存储结构用于展示Oracle在操作系统中的物理文件组成情况
- 逻辑存储结构:逻辑存储结构用于描述Oracle内部组织和管理数据的方式
- 数据库的主要功能就是存储数据,数据库存储数据的方式通常称为存储结构。
- 数据库服务器:数据库服务器是指管理数据库的各种软件工具(比如sqlplus、OEM等)、实例及数据库3个部分
一个数据库可以被多个实例装载和打开;而一个实例在其生存期内只能装载和打开一个数据库。
启动Oracle数据库服务器实际上是在服务器的内存中创建一个Oracle实例,然后用这个实例来访问和控制磁盘中的数据文件。当用户连接到数据库时,实际上连接的是数据库的实例,然后由实例负责与数据库进行通信,最后将处理结果返回给用户
逻辑存储结构
逻辑存储结构是Oracle数据库存储结构的核心内容,对Oracle数据库的所有操作都会涉及逻辑存储结构
Oracle的逻辑存储结构是一种层次结构,主要由表空间、段、区间和数据块等概念组成。逻辑结构是面向用户的,当用户使用Oracle设计数据库时,其使用的就是逻辑存储结构。
简要介绍:
-
数据块:Oracle逻辑存储结构中的最小的逻辑单位也是执行数据库输入输出模式操作的最小存储单位。
通过v$parameter数据字典来查询Oracle标准数据块的大小:
数据块中可以存放表数据、索引数据和簇数据等,无论存放哪种类型的数据,其结构都是相同的。数据块由块头、表目录、行目录、空余空间和行数据这5部分组成,如图2.4所示。
-
数据区:也可称作数据扩展区)是由一组连续的Oracle数据块所构成的Oracle存储结构,一个或多个数据块组成一个数据区,一个或多个数据区再组成一个段(Segment)
- 使用数据区的目的是用来保存特定数据类型的数据
-
段(segment)段是由一个或多个数据区构成的,它不是存储空间的分配单位,而是一个独立的逻辑存储结构,用于存储表、索引或簇等占用空间的数据对象,Oracle也把这种占用空间的数据对象统一称为段
- 一个段只属于一个特定的数据对象,每当创建一个具有独立段的数据对象时,Oracle将为它创建一个段。
- 段是为特定的数据对象(如表、索引、回滚等)分配的一系列数据区。
- 段内包含的数据区可以不连续,并且可以跨越多个文件,使用段的目的是用来保存特定对象
-
表空间(TableSpace):Oracle使用表空间将相关的逻辑结构(如段、数据区等)组合在一起,表空间是数据库的最大逻辑划分区域,通常用来存放数据表、索引、回滚段等数据对象,任何数据对象在创建时都必须被指定存储在某个表空间中
- 表空间(属逻辑存储结构)与数据文件(属物理存储结构)相对应,一个表空间由一个或多个数据文件组成,一个数据文件只属于一个表空间
- Oracle数据的存储空间在逻辑上表现为表空间,而在物理上表现为数据文件
- 表空间相当于操作系统中的文件夹,而数据文件就相当于文件夹中的文件
SYSTEM表——系统表空间,用于存放Oracle系统内部表和数据字典的数据,如表名、列名、用户名等。Oracle本身不赞成将用户创建的表、索引等存放在系统表空间中
通过dict查看数据库中数据字典的信息:
通过v$fixed_view_definition查看数据库中内部系统表的信息:
SQL> col view_name format a30 SQL> col view_definition format a30 SQL> select * from v$fixed_view_definition
SYSAUX表空间
SYSAUX表空间是Oracle 11g新增加的表空间,是随着数据库的创建而创建的,它充当SYSTEM的辅助表空间,降低了SYSTEM表空间的负荷,主要存储除数据字典以外的其他数据对象。SYSAUX表空间一般不存储用户的数据,由Oracle系统内部自动维护
UODO表空间
UODO表空间——撤销表空间,用于存储撤销信息的表空间。当用户对数据表进行修改操作(包括插入、更新、删除等操作)时,Oracle系统自动使用撤销表空间来临时存放修改前的旧数据。当所做的修改操作完成并执行提交命令后,Oracle根据系统设置的保留时间长度来决定何时释放掉撤销表空间的部分空间。一般在创建Oracle实例后,Oracle系统自动创建一个名字为“UNDOTBS1”的撤销表空间,该撤销表空间对应的数据文件是“UNDOTBS01.DBF”
USERS表空间
USERS表空间——用户表空间,是Oracle建议用户使用的表空间,可以在这个表空间上创建各种数据对象,比如创建表、索引、用户等数据对象。Oracle系统的样例用户SCOTT对象就存放在USERS表空间中。
物理存储结构
- 物理存储结构比较具体和直观,它用来描述Oracle数据在磁盘上的物理组成情况
- Oracle的数据在逻辑上存储在表空间中,而在物理上存储在表空间所包含的物理文件(即数据文件)中
- Oracle数据库的物理存储结构由多种物理文件组成,主要有数据文件、控制文件、重做日志文件、归档日志文件、参数文件、口令文件和警告日志文件等。
数据文件
-
数据文件是用于保存用户应用程序数据和Oracle系统内部数据的文件,这些文件在操作系统中就是普通的操作系统文件,Oracle在创建表空间的同时会创建数据文件。Oracle数据库在逻辑上由表空间组成,每个表空间可以包含一个或多个数据文件,一个数据文件只能隶属于一个表空间
-
在创建表空间的同时,Oracle会创建该表空间的数据文件。在表空间中创建数据对象(如表、索引、簇等)时,用户是无法指定使用哪一个数据文件来进行存储的,只能由Oracle系统负责为数据对象选择具体的数据文件,并在其中分配物理存储空间
-
在读取数据时,Oracle系统首先从数据文件中读取数据,并将数据存储在内存的高速数据缓冲区中。如果用户要读取数据库中的某些数据,而请求的数据又不在内存的高速数据缓冲区中,则需要从相应的数据文件中读取数据并存储在缓冲区中
-
通过查询dba_data_files或v$datafile数据字典来了解Oracle系统的数据文件信息:
SQL> col file_name for a50; SQL> set linesize 100; SQL> select file_name,tablespace_name from dba_data_files;
-
数据文件信息
- 系统数据文件
- 撤销数据文件
- 用户数据文件
控制文件
控制文件是一个二进制文件,它记录了数据库的物理结构,其中主要包含数据库名、数据文件与日志文件的名字和位置、数据库建立日期等信息。控制文件一般在Oracle系统安装时或创建数据库时自动创建,控制文件所存放的路径由服务器参数文件spfileorcl.ora的control_files参数值来指定。
Oracle实例在正常启动时,系统首先要访问的是初始化参数文件spfile,然后Oracle为系统全局区(SGA)分配内存。这时,Oracle实例处于安装状态,并且控制文件处于打开状态;接下来Oracle会自动读出“控制文件”中的所有数据文件和日志文件的信息,并打开当前数据库中所有的数据文件和所有的日志文件以供用户访问
-
每个数据库至少拥有一个控制文件,一个数据库可以同时拥有多个控制文件,但是一个控制文件只能属于一个数据库
-
通过查询v$controlfile数据字典来查看Oracle系统的控制文件信息:
-
QL> col name format a60; SQL> select name from v$controlfile;
-
- 当数据库的物理组成更改时,Oracle自动更改该数据库的控制文件。数据恢复时,也要使用控制文件。
日志文件
- 重做日志文件
- 归档日志文件
日志文件的主要功能是记录对数据所作的修改,对数据库所作的修改几乎都记录在日志文件中
SQL> col member for a50;
SQL> select member from v$logfile;
可以通过v$database视图来查看当前Oracle系统是否采用归档模:
SQL> col name format a30;
SQL> select dbidkindle-cn-toc-level-3name,log_mode from v$database;
若显示spfile文件的指定参数的信息,则只需要使用show parameter+参数名即可
服务器参数文件
服务器参数文件SPFILE(Server parameter File)是二进制文件,用来记录了Oracle数据库的基本参数信息(如数据库名、控制文件所在路径、日志缓冲大小等)。数据库实例在启动之前,Oracle系统首先会读取SPFILE参数文件中设置的这些参数,并根据这些初始化参数来配置和启动实例。比如,设置标准数据块的大小(即参数db_block_size的值)、设置日志缓冲区的大小(即参数log_buffer的值)等,所以SPFILE参数文件非常重要。服务器参数文件在安装Oracle数据库系统时由系统自动创建,文件的名称为SPFILEsid.ora,sid为所创建的数据库实例名。
SPFILE中的参数由Oracle系统自动维护
-
查看服务器参数;
-
SQL> col name for a30; SQL> col value for a30; SQL> select name,value,ismodified from v$parameter;
-
SQL> show parameter
Oracle 11g服务器结构
实例可以进一步划分为系统全局区(SGA)和后台进程(PMON、SMON等)两部分,其中,SGA使用操作系统的内存资源,而后台进程需要使用CPU与内存资源。数据库(Database)中包含数据文件(Data files)、控制文件(Control files)和重做日志文件(Redo log file),数据库文件存放在硬盘中。程序全局区(PGA)是一个非共享的内存区域,用于管理用户进程的私有资源。前台进程可以再划分为用户进程和服务器进程,它们需要使用CPU与内存资源。
系统全局区(System Global Area, SGA)是Oracle数据库实例中所有用户进程共享的一块内存区域。SGA主要包括以下几个部分:
-
高速数据缓冲区 (Database Buffer Cache)
- 存储最近访问的数据块。
- 用于减少对物理磁盘的读取,提高性能。
- 分为脏数据区、空闲区和保留区:
- 脏数据区:存放已修改但未写入数据文件的数据。
- 空闲区:可以被写入新数据的数据块。
- 保留区:存放当前正在使用或保留以备将来使用的数据。
-
重做日志缓冲区 (Redo Log Buffer)
- 暂存对数据库进行修改操作的日志信息。
- 在检查点发生或达到一定量时,由LGWR进程将日志信息写入重做日志文件。
- 大小由
LOG_BUFFER
参数控制。
-
共享池 (Shared Pool)
- 包含库高速缓冲区和字典高速缓冲区。
- 库高速缓冲区缓存SQL语句和PL/SQL代码及其执行计划,减少解析时间。
- 字典高速缓冲区存储数据字典信息。
- 大小由
SHARED_POOL_SIZE
参数控制。
-
大型池 (Large Pool)
- 非必需组件,用于特定场景减轻共享池压力,如备份恢复、并行查询等。
- 大小由
LARGE_POOL_SIZE
参数控制。
-
Java池 (Java Pool)
- 提供内存空间给Java虚拟机使用,支持在数据库中运行Java程序。
- 大小由
JAVA_POOL_SIZE
参数控制。
-
流池 (Streams Pool)
- 用于数据库间的信息共享,大小由
STREAMS_POOL_SIZE
参数控制。
- 用于数据库间的信息共享,大小由
程序全局区 (Program Global Area, PGA)
- 是每个服务器进程私有的内存区域。
- 包含私有SQL区和会话区:
- 私有SQL区:存储变量及SQL语句运行时的内存结构。
- 会话区:存放用户的会话信息,如登录用户名。
- 大小可以通过
pga_aggregate_target
参数查看和调整。
这些内存结构共同工作,优化了数据库的性能,并确保数据的一致性和可用性。管理员可以通过调整相关参数来优化SGA和PGA的大小,以适应不同的工作负载需求。
Oracle 进程相关
Oracle前台进程和后台进程概述
前台进程
前台进程主要包括用户进程和服务进程,它们不是Oracle实例的一部分,但负责与实例进行通信。
-
用户进程
- 用户进程是生成或执行SQL语句的应用程序,如SQL*Plus或其他应用程序。
- 连接:用户进程与数据库实例之间的通信渠道。
- 会话:连接后用户与实例的交互方式,包括请求和响应。
-
服务进程
- 用于处理用户会话中的SQL语句或命令。
- 专用服务器模式:每个用户进程有一个专用的服务进程。
- 共享服务器模式:多个用户进程通过分派程序连接到共享的服务进程。
后台进程
后台进程是运行在Oracle服务器端的程序,是Oracle实例的重要组成部分。主要后台进程包括:
-
数据写入进程 (DBWR)
- 将高速数据缓冲区中的“脏”数据块(已修改但未写入磁盘的数据)写入数据文件。
- 触发条件:
- 缺少空闲数据块时。
- 检查点事件发生时。
- “脏”数据块在缓冲区中存放超过3秒时。
-
检查点进程 (CKPT)
- 在检查点事件发生时,要求DBWR将“脏”数据块写入数据文件。
- 检查点事件通常发生在日志切换时。
-
日志写入进程 (LGWR)
- 将重做日志缓冲区中的日志信息写入重做日志文件。
- 触发条件:
- 提交事务时。
- 重做日志缓冲区满1/3时。
- 日志信息存放超过3秒时。
-
归档进程 (ARCH)
- 只有在归档模式下才起作用。
- 在日志文件组被覆盖前,将日志信息写入归档日志文件。
-
系统监控进程 (SMON)
- 在数据库启动时执行恢复工作。
- 在并行服务器模式下恢复失败的数据库。
-
进程监控进程 (PMON)
- 监控其他进程的状态,清理失败的用户进程并释放资源。
-
锁定进程 (LCKN)
- 可选进程,在并行服务器模式下管理锁。
-
恢复进程 (RECO)
- 在分布式数据库模式下处理数据不一致问题。
-
调度进程 (DNNN)
- 在共享服务器模式下使用,可以启动多个调度进程。
-
快照进程 (SNPN)
- 处理数据库快照的自动刷新,并运行预定的存储过程。
查询当前实例进程信息
要查询当前实例的后台进程信息,可以使用以下SQL语句:
SQL> set pagesize 50;
SQL> select name, description from v$bgprocess;
这个查询将从 v$bgprocess
数据字典视图中获取所有后台进程的名称和描述,帮助你了解当前实例中运行的所有后台进程及其功能。
数据字典
数据字典是Oracle存放关于数据库内部信息的地方,其用途是用来描述数据库内部的运行和管理情况
Oracle数据字典的名称由前缀和后缀组成,使用“_”连接,其代表的含义如下:
[√]dba_:包含数据库实例的所有对象信息。
[√]v$:当前实例的动态视图,包含系统管理和系统优化等所使用的视图。
[√]user:记录用户的对象信息。
[√]gv_:分布式环境下所有实例的动态视图,包含系统管理和系统优化使用的视图。
[√]all_:记录用户的对象信息机被授权访问的对象信息
Oracle常用数据字典
本数据字典及其说明
数据字典名称 | 说明 |
---|---|
dba_tablespaces | 关于表空间的信息 |
dba_ts_quotas | 所有用户表空间限额 |
dba_free_space | 所有表空间中的自由分区 |
dba_segments | 描述数据库中所有段的存储空间 |
dba_extents | 数据库中所有分区的信息 |
dba_tables | 数据库中所有数据表的描述 |
dba_tab_columns | 所有表、视图以及簇的列 |
dba_views | 数据库中所有视图的信息 |
dba_synonyms | 关于同义词的信息查询 |
dba_sequences | 所有用户序列信息 |
dba_constraints | 所有用户表的约束信息 |
dba_indexs | 关于数据库中所有索引的描述 |
dba_ind_columns | 在所有表及簇上压缩索引的列 |
dba_triggers | 所有用户的触发器信息 |
dba_source | 所有用户存储过程信息 |
dba_data_files | 查询关于数据库文件的信息 |
dba_tab_grants/privs | 查询关于对象授权的信息 |
dba_objects | 数据库中所有的对象 |
dba_users | 关于数据库中所有用户的信息 |
常用动态性能视图
Oracle系统内部提供了大量的动态性能视图,之所以说是“动态”,是因为这些视图的信息在数据库运行期间会不断地更新。动态性能视图以v$作为名称前缀,这些视图提供了关于内存和磁盘的运行情况,用户只能进行只读访问而不能修改它们。
数据字典名称 | 说明 |
---|---|
v$database | 描述关于数据库的相关信息 |
v$datafile | 数据库使用的数据文件信息 |
v$log | 从控制文件中提取有关重做日志组的信息 |
v$logfile | 有关实例重置日志组文件名及其位置的信息 |
v$archived_log | 记录归档日志文件的基本信息 |
v$archived_dest | 记录归档日志文件的路径信息 |
v$controlfile | 描述控制文件的相关信息 |
v$instance | 记录实例的基本信息 |
v$system_parameter | 显示实例当前有效的参数信息 |
v$sga | 显示实例的SGA区的大小 |
v$sgastat | 统计SGA使用情况的信息 |
v$parameter | 记录初始化参数文件中所有项的值 |
v$lock | 通过访问数据库会话,设置对象锁的所有信息 |
v$session | 有关会话的信息 |
v$sql | 记录SQL语句的详细信息 |
v$sqltext | 记录SQL语句的语句信息 |
v$bgprocess | 显示后台进程信息 |
v$process | 当前进程的信息 |
小结
Oracle体系结构是一个复杂的结构,了解Oracle体系结构对于管理数据库很有帮助。
实践与练习
-
简单了解Oracle数据库具有哪些数据字典和动态性能视图。
答:上述的两张表
-
使用数据字典或性能视图查询数据库的物理存储结构
答:Oracle数据库的物理存储结构指的是数据在磁盘上的实际存储方式。这些物理结构包括数据文件、控制文件、重做日志文件和归档日志文件等
Oracle数据库提供了多个动态性能视图(也称为V$视图),这些视图提供了关于数据库物理存储结构的实时信息。以下是一些常用的动态性能视图及其查询示例,帮助你了解数据库的物理存储结构:
1. 数据文件 (Data Files)
- V$DATAFILE:显示当前实例的所有数据文件的信息。
-- 查询所有数据文件的信息 SELECT * FROM V$DATAFILE;
2. 控制文件 (Control Files)
- V$CONTROLFILE:显示当前实例的所有控制文件的位置和状态。
-- 查询所有控制文件的信息 SELECT * FROM V$CONTROLFILE;
3. 重做日志文件 (Redo Log Files)
- V$LOG:显示当前实例的所有重做日志组的信息。
- V$LOGFILE:显示每个重做日志组中的成员文件的具体位置。
-- 查询所有重做日志组的信息 SELECT * FROM V$LOG;-- 查询每个重做日志组成员的具体位置 SELECT * FROM V$LOGFILE;
4. 归档日志文件 (Archived Redo Logs)
- V$ARCHIVED_LOG:显示归档日志文件的信息。
- V$FLASHBACK_DATABASE_LOG:显示闪回数据库的日志文件信息。
-- 查询归档日志文件的信息 SELECT * FROM V$ARCHIVED_LOG;-- 查询闪回数据库的日志文件信息 SELECT * FROM V$FLASHBACK_DATABASE_LOG;
5. 表空间 (Tablespaces)
- V$TABLESPACE:显示当前实例的所有表空间的信息。
-- 查询所有表空间的信息 SELECT * FROM V$TABLESPACE;
6. 段 (Segments)
- DBA_SEGMENTS:显示数据库中所有段的信息(需要DBA权限)。
- USER_SEGMENTS:显示当前用户拥有的段的信息。
-- 查询所有段的信息(需要DBA权限) SELECT * FROM DBA_SEGMENTS;-- 查询当前用户拥有的段的信息 SELECT * FROM USER_SEGMENTS;
7. 区 (Extents)
- DBA_EXTENTS:显示数据库中所有区的信息(需要DBA权限)。
- USER_EXTENTS:显示当前用户拥有的区的信息。
-- 查询所有区的信息(需要DBA权限) SELECT * FROM DBA_EXTENTS;-- 查询当前用户拥有的区的信息 SELECT * FROM USER_EXTENTS;
8. 参数文件 (Parameter Files)
- V$PARAMETER:显示当前参数设置。
- V$SPPARAMETER:显示服务器参数文件(SPFILE)中的参数设置。
-- 查询当前参数设置 SELECT * FROM V$PARAMETER;-- 查询服务器参数文件(SPFILE)中的参数设置 SELECT * FROM V$SPPARAMETER;
示例查询
以下是一些具体的查询示例,帮助你获取数据库的物理存储结构信息:
查询所有数据文件的信息
SELECT file#, name, bytes / 1024 / 1024 AS size_mb, status FROM V$DATAFILE;
查询所有控制文件的信息
SELECT name, block_size, file_size_blocks FROM V$CONTROLFILE;
查询所有重做日志组的信息
SELECT group#, sequence#, members, bytes / 1024 / 1024 AS size_mb, status FROM V$LOG;
查询每个重做日志组成员的具体位置
SELECT group#, member, status FROM V$LOGFILE;
查询归档日志文件的信息
SELECT name, first_time, next_time, applied, deleted FROM V$ARCHIVED_LOG;
查询所有表空间的信息
SELECT name, bigfile, read_only, contents, extent_management, allocation_type FROM V$TABLESPACE;
通过这些动态性能视图和查询语句,你可以全面了解Oracle数据库的物理存储结构。请确保你有足够的权限来访问这些视图,如果需要更高的权限,请联系数据库管理员。
-
用数据字典查询数据库的逻辑存储结构
在Oracle数据库中,逻辑存储结构主要包括表空间(Tablespaces)、段(Segments)、区(Extents)和数据块(Data Blocks)。你可以使用数据字典视图来查询这些逻辑存储结构的信息。以下是一些常用的数据字典视图及其查询示例:
1. 表空间 (Tablespaces)
- USER_TABLESPACES:当前用户拥有的表空间。
- DBA_TABLESPACES:数据库中所有表空间的信息(需要DBA权限)。
- ALL_TABLESPACES:当前用户可访问的所有表空间。
-- 查询当前用户拥有的表空间 SELECT * FROM USER_TABLESPACES;-- 查询数据库中所有表空间的信息(需要DBA权限) SELECT * FROM DBA_TABLESPACES;-- 查询当前用户可访问的所有表空间 SELECT * FROM ALL_TABLESPACES;
2. 段 (Segments)
- USER_SEGMENTS:当前用户拥有的段。
- DBA_SEGMENTS:数据库中所有段的信息(需要DBA权限)。
- ALL_SEGMENTS:当前用户可访问的所有段。
-- 查询当前用户拥有的段 SELECT * FROM USER_SEGMENTS;-- 查询数据库中所有段的信息(需要DBA权限) SELECT * FROM DBA_SEGMENTS;-- 查询当前用户可访问的所有段 SELECT * FROM ALL_SEGMENTS;
3. 区 (Extents)
- USER_EXTENTS:当前用户拥有的区。
- DBA_EXTENTS:数据库中所有区的信息(需要DBA权限)。
- ALL_EXTENTS:当前用户可访问的所有区。
-- 查询当前用户拥有的区 SELECT * FROM USER_EXTENTS;-- 查询数据库中所有区的信息(需要DBA权限) SELECT * FROM DBA_EXTENTS;-- 查询当前用户可访问的所有区 SELECT * FROM ALL_EXTENTS;
4. 数据块 (Data Blocks)
- V$BH:显示当前实例中的缓冲区缓存信息,包括数据块的详细信息。
- DBA_HIST_FILESTATXS:历史文件统计信息,包括数据块的读写情况(需要AWR库权限)。
-- 查询当前实例中的缓冲区缓存信息 SELECT * FROM V$BH;-- 查询历史文件统计信息(需要AWR库权限) SELECT * FROM DBA_HIST_FILESTATXS;
示例查询
以下是一些具体的查询示例,帮助你获取数据库的逻辑存储结构信息:
查询所有表空间的信息
-- 查询当前用户拥有的表空间 SELECT tablespace_name, block_size, initial_extent, next_extent, min_extents, max_extents FROM USER_TABLESPACES;-- 查询数据库中所有表空间的信息(需要DBA权限) SELECT tablespace_name, block_size, initial_extent, next_extent, min_extents, max_extents FROM DBA_TABLESPACES;
查询所有段的信息
-- 查询当前用户拥有的段 SELECT segment_name, segment_type, tablespace_name, bytes / 1024 / 1024 AS size_mb FROM USER_SEGMENTS;-- 查询数据库中所有段的信息(需要DBA权限) SELECT owner, segment_name, segment_type, tablespace_name, bytes / 1024 / 1024 AS size_mb FROM DBA_SEGMENTS;
查询所有区的信息
-- 查询当前用户拥有的区 SELECT segment_name, tablespace_name, extent_id, file_id, block_id, blocks, bytes / 1024 / 1024 AS size_mb FROM USER_EXTENTS;-- 查询数据库中所有区的信息(需要DBA权限) SELECT owner, segment_name, tablespace_name, extent_id, file_id, block_id, blocks, bytes / 1024 / 1024 AS size_mb FROM DBA_EXTENTS;
查询缓冲区缓存中的数据块信息
-- 查询当前实例中的缓冲区缓存信息 SELECT t.object_name, bh.status, bh.file#, bh.block#, bh.class, bh.tch FROM V$BH bh JOIN DBA_OBJECTS t ON bh.objd = t.data_object_id;
通过这些数据字典视图和查询语句,你可以全面了解Oracle数据库的逻辑存储结构。请确保你有足够的权限来访问这些视图,如果需要更高的权限,请联系数据库管理员。
-
用动态性能视图查询Oracle实例当前状态
Oracle 提供了多个动态性能视图(V$ 视图)来查询实例的当前状态。这些视图提供了关于数据库实例运行时的各种信息,包括实例的状态、会话信息、内存使用情况等。以下是一些常用的动态性能视图及其查询示例,帮助你了解 Oracle 实例的当前状态。
1. 实例状态
- V$INSTANCE:显示当前实例的基本信息,如实例名、版本号、启动时间等。
- V$DATABASE:显示当前数据库的基本信息,如数据库名、状态等。
-- 查询当前实例的基本信息 SELECT * FROM V$INSTANCE;-- 查询当前数据库的基本信息 SELECT * FROM V$DATABASE;
2. 会话信息
- V$SESSION:显示当前所有会话的信息。
- V$ACTIVE_SESSION_HISTORY:显示活动会话的历史记录(需要诊断包许可)。
-- 查询当前所有会话的信息 SELECT sid, serial#, username, status, machine, program, logon_time FROM V$SESSION;-- 查询活动会话的历史记录(需要诊断包许可) SELECT sample_id, session_id, session_serial#, sql_id, event, wait_class, p1, p2, p3 FROM V$ACTIVE_SESSION_HISTORY;
3. 内存使用情况
- V$SGA:显示系统全局区 (SGA) 的信息。
- V$SGASTAT:显示 SGA 各个组件的详细统计信息。
- V P G A T A R G E T A D V I C E ∗ ∗ 和 ∗ ∗ V PGA_TARGET_ADVICE** 和 **V PGATARGETADVICE∗∗和∗∗VPGA_TARGET_ADVICE_HISTOGRAM:显示 PGA 内存使用建议。
-- 查询 SGA 的基本信息 SELECT * FROM V$SGA;-- 查询 SGA 各个组件的详细统计信息 SELECT name, bytes, pool FROM V$SGASTAT;-- 查询 PGA 内存使用建议 SELECT * FROM V$PGA_TARGET_ADVICE;-- 查询 PGA 内存使用建议的直方图 SELECT * FROM V$PGA_TARGET_ADVICE_HISTOGRAM;
4. 等待事件
- V$SYSTEM_EVENT:显示系统级等待事件的统计信息。
- V$SESSION_WAIT:显示当前会话的等待事件。
-- 查询系统级等待事件的统计信息 SELECT event, total_waits, time_waited, average_wait FROM V$SYSTEM_EVENT ORDER BY time_waited DESC;-- 查询当前会话的等待事件 SELECT sid, event, wait_time, seconds_in_wait, state FROM V$SESSION_WAIT;
5. 性能统计
- V$SYSSTAT:显示系统级性能统计信息。
- V$SESSSTAT:显示会话级性能统计信息。
-- 查询系统级性能统计信息 SELECT name, value FROM V$SYSSTAT WHERE name IN ('physical reads', 'consistent gets', 'db block changes', 'parse count (total)', 'execute count') ORDER BY name;-- 查询会话级性能统计信息 SELECT s.sid, s.serial#, st.name, st.value FROM V$SESSION s JOIN V$SESSTAT st ON s.sid = st.sid WHERE st.name IN ('physical reads', 'consistent gets', 'db block changes', 'parse count (total)', 'execute count') ORDER BY s.sid, st.name;
6. 后台进程
- V$BGPROCESS:显示后台进程的信息。
- V$PROCESS:显示所有与 Oracle 相关的进程信息。
-- 查询后台进程的信息 SELECT name, description, pid, status FROM V$BGPROCESS;-- 查询所有与 Oracle 相关的进程信息 SELECT spid, pid, username, program, status FROM V$PROCESS;
7. 锁信息
- V$LOCK:显示锁的信息。
- V$LOCKED_OBJECT:显示被锁定的对象信息。
-- 查询锁的信息 SELECT sid, id1, id2, lmode, request, type FROM V$LOCK;-- 查询被锁定的对象信息 SELECT object_id, session_id, oracle_username, os_user_name, locked_mode FROM V$LOCKED_OBJECT;
示例查询
以下是一些具体的查询示例,帮助你获取 Oracle 实例的当前状态:
查询当前实例和数据库的基本信息
-- 查询当前实例的基本信息 SELECT instance_name, version, startup_time, status FROM V$INSTANCE;-- 查询当前数据库的基本信息 SELECT name, db_unique_name, created, log_mode, open_mode, database_status FROM V$DATABASE;
查询当前所有会话的信息
SELECT sid, serial#, username, status, machine, program, logon_time FROM V$SESSION;
查询 SGA 的基本信息
SELECT name, value FROM V$SGAINFO;
查询系统级等待事件的统计信息
SELECT event, total_waits, time_waited, average_wait FROM V$SYSTEM_EVENT ORDER BY time_waited DESC;
通过这些动态性能视图和查询语句,你可以全面了解 Oracle 实例的当前状态。请确保你有足够的权限来访问这些视图,如果需要更高的权限,请联系数据库管理员。
-
以scott用户登录,查询该用户所具有的数据库对象
以
scott
用户登录后,你可以使用数据字典视图来查询该用户所拥有的数据库对象。以下是一些常用的查询示例,帮助你了解scott
用户所具有的数据库对象。1. 查询所有表
- USER_TABLES:显示当前用户拥有的所有表。
-- 查询 scott 用户拥有的所有表 SELECT table_name, tablespace_name, num_rows, blocks FROM USER_TABLES;
2. 查询所有视图
- USER_VIEWS:显示当前用户拥有的所有视图。
-- 查询 scott 用户拥有的所有视图 SELECT view_name, text FROM USER_VIEWS;
3. 查询所有索引
- USER_INDEXES:显示当前用户拥有的所有索引。
-- 查询 scott 用户拥有的所有索引 SELECT index_name, table_name, uniqueness, status FROM USER_INDEXES;
4. 查询所有序列
- USER_SEQUENCES:显示当前用户拥有的所有序列。
-- 查询 scott 用户拥有的所有序列 SELECT sequence_name, min_value, max_value, increment_by, last_number FROM USER_SEQUENCES;
5. 查询所有同义词
- USER_SYNONYMS:显示当前用户拥有的所有同义词。
-- 查询 scott 用户拥有的所有同义词 SELECT synonym_name, table_owner, table_name FROM USER_SYNONYMS;
6. 查询所有存储过程、函数和包
- USER_PROCEDURES:显示当前用户拥有的所有存储过程、函数和包。
-- 查询 scott 用户拥有的所有存储过程、函数和包 SELECT object_name, object_type, created, last_ddl_time FROM USER_OBJECTS WHERE object_type IN ('PROCEDURE', 'FUNCTION', 'PACKAGE', 'PACKAGE BODY');
7. 查询所有触发器
- USER_TRIGGERS:显示当前用户拥有的所有触发器。
-- 查询 scott 用户拥有的所有触发器 SELECT trigger_name, table_name, trigger_type, triggering_event, status FROM USER_TRIGGERS;
8. 查询所有类型
- USER_TYPES:显示当前用户拥有的所有自定义类型(如对象类型)。
-- 查询 scott 用户拥有的所有自定义类型 SELECT type_name, typecode, attributes, methods FROM USER_TYPES;
9. 查询所有约束
- USER_CONSTRAINTS:显示当前用户拥有的所有约束。
-- 查询 scott 用户拥有的所有约束 SELECT constraint_name, table_name, constraint_type, status FROM USER_CONSTRAINTS;
10. 查询所有列
- USER_TAB_COLUMNS:显示当前用户拥有的所有表的列信息。
-- 查询 scott 用户拥有的所有表的列信息 SELECT table_name, column_name, data_type, data_length, nullable FROM USER_TAB_COLUMNS;
示例查询
以下是一些具体的查询示例,帮助你获取
scott
用户所具有的数据库对象:查询所有表
SELECT table_name, tablespace_name, num_rows, blocks FROM USER_TABLES;
查询所有视图
SELECT view_name, text FROM USER_VIEWS;
查询所有索引
SELECT index_name, table_name, uniqueness, status FROM USER_INDEXES;
查询所有序列
SELECT sequence_name, min_value, max_value, increment_by, last_number FROM USER_SEQUENCES;
查询所有同义词
SELECT synonym_name, table_owner, table_name FROM USER_SYNONYMS;
查询所有存储过程、函数和包
SELECT object_name, object_type, created, last_ddl_time FROM USER_OBJECTS WHERE object_type IN ('PROCEDURE', 'FUNCTION', 'PACKAGE', 'PACKAGE BODY');
查询所有触发器
SELECT trigger_name, table_name, trigger_type, triggering_event, status FROM USER_TRIGGERS;
通过这些查询,你可以全面了解
scott
用户在 Oracle 数据库中所拥有的各种数据库对象。请确保你已经正确登录到scott
用户,并且具有足够的权限来访问这些数据字典视图。