OCP认证考试指南(3):创建Oracle数据库(1)

感觉这个还是分开写好了,数据库的创建工作,原以为好容易就是下一步下一步的问题,原来里面的内容还是很多的,包括体系结构要了解一些,DBCA建库是容易拉,不过要会手动建库那才叫酷嘛,拿个界面点下一步下一步谁不会啊,那还叫DBA啊?呵呵。

Oracle服务器由下列两个实体组成:实例(Instance)与数据库。实例由存储结构和进程组成,并且只短暂存在于RAM和CPU中。数据库由磁盘上的物理文件组成。

实例与数据库的关系是一对一的,一个实例连接一个数据库,但也有可能是多对一的,即不同计算机上的多个实例打开共享磁盘系统上的一个公用数据库。这种多对一关系被称为实际应用群集(Real Application Clusters,简写为RAC)。

下面我们根据这张图,来详细了解关于Oracle的体系结构:

oracle14

1、实例:存储结构与进程

一个Oracle实例由一块被称为系统全局区(System Global Area,简写为SGA)的共享内存以及若干进程组成。SGA至少包含共享池、数据库高速缓存区(Database Buffer Cache)以及日志缓冲区这三种数据结构,此外还可能包含大池、Java池或流池。启动实例会确定上述某些SGA结构的大小,而其他一些SGA结构的大小可以动态变化。不过,创建数据库时并不会确定任何SGA结构的大小,我们可以随时停止和重新启动实例,每次都将得到一种完全不同的内存配置。

记住:如果在现场系统中频繁地改变内存配置,并且都属于需要关闭实例的变化类型,那以会不断出现停机,从而造成终端用户的不满。

要查看SGA的大小,我们可以通过如下语句:

SQL> select * from v$sga;
 
NAME                      VALUE
-------------------- ----------
Fixed Size              1218868
Variable Size          79693516
Database Buffers      180355072
Redo Buffers            2973696

1.1、共享池(Shared Pool)

共享池是SGA中最关键的内存片段,特别是在性能和可伸缩性上。一个太小的共享池会扼杀性能,使系统停止,太大的共享池也会有同样的效果,将会消耗大量的CPU来管理这个共享池。不正确的使用共享池只会带来灾难。共享池主要又可以分为以下两个部分:

库缓存区(Library Cache),也叫SQL语句缓冲区。当一个用户提交一个SQL语句,Oracle会将这句SQL进行分析(Parse),这个过程类似于编译,会耗费相对较多的时间。在分析完这个SQL,Oracle会把他的分析结果给保存在Shared Pool的Library Cache中,当数据库第二次执行该SQL时,Oracle自动跳过这个分析过程,从而减少了系统运行的时间。这也是为什么第一次运行的SQL 比第二次运行的SQL要慢一点的原因。

对于保存在共享池中的SQL语句,可以从v$Sqltext、v$Sqlarea中查询到,对于编程者来说,要尽量提高语句的重用率,减少语句的分析时间。一个设计的差的应用程序可以毁掉整个数据库的Share Pool,提高SQL语句的重用率必须先养成良好的变成习惯,尽量使用Bind变量。

数据字典缓存区(Data Dictionary Cache),存储最近使用的对象定义,包括对表、索引、用户的描述以及其他元数据的定义。将上述这些定义存储在内存中的,就不必重复读取磁盘上的数据字典,从而能提高性能。

1.2、数据库高速缓存区(Database Buffer Cache)

Oracle执行SQL的工作区域。用户不必不断地更新磁盘上的数据,而是可以将数据复制至内存中的数据库高速缓存区中并在些进行更新。在理想情况下,所有被频繁的数据都位于数据库高速缓存区,从而最小化磁盘的I/O的需求。数据库的任何修改都在该缓冲里完成,并由DBWR进程将修改后的数据写入磁盘。由于操作系统寻址能力的限制,不通过特殊设置,在32位的系统上,块缓冲区高速缓存最大可以达到1.7G,在64位系统上,块缓冲区高速缓存最大可以达到10G。

1.3、日志缓冲区(Log Buffer)

日志文件的缓冲区,对数据库的任何修改都按顺序被记录在该缓冲,然后由LGWR进程将它写入磁盘。这些修改信息可能是DML语句,如(Insert,Update,Delete),或DDL语句,如(Create,Alter,Drop等)。

日志缓冲区的存在是因为内存到内存的操作比较内存到硬盘的速度快很多,所以重作日志缓冲区可以加快数据库的操作速度,但是考虑的数据库的一致性与可恢复性,数据在重做日志缓冲区中的滞留时间不会很长。所以重作日志缓冲区一般都很小,大于3M之后的重作日志缓冲区已经没有太大的实际意义。

1.4、大池(Large Pool)

大池是一个可选区域。如果创建了大池,那么各种进程都会自动使用大池;否则,各种进程就只能使用共享池中的内存。大池的得名不是因为大,而是因为它用来分配大块的内存,处理比共享池更大的内存,在8.0开始引入。

下面对象使用大池:

  • MTS在SGA的Large Pool中分配UGA
  • 语句的并行查询(Parallel Executeion of Statements)允许进程间消息缓冲区的分配,用来协调并行查询服务器
  • 备份(Backup)用于RMAN磁盘I/O缓存

1.5、Java程序缓冲区(Java Pool)

Java 的程序区,Oracle 8I 以后,Oracle 在内核中加入了对Java的支持。该程序缓冲区就是为Java 程序保留的。如果不用Java程序没有必要改变该缓冲区的默认大小。

1.6、流池(Stream Pool)

在这里对它不多做说明。

除SGA存储结构外,实例至少还具有5个进程:系统监视(System Monitor,简写为SMON)进程;进程监视(Process Monitor,简写为PMON)进程;数据库写入器(Database Writer,简写为DBWn,最多可以使用10个这样的进程)进程;日志写入器(Log Writer,简写为LGWR)进程;检查点(CheckPoint,简写为CKPT)进程。不论实例中是否确实有会话登录,甚至是还未创建或打开数据库,上述进程总是在实例运行时存在,因此它们都被称为“后台”进程。

我们可以通过如下方法查看后台进程:

$ ps -ef | grep ora_
oracle    3461     1  0 18:31 ?        00:00:00 ora_pmon_ocp
oracle    3467     1  0 18:31 ?        00:00:00 ora_dbw0_ocp
oracle    3469     1  0 18:31 ?        00:00:00 ora_lgwr_ocp
oracle    3471     1  0 18:31 ?        00:00:00 ora_ckpt_ocp
oracle    3473     1  0 18:31 ?        00:00:01 ora_smon_ocp
oracle    3955  3934  0 20:08 pts/1    00:00:00 grep ora_

1.7、SMON

主要功能是打开数据库,从而支持实例与数据库之间的连接。在正常运行期间,SMON能够完成一系列监视与整理操作。

1.8、PMON

管理用户会话,这个进程会在某个会话出现问题时执行适当的操作。用于清除失效的用户进程,释放用户进程所用的资源。

1.9、DBWn

负责数据库的所有写入。没有任何会话能够不断地更新磁盘上的数据。会话只更新数据库高速缓存区中的数据,之后,所有的更新都通过DBWn汇集写入磁盘。

1.10、LGWR

应用于数据库高速缓存区中数据的所有变化写入磁盘上的联机重做日志文件。与DBWn不同的是,这种磁盘写行为尽可能接近于实时完成。

1.11、CKPT

能够确保实例不时地与数据库同步。

此外,Oracle 10G还存在更多的后台进程,但这5个,我们必须记住。

2、数据库:物理结构

Oracle数据库由3种文件类型组成,外面还存在其它一些文件,但都是可选的。必须的文件是控制文件、联机重做日志文件以及数据文件。外部文件则包括初始化参数文件、口令文件与归档重做日志文件。

2.1、控制文件

每个数据库都具有一个控制文件(Controlfile),我们总是会创建这个控制文件的多个副本,从而在一个副本遭到破坏时能保证数据库的正常动作。控制文件虽然很小,通常只有几兆,但是至关重要,不可或缺。它包含指向数据库其余部分(联机重做日志与数据文件位置)的指针,此外还存储维护数据库完整性所需的信息(各种重要的序列号与时间标记)。如果使用Reover Manager(简写为RMAN),那么某些备份信息也会被存储在控制文件中。

控制文件的查询:

SQL> select NAME from v$controlfile;
 
NAME
----------------------------------------
/u02/oradata/ocp/control01.ctl
/u02/oradata/ocp/control02.ctl
/u02/oradata/ocp/control03.ctl

记住,控制文件的添加、删除或者移动这些操作只能在停机时间进行。

2.2、联机重做日志文件

每个数据库都具有至少两个联机重做日志文件(Redo Log File),与控制文件一样,总会为每个联机重做日志文件创建多个副本。联机重做日志由若干组重做日志文件组成,其中每个文件都被称为一个成员(Member)。要运行Oracle,需要至少两组重做日志文件,每组重做日志文件至少具有一个成员。考虑性能,我们可以创建两组以上的重做日志文件;考虑安全,可以为每组重做日志文件创建多个成员。最少需要两组重做日志文件,这是为了使一组重做日志文件能接受当前的变化,而另外的一组重做日志文件能够进行归档。我们是不必在数据库的创建阶段担心这个问题的,稍后的任意时间里,我们移动、添加或删除联机重做日志文件都可以在不停机的情况下“联机”执行。

下面的图,应该表明了切换归档的意思:

redo log

日志组的查询:

SQL> select GROUP,BYTES,STATUS from v$log;
 
    GROUP#      BYTES STATUS
---------- ---------- ----------------
         1   52428800 INACTIVE
         2   52428800 CURRENT
         3   52428800 INACTIVE

日志文件的查询:

SQL> select GROUP#,STATUS,TYPE from v$logfile;
 
    GROUP# STATUS  TYPE
---------- ------- -------
         3 STALE   ONLINE
         2         ONLINE
         1 STALE   ONLINE

2.3、数据文件

数据库创建阶段,必须至少创建两个数据文件。实际使用的数据库具有更多的数据文件。在数据库生存期内的任意时刻,数据文件都可以被重命名、重新分配大小、移动、添加或删除。

数据文件的查询:

SQL> select NAME from v$datafile;
 
NAME
----------------------------------------
/u02/oradata/ocp/system01.dbf
/u02/oradata/ocp/undotbs01.dbf
/u02/oradata/ocp/sysaux01.dbf
/u02/oradata/ocp/users01.dbf
/u02/oradata/ocp/example01.dbf

记住,对某些数据库文件的某些操作需要在停机时间进行。

3、逻辑结构:表空间与段

Oracle使用术语“段(Segment)”来描述包含数据的所有结构。最典型的段是包含数据记录的表,不过Oracle中还可能存在十几种段类型。我们这里关心表段、索引段以及撤销段。表段包含信息记录;索引段是一种用于快速访问任意特定记录的机制;撤销段是一种数据结构,这种数据结构被用于存储颠倒或回滚不希望持久的事务可能需要的信息。

借助于表空间,Oracle可以从物理的存储结构中抽取出逻辑的存储结构。从逻辑上看,表空间(TableSpace)是一个或多个段的集合;从物理上看,表空间是一个或多个数据文件的集合。按照关系分析,段与数据文件之间存在多对多关系:一个表可以被分割在多个数据文件中;一个数据文件可能包含多个表。通过在段与数据文件之间插入表空间实体,Oracle就解决了上述的多对多关系。

在数据库创建阶段,必须创建许多组成数据字典的段。这些段被存储在名为SYSTEM与SYSAUX的两个表空间内。

记住:在Oracle 10G版本中,创建数据库时必须创建SYSAUX表空间。如果没有进行指定,那么系统会默认创建这个表空间。

4、数据字典

数据字典被存储为SYSTEM与SYSAUX表空间内的若干段。

组成数据字典的段在许多方面与其他段相似,它们都只具有表与索引。这些段的主要差异在于:数据字典表在数据库创建阶段生成,并且不允许被直接访问。

为了查询数据字典,Oracle提供了一组视图。这些视图存在3种形式,前缀分别为“DBA_”、“ALL_”、“USER_”。

    • 前缀为“USER_”的视图:视图内填充的记录描述了查询该视图用户拥有的对象,因此不同的用户不可能看到相同的内容。
    • 前缀为“ALL_”的视图:视图内填充的记录搭档了访问的对象。因些,ALL_TABLES视图包含的记录既可以描述你自己的表,也可以描述给定可视权限的、属于其他用户的表。
    • 前缀为“DBA_”的视图:视图内填充的记录描述了数据中的所有对象。因此,无论表是由哪个用户创建的,对于数据库中的每个表来说,DBA_TABLES视图都包含用于该表的一个记录。

注意:显示数据库中所有表的视图是DBA_TABLES,而不是ALL_TABLES。

5、管理工具

Oracle Database 10G提供两种管理环境:Enterprise Manager Database Control 与 Enterprise Manager Grid Control。暂时我们用Database Control吧。

6、外部文件

数据库外部存在3种文件类型:参数文件、口令文件以及归档日志文件。

6.1、参数文件

参数文件定义了实例。参数文件中指定的实例参数主要控制各种存储结构的大小以及后台进程的行为,同时还会设置特定的限制。除了DB_NAME(数据库名称)之外,所有参数都存在默认值。这样,我们就能够完全依赖于默认参数值来启动一个实例。许多参数是动态的(参数值在实例运行和数据库打开时会发生变化),不过另外一些参数的值在实例启动时是固定的。除了DB_BLOCK_SIZE之外,通过关闭数据库、关闭实例、编辑参数文件以及再次启动数据库,所有的参数都能够在数据库创建之后被改变。

6.2、口令文件

Oracle提供两种不基于数据字典的身份验证方式,操作系统身份验证以及口令文件身份验证。

6.3、归档日志

归档日志是已填满的联机重做日志文件的副本。

暂时到这这吧,内容有些多,在创建数据库前先交代好数据库的一些文件等东西,之后就是用工具DBCA创建数据库和手动脚本创建数据库了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值