精华内容
下载资源
问答
  • 创建数据库

    2014-01-22 21:51:35
    本章学习创建一个数据库的理论和实践,通过相关工具,图形界面或者命令行和一些管理选项来创建数据库方面的技巧,从而对Oracle服务器体系结构又更进一步了解。但是往往这个过程让人感觉到神秘化。创建一个数据库并...
    本章学习创建一个数据库的理论和实践,通过相关工具,图形界面或者命令行和一些管理选项来创建数据库方面的技巧,从而对Oracle服务器体系结构又更进一步了解。但是往往这个过程让人感觉到神秘化。创建一个数据库并不是像人们想象的那么费力,只要你理解上面是必须的并且准备好适当的脚本你可以在喝一杯茶的时间内创建20个数据库。另外你不用担心如何正确的创建,几乎所有的事情都在创建的这个时候已经自己准备好了。它可能会让你想到这个数据库结构是如何一步一步的建立的,数据库的作用和运行环境,但是所有的这些问题都可以在创建后再进行改变(除了一个不能改变)。通常在这个阶段尽量使问题简单化。先创建并让它工作着,过后再考虑如何根据用户再进行配置。
    Oracle服务器的体系结构
    一个Oracle服务器包括两个实体:实例(instance)和数据库(database)(如图3-1)
                  图3-1
    它们是相互独立的并又连接起来。通过数据库创建进程首先创建实例然后才创建数据库。在一个典型的单一实例环境下实例和数据库是一对一的,一个单一的实例连接一个单一的数据库。但是通常情况下是实例和数据库是多对一的:在不同计算机上的多个实例在一个共享的磁盘系统下操纵一个公共数据库。比如大家所熟知的真正应用集群(Real Application Cluster),即RAC。RAC可以在执行,容错和可伸缩性方面具有令人惊讶的能力并是Oracle网格计算所必须的技术。在以前发布的RAC版本(或者更早的Oracle Parallel Server)都是额外收费附加产品。但是在Oracle Database 10g 标准版中,RAC是免费捆绑在其中的,这也表明Oracle公司很想向用户推广其RAC应用环境。标准版的RAC限制计算机的CPU数量最多不能超过2个,并且在一个集群环境中最多只能有4台计算机,但是尽管这样已经为用户提供了很强大的连接环境了。RAC在企业版中是需要额外购买才能使用的,其可伸缩性将更加有效,无任何限制除非你自己的硬件和操作系统本身有限制。它当然也可以一个实例通过数据库连接连接到多个数据库。在过去你可能处理过许多这样的情形:一个电脑上一个实例打开存储在本地磁盘上的一个数据库。
       实例(instance)有存储结构和进程组成。它在你的内存和CPU中的存在是短暂的。数据库(database)由磁盘上的物理文件组成。这样实例的生命周期仅仅是当它在内存中的那段时间---它可以被开始和停止。与之相比,数据库一旦被创建就一直存在除非你故意删除组成数据库的那些文件。在数据库的物理结构中,管理员和用户看到的是数据库的逻辑结构。Oracle数据库负责逻辑结构和物理结构的和对应:程序员不用知道数据库如何存取数据以及数据存放的具体位置,他们只需关注数据库的逻辑结构,比如表。同样管理员不可能知道哪个字节的数据在哪个物理结构中,唯一能看到的是系统中存放数据的文件而已。只有数据库管理员被允许(也是必须)即看到物理结构又能看到逻辑结构。数据字典包括描述整个服务器的元数据以及管理数据库物理结构和逻辑结构的一致性。创建数据字典是创建数据库所必须的一步。创建进程最后才通过产生一些必要的视图,PL/SQL包,和易于管理的Enterprise Manager Database Control使数据库可用。
    实例:存储结构和进程
    一个Oracle实例由一块被叫做系统全局区(System Global Area即SGA)和一些进程组成。系统全局区(SGA)至少包括3个数据区:共享池(shared pool),数据库缓冲区(database buffer cache)和日志缓冲区(log buffer)。通常情况下还有大池(large pool),java池(java pool)和流池(streams pool)。当开始一个实例,这些系统全局区的部分区块大小便被固定下来;而一些是可以动态改变的,但是没有一个是在数据库创建的时候固定下来的:你可以随时停止和重新开始一个实例,并为实例可以配置不同的SGA大小。
    考试小贴士:
    记住系统全局区(SGA)的组成:共享池,数据库缓冲区和日志缓冲区。
        共享池(shared pool)又可再细分为一些其它的组成结构。本书仅简单的介绍两种共享池组成结构:库缓冲区(library cache)和数据字典缓冲区(data dictionary cache)。库缓冲区主要用来以存储最近执行的代码的解析形态。解析是把程序员的代码转换成可执行的一个过程,这个比较慢的过程也是Oracle所必须的。通过缓存被解析的代码可以让这些解析过的代码重用,避免了再次缓慢的解析过程,从而大大提高了数据库性能。数据字典缓冲区用来存储最近用过的对象定义:有关表,索引,用户和其它元数据定义的描述。把这些信息放进内存然后再不断读取要比经常从磁盘中读取这些数据性能强多了。
        数据库缓冲区是Oracle执行SQL的工作区域。用户不必一直更新磁盘上的数据。Oracle将数据复制到内存中的数据库缓冲区并在那里更新。理想情况下,所有要经常存取的数据都将在数据库缓冲区里以达到减少磁盘I/O提高性能的作用。
       日志缓冲区是一个非常小的内存块,用来快速存储数据库缓冲区中数据变化信息。在第九章将详细讲解SQL撤销和操纵数据中日志缓冲区和数据库缓冲区的用处。
        大池是一个可有可无的内存区,如有大池可被一些进程自动使用,否则那些进程会自动使用共享池中的内存来代替大池的作用。在第十三章讨论共享服务器(或多线程服务器)将介绍大池的主要用途。在接下来的章节里介绍恢复管理器(Recovery Manager)和RMAN也将介绍大池的用处。
        java池仅当在数据库中有java存储过程需要处理时才要求用到,然而现在Oracle的很多部分也是有java写成的,所以java池在现在以成为被考虑的标准了。
        流池被Oracle流所用。
    小贴士:SGA的大小对性能很重要。通常应该足够大但是又不能太大。太大反而会降低性能!
        和SGA一样,实例至少要有5个进程:系统监视进程(SMON),进程监视进程(PMON),数据库写入进程(DBWn)(该进程最多可有10个),日志写入进程(LGWR)和检查点进程(CKPT)。这些就是大家所熟知的“后台进程”,因为无论是否有会话在实例或者甚至没有连接该实例的数据库被创建或者打开,只要实例在运行这些进程总是存在。
        SMON的主要作用是打开数据库:使实例和数据库能够连接。第五章将详细介绍这些。在日常运行中它肩负着大量的监控工作和整理工作。
        PMON监视用户会话,当会话出现问题时进行适当的操作。例如在用户已登录数据库但是电脑突然重新启动,PMON会检测到这个行为并整理用户刚才的工作。
        DBWn(或多个该进程 默认一个实例每8个CPU有一个数据库写入器)负责将所有数据写入数据文件。记住没有一个会话直接在磁盘上更新数据;它们仅仅在数据库缓冲区更新数据:所有更新的数据然后数据库写入进程负责再从数据库缓冲区写入磁盘。通常数据库写入进程会尽可能一点一点的缓慢写入。Oracle认为大量的磁盘I/O会降低性能,因此保持数据库写入进程以占用最小的资源向磁盘写入数据。
        LGWR将数据库缓冲区内的所有数据变化记录到磁盘的在线重做日志文件,与DBWn相比,LGWR的写入几乎是在瞬时完成的--当提交一个事务时,它几乎是实时完成的:迅速把高手日志缓冲区中的变化写入到磁盘的在线日志文件中。LGWR确保将所有用户的工作日志实时保存到磁盘从而确保一旦数据文件遭到破坏时,这些改变能被重新用到恢复备份上。通过这种机制,Oracle能确保从来不会丢失任何数据。
        CKPT负责确保实例与数据库的实时同步。原则上数据库总是是过期的:数据库的改变先是应用到内存中的缓冲区而并没有实时地被DBWn写入到磁盘中的数据文件中去(尽管这些改变被LGWR几乎实时的写入到在线日志文件)。某些场合可能要求强制把内存中数据库缓冲区的改变存储到数据文件中而达到即时更新改变。CKPT者控制着这种行为的发生频率。
    考试小贴士:记住5个必须的后台进程:系统监视进程(SMON),进程监视进程(PMON),数据库写入进程(DBWn)和日志写入进程(LGWR)。
        当然除了必须的后台进程外还有一些其它的可选进程(10g中比以前的版本中更多),这些在后面的章节中将会介绍。有些进程是可被调控的。比如你可以决定有多少个数据库写入进程运行,并可以控制将数据块从数据块缓冲区写入到数据文件的频率。
    数据库:物理结构
        Oracle数据库由3种类型的文件组成,当然严格的说还存在一些其它可选的文件类型存在。必须的文件是控制文件,在线重做日志文件,和数据文件。其它一些外部文件主要是初始化参数文件,密码文件和归档重做日志文件。
        每个数据库都有一个控制文件,但是一个有良好习惯的DBA总是会创建许多控制文件的副本以便一个控制文件损坏,数据库能幸免一难。如果所有的控制文件副本都丢失(尽管这种情况几乎不会存在)的化,就要进行数据库还原(recover)了,但是还是最好不让自己陷入这种困境。我们不用担心多个控制文件的同步问题,Oracle将会自己帮我们管理这些。控制文件虽小但是却有着重要的作用。它包括数据库中的一些指示器:在线重做日志文件和数据文件的存储位置。它也存储一些保证数据库完整性所必须的数据:各种临界段标志和时间周期标志。比如当用到Recovery Manager,RMAN工具时,一些备份信息也会被存储到控制文件中。控制文件大小通常也不过几MB大小而已,但是它却是必不可少的。控制文件是自动起作用的,你唯一能控制的是控制文件的副本个数以及副本所放置的地方。
        每个数据库至少有2个在线重做日志文件,但是同控制文件一样一个良好的DBA会创建每个在线重做日志文件的多个副本。在线重做日志文件储存着一系列按时间排序的有关应用到数据库的变化信息。这里是要求重建或者重做和改变所需的最基本的信息。重做日志包括数组重做日志文件,每个文件是一个成员。Oracle要求至少有2组且每组至少一个成员。考虑到性能原因可以创建多于2组并且为安全起见每组都至少2个以上成员。之所以要求至少要有两组在线重做日志是因为一个组可以接受当前的改变而另一组则一边备份日志(或者叫“归档”)。一个组是“当前”组:数据库的改变通过LGWR写入当前日志文件组。众所周之所有的用户都在数据库缓冲区更新数据并同时将改变信息传送到重做日志缓冲区。而LGWR不断地将重做日志缓冲区内的信息写入到当前在线日志组。重做日志文件的大小是看固定的,因此最终由这些文件成员组成的当前组会满的。而LGWR会执行一个叫做“日志交换”的操作。这个操作使第二组成为当前组并开始向其写入日志信息。如果你的数据库经过适当的配置,就会归档(也就是备份)这些日志文件成员组成第一组。当第二组满了的时候LGWR就会交换回到第一组使其再次成为当前组,然后覆盖写入日志数据。这样在线重做日志组就能循环使用而不用担心会满。
        同控制文件一样,如果每个日志组有很多成员(应该这样)并不需担心如何保证它们的同步性,LGWR确保把所有都写入进去,保证它们同步。假如丢失了一个组的一个成员,只要还存在其它成员,数据库就仍能继续运作。
        重做日志文件组的大小和成员数量的设置很重要。通常要选择一个适当的大小以分出来供重做日志组使用。一个非常繁忙的数据库比一个很大的静态数据库需要更多的重做日志组成员。每个日志组需要的成员数根据数据库的容错需要而定,然而在数据库创建的时候并不需要考虑这些。我们可以随时移走,增加或者删除重做日志文件,并且可以随时创建一个不同大小的重做日志文件。这些操作可以在线操作也就是并不需要关闭数据库才能操作。因此它们对终端用户是透明的。
        组成数据库的第三种文件是数据文件。在创建数据库的时候必须至少创建两个数据文件,在10g以前的版本可以只创建一个数据文件,但是从10g就必须创建至少2个数据文件。当然可以需要自己的需要可以创建更多的数据文件。
        数据文件主要用来存储数据库的数据的。它们的大小和数量在理论上是没有限制的。一个小型数据库可能仅仅有几GB大小,6个左右数据文件而每个数据文件也不过几百MB大小。一个大的数据库可能有数千个数据文件,大小受主机软硬件的限制依实际情况而不同。
        数据文件是系统管理员可以看到的物理结构,逻辑上它们以段存储程序员能看到的用户数据,这些段组成数据字典。数据文件可以在任何时候被重命名,改变大小,移动,增加,或者删除,但是要记住在一些数据文件的某些操作可能要求关闭数据库才能进行。
    逻辑结构:表空间和段
        组成数据库的物理结构是可以被系统管理员看见的操作系统文件。而用户看到的是逻辑结构比如表。Oracle用术语“段”描述任何包含数据的结构。一个典型的段是表包含数行数据,但是在Oracle中有很多类型的段,一些比较重要的段有表段,索引段,重做段,这些段在以后会详细介绍。现在我们需要知道的是一个表包含很多行数据信息;索引机制可以快速的让我们访问到任何一个我们所关注的行;重做段是用来存储那些可能需要被回滚的数据的数据结构。
        系统管理员看到的是物理结构而程序员看到的是逻辑结构。Oracle把物理存储以表空间抽象出来成为逻辑存储结构。一个表空间是逻辑上一个或者多个段的集合,物理上是一个或者多个数据文件的集合。段和数据文件是多对多的关系:一个表可以被分成多个数据文件,而一个数据文件也可能包含多个表。通过在段和数据文件件引入表空间的概念,解决Oracle中这种物理和逻辑上多对多的关系。
        一些段必须在数据库创建的时候就被创建:这些段组成数据字典。这些段存储在两个表空间中:SYSTEM和SYSAUX表空间。其中SYSAUX表空间是在10g版本中新增的:在以前的版本中所有的数据字典数据都在SYSTEM表空间。数据库创建进程必须至少创建这两个表空间并为每个表空间至少创建一个数据文件从而存储数据字典。
    考试小贴士:在10g版本中创建数据库时必须创建SYSAUX表空间,如果创建时没有指定的话,数据库创建进程会自动默认创建。
    数据字典
        数据字典就是元数据:关于数据的数据。它从物理和逻辑上描述数据库和数据库中的内容。用户定义,安全信息,完整性约束和性能监视信息(10g版本才有)都是数据字典的一部分。它以多个段的集合的形式存储在SYSTEM和SYSAUX表空间中。
        在很多方面,组成数据字典的段大多是表段和索引段。不同的是数据字典的表是在数据库创建的时候产生的,用户并不能直接访问它们。但是一个好奇的数据库管理员还是可以直接访问它们的,如果随便改变了这些表段的内容可能会破坏数据库造成不可挽回的错误。创建一个数据字典是由数据库创建进程来完成的。当用户使用CREATE TABLE命令或者GRANT等SQL命令时实际是在向数据字典的表中插入数据行。
        为了查询数据字典,Oracle提供了一些视图。这些视图主要有三中形式,视图名分别以DBA_,ALL_和USER_开头,以USER_开头的视图主要描述当前用户所拥有的对象,因此两个不同的用户查询以USER_开头的视图一定是不同的结果。以ALL_开头的视图主要描述当前用户连接的对象,这个对象可以属于当前用户也可以属于其它用户。以DBA_开头的视图包含描述数据库中任何对象的信息。这些视图由数据库创建进程在数据库创建阶段连同一些PL/SQL包一起被创建的。这些PL/SQL包是供数据库管理员管理数据库和程序员开发应用程序用的,PL/SQL代码也是存储在数据字典中的。
    考试小贴士:记住能让你查看数据库中所有表的信息的表是DBA_TABLES,而不是ALL_TABLES
    管理工具
        Oracle Database 10g提供两个管理环境:Enterprise Manager Database Control和Enterprise Manager Grid Control。这两个管理工具虽然是可选择的但是Oracle推荐使用它们,并不希望用户使用第三方工具管理,其中Grid Control功能更复杂更强大,但是需要额外付费购买。
    外部文件
        下面主要讨论在创建数据库之前的三个外部文件:参数文件,密码文件和归档日志文件。
        参数文件详细定义了一个实例。大家知道实例是由内存组织和进程组成。实例的一些特殊参数在参数文件中指定,比如各种内存组织应该多大,后台进程应该如何运行。参数文件也指定某些限制比如限制可以有多少个用户会话并发连接到实例。参数文件中的内容除了DB_NAME外其它都有默认值:DB_NAME指定实例要连接的数据库的名字。除了这个其它都可以保持默认,但是这样的实例并不会有什么实际用途。许多参数是动态的意味着这些参数的值可以在实例运行和数据库打开的情况下被改变,但是一些是在实例开始运行的时候被固定的。一个例外是所有的参数都可以在关闭数据库和停止实例后进行修改,具体过程是关闭数据库,停止实例,编辑参数文件,然后重新开始运行实例打开数据库。唯一一个不能过后被修改的是DB_BLOCK_SIZE(数据块大小)。在创建一个数据库之前必须先创建一个参数文件并用这个参数文件在内存中构建一个实例。
    小贴士:参数分为“基本”和“高级”,我们只需设置一些基本参数(数量少点)即可,那些高级参数(太多了)留着默认值即可。
        有两种参数文件:旧式的静态参数文件(通常命名为init/SID/.ora,/SID/是实例名)和自9i版本以来才有的动态参数文件(命名为spfileSID.ora)。静态参数文件类似文本文件,可以用任何文本编辑器对其编辑(在Windows可用记事本在Unix可用vi)。静态参数文件只在实例启动的时候被读取一次。动态参数文件是一个二进制文件,由Oracle本身维护和编辑,以命令的方式与用户交互。
        密码文件在Oracle中比较容易让人引起混乱,在一些不理解的人看来当数据库还没有打开的时候或者是数据库就根本没有创建异或实例还没有开始的时候是如何进行身份验证的呢,在他们看来,身份验证信息无非是存储在数据字典中的数据行,可以通过查询视图DBA_USERS查询到加密过的密码。当创建一个用户的时候无非就是向数据字典中的表插入一行数据。按照这样的逻辑,如果在还没有权限创建或者打开数据库时Oracle无法从数据字典查询身份信息也就无法验证你的身份让你连接数据库。为了解决这种问题,Oracle提供了两种不是基于数据字典的身份验证因此可以在数据库没有被打开甚至还没有创建数据库的情况下完成身份验证。这两种身份验证方法分别是操作系统验证和密码文件验证。
        操作系统验证是指Oracle把对用户的身份验证任务交给主机操作系统来完成。在安装的时候(不是创建数据库的时候)就已经指定了一个能拥有Oracle的操作系统组的名字,在Unix中默认是dba,在Windows是ORA_DBA。如果你没有以指定的组用户登录安装Oracle的主机操作系统,将不能连接到实例,或者打开和创建数据库。但是这种身份验证方法不适用于远程连接数据库,因为用于身份验证的信息是在安装Oracle的那台主机上的系统文件。而密码文件则可以用于远程连接数据库,在工作计算机上输入用户名和密码连接远程数据库而远程的计算机通过工作计算机上的密码文件来确认你的身份信息。如果不需要远程管理只要用操作系统验证就行了,但是出于某些特殊用途,最好要有密码文件。
        在后面的章节将介绍归档日志文件。它们是在线重做日志满了以后的拷贝:当在线重做日志被填满时它们以归档日志的形式被拷贝到其它地方存储,这样就可以提供一个完整的关于应用到数据库的变化信息。然而归档日志并不是Oracle强制要求的,而是出于商业需要避免丢失数据的一个措施。
    创建数据库
        创建数据库的步骤:
    1、创建一个参数文件和一个密码文件。
    2、用参数文件在内存中构建一个实例。
    3、使用CREATE DATABASE命令创建一个数据库,该命令将按默认创建一个数据库:一个控制文件,两个在线重做日志文件,两个分别用于SYSTEM和SYSAUX表空间的数据文件和一个数据字典。
    4、运行SQL脚本产生数据字典视图和一些应用PL/SQL包。
    5、运行SQL脚本产生Enterprise Manager Database Control和一些其它数据要求的选项(如java)。
        在Windows系统有个额外的步骤因为Oracle在Windows系统以服务的方式运行,要确保创建了这些服务。
    考试小贴士:你可以仅用两个单词就创建一个数据库,但是所有参数都是按默认的来创建。
        这些创建步骤可以通过一些交互式工具如SQL*Plus提示符或者图形界面工具数据库配置助手(DBCA)来完成。作为选择,你可以通过用脚本或者DBCA响应文件来自动化这个过程。无论在哪个平台,创建数据库最简单的方法是是通过DBCA。你可以把运行DBCA作为安装的一部分,在创建的整个过程中都会有一些提示信息。它将首先创建一个参数文件和一个密码文件并产生一个启动实例的脚本,然后创建数据库,产生数据字典,数据字典视图和企业管理控制器。当然你也可以手工建立参数文件和密码文件然后通过SQL*Plus会话完成剩下的工作。许多DBA都结合使用这两种方法,他们用DBCA产生文件和脚本然后通过手工修改后再由SQL*Plus运行。
        DBCA是用java语言写成的,因此可以跨平台。唯一不同的是Windows系统你必须在你要运行DBCA的计算机前工作才行,而在Unix系统你可在任何你想创建数据库的计算机上运行DBCA只要你有一个X-Window终端即可而无需坐在要运行DBCA的计算机前。在Unix系统可以设置环境变量DISPLAY告诉应用程序终端窗口的位置,例如:
    export DISPLAY=10.10.1065:0.0
    将指定X Window的IP地址是10.10.10.65而不管你实际运行DBCA是在哪个计算机。
    练习3-1用DBCA创建一个数据库
      在这个练习中首先用DBCA创建一个数据库并查看和解释它所产生的脚本。
      1、以Oracle拥有者的组成员用户登录操作系统。在Unix中默认组是dba,在Windows中默认组是ORA_DBA。
        2、配置软件安装的家目录ORACLE_HOME,在Unix中运行命令:echo $ORACLE_HOME
           在Windows中在安装时会自动写入注册表。
        3、配置包含Oracle目录bin的搜索路径。在Unix中用下面命令显示搜索路径:echo $PATH
           在Windows用命令:echo %PATH%
           在Unix系统需要一个额外的变量是DISPLAY。必须指定你工作的终端位置,可以用下面的命令查看:echo $DISPLAY
           如果你就在要安装软件的计算机上工作,那么DISPLAY设置可能就是
           export DISPLAY=127.0.0.1:0.0
        4、运行DBCA。在Unix系统是文件dbca;在Windows系统是文件dbca.bat。它位于ORACLE_HOME/bin目录也就是配置的搜索路径。
        5、接下来的安装就是按提示选择并点下一步即可,安装过程和其它软件一样,这里省略部分内容。
    数据库创建脚本
        在数据库创建的同时,看看DBCA产生的数据库创建脚本。DBCA会告诉你这些脚本的位置--通常在安装Oracle目录下的admin/<dbname>/scripts目录(dbname指的是你要创建的数据库的名字)。init.ora文件的内容类似如下:
    ############################################################################
    # Copyright (c) 1991, 2001, 2002 by Oracle Corporation
    ############################################################################
    ###########################################
    # Cache and I/O
    ###########################################
    db_block_size=8192
    db_cache_size=25165824
    db_file_multiblock_read_count=16
    ###########################################
    # Cursors and Library Cache
    ###########################################
    open_cursors=300
    ###########################################
    # Database Identification
    ###########################################
    db_domain=""
    db_name=ocp10g
    ###########################################
    # Diagnostics and Statistics
    ###########################################
    background_dump_dest=C:/oracle/admin/ocp10g/bdump
    core_dump_dest=C:/oracle/admin/ocp10g/cdump
    user_dump_dest=C:/oracle/admin/ocp10g/udump
    ###########################################
    # File Configuration
    ###########################################
    control_files=("C:/oracle/oradata/ocp10g/control01.ctl",
    "C:/oracle/oradata/ocp10g/control02.ctl",
    "C:/oracle/oradata/ocp10g/control03.ctl")
    db_recovery_file_dest=C:/oracle/flash_recovery_area
    db_recovery_file_dest_size=2147483648
    ###########################################
    # Job Queues
    ###########################################
    job_queue_processes=10
    ###########################################
    # Miscellaneous
    ###########################################
    compatible=10.1.0.2.0
    ###########################################
    # Pools
    ###########################################
    java_pool_size=0
    large_pool_size=8388608
    shared_pool_size=83886080
    ###########################################
    # Processes and Sessions
    ###########################################
    processes=150
    ###########################################
    # Security and Auditing
    ###########################################
    remote_login_passwordfile=EXCLUSIVE
    ###########################################
    # Sort, Hash Joins, Bitmap Indexes
    ###########################################
    pga_aggregate_target=25165824
    sort_area_size=65536
    ###########################################
    # System Managed Undo and Rollback Segments
    ###########################################
    undo_management=AUTO
    undo_tablespace=UNDOTBS1
        注意到这是个静态参数文件,进程随后会把它转化成动态参数文件。这些参数被用来在实例中构建一个实例,两个需要强调的变量是DB_BLOCK_SIZE和CONTROL_FILES。DB_BLOCK_SIZE决定数据库缓冲区中缓冲块的大小。当实例创建一个数据库时这个大小也被用来格式化组成SYSTEM和SYSAUX表空间的数据文件。DB_BLOCK_SIZE的大小在创建数据库后便不能再被改变。CONTROL_FILES指向允许实例发现的数据库控制文件,也包括控制文件的所有副本。在我们的练习中控制文件不存在:这个参数便会告诉实例在哪创建控制文件。Some of the other parameters are self-explanatory, but
    eventually you must refer to the Oracle Documentation Library (the volume you need
    is titled “Reference”) and read up on all of them. All!
    考试小帖士:数据块大小参数值在数据库创建后就再也不能改变了,而其它所有参数值都可以在数据库创建后再修改!
        下面是ocp10g.bat文件中的内容(在Unix中可能是个shell脚本):
    mkdir C:/oracle/admin/ocp10g/bdump
    mkdir C:/oracle/admin/ocp10g/cdump
    mkdir C:/oracle/admin/ocp10g/create
    mkdir C:/oracle/admin/ocp10g/pfile
    mkdir C:/oracle/admin/ocp10g/udump
    mkdir C:/oracle/flash_recovery_area
    mkdir C:/oracle/oradata/ocp10g
    mkdir C:/oracle/product/10.1.0/Db_1/database
    set ORACLE_SID=ocp10g
    C:/oracle/product/10.1.0/Db_1/bin/oradim.exe -new -sid OCP10G
    -startmode manual -spfile
    C:/oracle/product/10.1.0/Db_1/bin/oradim.exe -edit -sid OCP10G
    -startmode auto -srvcstart system
    C:/oracle/product/10.1.0/Db_1/bin/sqlplus /nolog
    @C:/oracle/admin/ocp10g/scripts/ocp10g.sql
        这个脚本创建一些目录,设置ORACLE_SID环境变量然后用ORADIM.EXE(本例在Windows系统下)为实例创建Windows服务并让它自动运行。然后运行SQL*Plus执行名为ocp10g.sql的脚本文件:
    set verify off
    PROMPT specify a password for sys as parameter 1;
    DEFINE sysPassword = &1
    PROMPT specify a password for system as parameter 2;
    DEFINE systemPassword = &2
    PROMPT specify a password for sysman as parameter 3;
    DEFINE sysmanPassword = &3
    PROMPT specify a password for dbsnmp as parameter 4;
    DEFINE dbsnmpPassword = &4
    host C:/oracle/product/10.1.0/Db_1/bin/orapwd.exe
    file=C:/oracle/product/10.1.0/Db_1/database/PWDocp10g.ora
    password=&&sysPassword force=y
    @C:/oracle/admin/ocp10g/scripts/CreateDB.sql
    @C:/oracle/admin/ocp10g/scripts/CreateDBFiles.sql
    @C:/oracle/admin/ocp10g/scripts/CreateDBCatalog.sql
    @C:/oracle/admin/ocp10g/scripts/emRepository.sql
    @C:/oracle/admin/ocp10g/scripts/postDBCreation.sql
        这个脚本提示一些在运行DBCA就已经提供的密码,然后调用ORAPWD.EXE(在Unix中为orapwd)创建一个外部密码文件。然后调用执行另外5个SQL脚本。第一个脚本是CreateDB.sql:
    connect SYS/&&sysPassword as SYSDBA
    set echo on
    spool C:/oracle/product/10.1.0/Db_1/assistants/dbca/logs/CreateDB.log
    startup nomount pfile="C:/oracle/admin/ocp10g/scripts/init.ora";
    CREATE DATABASE "ocp10g"
    MAXINSTANCES 8
    MAXLOGHISTORY 1
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    DATAFILE 'C:/oracle/oradata/ocp10g/system01.dbf' SIZE 300M
    REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
    EXTENT MANAGEMENT LOCAL
    SYSAUX DATAFILE 'C:/oracle/oradata/ocp10g/sysaux01.dbf' SIZE 120M REUSE
    AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
    DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE
    'C:/oracle/oradata/ocp10g/temp01.dbf' SIZE 20M REUSE AUTOEXTEND ON
    NEXT 640K MAXSIZE UNLIMITED
    UNDO TABLESPACE "UNDOTBS1" DATAFILE 'C:/oracle/oradata/ocp10g/undotbs01.dbf'
    SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED
    CHARACTER SET WE8MSWIN1252
    NATIONAL CHARACTER SET AL16UTF16
    LOGFILE GROUP 1 ('C:/oracle/oradata/ocp10g/redo01.log') SIZE 10240K,
    GROUP 2 ('C:/oracle/oradata/ocp10g/redo02.log') SIZE 10240K,
    GROUP 3 ('C:/oracle/oradata/ocp10g/redo03.log') SIZE 10240K
    USER SYS IDENTIFIED BY "&&sysPassword" USER SYSTEM IDENTIFIED BY
    "&&systemPassword";
    spool off
        这个脚本连接到实例,用语法通过密码文件进行身份验证。然后通过STARTUP NOMOUNT命令在内存中用之前提到的静态参数文件构建一个实例。有关NOMOUNT的重要性将在第5章中详细说明,现在只要知道必须这样就行了因为现在并没有数据库可以装载并打开。然后从CREATE DATABASE命令一直到文件结束是创建数据库。第一部分设置一些有管数据库的全局限制,不过这些设置过后都可以被修改的。接着是有关两个数据文件的详细设置:这些文件将被用于SYSTEM和SYSAUX表空间。接下来是指定TEMPORARY表空间和UNDO表空间(更多细节在16章中讲述)。然后指定字符集。直到9i版本,以前一旦字符集在创建的时候指定后就不能在修改了,而从9i版本以后这个设置就可以在以后需要修改的时候修改了。但是修改的过程还是比较麻烦的,因此建议创建的时候最好正确指定字符集。最后是定义三个在线日志文件组,每个组有一个成员,然后初始化数据库用户SYS和SYSTEM的密码。
        这一个文件就会创建一个数据库。当它成功执行完毕后将在内存中运行一个实例和一个由控制文件及其副本(通过参数CONTROL_FILES指定),数据文件和重做日志文件(CREATE DATABASE命令指定)组成的数据库。同时产生一个数据字典。尽管数据库已经被创建但是目前仍是不可用的,下面ocp10g.sql脚本调用的几个脚本将使数据库可用:
    CreateDBfiles.sql创建另外一个表空间作为用户数据的默认储存位置。
    CreateDBcatalog.sql产生数据字典视图和一些PL/SQL包。
    emRepository.sql产生企业管理控制器工具
    postDBcreation.sql作一些扫尾工作。
        以上所有过程都是由DBCA完成,作为测试,可以在Windows系统下的命令提示符中设置ORACLE_SID环境变量并登录新数据库:
    C:/>
    C:/>set ORACLE_SID=ocp10g
    C:/>sqlplus sys/oracle as sysdba
    SQL*Plus: Release 10.1.0.2.0 - Production on Sun Jul 25 12:34:14 2004
    Copyright (c) 1982, 2004, Oracle. All rights reserved.
    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
    With the Partitioning, OLAP and Data Mining options
    SQL> select name,open_mode from v$database;
    NAME OPEN_MODE
    --------- ----------
    OCP10G READ WRITE
    SQL>
    DBCA附加功能
        在运行DBCA的界面中有下面4个选项:
        创建一个数据库。
        配置数据库选项。
        删除一个数据库。
        管理模板。 
        配置数据库选项可以帮助修改一个已存在数据库的各种参数。
        如果以后要安装一些附加功能,比如Java或者OLAP,只需重新运行DBCA就可轻松实现,当然也可通过手工运行脚本来实现,但是这样难免会因粗心出现一些小错误,所以使用DBCA更方便。
        通过删除一个数据库的选项将会提示你选择向要删除的数据库然后会通过一些步骤删除所有组成数据库的文件并且在Windows系统还会调用ORADIM.EXE删除系统服务。
        最后管理模板为以后重新创建类似的数据库提供了方便。通过模板储存了创建一个数据所需的各种参数设置,为方便以后创建数据库,用户可以创建多个数据库模板,这样的需要创建这些类似参数数据库时就可以直接利用模板进行创建了,到时便可以为用户省下不少功夫。
    章节回顾
    章节开始详细介绍Oracle服务体系结构。对此有个深刻的理解对以后继续学习用处很大,必须熟悉这些有关实例和数据库的基本原理:内存结构,进程和文件类型。然后对数据字典的用处和内容有个大致的了解并对表空间内的段的逻辑结构作了简单的讨论。最后用DBCA创建数据库并熟悉各种脚本和命令的作用。
    习题
        1、下面哪个内存结构是SGA中所必须有的(3个答案)?
        A、数据库缓冲区
        B、Java池
        C、大池
        D、重做日志缓冲区
        E、共享池
        F、流池
        2、创建一个数据库,把下面步骤按正确顺序排列:
        A、建立数据字典
        B、创建一个参数文件
        C、创建数据字典视图
        D、使用CREATE DATABASE命令
        E、使用STARTUP NOMOUNT命令
        3、如果在用CREATE DATABASE命令创建数据库时没有指定SYSAUX数据文件,将会如何(选择最佳)?
        A、因为SYSAUX是必须的表空间所以这个命令会失败
        B、这个命令会成功执行但是必须在创建完数据库后增加一个SYSAUX表空间
        C、这个命令会成功执行并创建一个默认SYSAUX表空间
        D、这个命令会成功执行但是数据字典将会在SYSTEM表空间
        4、下面哪个在数据库创建后就再也不能被改变了(选择最佳)?
        A、数据块大小
        B、数据库字符集
        C、数据库名字
        D、以上都不对,所有值都可以在创建后修改
        5、创建数据库时下面哪个是必须的(选择最佳)?
        A、操作系统的root密码(Unix或Linux系统)或Administrator密码(Windows系统)
        B、运行DBCA的权限
        C、至少要有满足SGA需要的足够的物理内存大小
        D、以上都不对
        6、你在Unix或者Linux系统中运行DBCA,没有任何反应,可能是什么原因(选择最佳)?
      A、你不是dba组的成员
        B、你的DISPLAY变量设置的不是你当前的终端。
        C、你没有设置DISPLAY变量
        D、你没有设置ORACLE_SID变量
        7、下面哪些文件是可选的(3个答案)?
        A、在线重做日志文件
        B、参数文件
        C、密码文件
        D、SYSTEM表空间数据文件
        E、SYSAUX表空间数据文件
        F、UNDO表空间数据文件
        8、如果在用CREATE DATABASE命令创建数据库的时候没有指定一个UNDO表空间,将会怎样(选择最佳)?
        A、因为UNDO表空间是必须的所以这个命令将会失败
        B、这个命令会成功执行并创建一个默认UNDO表空间
        C、这个命令会成功执行但是你必须在过后创建一个UNDO表空间
        D、这个命令会成功执行,你可以在过后建立一个UNDO表空间
        9、你已经建立一个数据库但是却无法用Database Control连接到这个数据库,可能是什么原因(选择最佳)?
        A、你没有通过操作系统或者密码文件的身份验证
        B、你没有运行创建Database Control的脚本
        C、Grid Control是运行Database Control的前提条件
        D、你没有被授权使用Database Control
        10、数据字典是在什么时候建立的(选择最佳)?
        A、当你创建数据库的时候
        B、当你通过CreateDBcatalog.sql脚本调用运行脚本catalog.sql和catproc.sql的时候
        C、当SYSTEM和SYSAUX表空间创建的时候
        D、不需要创建,它总是实例的一部分
           11、下列哪些进程是可选的(3个答案)?
        A、归档进程
        B、检查点进程
        C、数据库监听进程 
        D、Grid Control Management 代理进程
        E、日志写入进程
        F、进程监视进程
        12、你创建一个数据库有两组在线重做日志组且每组都有一个成员,你必须如何作才能提供容错性(选择最佳)?
        A、增加存在的这两组的两组镜像
        B、每组增加一个成员
        C、无需作任何事,这些已经在创建的时候固定下来了
        D、无需作任何事情,第二组已经是第一组的镜像了
        13、哪个数据字典视图可以让你查看到数据库中所有的表(选择最佳)?
        A、ALL_TABLES
        B、DAB_TABLES
        C、USER_TABLES
        D、以上都不对,要查看所有的表必须直接查询数据字典
        14、下面哪个不是存储在数据字典中的(选择最佳)?
        A、用户定义信息
        B、提供的PL/SQL包
        C、数据字典视图
        D、以上都是存储在数据字典中
        15、你在运行DBCA的时候没有选择Oracle Java虚拟机,但是过后又想安装它的时候该怎么办(选择最佳)?
        A、在数据库中创建Java池
        B、运行脚本创建JVM
        C、删除数据库,重新创建数据库的时候选择JVM
        D、运行JVM后台进程
    答案
    1、ADF 
    2、BEDAC
    3、C
    4、A
    5、D
    6、B
    7、BCF
    8、D
    9、B
    10、A
    11、ACD
    12、B
    13、B
    14、D
    15、B
    展开全文
  • DB2数据库创建

    千次阅读 2019-02-01 23:35:56
    数据库、表空间、表的关系数据库由实例进行创建和管理 •数据库包含一到多个表空间 •表存储在表空间中 表空间、容器、区与数据页 •数据库的最小存储单位是数据页(datapage) •区(extent)由整数倍的数据页组成...

    创建DB2数据库

    DB2数据库概述

    数据库、表空间、表的关系

    •数据库由实例进行创建和管理

    •数据库包含一到多个表空间

    •表存储在表空间中
    在这里插入图片描述

    表空间、容器、区与数据页

    •数据库的最小存储单位是数据页(datapage)

    (extent)由整数倍的数据页组成

    •表空间容器(Container)是由多个区组成的

    表空间(Tablespace)由一到多个容器组成
    在这里插入图片描述

    容器与表空间

    •表、索引等逻辑对象放在表空间中

    •容器是位于底层的物理存储

    •表空间是数据库物理存储与逻辑存储的统一

    •容器可以是目录、文件或者设备
    在这里插入图片描述

    表空间存储的类型

    系统管理的空间(System-Managed Space,SMS):

    ​ — 表空间容器使用操作系统的目录

    ​ —操作系统的文件系统管理表空间的存储

    数据库管理的空间(Database-Managed Space,DMS):

    ​ —表空间容器可使用文件或者裸设备

    ​ —数据库管理表空间的存储

    DMS的自动存储(Automatic Storage With DMS):

    ​ —不是单独的表空间类型

    ​ —数据库使用预定义的容器管理表空间的存储

    •三种存储的表空间可以共存于同一个数据库

    创建数据库

    语法:
    在这里插入图片描述

    数据库的名称和分区

    在这里插入图片描述

    database-name 指定数据库的名称

    AT DBPARTIONNUM用于指定在哪个数据库的分区恢复数据库

    •最简单的建库命令: create database database_name

    数据库和自动存储的位置

    在这里插入图片描述

    在这里插入图片描述

    别名、代码页和整理次序

    在这里插入图片描述

    ALIAS db-alias为数据库指定别名

    CODESET(字符集)和TERRITORY(地域)用于指定代码页

    COLLATE指定数据库的整理次序

    数据页与默认区的大小

    在这里插入图片描述

    PAGESIZE指定数据库的表空间和缓冲池所使用的默认数据页大小

    DFT_EXTENT_SZ指定数据库的表空间默认使用的区的大小

    默认的表空间

    在这里插入图片描述

    •SYSCATSPACE:用CATALOG TABLESPACE指定,存储DB2系统编目,即“数据字典”

    •TEMPSPACE1:用TEMPORARY TABLESPACE指定,是DB2放置分组、排序、连接和重组等操作中间结果集的临时存储区域

    •USERSPACE1:用USER TABLESPACE指定,默认情况下存储所有用户对象的表空间

    数据库目录

    •数据库目录用于存储数据库的默认信息:如表空间、表、容器等信息

    •创建位置取决于创建数据库时指定的数据库路径

    分区全局目录结构:db_path/instance_name/NODE0000/SQL00001

    ​ —db_path:创建数据库时指定的路径

    ​ —instance_name:与实例名相同的子目录

    ​ —NODE0000:用于区分多分区数据库的逻辑分区

    ​ —SQL00001:包含第一个数据库以及随后所创建数据库相关联的对象

    特定成员目录:MEMBER0000

    分区全局目录

    •表空间信息文件

    ​ —SQLSPCS.1 和 SQLSPCS.2

    •存储器组控制文件

    ​ — SQLSGF.1 和 SQLSGF.2

    •全局配置文件

    ​ —SQLDBCONF

    •历史记录文件

    ​ —DB2RHIST.ASC 和DB2RHIST.BAK

    •与日志记录相关的文件

    ​ —SQLOGCTL.GLFH.1 和 SQLOGCTL.GLFH.2

    在这里插入图片描述

    特定成员目录

    •缓冲池信息文件

    ​ —SQLBP.1 和 SQLBP.2

    •本地事件监视器文件

    •与日志记录相关的文件

    ​ —SQLOGCTL.LFH.1

    ​ —SQLOGCTL.LFH.2

    ​ —SQLOGMIR.LFH

    •本地配置文件

    ​ —SQLDBCONF

    •锁定文件

    ​ —SQLINSLK 和 SQLTMPLK
    在这里插入图片描述

    数据库目录和文件

    当创建一个数据库时,关于该数据库的信息(包括缺省信息)会存储在目录层次结构中。

    系统已为您创建分层目录结构。可通过对 CREATE DATABASE 命令指定目录路径或驱动器来指定该结构的位置;如果未指定位置,那么会使用缺省位置。

    在您在 CREATE DATABASE 命令中您指定为数据库路径的目录中,会创建使用该实例名称的子目录。

    在实例名子目录内,会创建分区全局目录。分区全局目录包含与新数据库相关联的全局信息。分区全局目录名为NODExxxx/SQLyyyyy,其中 xxxx 是数据分区号,yyyyy 是数据库标记(编号大于等于 1)。

    分区全局目录下,会创建特定于成员的目录。特定于成员的目录包含本地数据库信息。特定于成员的目录名为 MEMBERxxxx,其中 xxxx 是成员号。在 DB2® pureScale® 环境中,每个成员都有一个名为 MEMBER0000、MEMBER0001 等特定于成员的目录。

    在分区数据库环境中,成员编号与其对应分区号之间存在一对一映射,因此,每个成员和分区对应一个 NODExxxx 目录。特定于成员的目录始终名为 MEMBERxxxx,并且它们始终驻留在分区全局目录下。

    企业服务器版环境在单个成员上运行,并且有一个特定于成员的目录,名为 MEMBER0000。

    分区全局目录

    分区全局目录具有以下路径:your_instance/NODExxxx/SQLxxxxx。

    分区全局目录包含以下文件:全局死锁写至文件事件监视器文件,它指定相对路径或根本不指定任何路径。

    表空间信息文件:SQLSPCS.1 和 SQLSPCS.2 文件都包含表空间信息。这两个文件互为副本以实现备份。

    存储器组控制文件SQLSGF.1 和 SQLSGF.2 包含与数据库的自动存储器功能相关联的存储器组信息。这两个文件互为副本,旨在进行维护和备份。这些文件是在您使用 CREATE DATABASE 命令创建数据库或将非自动存储器数据库升级至 DB2 V10.1 或更高版本时创建的。

    临时表空间容器文件新容器的缺省目录是 instance/NODExxxx/。这些文件由每个成员在本地管理。系统会使这些表空间文件名对每个成员唯一,方法是将成员号插入到文件名中,例如:

    /storage_path/SAMPLEDB/T0000011/C0000000.TMP/SQL00002.MEMBER0001.TDA

    全局配置文件。全局配置文件 SQLDBCONF 包含数据库配置参数,它们引用在数据库中必须保持一致的单个共享资源。切勿编辑此文件。要更改配置参数,请使用 UPDATE DATABASE CONFIGURATIONRESET DATABASE CONFIGURATION 命令。

    历史记录文件。DB2RHIST.ASC 历史记录文件及其备份 DB2RHIST.BAK 中包含关于备份、复原、表装入、表重组、表空间更改和其他数据库更改的历史记录信息

    DB2TSCHG.HIS 文件包含日志文件级别的表空间更改的历史记录。对于每个日志文件,DB2TSCHG.HIS 中包含有助于确定日志文件影响哪些表空间的信息。表空间恢复使用此文件中的信息来确定在进行表空间恢复期间要处理哪些日志文件。可在文本编辑器中检查历史记录文件的内容。

    与日志记录相关的文件。全局日志控制文件 SQLOGCTL.GLFH.1 和 SQLOGCTL.GLFH.2 包含数据库级别的恢复信息,例如,与数据库脱机时添加新成员及维护成员间的公共日志链相关的信息。日志文件本身存储在分区全局目录内的 LOGSTREAMxxxx 目录(每个成员对应一个目录)中。

    锁定文件。实例数据库锁定文件 SQLINSLK 和 SQLTMPLK 有助于确保数据库仅被数据库管理器的一个实例使用。

    自动存储器容器

    特定于成员的目录

    特定于成员的目录具有以下路径:/NODExxxx/SQLxxxx/MEMBERxxxx

    此目录包含与创建的第一个数据库相关联的对象,后续数据库被给予更高的编号 SQL00002,以此类推。这些子目录可以区分在CREATE DATABASE 命令中指定的目录下的实例中创建的数据库。

    数据库目录包含以下文件:缓冲池信息文件。SQLBP.1 和 SQLBP.2 文件都包含缓冲池信息。这两个文件互为副本以实现备份。

    本地事件监视器文件。

    与日志记录相关的文件。日志控制文件 SQLOGCTL.LFH.1 及其镜像副本 SQLOGCTL.LFH.2 和 SQLOGMIR.LFH 中包含有关活动日志的信息。在 DB2 pureScale 环境中,每个成员都有自己的日志流和本地 LFH 文件集,它们存储在每个特定于成员的目录中。

    提示: 将日志子目录映射至您未用于存储数据的磁盘。通过这样做,您可将磁盘问题限制为数据或日志方面,从而避免数据和日志同时出现磁盘问题。将日志子目录映射至未用于存储数据的磁盘可大幅提高性能,因为日志文件和数据库容器不会为同一磁盘头的移动而竞争。要更改日志子目录的位置,请使用 newlogpath 数据库配置参数。

    本地配置文件。本地 SQLDBCONF 文件包含数据库配置信息。切勿编辑此文件。要更改配置参数,请使用 UPDATE DATABASE CONFIGURATIONRESET DATABASE CONFIGURATION 命令。

    在创建数据库的同时,还创建了详细死锁事件监视器。在企业服务器版环境和分区数据库环境中,详细死锁事件监视器文件存储在目录节点的数据库目录中。在 DB2 pureScale 环境中,详细死锁事件监视器文件存储在分区全局目录中。当事件监视器达到它要输出的最大文件数时,它将取消激活,并且将把一条消息写入通知日志中。这样做可避免事件监视器使用太多磁盘空间。将不再需要的输出文件除去即可在下次激活数据库时再次激活事件监视器。

    如果是将现有的 DB2 V9.5 或 V9.7 数据库升级到 V10.5,那么数据库日志目录已更改。如果使用用户定义的日志目录(例如 /usr/logpath),那么在升级之后日志文件的位置是 /usr/logpath/NODE0000/LOGSTREAM0000。如果使用缺省数据库目录(例如 /home/db2user/db2inst/NODE0000/SQL00001/SQLOGDIR),那么在升级之后日志文件的位置是/home/db2user/db2inst/NODE0000/SQL00001/LOGSTREAM0000。在升级之后,旧的日志目录仅包含已重命名的日志文件。可在db2diag.log 文件中查看有关新日志目录的信息。

    非自动存储器数据库中的 SMS 数据库目录的其他信息

    在非自动存储器数据库中,SQLT* 子目录包含缺省系统管理的空间 (SMS) 表空间:SQLT0000.0 子目录中包含带有系统目录表的目录表空间。

    SQLT0001.0 子目录中包含缺省临时表空间。

    SQLT0002.0 子目录中包含缺省用户数据表空间。

    每个子目录或容器中都会创建一个名为 SQLTAG.NAM 的文件。这个文件可以标记正在使用中的子目录,因此在以后创建其他表空间时,不会尝试使用这些子目录。

    此外,名为 SQL*.DAT 的文件中还存储有关子目录或容器包含的每个表的信息。星号 (*) 将被唯一的一组数字取代,用来识别每个表。对于每个 SQL*.DAT 文件,可能有一个或多个下列文件,这取决于表类型、表的重组状态或者表是否存在索引、LOB 或 LONG 字段:SQL*.BKM(包含块分配信息,如果它是 MDC 或 ITC 表)

    SQL*.LF(包含 LONG VARCHAR 或 LONG VARGRAPHIC 数据)

    SQL*.LB(包含 BLOB、CLOB 或 DBCLOB 数据)

    SQL.XDA(包含 XML 数据)*

    SQL*.LBA(包含有关 SQL*.LB 文件的分配和可用空间信息)

    SQL*.INX(包含索引表数据)

    SQL*.IN1(包含索引表数据)

    SQL*.DTR(包含用于重组 SQL*.DAT 文件的临时数据)

    SQL*.LFR(包含用于重组 SQL*.LF 文件的临时数据)

    SQL*.RLB(包含用于重组 SQL*.LB 文件的临时数据)

    SQL*.RBA(包含用于重组 SQL*.LBA 文件的临时数据)

    更多相关概念与参考请登录官网查询(或者点击下面链接直接跳转):

    数据库配置文件

    节点目录
    数据库管理器在编目第一个数据库分区时会创建节点目录

    本地数据库目录
    在每条定义了数据库的路径中,都存在本地数据库目录文件。对于可从该位置访问的每个数据库,此目录中都包含一个相应的条目。

    系统数据库目录
    对于数据库管理器的每个实例,都存在一个系统数据库目录文件,该文件对于针对此实例编目的每个数据库都包含一个条目。

    创建节点配置文件
    如果数据库要在分区数据库环境中运行,那么必须创建一个名为 db2nodes.cfg 的节点配置文件。

    更改节点和数据库配置文件
    要更新数据库配置文件,请运行带有适当选项的 AUTOCONFIGURE 命令。

    数据库恢复日志
    数据库恢复日志保存对一个数据库所做的所有更改(包括新表的添加或对现有表的更新)的记录。
    实例和数据库目录的文件许可权要求

    实例

    恢复历史记录文件

    CREATE DATABASE 命令

    已安装的 DB2 数据库产品的目录结构 ( Windows )

    实践:

    #—数据库路径:/home/db2instl/mydb_path
    #—自动存储路径: /home/db2instl/mydb_path
    db2 "create database mydb1 on /home/db2instl/mydb_path"
     
    #—数据库路径: /home/db2instl/mydb_path
    #—未使用自动存储特性 
    db2 "create database mydb2 automatic storage no on /home/db2instl/mydb_path"
         
    
    #—数据库路径: /home/db2instl/mydb_path/dbpath3
    #—自动存储路径: /home/db2instl/mydb_path/auto3
    db2 "create db mydb3 on /home/db2instl/mydb_path/auto3 dbpath on /home/db2instl/mydb_path/dbpath3"
          
    
    
    #—数据库路径: /home/db2instl/mydb_path/db_path4
    #—自动存储路径: /home/db2instl/mydb_path/auto41, /home/db2instl/mydb_path/auto42
    db2 "create db mydb4 automatic storage yes on /home/db2instl/mydb_path/auto41,/home/db2instl/mydb_path/auto42 dbpath on /home/db2instl/mydb_path/db_path4"
           
    
    #查看是否创建成功:
    db2 list db directory
    
    展开全文
  • 数据库实训作业报告

    千次阅读 多人点赞 2019-09-10 23:16:23
    班级图书管理系统数据库 ...数据库的实现,创建表空间及表数据(代码及截屏) 7 创建视图、存储过程、触发器等的主要代码及功能说明 11 设计目的 现在图书馆馆藏书籍成千上万,每天读者也数不胜数,为了方...

    班级图书管理系统数据库

    小组成员:****
    班级:18安管1班
    日期:2019-6-27

    设计目的 3
    本组课题及分工 3
    数据库功能简介 3
    功能需求分析 4
    概念模型设计(E-R图) 5
    逻辑结构设计,转换成关系模型 6
    数据库的实现,创建表空间及表数据(代码及截屏) 7
    创建视图、存储过程、触发器等的主要代码及功能说明 11

    设计目的
    现在图书馆馆藏书籍成千上万,每天读者也数不胜数,为了方便图书馆管理员管理图书
    的入库,借阅,归还等情况,也为了方便广大学者快速查找到自己想看的图书,所以建立一个班级图书馆管理系统。

    本组课题及分工
    课题:班级图书管理系统数据库设计
    分工:概念结构设计,逻辑结构设计(共同)
    创建表,数据添加删除修改调用测试()
    创建储存函数,视图,触发器,索引()
    写报告 (共同)
    数据库功能简介
    在这里插入图片描述

    功能需求分析

    (1)读者管理
    a.读者添加
    此模块主要的实现功能是添加新的读者信息,其中信息分别包括图书证号、学生姓名、性别、系别、班级
    b.读者修改
    此模块主要的实现功能对有信息更新的读者进行即时修改,以随时更新读者在数据库中的信息。本模块通过图书证号确定读者,可对读者信息的借书证号、学生姓名、性别、系别、班级。
    c.读者查询
    此模块主要可对所要了解的读者信息,即把读者的信息从数据库调出来,查询方式分别有按借书证号查询、按姓名查询、按班级查询、按年级查询。
    d.读者删除
    此模块可以删除一些不再使用本系统的读者资料,从而达到对数据库中的清理,即清除一些不必要资料,此处有四种删除途径,分别为按借书证号删除、按姓名删除、按班级删除、按年级删除。
    (2)书籍管理
    a. 新书入库
    此模块主要的实现功能是将新来的图书输入到图书馆管理系统的书库当中,其中主要按如下信息往书库中输入
    书号|书名|作者|出版社|入库时间|是否借出|价格
    b. 书籍查询
    在图书馆管理系统中书籍查询是最基本的功能,读者可以根据自己的需求来查询想要借阅的书籍。可以按书号查询、按书名查询、按作者名查询、按出版社查询、按入库时间查询等基础查询。
    (3)书籍借阅与归还管理
    a. 借阅书籍
    此模块主要实现读者可凭有效的借书证号,借阅图书馆内未借出的图书。输入借书证号后,可显示了该借书证持有者的全部信息(包括借书证号、姓名、性别、所在班级、所属系部),供读者确认信息。通过输入有效的书号,查询该图书的全部信息(包括书号、书名、作者、出版社、是否借出、价格)。借阅成功后,将该借书证号、书号、借阅日期插入到数据库的表中进行记录。
    b. 归还书籍
    此模块主要实现读者凭所要归还图书的图书证号归还图书。输入所要归还的书号后,可显示了该图书证持有者的全部信息(包括借书证号、姓名、性别、所在班级、所属系部),供读者确认信息。还书成功后,从数据库中删除该书的借出记录,并插入归还日期。
    c.评信誉分
    此模块主要实现每个月计算一下信誉分。统计规则是借阅日期超过30分的扣一分。提醒读者按时还书。

    概念模型设计(E-R图)

    在这里插入图片描述

    班级图书管理系统数据库E-R图

    逻辑结构设计,转换成关系模型

    图书管理表 (书号、书名、作者、出版社、入库时间、是否借出、价格)
    读者管理表 (借书证号、姓名、性别、系别、班级)
    图书借阅管理表 (借书证号、书号、借阅日期、归还日期、信誉分)

    1. 物理结构设计,数据表

    books表:
    字段 类型 长度 null 键 默认值
    书号 char 20 no 主键 null
    书名 char 40 no null
    作者 char 30 no null
    出版社 char 30 no null
    入库时间 date no 2018-03-21
    是否借出 char 2 no 否
    价格 char 6 no null

    borrow表:
    字段 类型 长度 null 键 默认值
    借书证号 char 20 no 外键 null
    书号 char 20 no 外键 null
    借阅日期 date no null
    归还日期 date no null
    信誉分 int 10 no 100

    reader表:
    字段 类型 长度 null 键 默认值
    借书证号 char 20 no 主键 null
    姓名 char 10 no null
    性别 char 2 no 1
    系别 char 20 no null
    班级 int 10 no null

    数据库的实现,创建表空间及表数据(代码及截屏)

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    创建视图、存储过程、触发器等的主要代码及功能说明

    a.视图:
    mysql> create or replace view 信誉分情况
    -> as
    -> select 借书证号,信誉分 from borrow
    -> with check option;
    Query OK, 0 rows affected (0.33 sec)

    功能说明:通过借书证号直接查看信誉分

    b.储存函数
    mysql> delimiter mysql>createfunctionrizhi(numberchar(20))>returnschar(6)>begin>declarejiluchar(2);>selectintojilufrombooks>where=number;>ifjilu=then>return(select);>elseifjilu=then>return(select);>elsereturn(select);>endif;>endif;>end mysql> create function rizhi (number char(20)) -> returns char(6) -> begin -> declare jilu char(2); -> select 是否借出 into jilu from books -> where 书号=number; -> if jilu = '是' then -> return (select '已归还'); -> else if jilu = '否' then -> return(select '已借出'); -> else return (select '无效操作'); -> end if; -> end if; -> end
    Query OK, 0 rows affected (0.11 sec)

    功能说明:查询书籍的状态(已归还或者已借出)

    c. 事件
    mysql> create event startmonth
    -> on schedule every 1 month
    -> starts now()
    -> ends '2020-12-31'
    -> do update borrow set 信誉分=信誉分-1 where day(归还日期)-day(借阅日期)>=30;
    

    Query OK, 0 rows affected (0.09 sec)

    功能说明:每月查询评定信誉分

    d.触发器
    mysql> create trigger chufaqi after insert
    -> on borrow
    -> for each row
    -> set @status=‘操作成功’;
    -> delimiter $$
    Query OK, 0 rows affected (0.13 sec)

    功能说明:每记录一条借阅信息显示操作成功

    e.索引
    mysql> create index 借书证号索引
    -> on reader(借书证号(5) asc);
    Query OK, 0 rows affected (0.16 sec)
    Records: 0 Duplicates: 0 Warnings: 0

    功能说明: 根据reader表的借书证号列上的前5个字符建立一个升序索引借书证号索引

    1. 用建立的数据库对数据进行查询/添加/删除/修改等操作,运行存储过程/触发器并检查结果。

    单条件查询:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    运行存储过程:
    在这里插入图片描述

    多表查询:
    在这里插入图片描述

    分组查询:

    在这里插入图片描述

    添加

    在这里插入图片描述

    删除
    在这里插入图片描述

    触发器并检查

    在这里插入图片描述
    修改:

    在这里插入图片描述

    设计体会

    从数据库的E-R图到最后的数据库实现,会遇到很多问题,一个人解决不了,通过两个人交流讨论,最后总能找到解决办法。这就是团队的力量吧=_=。虽然设计实现的过程有点枯燥,但最后看到成果还是觉得有成就感的。
    
    展开全文
  • 第三章、创建数据库

    千次阅读 2009-01-24 17:52:00
    本章学习创建一个数据库的理论和实践,通过相关工具,图形界面或者命令行和一些管理选项来创建数据库方面的技巧,从而对Oracle服务器体系结构又更进一步了解。但是往往这个过程让人感觉到神秘化。创建一个数据库并...

     本章学习创建一个数据库的理论和实践,通过相关工具,图形界面或者命令行和一些管理选项来创建数据库方面的技巧,从而对Oracle服务器体系结构又更进一步了解。但是往往这个过程让人感觉到神秘化。创建一个数据库并不是像人们想象的那么费力,只要你理解上面是必须的并且准备好适当的脚本你可以在喝一杯茶的时间内创建20个数据库。另外你不用担心如何正确的创建,几乎所有的事情都在创建的这个时候已经自己准备好了。它可能会让你想到这个数据库结构是如何一步一步的建立的,数据库的作用和运行环境,但是所有的这些问题都可以在创建后再进行改变(除了一个不能改变)。通常在这个阶段尽量使问题简单化。先创建并让它工作着,过后再考虑如何根据用户再进行配置。
    Oracle服务器的体系结构
    一个Oracle服务器包括两个实体:实例(instance)和数据库(database)(如图3-1)
                  图3-1
    它们是相互独立的并又连接起来。通过数据库创建进程首先创建实例然后才创建数据库。在一个典型的单一实例环境下实例和数据库是一对一的,一个单一的实例连接一个单一的数据库。但是通常情况下是实例和数据库是多对一的:在不同计算机上的多个实例在一个共享的磁盘系统下操纵一个公共数据库。比如大家所熟知的真正应用集群(Real Application Cluster),即RAC。RAC可以在执行,容错和可伸缩性方面具有令人惊讶的能力并是Oracle网格计算所必须的技术。在以前发布的RAC版本(或者更早的Oracle Parallel Server)都是额外收费附加产品。但是在Oracle Database 10g 标准版中,RAC是免费捆绑在其中的,这也表明Oracle公司很想向用户推广其RAC应用环境。标准版的RAC限制计算机的CPU数量最多不能超过2个,并且在一个集群环境中最多只能有4台计算机,但是尽管这样已经为用户提供了很强大的连接环境了。RAC在企业版中是需要额外购买才能使用的,其可伸缩性将更加有效,无任何限制除非你自己的硬件和操作系统本身有限制。它当然也可以一个实例通过数据库连接连接到多个数据库。在过去你可能处理过许多这样的情形:一个电脑上一个实例打开存储在本地磁盘上的一个数据库。
       实例(instance)有存储结构和进程组成。它在你的内存和CPU中的存在是短暂的。数据库(database)由磁盘上的物理文件组成。这样实例的生命周期仅仅是当它在内存中的那段时间---它可以被开始和停止。与之相比,数据库一旦被创建就一直存在除非你故意删除组成数据库的那些文件。在数据库的物理结构中,管理员和用户看到的是数据库的逻辑结构。Oracle数据库负责逻辑结构和物理结构的和对应:程序员不用知道数据库如何存取数据以及数据存放的具体位置,他们只需关注数据库的逻辑结构,比如表。同样管理员不可能知道哪个字节的数据在哪个物理结构中,唯一能看到的是系统中存放数据的文件而已。只有数据库管理员被允许(也是必须)即看到物理结构又能看到逻辑结构。数据字典包括描述整个服务器的元数据以及管理数据库物理结构和逻辑结构的一致性。创建数据字典是创建数据库所必须的一步。创建进程最后才通过产生一些必要的视图,PL/SQL包,和易于管理的Enterprise Manager Database Control使数据库可用。
    实例:存储结构和进程
    一个Oracle实例由一块被叫做系统全局区(System Global Area即SGA)和一些进程组成。系统全局区(SGA)至少包括3个数据区:共享池(shared pool),数据库缓冲区(database buffer cache)和日志缓冲区(log buffer)。通常情况下还有大池(large pool),java池(java pool)和流池(streams pool)。当开始一个实例,这些系统全局区的部分区块大小便被固定下来;而一些是可以动态改变的,但是没有一个是在数据库创建的时候固定下来的:你可以随时停止和重新开始一个实例,并为实例可以配置不同的SGA大小。
    考试小贴士:
    记住系统全局区(SGA)的组成:共享池,数据库缓冲区和日志缓冲区。
        共享池(shared pool)又可再细分为一些其它的组成结构。本书仅简单的介绍两种共享池组成结构:库缓冲区(library cache)和数据字典缓冲区(data dictionary cache)。库缓冲区主要用来以存储最近执行的代码的解析形态。解析是把程序员的代码转换成可执行的一个过程,这个比较慢的过程也是Oracle所必须的。通过缓存被解析的代码可以让这些解析过的代码重用,避免了再次缓慢的解析过程,从而大大提高了数据库性能。数据字典缓冲区用来存储最近用过的对象定义:有关表,索引,用户和其它元数据定义的描述。把这些信息放进内存然后再不断读取要比经常从磁盘中读取这些数据性能强多了。
        数据库缓冲区是Oracle执行SQL的工作区域。用户不必一直更新磁盘上的数据。Oracle将数据复制到内存中的数据库缓冲区并在那里更新。理想情况下,所有要经常存取的数据都将在数据库缓冲区里以达到减少磁盘I/O提高性能的作用。
       日志缓冲区是一个非常小的内存块,用来快速存储数据库缓冲区中数据变化信息。在第九章将详细讲解SQL撤销和操纵数据中日志缓冲区和数据库缓冲区的用处。
        大池是一个可有可无的内存区,如有大池可被一些进程自动使用,否则那些进程会自动使用共享池中的内存来代替大池的作用。在第十三章讨论共享服务器(或多线程服务器)将介绍大池的主要用途。在接下来的章节里介绍恢复管理器(Recovery Manager)和RMAN也将介绍大池的用处。
        java池仅当在数据库中有java存储过程需要处理时才要求用到,然而现在Oracle的很多部分也是有java写成的,所以java池在现在以成为被考虑的标准了。
        流池被Oracle流所用。
    小贴士:SGA的大小对性能很重要。通常应该足够大但是又不能太大。太大反而会降低性能!
        和SGA一样,实例至少要有5个进程:系统监视进程(SMON),进程监视进程(PMON),数据库写入进程(DBWn)(该进程最多可有10个),日志写入进程(LGWR)和检查点进程(CKPT)。这些就是大家所熟知的“后台进程”,因为无论是否有会话在实例或者甚至没有连接该实例的数据库被创建或者打开,只要实例在运行这些进程总是存在。
        SMON的主要作用是打开数据库:使实例和数据库能够连接。第五章将详细介绍这些。在日常运行中它肩负着大量的监控工作和整理工作。
        PMON监视用户会话,当会话出现问题时进行适当的操作。例如在用户已登录数据库但是电脑突然重新启动,PMON会检测到这个行为并整理用户刚才的工作。
        DBWn(或多个该进程 默认一个实例每8个CPU有一个数据库写入器)负责将所有数据写入数据文件。记住没有一个会话直接在磁盘上更新数据;它们仅仅在数据库缓冲区更新数据:所有更新的数据然后数据库写入进程负责再从数据库缓冲区写入磁盘。通常数据库写入进程会尽可能一点一点的缓慢写入。Oracle认为大量的磁盘I/O会降低性能,因此保持数据库写入进程以占用最小的资源向磁盘写入数据。
        LGWR将数据库缓冲区内的所有数据变化记录到磁盘的在线重做日志文件,与DBWn相比,LGWR的写入几乎是在瞬时完成的--当提交一个事务时,它几乎是实时完成的:迅速把高手日志缓冲区中的变化写入到磁盘的在线日志文件中。LGWR确保将所有用户的工作日志实时保存到磁盘从而确保一旦数据文件遭到破坏时,这些改变能被重新用到恢复备份上。通过这种机制,Oracle能确保从来不会丢失任何数据。
        CKPT负责确保实例与数据库的实时同步。原则上数据库总是是过期的:数据库的改变先是应用到内存中的缓冲区而并没有实时地被DBWn写入到磁盘中的数据文件中去(尽管这些改变被LGWR几乎实时的写入到在线日志文件)。某些场合可能要求强制把内存中数据库缓冲区的改变存储到数据文件中而达到即时更新改变。CKPT者控制着这种行为的发生频率。
    考试小贴士:记住5个必须的后台进程:系统监视进程(SMON),进程监视进程(PMON),数据库写入进程(DBWn)和日志写入进程(LGWR)。
        当然除了必须的后台进程外还有一些其它的可选进程(10g中比以前的版本中更多),这些在后面的章节中将会介绍。有些进程是可被调控的。比如你可以决定有多少个数据库写入进程运行,并可以控制将数据块从数据块缓冲区写入到数据文件的频率。
    数据库:物理结构
        Oracle数据库由3种类型的文件组成,当然严格的说还存在一些其它可选的文件类型存在。必须的文件是控制文件,在线重做日志文件,和数据文件。其它一些外部文件主要是初始化参数文件,密码文件和归档重做日志文件。
        每个数据库都有一个控制文件,但是一个有良好习惯的DBA总是会创建许多控制文件的副本以便一个控制文件损坏,数据库能幸免一难。如果所有的控制文件副本都丢失(尽管这种情况几乎不会存在)的化,就要进行数据库还原(recover)了,但是还是最好不让自己陷入这种困境。我们不用担心多个控制文件的同步问题,Oracle将会自己帮我们管理这些。控制文件虽小但是却有着重要的作用。它包括数据库中的一些指示器:在线重做日志文件和数据文件的存储位置。它也存储一些保证数据库完整性所必须的数据:各种临界段标志和时间周期标志。比如当用到Recovery Manager,RMAN工具时,一些备份信息也会被存储到控制文件中。控制文件大小通常也不过几MB大小而已,但是它却是必不可少的。控制文件是自动起作用的,你唯一能控制的是控制文件的副本个数以及副本所放置的地方。
        每个数据库至少有2个在线重做日志文件,但是同控制文件一样一个良好的DBA会创建每个在线重做日志文件的多个副本。在线重做日志文件储存着一系列按时间排序的有关应用到数据库的变化信息。这里是要求重建或者重做和改变所需的最基本的信息。重做日志包括数组重做日志文件,每个文件是一个成员。Oracle要求至少有2组且每组至少一个成员。考虑到性能原因可以创建多于2组并且为安全起见每组都至少2个以上成员。之所以要求至少要有两组在线重做日志是因为一个组可以接受当前的改变而另一组则一边备份日志(或者叫“归档”)。一个组是“当前”组:数据库的改变通过LGWR写入当前日志文件组。众所周之所有的用户都在数据库缓冲区更新数据并同时将改变信息传送到重做日志缓冲区。而LGWR不断地将重做日志缓冲区内的信息写入到当前在线日志组。重做日志文件的大小是看固定的,因此最终由这些文件成员组成的当前组会满的。而LGWR会执行一个叫做“日志交换”的操作。这个操作使第二组成为当前组并开始向其写入日志信息。如果你的数据库经过适当的配置,就会归档(也就是备份)这些日志文件成员组成第一组。当第二组满了的时候LGWR就会交换回到第一组使其再次成为当前组,然后覆盖写入日志数据。这样在线重做日志组就能循环使用而不用担心会满。
        同控制文件一样,如果每个日志组有很多成员(应该这样)并不需担心如何保证它们的同步性,LGWR确保把所有都写入进去,保证它们同步。假如丢失了一个组的一个成员,只要还存在其它成员,数据库就仍能继续运作。
        重做日志文件组的大小和成员数量的设置很重要。通常要选择一个适当的大小以分出来供重做日志组使用。一个非常繁忙的数据库比一个很大的静态数据库需要更多的重做日志组成员。每个日志组需要的成员数根据数据库的容错需要而定,然而在数据库创建的时候并不需要考虑这些。我们可以随时移走,增加或者删除重做日志文件,并且可以随时创建一个不同大小的重做日志文件。这些操作可以在线操作也就是并不需要关闭数据库才能操作。因此它们对终端用户是透明的。
        组成数据库的第三种文件是数据文件。在创建数据库的时候必须至少创建两个数据文件,在10g以前的版本可以只创建一个数据文件,但是从10g就必须创建至少2个数据文件。当然可以需要自己的需要可以创建更多的数据文件。
        数据文件主要用来存储数据库的数据的。它们的大小和数量在理论上是没有限制的。一个小型数据库可能仅仅有几GB大小,6个左右数据文件而每个数据文件也不过几百MB大小。一个大的数据库可能有数千个数据文件,大小受主机软硬件的限制依实际情况而不同。
        数据文件是系统管理员可以看到的物理结构,逻辑上它们以段存储程序员能看到的用户数据,这些段组成数据字典。数据文件可以在任何时候被重命名,改变大小,移动,增加,或者删除,但是要记住在一些数据文件的某些操作可能要求关闭数据库才能进行。
    逻辑结构:表空间和段
        组成数据库的物理结构是可以被系统管理员看见的操作系统文件。而用户看到的是逻辑结构比如表。Oracle用术语“段”描述任何包含数据的结构。一个典型的段是表包含数行数据,但是在Oracle中有很多类型的段,一些比较重要的段有表段,索引段,重做段,这些段在以后会详细介绍。现在我们需要知道的是一个表包含很多行数据信息;索引机制可以快速的让我们访问到任何一个我们所关注的行;重做段是用来存储那些可能需要被回滚的数据的数据结构。
        系统管理员看到的是物理结构而程序员看到的是逻辑结构。Oracle把物理存储以表空间抽象出来成为逻辑存储结构。一个表空间是逻辑上一个或者多个段的集合,物理上是一个或者多个数据文件的集合。段和数据文件是多对多的关系:一个表可以被分成多个数据文件,而一个数据文件也可能包含多个表。通过在段和数据文件件引入表空间的概念,解决Oracle中这种物理和逻辑上多对多的关系。
        一些段必须在数据库创建的时候就被创建:这些段组成数据字典。这些段存储在两个表空间中:SYSTEM和SYSAUX表空间。其中SYSAUX表空间是在10g版本中新增的:在以前的版本中所有的数据字典数据都在SYSTEM表空间。数据库创建进程必须至少创建这两个表空间并为每个表空间至少创建一个数据文件从而存储数据字典。
    考试小贴士:在10g版本中创建数据库时必须创建SYSAUX表空间,如果创建时没有指定的话,数据库创建进程会自动默认创建。
    数据字典
        数据字典就是元数据:关于数据的数据。它从物理和逻辑上描述数据库和数据库中的内容。用户定义,安全信息,完整性约束和性能监视信息(10g版本才有)都是数据字典的一部分。它以多个段的集合的形式存储在SYSTEM和SYSAUX表空间中。
        在很多方面,组成数据字典的段大多是表段和索引段。不同的是数据字典的表是在数据库创建的时候产生的,用户并不能直接访问它们。但是一个好奇的数据库管理员还是可以直接访问它们的,如果随便改变了这些表段的内容可能会破坏数据库造成不可挽回的错误。创建一个数据字典是由数据库创建进程来完成的。当用户使用CREATE TABLE命令或者GRANT等SQL命令时实际是在向数据字典的表中插入数据行。
        为了查询数据字典,Oracle提供了一些视图。这些视图主要有三中形式,视图名分别以DBA_,ALL_和USER_开头,以USER_开头的视图主要描述当前用户所拥有的对象,因此两个不同的用户查询以USER_开头的视图一定是不同的结果。以ALL_开头的视图主要描述当前用户连接的对象,这个对象可以属于当前用户也可以属于其它用户。以DBA_开头的视图包含描述数据库中任何对象的信息。这些视图由数据库创建进程在数据库创建阶段连同一些PL/SQL包一起被创建的。这些PL/SQL包是供数据库管理员管理数据库和程序员开发应用程序用的,PL/SQL代码也是存储在数据字典中的。
    考试小贴士:记住能让你查看数据库中所有表的信息的表是DBA_TABLES,而不是ALL_TABLES
    管理工具
        Oracle Database 10g提供两个管理环境:Enterprise Manager Database Control和Enterprise Manager Grid Control。这两个管理工具虽然是可选择的但是Oracle推荐使用它们,并不希望用户使用第三方工具管理,其中Grid Control功能更复杂更强大,但是需要额外付费购买。
    外部文件
        下面主要讨论在创建数据库之前的三个外部文件:参数文件,密码文件和归档日志文件。
        参数文件详细定义了一个实例。大家知道实例是由内存组织和进程组成。实例的一些特殊参数在参数文件中指定,比如各种内存组织应该多大,后台进程应该如何运行。参数文件也指定某些限制比如限制可以有多少个用户会话并发连接到实例。参数文件中的内容除了DB_NAME外其它都有默认值:DB_NAME指定实例要连接的数据库的名字。除了这个其它都可以保持默认,但是这样的实例并不会有什么实际用途。许多参数是动态的意味着这些参数的值可以在实例运行和数据库打开的情况下被改变,但是一些是在实例开始运行的时候被固定的。一个例外是所有的参数都可以在关闭数据库和停止实例后进行修改,具体过程是关闭数据库,停止实例,编辑参数文件,然后重新开始运行实例打开数据库。唯一一个不能过后被修改的是DB_BLOCK_SIZE(数据块大小)。在创建一个数据库之前必须先创建一个参数文件并用这个参数文件在内存中构建一个实例。
    小贴士:参数分为“基本”和“高级”,我们只需设置一些基本参数(数量少点)即可,那些高级参数(太多了)留着默认值即可。
        有两种参数文件:旧式的静态参数文件(通常命名为init/SID/.ora,/SID/是实例名)和自9i版本以来才有的动态参数文件(命名为spfileSID.ora)。静态参数文件类似文本文件,可以用任何文本编辑器对其编辑(在Windows可用记事本在Unix可用vi)。静态参数文件只在实例启动的时候被读取一次。动态参数文件是一个二进制文件,由Oracle本身维护和编辑,以命令的方式与用户交互。
        密码文件在Oracle中比较容易让人引起混乱,在一些不理解的人看来当数据库还没有打开的时候或者是数据库就根本没有创建异或实例还没有开始的时候是如何进行身份验证的呢,在他们看来,身份验证信息无非是存储在数据字典中的数据行,可以通过查询视图DBA_USERS查询到加密过的密码。当创建一个用户的时候无非就是向数据字典中的表插入一行数据。按照这样的逻辑,如果在还没有权限创建或者打开数据库时Oracle无法从数据字典查询身份信息也就无法验证你的身份让你连接数据库。为了解决这种问题,Oracle提供了两种不是基于数据字典的身份验证因此可以在数据库没有被打开甚至还没有创建数据库的情况下完成身份验证。这两种身份验证方法分别是操作系统验证和密码文件验证。
        操作系统验证是指Oracle把对用户的身份验证任务交给主机操作系统来完成。在安装的时候(不是创建数据库的时候)就已经指定了一个能拥有Oracle的操作系统组的名字,在Unix中默认是dba,在Windows是ORA_DBA。如果你没有以指定的组用户登录安装Oracle的主机操作系统,将不能连接到实例,或者打开和创建数据库。但是这种身份验证方法不适用于远程连接数据库,因为用于身份验证的信息是在安装Oracle的那台主机上的系统文件。而密码文件则可以用于远程连接数据库,在工作计算机上输入用户名和密码连接远程数据库而远程的计算机通过工作计算机上的密码文件来确认你的身份信息。如果不需要远程管理只要用操作系统验证就行了,但是出于某些特殊用途,最好要有密码文件。
        在后面的章节将介绍归档日志文件。它们是在线重做日志满了以后的拷贝:当在线重做日志被填满时它们以归档日志的形式被拷贝到其它地方存储,这样就可以提供一个完整的关于应用到数据库的变化信息。然而归档日志并不是Oracle强制要求的,而是出于商业需要避免丢失数据的一个措施。
    创建数据库
        创建数据库的步骤:
    1、创建一个参数文件和一个密码文件。
    2、用参数文件在内存中构建一个实例。
    3、使用CREATE DATABASE命令创建一个数据库,该命令将按默认创建一个数据库:一个控制文件,两个在线重做日志文件,两个分别用于SYSTEM和SYSAUX表空间的数据文件和一个数据字典。
    4、运行SQL脚本产生数据字典视图和一些应用PL/SQL包。
    5、运行SQL脚本产生Enterprise Manager Database Control和一些其它数据要求的选项(如java)。
        在Windows系统有个额外的步骤因为Oracle在Windows系统以服务的方式运行,要确保创建了这些服务。
    考试小贴士:你可以仅用两个单词就创建一个数据库,但是所有参数都是按默认的来创建。
        这些创建步骤可以通过一些交互式工具如SQL*Plus提示符或者图形界面工具数据库配置助手(DBCA)来完成。作为选择,你可以通过用脚本或者DBCA响应文件来自动化这个过程。无论在哪个平台,创建数据库最简单的方法是是通过DBCA。你可以把运行DBCA作为安装的一部分,在创建的整个过程中都会有一些提示信息。它将首先创建一个参数文件和一个密码文件并产生一个启动实例的脚本,然后创建数据库,产生数据字典,数据字典视图和企业管理控制器。当然你也可以手工建立参数文件和密码文件然后通过SQL*Plus会话完成剩下的工作。许多DBA都结合使用这两种方法,他们用DBCA产生文件和脚本然后通过手工修改后再由SQL*Plus运行。
        DBCA是用java语言写成的,因此可以跨平台。唯一不同的是Windows系统你必须在你要运行DBCA的计算机前工作才行,而在Unix系统你可在任何你想创建数据库的计算机上运行DBCA只要你有一个X-Window终端即可而无需坐在要运行DBCA的计算机前。在Unix系统可以设置环境变量DISPLAY告诉应用程序终端窗口的位置,例如:
    export DISPLAY=10.10.1065:0.0
    将指定X Window的IP地址是10.10.10.65而不管你实际运行DBCA是在哪个计算机。
    练习3-1用DBCA创建一个数据库
      在这个练习中首先用DBCA创建一个数据库并查看和解释它所产生的脚本。
      1、以Oracle拥有者的组成员用户登录操作系统。在Unix中默认组是dba,在Windows中默认组是ORA_DBA。
        2、配置软件安装的家目录ORACLE_HOME,在Unix中运行命令:echo $ORACLE_HOME
           在Windows中在安装时会自动写入注册表。
        3、配置包含Oracle目录bin的搜索路径。在Unix中用下面命令显示搜索路径:echo $PATH
           在Windows用命令:echo %PATH%
           在Unix系统需要一个额外的变量是DISPLAY。必须指定你工作的终端位置,可以用下面的命令查看:echo $DISPLAY
           如果你就在要安装软件的计算机上工作,那么DISPLAY设置可能就是
           export DISPLAY=127.0.0.1:0.0
        4、运行DBCA。在Unix系统是文件dbca;在Windows系统是文件dbca.bat。它位于ORACLE_HOME/bin目录也就是配置的搜索路径。
        5、接下来的安装就是按提示选择并点下一步即可,安装过程和其它软件一样,这里省略部分内容。
    数据库创建脚本
        在数据库创建的同时,看看DBCA产生的数据库创建脚本。DBCA会告诉你这些脚本的位置--通常在安装Oracle目录下的admin/<dbname>/scripts目录(dbname指的是你要创建的数据库的名字)。init.ora文件的内容类似如下:
    ############################################################################
    # Copyright (c) 1991, 2001, 2002 by Oracle Corporation
    ############################################################################
    ###########################################
    # Cache and I/O
    ###########################################
    db_block_size=8192
    db_cache_size=25165824
    db_file_multiblock_read_count=16
    ###########################################
    # Cursors and Library Cache
    ###########################################
    open_cursors=300
    ###########################################
    # Database Identification
    ###########################################
    db_domain=""
    db_name=ocp10g
    ###########################################
    # Diagnostics and Statistics
    ###########################################
    background_dump_dest=C:/oracle/admin/ocp10g/bdump
    core_dump_dest=C:/oracle/admin/ocp10g/cdump
    user_dump_dest=C:/oracle/admin/ocp10g/udump
    ###########################################
    # File Configuration
    ###########################################
    control_files=("C:/oracle/oradata/ocp10g/control01.ctl",
    "C:/oracle/oradata/ocp10g/control02.ctl",
    "C:/oracle/oradata/ocp10g/control03.ctl")
    db_recovery_file_dest=C:/oracle/flash_recovery_area
    db_recovery_file_dest_size=2147483648
    ###########################################
    # Job Queues
    ###########################################
    job_queue_processes=10
    ###########################################
    # Miscellaneous
    ###########################################
    compatible=10.1.0.2.0
    ###########################################
    # Pools
    ###########################################
    java_pool_size=0
    large_pool_size=8388608
    shared_pool_size=83886080
    ###########################################
    # Processes and Sessions
    ###########################################
    processes=150
    ###########################################
    # Security and Auditing
    ###########################################
    remote_login_passwordfile=EXCLUSIVE
    ###########################################
    # Sort, Hash Joins, Bitmap Indexes
    ###########################################
    pga_aggregate_target=25165824
    sort_area_size=65536
    ###########################################
    # System Managed Undo and Rollback Segments
    ###########################################
    undo_management=AUTO
    undo_tablespace=UNDOTBS1
        注意到这是个静态参数文件,进程随后会把它转化成动态参数文件。这些参数被用来在实例中构建一个实例,两个需要强调的变量是DB_BLOCK_SIZE和CONTROL_FILES。DB_BLOCK_SIZE决定数据库缓冲区中缓冲块的大小。当实例创建一个数据库时这个大小也被用来格式化组成SYSTEM和SYSAUX表空间的数据文件。DB_BLOCK_SIZE的大小在创建数据库后便不能再被改变。CONTROL_FILES指向允许实例发现的数据库控制文件,也包括控制文件的所有副本。在我们的练习中控制文件不存在:这个参数便会告诉实例在哪创建控制文件。Some of the other parameters are self-explanatory, but
    eventually you must refer to the Oracle Documentation Library (the volume you need
    is titled “Reference”) and read up on all of them. All!
    考试小帖士:数据块大小参数值在数据库创建后就再也不能改变了,而其它所有参数值都可以在数据库创建后再修改!
        下面是ocp10g.bat文件中的内容(在Unix中可能是个shell脚本):
    mkdir C:/oracle/admin/ocp10g/bdump
    mkdir C:/oracle/admin/ocp10g/cdump
    mkdir C:/oracle/admin/ocp10g/create
    mkdir C:/oracle/admin/ocp10g/pfile
    mkdir C:/oracle/admin/ocp10g/udump
    mkdir C:/oracle/flash_recovery_area
    mkdir C:/oracle/oradata/ocp10g
    mkdir C:/oracle/product/10.1.0/Db_1/database
    set ORACLE_SID=ocp10g
    C:/oracle/product/10.1.0/Db_1/bin/oradim.exe -new -sid OCP10G
    -startmode manual -spfile
    C:/oracle/product/10.1.0/Db_1/bin/oradim.exe -edit -sid OCP10G
    -startmode auto -srvcstart system
    C:/oracle/product/10.1.0/Db_1/bin/sqlplus /nolog
    @C:/oracle/admin/ocp10g/scripts/ocp10g.sql
        这个脚本创建一些目录,设置ORACLE_SID环境变量然后用ORADIM.EXE(本例在Windows系统下)为实例创建Windows服务并让它自动运行。然后运行SQL*Plus执行名为ocp10g.sql的脚本文件:
    set verify off
    PROMPT specify a password for sys as parameter 1;
    DEFINE sysPassword = &1
    PROMPT specify a password for system as parameter 2;
    DEFINE systemPassword = &2
    PROMPT specify a password for sysman as parameter 3;
    DEFINE sysmanPassword = &3
    PROMPT specify a password for dbsnmp as parameter 4;
    DEFINE dbsnmpPassword = &4
    host C:/oracle/product/10.1.0/Db_1/bin/orapwd.exe
    file=C:/oracle/product/10.1.0/Db_1/database/PWDocp10g.ora
    password=&&sysPassword force=y
    @C:/oracle/admin/ocp10g/scripts/CreateDB.sql
    @C:/oracle/admin/ocp10g/scripts/CreateDBFiles.sql
    @C:/oracle/admin/ocp10g/scripts/CreateDBCatalog.sql
    @C:/oracle/admin/ocp10g/scripts/emRepository.sql
    @C:/oracle/admin/ocp10g/scripts/postDBCreation.sql
        这个脚本提示一些在运行DBCA就已经提供的密码,然后调用ORAPWD.EXE(在Unix中为orapwd)创建一个外部密码文件。然后调用执行另外5个SQL脚本。第一个脚本是CreateDB.sql:
    connect SYS/&&sysPassword as SYSDBA
    set echo on
    spool C:/oracle/product/10.1.0/Db_1/assistants/dbca/logs/CreateDB.log
    startup nomount pfile="C:/oracle/admin/ocp10g/scripts/init.ora";
    CREATE DATABASE "ocp10g"
    MAXINSTANCES 8
    MAXLOGHISTORY 1
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    DATAFILE 'C:/oracle/oradata/ocp10g/system01.dbf' SIZE 300M
    REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
    EXTENT MANAGEMENT LOCAL
    SYSAUX DATAFILE 'C:/oracle/oradata/ocp10g/sysaux01.dbf' SIZE 120M REUSE
    AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
    DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE
    'C:/oracle/oradata/ocp10g/temp01.dbf' SIZE 20M REUSE AUTOEXTEND ON
    NEXT 640K MAXSIZE UNLIMITED
    UNDO TABLESPACE "UNDOTBS1" DATAFILE 'C:/oracle/oradata/ocp10g/undotbs01.dbf'
    SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED
    CHARACTER SET WE8MSWIN1252
    NATIONAL CHARACTER SET AL16UTF16
    LOGFILE GROUP 1 ('C:/oracle/oradata/ocp10g/redo01.log') SIZE 10240K,
    GROUP 2 ('C:/oracle/oradata/ocp10g/redo02.log') SIZE 10240K,
    GROUP 3 ('C:/oracle/oradata/ocp10g/redo03.log') SIZE 10240K
    USER SYS IDENTIFIED BY "&&sysPassword" USER SYSTEM IDENTIFIED BY
    "&&systemPassword";
    spool off
        这个脚本连接到实例,用语法通过密码文件进行身份验证。然后通过STARTUP NOMOUNT命令在内存中用之前提到的静态参数文件构建一个实例。有关NOMOUNT的重要性将在第5章中详细说明,现在只要知道必须这样就行了因为现在并没有数据库可以装载并打开。然后从CREATE DATABASE命令一直到文件结束是创建数据库。第一部分设置一些有管数据库的全局限制,不过这些设置过后都可以被修改的。接着是有关两个数据文件的详细设置:这些文件将被用于SYSTEM和SYSAUX表空间。接下来是指定TEMPORARY表空间和UNDO表空间(更多细节在16章中讲述)。然后指定字符集。直到9i版本,以前一旦字符集在创建的时候指定后就不能在修改了,而从9i版本以后这个设置就可以在以后需要修改的时候修改了。但是修改的过程还是比较麻烦的,因此建议创建的时候最好正确指定字符集。最后是定义三个在线日志文件组,每个组有一个成员,然后初始化数据库用户SYS和SYSTEM的密码。
        这一个文件就会创建一个数据库。当它成功执行完毕后将在内存中运行一个实例和一个由控制文件及其副本(通过参数CONTROL_FILES指定),数据文件和重做日志文件(CREATE DATABASE命令指定)组成的数据库。同时产生一个数据字典。尽管数据库已经被创建但是目前仍是不可用的,下面ocp10g.sql脚本调用的几个脚本将使数据库可用:
    CreateDBfiles.sql创建另外一个表空间作为用户数据的默认储存位置。
    CreateDBcatalog.sql产生数据字典视图和一些PL/SQL包。
    emRepository.sql产生企业管理控制器工具
    postDBcreation.sql作一些扫尾工作。
        以上所有过程都是由DBCA完成,作为测试,可以在Windows系统下的命令提示符中设置ORACLE_SID环境变量并登录新数据库:
    C:/>
    C:/>set ORACLE_SID=ocp10g
    C:/>sqlplus sys/oracle as sysdba
    SQL*Plus: Release 10.1.0.2.0 - Production on Sun Jul 25 12:34:14 2004
    Copyright (c) 1982, 2004, Oracle. All rights reserved.
    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
    With the Partitioning, OLAP and Data Mining options
    SQL> select name,open_mode from v$database;
    NAME OPEN_MODE
    --------- ----------
    OCP10G READ WRITE
    SQL>
    DBCA附加功能
        在运行DBCA的界面中有下面4个选项:
        创建一个数据库。
        配置数据库选项。
        删除一个数据库。
        管理模板。
        配置数据库选项可以帮助修改一个已存在数据库的各种参数。
        如果以后要安装一些附加功能,比如Java或者OLAP,只需重新运行DBCA就可轻松实现,当然也可通过手工运行脚本来实现,但是这样难免会因粗心出现一些小错误,所以使用DBCA更方便。
        通过删除一个数据库的选项将会提示你选择向要删除的数据库然后会通过一些步骤删除所有组成数据库的文件并且在Windows系统还会调用ORADIM.EXE删除系统服务。
        最后管理模板为以后重新创建类似的数据库提供了方便。通过模板储存了创建一个数据所需的各种参数设置,为方便以后创建数据库,用户可以创建多个数据库模板,这样的需要创建这些类似参数数据库时就可以直接利用模板进行创建了,到时便可以为用户省下不少功夫。
    章节回顾
    章节开始详细介绍Oracle服务体系结构。对此有个深刻的理解对以后继续学习用处很大,必须熟悉这些有关实例和数据库的基本原理:内存结构,进程和文件类型。然后对数据字典的用处和内容有个大致的了解并对表空间内的段的逻辑结构作了简单的讨论。最后用DBCA创建数据库并熟悉各种脚本和命令的作用。
    习题
        1、下面哪个内存结构是SGA中所必须有的(3个答案)?
        A、数据库缓冲区
        B、Java池
        C、大池
        D、重做日志缓冲区
        E、共享池
        F、流池
        2、创建一个数据库,把下面步骤按正确顺序排列:
        A、建立数据字典
        B、创建一个参数文件
        C、创建数据字典视图
        D、使用CREATE DATABASE命令
        E、使用STARTUP NOMOUNT命令
        3、如果在用CREATE DATABASE命令创建数据库时没有指定SYSAUX数据文件,将会如何(选择最佳)?
        A、因为SYSAUX是必须的表空间所以这个命令会失败
        B、这个命令会成功执行但是必须在创建完数据库后增加一个SYSAUX表空间
        C、这个命令会成功执行并创建一个默认SYSAUX表空间
        D、这个命令会成功执行但是数据字典将会在SYSTEM表空间
        4、下面哪个在数据库创建后就再也不能被改变了(选择最佳)?
        A、数据块大小
        B、数据库字符集
        C、数据库名字
        D、以上都不对,所有值都可以在创建后修改
        5、创建数据库时下面哪个是必须的(选择最佳)?
        A、操作系统的root密码(Unix或Linux系统)或Administrator密码(Windows系统)
        B、运行DBCA的权限
        C、至少要有满足SGA需要的足够的物理内存大小
        D、以上都不对
        6、你在Unix或者Linux系统中运行DBCA,没有任何反应,可能是什么原因(选择最佳)?
      A、你不是dba组的成员
        B、你的DISPLAY变量设置的不是你当前的终端。
        C、你没有设置DISPLAY变量
        D、你没有设置ORACLE_SID变量
        7、下面哪些文件是可选的(3个答案)?
        A、在线重做日志文件
        B、参数文件
        C、密码文件
        D、SYSTEM表空间数据文件
        E、SYSAUX表空间数据文件
        F、UNDO表空间数据文件
        8、如果在用CREATE DATABASE命令创建数据库的时候没有指定一个UNDO表空间,将会怎样(选择最佳)?
        A、因为UNDO表空间是必须的所以这个命令将会失败
        B、这个命令会成功执行并创建一个默认UNDO表空间
        C、这个命令会成功执行但是你必须在过后创建一个UNDO表空间
        D、这个命令会成功执行,你可以在过后建立一个UNDO表空间
        9、你已经建立一个数据库但是却无法用Database Control连接到这个数据库,可能是什么原因(选择最佳)?
        A、你没有通过操作系统或者密码文件的身份验证
        B、你没有运行创建Database Control的脚本
        C、Grid Control是运行Database Control的前提条件
        D、你没有被授权使用Database Control
        10、数据字典是在什么时候建立的(选择最佳)?
        A、当你创建数据库的时候
        B、当你通过CreateDBcatalog.sql脚本调用运行脚本catalog.sql和catproc.sql的时候
        C、当SYSTEM和SYSAUX表空间创建的时候
        D、不需要创建,它总是实例的一部分
           11、下列哪些进程是可选的(3个答案)?
        A、归档进程
        B、检查点进程
        C、数据库监听进程
        D、Grid Control Management 代理进程
        E、日志写入进程
        F、进程监视进程
        12、你创建一个数据库有两组在线重做日志组且每组都有一个成员,你必须如何作才能提供容错性(选择最佳)?
        A、增加存在的这两组的两组镜像
        B、每组增加一个成员
        C、无需作任何事,这些已经在创建的时候固定下来了
        D、无需作任何事情,第二组已经是第一组的镜像了
        13、哪个数据字典视图可以让你查看到数据库中所有的表(选择最佳)?
        A、ALL_TABLES
        B、DAB_TABLES
        C、USER_TABLES
        D、以上都不对,要查看所有的表必须直接查询数据字典
        14、下面哪个不是存储在数据字典中的(选择最佳)?
        A、用户定义信息
        B、提供的PL/SQL包
        C、数据字典视图
        D、以上都是存储在数据字典中
        15、你在运行DBCA的时候没有选择Oracle Java虚拟机,但是过后又想安装它的时候该怎么办(选择最佳)?
        A、在数据库中创建Java池
        B、运行脚本创建JVM
        C、删除数据库,重新创建数据库的时候选择JVM
        D、运行JVM后台进程
    答案
    1、ADF
    2、BEDAC
    3、C
    4、A
    5、D
    6、B
    7、BCF
    8、D
    9、B
    10、A
    11、ACD
    12、B
    13、B
    14、D
    15、B

    展开全文
  • 在SQL Server中用代码创建数据库SQL Server2008 1.创建数据库 学生信息数据库创建实验一.sql CREATE database 学生信息_实验一 on ( /*--数据文件的具体描述--*/  name='stuDB_data', -- 主数据文件的逻辑...
  • 本文介绍如何创建带有数据库的程序(系统)方法,适合初学者学习。文章目录如下: 数据库简介 程序(C#)怎么和数据库打交道 快速入门书籍推荐 1 数据库 1.1 数据库简介   数据库(DB)是存放数据的仓库,它...
  • SQL语句(建库、建表、修改语句) ...—创建创建库之前 先进行 查看数据库中是否 已存在 次数据库 有便删除 if exists(select * from sysobjects where name ='ConstructionDB') --查找命令 drop DATAB...
  • 转 Windows Oracle 10G手工创建数据库https://blog.csdn.net/tianlesoftware/article/details/4680230 在Oracle中建库,通常有两种方法。 一是使用Oracle的建库工且DBCA,这是一个图形界面工且,使用起来方便且很...
  • 数据库中用的较多的是Mysql,本文对mysql中常用到的一些SQL语句进行实践尝试。 建库语句 数据库中建库语句如下: CREATE DATABASE test; 这行语句建立了库名叫test的数据库。但是这种建库语句没有指定数据库的字符集...
  • MongoDB数据库中一条记录是一个文档,他的数据结构由(field)和值(value)成对的组成。MongoDB文档类似于JSON对象。字段(域)的值可以包含其他文档、数组和文档数组。
  • 大数据更多的是关注相关性,图数据库与普通数据库相比,图数据库更关注联系,并试图从...以加油站客户关系为例,实践Neo4j建立图数据库,为客户运营服务。 图数据库应用也很广泛,包括社交网络、推荐、主数据管理等。
  • 使用powerdesigner创建数据库

    千次阅读 2015-04-20 15:30:33
    (5)生成物理模型之后,设置各个表之间的主外键关系 从子表指向主表,双击联系线,命名联系 选择joins,设置主子表的关联字段 (6)设置完成之后,按Ctrl+G快捷键,保存成sql语句...
  • sql server2008中无法使用数据库关系图

    万次阅读 2012-09-14 12:50:50
    从今年暑假就开始接触数据库了,我们先跟着耿建玲老师对数据库进行了大体的了解,然后把5个实例和相应的举一反三实现了。之后的学习就是我认为的最重要的环节啦,自己动手去实践,先是学生信息管理系统,再到机房...
  • 数据库SQL实验报告

    2010-05-18 12:55:50
    设有一个学生-课程数据库,包括学生关系Student、课程关系Course和选修关系SC: 学生表:Student(Sno,Sname,Ssex,Sage,Sdept) 课程表:Course(Cno,Cname,Cpno,Ccredit) 学生选课表:SC(Sno,Cno,Grade) ...
  • oracle10G 数据库名、实例名、ORACLE_SID 及创建数据库- hl3292转载修改(实践部分待校验) 数据库名、实例名、数据库域名、全局数据库名、服务名 , 这是几个令很多初学者容易混淆的概念。相信很多...
  • 数据库实验报告

    千次阅读 2018-11-11 19:29:17
            《数据库系统原理课程设计》 讲 义     ...数据库系统原理是软件工程专业本科学生的一门重要的专业基础课。为配合数据库系统原理课程的教学,开设本实践课程,通过DBMS...
  • 数据表设计 在数据库中为每个主题都设置了不同的表后,有时还要将这些表中的信息合并在一起。为了实现这个目的,首先需要定义表间的关系,然后创建查询、窗体从多个表中显示信息
  • 关系数据库和非关系数据库的种类和区别 数据库 类型特性优点缺点 关系数据库 SQLite、Oracle、mysql 1、关系数据库,是指采用了关系模型来组织 数据的数据库; 2、关系数据库的最大特点...
  • MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 数据库(Database) 是按照数据结构来组织、存储和管理数据的仓库。每...
  • XPage 对于 Domino 开发人员的一大好处就是能够很方便和高效的访问关系数据库。...最后文章会对关系数据库的访问的最佳实践做一些讨论。XPages 访问关系数据库技术与最佳实践我们在进行 XPages 应用开发...
  • 中文名: SQL Server2008中文版关系数据库基础与实践教程 作者: 王征 吕雷 资源格式: PDF 版本: 扫描版 出版社: 电子工业出版社书号: 9787121088469发行时间: 2009年7月 地区: 大陆 语言: 简体中文 简介: 内容...
  • 在之前的博客里面已经完整安装和启动了neo4j数据库了,今天想找一点时间学习使用一下neo4j这个图数据库,从网上搜了一点人物关系的数据,因为在图数据库中,节点就是实体,边就是关系,所以这里想简单使用人物关系...
  • oracle学习笔记(二)--创建数据库

    千次阅读 2009-01-06 11:25:00
    Oracle创建数据库先用向导看看好使不,开始菜单中Oracle - OraDb10g_home1 | Configuration and Migration Tools | Database Configuration Assistant。1. 进入Database Configuration Assistant页面,入下,点击...
  • 关系数据库如何工作

    千次阅读 2021-05-15 10:54:02
    当涉及到关系数据库时,我不禁会以为有些东西丢失了。它们无处不在。有许多不同的数据库:从小型且有用的SQLite到功能强大的Teradata。但是,只有少数几篇文章解释了数据库的工作方式。您可以自己在Google上搜索...
  • 1.创建学生选课数据库 CREATE DATABASE students; 2.在学生选课数据库创建数据表 (1)创建学生表 CREATE TABLE studentlnfo -> ( sno CHAR(8) PRIMARY KEY NOT NULL, -> sname varchar(10) NOT NULL, ...
  • 数据库关系

    千次阅读 2014-12-29 16:32:34
    关系键是关系数据库的重要组成部分。关系键是一个表中的一个或几个属性,用来标识该表的每一行或与另一个表产生联系。 数据库理论中, 超键、候选键与主键之间的关系: • 候选键是超键的一种:不含有多余...
  • 一、关系数据库 1、数据库共有三种模型: 层次模型:树状 网状模型:多路相通 关系模型:二维表格 2、关系模型的数学理论? 3、关系数据库的标准数据类型: INT:整型 4字节 BIGINT:长整型 8字节 ...
  • 目录一对多关系一多一关系多对多 一对多 关系 一对多关系是建立在两张表之间的关系。一个表的一条数据可以对应另一个表中的多条数据。 外键永远在多的一方。外键允许重复,允许含有空值 一多一 关系 一对一关系是...
  • oracle11g创建数据库的方法

    千次阅读 2013-05-03 14:31:52
    最近自己想动手写个项目,却无从下手,因为自己以前从未用Oracle数据开发过,使用到是使用过一切都是云里雾里,看到理论的知识无用,只用动手的实践才能创造自我的价值,延着这条道路,结合网络自己慢慢探索,研究。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 96,691
精华内容 38,676
关键字:

创建数据库关系图的实践报告