当前位置: 首页 > news >正文

Oracle数据库体系结构基础

关于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主要包括以下几个部分:

  1. 高速数据缓冲区 (Database Buffer Cache)

    • 存储最近访问的数据块。
    • 用于减少对物理磁盘的读取,提高性能。
    • 分为脏数据区、空闲区和保留区:
      • 脏数据区:存放已修改但未写入数据文件的数据。
      • 空闲区:可以被写入新数据的数据块。
      • 保留区:存放当前正在使用或保留以备将来使用的数据。
  2. 重做日志缓冲区 (Redo Log Buffer)

    • 暂存对数据库进行修改操作的日志信息。
    • 在检查点发生或达到一定量时,由LGWR进程将日志信息写入重做日志文件。
    • 大小由 LOG_BUFFER 参数控制。
  3. 共享池 (Shared Pool)

    • 包含库高速缓冲区和字典高速缓冲区。
    • 库高速缓冲区缓存SQL语句和PL/SQL代码及其执行计划,减少解析时间。
    • 字典高速缓冲区存储数据字典信息。
    • 大小由 SHARED_POOL_SIZE 参数控制。
  4. 大型池 (Large Pool)

    • 非必需组件,用于特定场景减轻共享池压力,如备份恢复、并行查询等。
    • 大小由 LARGE_POOL_SIZE 参数控制。
  5. Java池 (Java Pool)

    • 提供内存空间给Java虚拟机使用,支持在数据库中运行Java程序。
    • 大小由 JAVA_POOL_SIZE 参数控制。
  6. 流池 (Streams Pool)

    • 用于数据库间的信息共享,大小由 STREAMS_POOL_SIZE 参数控制。

程序全局区 (Program Global Area, PGA)

  • 是每个服务器进程私有的内存区域。
  • 包含私有SQL区和会话区:
    • 私有SQL区:存储变量及SQL语句运行时的内存结构。
    • 会话区:存放用户的会话信息,如登录用户名。
  • 大小可以通过 pga_aggregate_target 参数查看和调整。

这些内存结构共同工作,优化了数据库的性能,并确保数据的一致性和可用性。管理员可以通过调整相关参数来优化SGA和PGA的大小,以适应不同的工作负载需求。

Oracle 进程相关

Oracle前台进程和后台进程概述

前台进程

前台进程主要包括用户进程和服务进程,它们不是Oracle实例的一部分,但负责与实例进行通信。

  1. 用户进程

    • 用户进程是生成或执行SQL语句的应用程序,如SQL*Plus或其他应用程序。
    • 连接:用户进程与数据库实例之间的通信渠道。
    • 会话:连接后用户与实例的交互方式,包括请求和响应。
  2. 服务进程

    • 用于处理用户会话中的SQL语句或命令。
    • 专用服务器模式:每个用户进程有一个专用的服务进程。
    • 共享服务器模式:多个用户进程通过分派程序连接到共享的服务进程。
后台进程

后台进程是运行在Oracle服务器端的程序,是Oracle实例的重要组成部分。主要后台进程包括:

  1. 数据写入进程 (DBWR)

    • 将高速数据缓冲区中的“脏”数据块(已修改但未写入磁盘的数据)写入数据文件。
    • 触发条件:
      • 缺少空闲数据块时。
      • 检查点事件发生时。
      • “脏”数据块在缓冲区中存放超过3秒时。
  2. 检查点进程 (CKPT)

    • 在检查点事件发生时,要求DBWR将“脏”数据块写入数据文件。
    • 检查点事件通常发生在日志切换时。
  3. 日志写入进程 (LGWR)

    • 将重做日志缓冲区中的日志信息写入重做日志文件。
    • 触发条件:
      • 提交事务时。
      • 重做日志缓冲区满1/3时。
      • 日志信息存放超过3秒时。
  4. 归档进程 (ARCH)

    • 只有在归档模式下才起作用。
    • 在日志文件组被覆盖前,将日志信息写入归档日志文件。
  5. 系统监控进程 (SMON)

    • 在数据库启动时执行恢复工作。
    • 在并行服务器模式下恢复失败的数据库。
  6. 进程监控进程 (PMON)

    • 监控其他进程的状态,清理失败的用户进程并释放资源。
  7. 锁定进程 (LCKN)

    • 可选进程,在并行服务器模式下管理锁。
  8. 恢复进程 (RECO)

    • 在分布式数据库模式下处理数据不一致问题。
  9. 调度进程 (DNNN)

    • 在共享服务器模式下使用,可以启动多个调度进程。
  10. 快照进程 (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体系结构对于管理数据库很有帮助。

实践与练习

  1. 简单了解Oracle数据库具有哪些数据字典和动态性能视图。

    答:上述的两张表

  2. 使用数据字典或性能视图查询数据库的物理存储结构

    答: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数据库的物理存储结构。请确保你有足够的权限来访问这些视图,如果需要更高的权限,请联系数据库管理员。

  3. 用数据字典查询数据库的逻辑存储结构

    ​ 在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数据库的逻辑存储结构。请确保你有足够的权限来访问这些视图,如果需要更高的权限,请联系数据库管理员。

  4. 用动态性能视图查询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 PGATARGETADVICEVPGA_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 实例的当前状态。请确保你有足够的权限来访问这些视图,如果需要更高的权限,请联系数据库管理员。

  5. 以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 用户,并且具有足够的权限来访问这些数据字典视图。

相关文章:

Oracle数据库体系结构基础

关于Oracle体系结构 基于Oracle11g体系结构 目标: 了解Oracle体系结构掌握逻辑存储结构掌握物理存储结构熟悉Oracle服务器结构熟悉常用的数据字典 Oracle数据库管理中的重要的三个概念 实例(instance):实例是指一组Oracle后台进程以及在服务器中分配…...

QT学习笔记4.5(文件、参数文件)

QT学习笔记4.5(文件、参数文件) 1.保存配置参数 1.使用QSettings保存到注册表,ini文件 2.文件存储:使用 QFile 和其他类将参数保存到文本文件、二进制文件、XMLWENJIAN、JSON 文件等。 文本文件:以简单的键值对格式…...

服务器虚拟化的详细学习要点

服务器虚拟化的详细学习要点可以归纳为以下几个方面: 1. 基本概念与原理 定义与原理:了解服务器虚拟化是一种将物理服务器资源转化为虚拟服务器资源的技术,允许在一台物理服务器上运行多个虚拟服务器。 虚拟化层次:理解虚拟化的不同层次,如裸机虚拟化(Type 1)和托管虚…...

创建一个Java Web API项目

创建一个Java Web API涉及多个步骤和技术栈,包括项目设置、依赖管理、数据访问层实现、业务逻辑实现、控制层开发以及测试和部署。在这篇详解中,我将带领你通过一个完整的Java Web API实现流程,采用Spring Boot和MyBatis-Plus作为主要技术工具…...

对称加密算法的使用Java和C#

1. JAVA中的使用 1.1.原生使用 Main函数代码 import symmetric_encryption.AESExample; import symmetric_encryption.BlowfishExample; import symmetric_encryption.DESExample; import symmetric_encryption.TripleDESExample; public class App { public static…...

10款好用的开源 HarmonyOS 工具库

大家好,我是 V 哥,今天给大家分享10款好用的 HarmonyOS的工具库,在开发鸿蒙应用时可以用下,好用的工具可以简化代码,让你写出优雅的应用来。废话不多说,马上开整。 1. efTool efTool是一个功能丰富且易用…...

ubuntu22.04中备份Iptables的设置

在 Ubuntu 22.04 中备份 iptables 的设置,您可以采用以下几种方法: 使用 iptables-save 命令: 您可以使用 iptables-save 命令将当前的 iptables 规则保存到文件中。例如,要将规则保存到 /etc/iptables/rules.v4 文件中&#xff0…...

(PyTorch) 深度学习框架-介绍篇

前言 在当今科技飞速发展的时代,人工智能尤其是深度学习领域正以惊人的速度改变着我们的世界。从图像识别、语音处理到自然语言处理,深度学习技术在各个领域都取得了显著的成就,为解决复杂的现实问题提供了强大的工具和方法。 PyTorch 是一个…...

若依从redis中获取用户列表

因为若依放入用户的时候&#xff0c;会在减值中添加随机串&#xff0c;所以用户的key会在redis中变成&#xff1a; login_tokens:6af07052-b76d-44dd-a296-1335af03b2a6 这样的样子。 如果用 Set<Object> items redisService.redisTemplate.keys("login_tokens&…...

文件上传之%00截断(00截断)以及pikachu靶场

pikachu的文件上传和upload-lab的文件上传 目录 mime type类型 getimagesize 第12关%00截断&#xff0c; 第13关0x00截断 差不多了&#xff0c;今天先学文件上传白名单&#xff0c;在网上看了资料&#xff0c;差不多看懂了&#xff0c;但是还有几个地方需要实验一下&#…...

Chainlit集成LlamaIndex并使用通义千问实现和数据库交互的网页对话应用(text2sql)

前言 我在之前的几篇文章中写了如何使用Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用&#xff0c;但是发现Langchain的几种和数据库交互的组件都不够让我满意&#xff0c;虽然已经满足了大部分场景的需求&#xff0c;但是问题还是很多&#xff0c;比如…...

计组复习笔记

计组笔记 汇编部分 通用寄存器&#xff08;General Registers&#xff09;: AX (Accumulator): 用于累加运算&#xff0c;也是乘法和除法的默认寄存器。BX (Base Register): 可以用作一个基址寄存器&#xff0c;通常用于存放数据的基地址。CX (Counter Register): 通常用于循环…...

62. 环境贴图2

环境贴图作用测试 实际生活中光源照射到一个物体上&#xff0c;这个物体反射出去的光线也会影响其他的物体&#xff0c;环境贴图就是用一种简单方式&#xff0c;近似模拟一个物体周边环境对物体表面的影响。 测试&#xff1a;对于PBR材质&#xff0c;如果threejs三维场景不添…...

MATLAB中数据导入与导出的全面指南

在MATLAB中&#xff0c;数据的导入与导出是数据处理工作流中的两个基本步骤。导入是将外部数据加载到MATLAB工作区的过程&#xff0c;而导出则是将工作区中的数据保存到外部文件中。这两个步骤对于数据分析、可视化和结果共享至关重要。本文将详细介绍如何在MATLAB中进行数据的…...

Jenkins从入门到精通,构建高效自动化流程

目录 一、Jenkins简介1、Jenkins的历史与发展&#xff08;1&#xff09;Jenkins的起源&#xff08;2&#xff09;Jenkins的发展&#xff08;3&#xff09;Jenkins的社区与生态系统&#xff08;4&#xff09;Jenkins在我国的发展 2、Jenkins的核心功能3、Jenkins的应用场景 二、…...

【Android 13源码分析】Activity生命周期之onCreate,onStart,onResume-2

忽然有一天&#xff0c;我想要做一件事&#xff1a;去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…...

如何在电脑上浏览手机界面

联想浏览器中&#xff0c;点击右键-》检查&#xff0c;进入开发者工具&#xff1a; 点击如上&#xff0c;红色框框选中的手机浏览模式即可。...

国产RISC-V案例分享,基于全志T113-i异构多核平台!

RISC-V核心优势 全志T113-i是一款双核Cortex-A7@1.2GHz国产工业级处理器平台,并内置玄铁C906 RISC-V和HiFi4 DSP双副核心,可流畅运行Linux系统与Qt界面,并已适配OpenWRT系统、Docker容器技术。 而其中的RISC-V属于超高能效副核心,主频高达1008MHz,标配内存管理单元,可运…...

Day(16)--File

File File对象就是表示一个路径&#xff0c;可以是文件路径&#xff0c;也可以是文件夹的路径 这个路径可以是存在的&#xff0c;也允许是不存在的 常见的方法 public File(String pathname);//根据文件路径创建文件对象 public File(String parent,String child);//根据父路…...

Axios入门使用

文章目录 Axios入门使用一、引言二、Axios的安装与配置1、安装Axios2、创建Axios实例 三、发送HTTP请求1、GET请求2、POST请求3、并发请求 四、配置和拦截器1、配置默认值2、拦截器 五、错误处理和取消请求1、错误处理2、取消请求 四、总结 Axios入门使用 一、引言 随着前端技…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

结构化文件管理实战:实现目录自动创建与归类

手动操作容易因疲劳或疏忽导致命名错误、路径混乱等问题&#xff0c;进而引发后续程序异常。使用工具进行标准化操作&#xff0c;能有效降低出错概率。 需要快速整理大量文件的技术用户而言&#xff0c;这款工具提供了一种轻便高效的解决方案。程序体积仅有 156KB&#xff0c;…...