zftang
作者zftang·2020-04-26 10:07
其它·小白一枚

Oracle数据字典

字数 10899阅读 992评论 0赞 1

Oracle 数据字典 Oracle 数据库的重要部分是数据字典。它存放有 Oracle 数据库所用的有关信息,对用户来说是一组只读的表。数据字典内容包括:

数据库中所有模式对象的信息,如表、视图、簇、及索引等。

分配多少空间,当前使用了多少空间等。

列的缺省值。

约束信息的完整性。

Oracle 用户的名字。

用户及角色被授予的权限。

用户访问或使用的审计信息。

其它产生的数据库信息。

数据库数据字典是一组表和视图结构。它们存放在 SYSTEM 表空间中。

数据库数据字典不仅是每个数据库的中心。而且对每个用户也是非常重要的信息。用户可以用 SQL 语句访问数据库数据字典。

§2.2.2 表空间与数据文件简单说,表空间就是一个或多个数据文件(物理文件)的集合(逻辑文件)。一般有下面的表空间:

1 )系统表空间( System tablespace )

是各种不同版本的 Oracle 必备的部分,存放 Oracle 系统的一些信息,一般只有一个 SYSTEM 表空间。

2 )临时表空间( Temporary tablespace )

由于 Oracle 工作时经常需要一些临时的磁盘空间,这些空间主要用作查询时带有排序( Group by , Order by 等)等算法所用,当用完后就立即释放,对记录在磁盘区的信息不再使用,因此叫临时表空间。一般安装之后只有一个 TEMP 临时表空间。

3 )工具表空间( Tools tablespace )

用于保存 Oracle 数据库工具所需的数据库对象,这些工具表空间存放在工作时所用的专用表。旧的 Oracle 版本无此表空间。安装之后的工具表空间是 Tools.

4 )用户表空间( Users tablespace )

用于存放一些实验例子用的空间,当然也可以用于存放应用系统的数据。旧版本无 Users 表空间。现在的用户表空间为 USERS .

5 )数据及索引表空间存放数据及索引的表空间, Oracle7 以后都提倡在应用系统中,特别是具有大量数据的系统,要把数据和索引分开存放在不同的分区中,以便提高查询速度。在安装后索引表空间可能是 INDX. 数据表空间就是 USERS.

6 )回滚段表空间( Rollback Segment )

Oracle 数据库系统在运行 Insert 、 Update 、 Delete 时都需要一个磁盘空间来存放恢复信息( Undo Information ),以便在进行恢复时能将原来信息读出来。安装后的回滚段表空间是 RBS 表空间。数据库管理员也可根据应用的需要建立另外的回滚段表空间。

Oracle 以表空间来存储逻辑数据并 以物理数据相连。如图:

Tablespace 1 Tablespace 2

数据库被分成一个或多个逻辑部件称作表空间。而表空间又被分成称作段( segment )的逻辑部件。这些段再细分就叫扩展( extents )。

§2.2.3 Oracle 实例 Oracle 实例( Instance )是由一组后台进程和内存结构组成。每个运行的数据库系统都与实例有关。所以,有时称 Oracle 实例为数据库操作系统。下面是 Oracle 实例的解释。

Oracle 进程 Oracle 有两种类型的进程: 服务器进程和后台进程( server processes and background processes )。

服务器进程 Oracle 服务器进程是处理用户与实例连接的事务。任务是:

分析和执行应用所发出的 SQL 语句。

从数据文件读必要的数据到 SGA 区的共享数据区。

返回必要信息给应用。

后台进程 Oracle 系统使用一些附加的进程来处理系统的必须的工作。这些进程叫后台进程:

数据库写 ( DBW0 或 DBWn )

日志写 ( LGWR )

检测点 ( CKPT )

系统监视 ( SMON )

进程监视 ( PMON )

归档 ( ARCn )

恢复 ( RECO )

锁( LCK0 )

工作队列 ( SNPn )

队列监视 ( QMNn )

发布( Dispatcher ) ( Dnnn )

服务器 ( Snnn )

Oracle 的内存结构( SGA )

SGA 结构为:

数据高速缓冲区 l 重做日志缓冲区 l 共享池 l 大的共享池(可选)

数据字典缓冲区 l 其它数据缓冲区

§2.3 Oracle 数据库文件 ORACLE 数据库是一个复杂的数据库操作系统,由一系列部件组成,主要有: 1 )初始化参数文件、 2 )数据文件、 3 )控制文件、 4 )日志文件等。

§2.3.1 初始化参数文件初始化参数文件( initialization parameter file ) INITsid.ORA ,是 ORALE RDBMS 主要的配置点,它是配置参数和数值的集合。每一个参数值都控制或修改数据库和实例的某个方面。 早期的版本把参数都写在 initsid.ora 文件中,但在 ORACLE8 之后,多数参数已不在该文件中出现,需修改这些参数时只能在 SQL> ;下用 SET SESSION 或 SET SYSTEM 来进行。 查看系统参数可用。例如:

SQL> ; select * from v$parameter ;

来列出。

Oracle 初始化参数文件是一个可以编辑的文本文件。它是在数据库实例启动时被访问,从而得到数据文件、日志文件、控制文件等的路径,此外,初始化参数文件还提供实例所用的参数等。

初始化参数文件 INITsid.ORA 参见 附录 .

§2.3.2 数据文件用于存放所有数据库的数据文件, Oracle 安装过程中自动建立多个必要的数据文件。这些数据文件用于存放 Oracle 系统的基本数据。在应用系统开发过程中,我们可根据需要另建立一些数据文件。

如果数据文件按它们存放的数据类型来分的话,可以分为: l 用户数据

存放应用系统的数据为用户数据。

系统数据

管理用户数据和数据库系统本身的数据,如数据字典,用户建立的表的名字,类型等都记录在系统数据中。

§2.3.3 控制文件控制文件是由 Oracle 数据库实例在启动时被访问的内部二进制文件,它们所存放的路径由参数文件的 control_files= 参数来确定。

Oracle 一般有两个或更多的控制文件,每个控制文件记录有相同的信息,在数据库运行中如果某个控制文件出错时, Oracle 会自动使用另外一个控制文件。当所有的控制文件都损坏时系统将不能工作。

Oracle 数据库至少有一个控制文件; l 一般数据库系统安装完成后,自动创建两个以上控制文件; l 为了安全一般建议创建多个控制文件; l 控制文件可用下面命令查到:

select name , value from v$parameter where name like 'control_files' ;

§2.3.4 重做日志文件重做日志文件是 Oracle 系统中一个很重要的文件。特点是:

重做日志是 Oracle 的日记帐,负责记录所有用户对象或系统变更的信息; l 安装完成后有多个重做日志文件,它们是几个分为一组,组内的重做日志文件大小要一样; l 为了使系统性能更好可以在创建多重做日志文件组; l 重做日志文件可以名下面命令查到:

select * from v$logfile ;

§2.3.5 其它支持文件除了上面的三类文件外,还有: l Sqlnet.ora 文件; l Tnsnames.ora 文件; l Listener.ora 文件等。

§2.4 重做日志和重做日志工作模式重做日志、日志文件及重做日工作模式是 Oracle 系统中很重要的概念,管理员要完全理解它们的原理和使用方法。下面只给简单的概念,有关的管理在另外章节给出。

§2.4.1 重做日志 Oracle 所作的一切操作都记录在日志文件中, Oracle 系统在工作当中并不是每作一条记录的修改就立即存盘(写入数据文件),而是只作修改记录,联机重做日志就保存所有这些改变的信息。当所有的修改最后写入数据文件时,所有的修改仍记录在联机重做日志中,这将有利于对这些事务记录进行恢复操作。但如果不是联机重做日志,则只能恢复部分近期的操作。

§2.4.2 重做日志工作模式 Oracle 可以在两种模式之一来工作: 1 ) ARCHIVELOG 模式(可恢复)

Oracle 一般至少有两个日志文件。它们轮流交替地被写入所作的一切修改信息。当系统设置为可恢复模式, Oracle 自动将每次即将被覆盖(冲掉)的日志信息先作备份,然后再其上记录所修改的信息。这样的方式,就可以利用备份与恢复工作进行某时期的数据恢复。

2 ) NOARCHIVELOG 模式(有限的恢复)

缺省情况下为 NOARCHIVELOG , Oracle 不保留旧的重做日志信息(可以在原来基础覆盖写入)。因此一般情况下不可恢复的。

§2.5 数据块、区间和段 §2.5.1 数据块( data block )

Oracle 的数据块也叫 Oracle 块; l Oracle 系统在创建表空间时将数据文件格式化成若干个 Oracle 块; l 每个 Oracle 块是 Oracle 系统处理的最小单位; l 块的大小在安装系统时确定,可以选择 “ 自定义安装 ” 来设置大小; l 块的大小一旦确定下来就不能改动; l 块的大小可以从 2k 至 64k 不等; l 块的大小可以用下面命令查到:

select name , value from v$parameter where name like 'db_block_size' ;

§2.5.2 区间( extent )

分配给对象(如表)的任何连续块叫区间; l 区间也叫扩展,因为当它用完已经分配的区间后,再有新的记录插入就必须在分配新的区间(即扩展一些块); l 区间的大小由 next 决定; l 一旦区间分配给某个对象(表、索引及簇),则该区间就不能再分配给其它的对象; l 一个对象所用去多少区间可用下命令查到:

select segment_name , tablespace_name , count ( ) from dba_extents having count ( ) > ; 1 group by segment_name , tablespace_name ;

§2.5.3 段( segment )

段是指占用数据文件空间的通称,或数据库对象使用的空间的集合; l 段可以有表段、索引段、回滚段、临时段和高速缓存段等; l 段使用同表空间中的若干 Oracle 块(可以位于不同数据文件中)。

例: CREATE TABLE abc ( empno number ( 4 ), ename varchar2 ( 20 ), sal number ( 9 , 2 ))

TABLESPACE user_data storage ( initial 500k next 256k pctincrease 0 );

1) 段被分配=初始区间= 500k ;2) 当开始的 500k 用完后就再分配 256k ; 此时段= 500k+256k ;3) 如果所分配的区间又用完后,就再分配 256k , …

段( segment )、区间( extent )及块的关系( seg_ext_block )

§2.6 Oracle 数据库进程一般情况,当数据库启动完成后( Instance 启动成功)就至少有六个后台进程在活动,这些进程根据数据库的需要而分工不同。他们分别是:

1 )数据库写入器( DBWR )

数据库写入器( Database Writer )的任务是将修改后的(在内存)数据块写回数据库文件中。在某些操作系统中, Oracle 可以有两个 BDWR 进程。

2 )校验点( CKPT )

是一个可选进程。在系统运行中当出现查找数据请求时,系统从数据库中找出这些数据并存入内存区,这样用户就可以对这些内存区数据进行修改等。当需要对被修改的数据写回数据文件时就产生重做日志的交替写( Switch ),这时就出现校验点。系统要把内存中灰数据(修改过)块中的信息写回磁盘的数据文件中,此外系统还将重做日志通知控制文件。 DBA 可以改变参数文件中 CHECKPOINT_PROCESS TRUE 来使能( 使有效或无效)该进程。

3 )日志写入器( LGWR )

用于将 SGA 区中的日志信息写入日志文件的进程。一般是用户所作的修改值先记入日志文件。等到一定时才真正将修改结果写回数据文件。

4 )系统监控器( SMON )

系统监控器( System monitor )是在数据库系统启动时执行恢复工作的强制性进程。比如在并行服务器模式下(两台服务器共用一磁盘组), SMON 可以恢复另一台处于失败的数据库。使系统切换到另一台正常的服务器上。

5 )进程监控器( PMON )

进程监控器( Process Monitor )用于终止那些失败的用户,释放该用户所占用的资源等。

6 )归档器( ARCH )

可选进程,当数据库系统处于归档( ARCHIVELOG )模式时使用。

7 )锁( LCKn )

可选进程,当在并行服务器模式可出现多个锁定进程以利于数据库通信。

恢复器( RDCO )

分布式数据库(不同地点有不同机器和不同的 Oracle 系统)模式下使用的可选进程,用于数据不一致时作的恢复工作。在 RECO 解决恢复前,所作的修改数据的标志均标为 “ 可疑 ” 。

9 )调度( Dnnn )

可选进程,在多线程下使用,即对每个在用( D000 , …… , Dnnn )的通信协议至少创建一个调度进程,每个调度进程负责从所联接的用户进程到可用服务器进程的路由请求。把响应返回给合适的用户进程。

10 )快照进程( SNPn )

快照进程处理数据库快照的自动刷新,并通过 DBMS_JOB 包运行预定的数据库过程。 INITsid.ORA 参数 JOB_QUEUE_PROCESS 设置快照进程数, 参数 JOB_QUEUE_INTERVAL 决定快照进程在被唤醒以处理挂起的作业或事务之前休眠的秒数。

11 )并行查询进程( Pnnn )

可根据数据库的活动并行查询选项的设置, ORACLE 服务器起动或停止查询进程。这些进程涉及并行索引的创建,表的创建及查询。 启动的数量与参数 PARALLEL_MIN_SERVERS 指定的数量相同,不能超出该参数指定的值。

§2.7 Oracle 内存结构前面提到过 Oracle 的数据库实例是一组后台进程和内存结构组成。而内存结构是包括:

系统全局区( System Global Area )

程序全局区( Program Global Area )

§2.7.1 系统全局区 Oracle 系统用于存放系统信息的一块存储区域,用户进程和 Oracle 后台进程都可以使用 SGA. 在 SGA 中含有许多组件(不同的部分)。

数据高速缓冲区( Data Buffer Cache )

在数据高速缓冲区中存放着 Oracle 系统最近使用过的数据块(即用户的高速缓冲区),当把数据写入数据库时,它以数据块为单位进行读写,当数据高速缓冲区填满时,则系统自动去掉一些不常被用访问的数据。如果用户要查的数据不在数据高速缓冲区时, Oracle 自动从磁盘中去读取。数据高速缓冲区包括三个类型的区:

1 ) 脏的区( Dirty Buffers ):包含有已经改变过并需要写回数据文件的数据块。

2 ) 自由区( Free Buffers ):没有包含任何数据并可以再写入的区, Oracle 可以从数据文件读数据块该区。

3 ) 保留区( Pinned Buffers ):此区包含有正在处理的或者明确保留用作将来用的区。

Oracle8i 以后将缓冲池分为三个区(使用多个缓冲池特性时): 1 ) KEEP 缓冲池( KEEP buffer pool ):在内存中保留数据块,它们不会被从内存中挤掉; 2 ) RECYCLE 缓冲池从不需要的内存将数据移掉; 3 ) DEFAULT 缓冲池包含有被分配的块。

重做日志缓冲区( Rado Log Buffer )

任何事务( Transaction )在记录到重做日志(恢复工作需要使用联机重做日志)之前都必须首先放到重做日志缓冲区( Redo Log Buffer )中。然后由日志写入进程( LGWR )定期将此缓冲区的内容写入重做日志中。

共享池( Shared Pool )

共享池是 SGA 保留的区,用于存储如 SQL 、 PL/SQL 存储过程及包、数据字典、锁、字符集信息、安全属性等。共享池包含有: 1 ) 库高速缓存( Library Cache ); 2 ) 字典高速缓冲区( Dictionary Cache )。

库高速缓存( Library Cache )

该区包含有: 1 ) 共享 SQL 区( Shared Pool Area ); 2 ) 私有 SQL 区( Private SQL Area ); 3 ) PL/SQL 存储过程及包( PL/SQL Procedure and Package ); 4 ) 控制结构( Control Structure )。

也就是说该区存放有经过语法分析并且正确的 SQL 语句,并随时都准备被执行。

字典高速缓冲区( Data Dictionary Cache )

用于存放 Oracle 系统管理自身需要的所有信息,这些信息是登录到 Oracle 的用户名,这些用户有那些数据库对象以及这些数据库对象的位置等。

SVRMGR> ; Show SGA Total System Global Area 35544188 bytes Fixed Size 22208 bytes Variable Size 3376332 bytes Database Buffer 122880 bytes Redo Buffer 32768 bytes

后四项相加等于前一项。

也可以使用 select * from v$SGA ; 查询当前实例的 SGA.

l ) 大的池( Large Pool )

在 SGA 中大池是可选的缓冲区。它可以根据需要有管理权进行配置。它可以提供一个大的区以供象数据库的备份与恢复等操作。

2 )程序全局区( PGA )

PGA 是 Oracle 使用的内存区域,该区同一时间只能被一单个进程存放数据和控制,用于存放会话变量及内部数组等。

SGA Oracle 内存结构( SGA 图)

§2.7.2 程序全局区 PGA 是 Oracle 使用的内存区域,该区同一时间只能被一单个进程存放数据和控制,用于存放会话变量及内部数组等。

§2.8 Oracle 实例一个 Oracle 实例( Instance ) 是由 SGA ,后台进程以及数据文件组成,每个数据库有自己的 SGA 和独立的 Oracle 进程集。如图所示:

Oracle 实例和后台进程( instance 图)

在分布情况下,为使不同的数据库系统的名字不致混淆, Oracle 使用了一个 SID ( System Identifer )来标识每个 Oracle Server 的名字,在 UNIX 环境中以变量 Oracle_Sid 来区分。

§2.9 多线程服务器 ( MTS )

Oracle 多线程服务器( Multithreader Server )允许对数据库进行多个连接以充分共享内存和资源,这使得可以用较少的内存来支持较多的用户。

连接到 Oracle 数据库的进程都需要占用一定的内存空间,这样如果有过多的进程连接到 Oracle ,则出现了一个性能瓶颈。

Oracle8 可以允许一万个以上用户同时连接到 Oracle ,但并不是所有的用户都使用 MTS. 目前的一些 4GL 工具并不支持 MTS ,象 VB , PB 等不支持 MTS ,象 VC/C++ 可以支持 MTS. Oracle 多线程服务器有自己的连接池(即共享服务器进程)。由于用户共享开放连接,这比原来的专用方法快的多(消除瓶颈)。

多线程对于一些专用的应用系统来说是非常合适的,比如订单登记系统,顾客提交订单,录入员该订单的数据;另外的录入员在与顾客交涉,并不都在录入数据(专用服务器进程闲着)。单这些终端被迫与系统连着,占据了其他用户的资源。

多线程服务器则消除这些缺点。多线程服务器只维护一个连接池,当某个终端需和系统对话则给其分配一个连接即可。不需要则可以去掉。这样系统的资源被多个用户平摊。

改变参数文件中的相关参数来达到使系统成为多线程服务器配置(重新启动即可有效)。另外,数据库实例必须提供用户数目与所放置的一样才行。

§2.10 Oracle 事务处理流程银行取款业务处理流程:

  1. 发出查询余款的 SQL 语句,如: Select account_balance From banktable Where account_number='111222333' And account_type='SAVINGS' ;

l SQL 语句通过 SGA 得到服务器进程; l 服务器进程检查共享池中有无该条语句,无该条语句则将放置共享池中并准备运行; l 执行 SQL 语句,把存放有余款的数据块从数据文件中读到 SGA 的数据高速缓冲区; l 显示结果,比如余款为 $325.

  1. 取款 $25 : SQL 语句为: Update Bank_table set account_balanct=300 Where account_number='111222333' And account_type='SAVINGS' ;

l 客户进程通过 SGA 把 SQL 语句传给服务器进程; l 服务器进程查找有无该条语句,有执行(; l 分析 SQL 语句并存入共享池; l 执行 SQL 语句;

l 要处理的数据在数据高速缓冲区吗?是转 7 ; l 从数据文件中读数据块到数据高速缓冲区; l 在回滚段中记录原来的数值( $325 ); l 在重做日志中生成该事务的一个拷贝; l 将数据高速缓冲区中的余额改为 $300 ; l 银行柜员机通过 SGA 发出工作完成信号(提交): l 在重做日志中记录已完成事务; l 清除回滚段中的恢复信息( Undo Information ); l 顾客取钱完成。

§2.11 ORACLE 系统的 SYS 和 SYSTEM 模式 SYS 和 SYSTEM 是每个 ORACLE 数据库系统缺省安装的两个帐户。 SYS 是所有内部数据库表、结构、过程包、等拥有者,此外它还拥有 V$ 和数据字典视图,并创建所有封装的数据库角色( DBA , CONNECT , RESOURCE )。 Sys 是一个唯一能访问特定内部数据字典的用户。 System 也是在安装 ORACLE 时创建的用户,用于 DBA 任务的管理。

SYS 安装后的缺省口令为 change_on_install ; SYSTEM 缺省口令为 manager. 为了安全,可在安装完成后。 用 ALTER USER sys IDENTIFIED BY password ; 命令修改这两个特权帐户的口令。

§2.12 ORACLE 系统跟踪文件所有 ORACLE 数据库都至少有一个文件用于记录系统信息,错误及主要事件。这个文件叫做 ALERTsid.log (这里的 sid 为 oracle 的系统标识),存储位置由 INITsid.ORA 文件的 BACKGROUND_DUMP_DEST 参数给出。

后台进程和用户进程都可以建立各自的跟踪文件,后台进程跟踪文件位置由 BACKGROUND_DUMP_DEST 参数给出, 而用户跟踪文件位置由 USER_DUMP_DEST 参数给出。 如参数文件 initora8.ora 中给出:

define directories to store trace and alert files background_dump_dest=d : \oracle\admin\ora8\bdump user_dump_dest=d : \oracle\admin\ora8\udump 后台跟踪文件被命名为 sidPROC.TRC

§2.13 ORACLE 系统数据字典数据字典( data dictionary )是存储在数据库中的所有对象信息的知识库, ORACLE 数据库系统使用数据字典获取对象信息和安全信息,而用户和 DBA 用它来查阅数据库信息。数据字典保存数据对象和段的信息。如表、视图、索引、包、过程以及用户、权限、角色、审计等的信息。数据字典是只读对象,不允许任何人对其进行修改。

§2.14 其它数据对象 ORACLE 除前面给出的数据对象外,还有包括视图,序列,同义词,触发器,数据库链及程序包,过程和函数。下面是必要介绍。

§2.14.1 视图是存储在数据库中的查询的 SQL 语句,它主要出于两种主要原因:安全原因, 视图可以隐藏一些数据,如:社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,另一原因是可使复杂的查询易于理解和使用。

§2.14.2 序列是用于产生唯一数码的数据库对象,序列创建时带有 初始值,增量值,最大值等,最大可达 38 位整数。

§2.14.3 触发器触发器( trigger )是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由个事件来触发,比如当对一个表进行操作( insert , delete , update )时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS , USER_TRIGGERS 数据字典中查到。

§2.14.4 同义词( synonym )是指向其它数据库表的数据库指针。同义词有两种类型:私有( private )和公共( public )。私有的同义词是在指定的模式中创建并且只创建者使用的模式访问。公共同义词是由 public 指定的模式访问,所有数据库模式(用户)都可以访问它。

§2.14.5 数据库链( database link )是与远程数据库连接的存储定义, 它们用于查询分布数据库环境的远程者。 由于存储在 DBA_DB_LINKS 数据字典中,所以可以把它们看作一种数据库对象类型。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广