用ORACLE建立数据库(详解)

来源:互联网 发布:承德县大数据 编辑:程序博客网 时间:2024/05/17 18:28
  1. 数据库结构和空间管理(数据文件、日志文件、表空间、段、模式和模式对象)

   一个ORACLE数据库是数据的集合,被处理成一个单位。一个ORACLE数据库有一个物理结构和一个逻辑结构。

   ORACLE逻辑数据库结构是用户所涉及的数据库结构。一个ORACLE数据库的逻辑结构由下列因素决定:

      .一个或多个表空间;

      .数据库模式对象(即表、视图、索引、聚集、序列、存储过程)。

   ORACLE 逻辑存储结构如表空间(tablespace)、段(segment)和范围将支配一个数据库的物理空间如何使用。模式对象(schema object)及它们之间的联系组成了一个数据库的关系设计。

1. 物理结构

(1) 数据文件

   每一个ORACLE数据库有一个或多个物理的数据文件(data file)。一个数据库的数据文件包含全部数据库数据。逻辑数据库结构(如表、索引)的数据物理地存储在数据库的数据文件中。数据文件有下列特征:

     .一个数据文件仅与一个数据库相联系。

     .一旦建立,数据文件不能改变大小。

     .一个表空间(数据库存储的逻辑单位)由一个或多个数据文件组成。

   数据文件中的数据在需要时可以读取并存储在ORACLE内存储区中。例如:用户要存取数据库一表的某些数据,如果请求信息不在数据库的内存存储区内,则从相应的数据文件中读取并存储在内存。当修改和插入新数据时,不必立刻写入数据文件。为了减少磁盘输出的总数,提高性能,数据存储在内存,然后由ORACLE后台进程DBWR决定如何将其写入到相应的数据文件。

(2) 日志文件

   每一个数据库有两个或多个日志文件(redo log file)的组,每一个日志文件组用于收集数据库日志。日志的主要功能是记录对数据所作的修改,所以对数据库作的全部修改是记录在日志中。在出现故障时,如果未能将修改数据永久地写入数据文件,则可利用日志得到该修改,所以从不会丢失已有操作成果。

   日志文件主要是保护数据库以防止故障。为了防止连日志文件本身的故障,ORACLE允许镜象日志(mirrored redo log),以致可在不同磁盘上维护两个或多个日志副本。

   日志文件中的信息仅在系统故障或介质故障恢复数据库时使用,这些故障阻止将数据库数据写入到数据库的数据文件。然而任何丢失的数据在下一次数据库打开时,ORACLE自动地应用日志文件中的信息来恢复数据库数据文件。

(3) 控制文件

   每一ORACLE数据库有一个控制文件(control file),它记录数据库的物理结构,包含下列信息类型:

     .数据库名;

     .数据库数据文件和日志文件的名字和位置;

     .数据库建立日期。

为了安全起见,允许控制文件被镜象。

   每一次ORACLE数据库的实例启动时,它的控制文件用于标识数据库和日志文件,当着手数据库操作时它们必须被打开。当数据库的物理组成更改时,ORACLE自动更改该数据库的控制文件。数据恢复时,也要使用控制文件。

2. 逻辑结构

数据库逻辑结构包含表空间、段、范围(extent)、数据块和模式对象。

(1) 表空间

   一个数据库划分为一或多个逻辑单位,该逻辑单位称为表空间(tablespace)。一个表空间可将相关的逻辑结构组合在一起。DBA可利用表空间作下列工作:

图6.8 数据库、表空间和数据文件之间的关系

     .控制数据库数据的磁盘分配。

     .将确定的空间份额分配给数据库用户。

     .通过使单个表空间在线或离线,控制数据的可用性。

     .执行部分数据库后备或恢复操作。

     .为提高性能,跨越设备分配数据存储。

数据库、表空间和数据文件之间的关系如图6.8所示。

图6.8 说明:

     .每个数据库可逻辑地划分为一个或多个表空间。

    .每一个表空间是由一个或多个数据文件组成,该表空间物理地存储表空间中全部逻辑结构的数据。DBA可以建立新的表空间,可为表空间增加数据文件或删除数据文件,设置或更改缺省的段存储设置。

   每一个ORACLE数据库包含有一个名为SYSTEM的表空间,在数据库建立时自动建立。在该表空间中总包含有整个数据库的数据字典表。最小的数据库可只需要SYSTEM表空间。该表空间必须总是在线。表和存储的PL/SQL程序单元(过程、函数、包和触发器)的全部存储数据是存储在SYSTEM表空间中。如果这些PL/SQL对象是为数据库建的,DBA 在SYSTEM表空间中需要规划这些对象所需要的空间。

   表空间利用增加数据文件可扩大表空间,表空间的大小为组成该表空间的数据文件的大小的和。

   DBA可以使ORACLE数据库中任何表空间(除SYSTEM表空间外)在线(online)或离线(offline)。表空间通常是在线,以致它所包含的数据对数据库用户是可用的。当表空间为离线时,其数据不可使用。在下列情况下,DBA可以使其离线:

     .使部分数据库不可用,而剩余的部分允许正常存取。

     .执行离线的表空间后备。

     .为了修改或维护一应用,使它和它的一组表临时不可使用。

   包含有正在活动的回滚段的表空间不能被离线,仅当回滚段不正在使用时,该表空间才可离线。

   在数据字典中记录表空间的状态,在线还是离线。如果在数据关闭时一表空间为离线,那么在下次数据库装配和重新打开后,它仍保持离线。

   当出现某些错误时,一个表空间可自动地由在线改变为离线。通过使用多个表空间,将不同类型的数据分开,更方便DBA来管理数据库。

  表空间可以在线或离线,使其组成表空间的全部数据文件为在线或离线。在ORACLE中还允许使单独数据文件在线或离线。

(2) 段、范围和数据块

ORACLE通过段、范围和数据块逻辑数据结构可更细地控制磁盘空间的使用。

(a)段

  段(segment)包含表空间中一种指定类型的逻辑存储结构,是由一组范围组成。在ORACLE数据库中有四种类型的段:数据段、索引段、回滚段和临时段。

   数据段:对于每一个非聚集的表有一数据段,表的所有数据存放在该段。每一聚集有一个数据段,聚集中每一个表数据存储在该段中。

    索引段:每一个索引有一索引段,存储索引数据。

   回滚段:是由DBA建立,用于临时存储要撤消的信息,这些信息用于生成读一致性数据库信息、在数据库恢复时使用、回滚未提交的事务。

    临时段:当一个SQL语句需要临时工作区时,由ORACLE建立。当语句执行完毕,临时段的范围退回给系统。

ORACLE对所有段的空间分配,以范围为单位。

(b)范围

   一个范围(extent)是数据库存储空间分配的一个逻辑单位,它由连续的数据块所组成。每一个段是由一个或多个范围组成。当一段中间所有空间已完全使用时,ORACLE为该段分配一个新的范围。

   为了维护的目的,在数据库的每一段包含有段标题块(segment header block)说明段的特征以及该段中的范围目录。

(c)数据块

   数据块(data block)是ORACLE管理数据文件中存储空间的单位,为数据库使用的I/O的最小单位,其大小可不同于操作系统的标准I/O块大小。

数据块的格式:

   每一ORACLE块格式是类似的,不管它是包含表、索引或聚集数据。其形式为:

图6.9数据块的格式

其中:

   标题:包含一般的块信息,如块地址、段类型(数据段、索引段或回滚段等)。有些块的标题长度是定长的,其大小是可变的,其长度为84至107个字节。

   表目录:该部分包含所存放的表的信息。

   行目录:包含块中的行的信息(如行数据区中的每一行片的地址)。

   行数据:包含表或索引数据。一个行可跨越块,此时,行数据存储在一连串的数据块中。在大的行(如包含LONG或LONG RAW类型的列)经常会出链接行。

   未用空间:可用于插入新行及修改需要附加空间的行。

   分配给数据段和索引段的数据块,事务项(transaction entry)也可使用未用空间。对于每一INSERT、UPDATE、DELETE和SELECT...FOR UPDATE在块中存取一行或多行的事务在该块中需要一个事务。事务项所需的空间依赖于OS,在许多OS中,事务项需要23个字节。

   在ORACLE中,开发者可利用两个空间管理参数(PCTFREE、PCTUSED)控制未用空间的使用(插入行或修改行)。

   PCTFREE参数:为块中保留的未用空间的百分数,用于修改已存在块中的行。例如在CREATE TABLE语句中具有下列参数:

     PCTFREE 20

   该表的数据段的每一块的20%是保持未用,可在修改已存在的行时使用。(插入行可使用80%空间)。

   PCTUSED参数:当一数据块为填满后(由PCTFREE 决定),该块不能考虑插入新行,但是当它使用的低于PCTUSED)参数时,又可插入。在达到PCTUSED值之前,该未用空间仅可用于修改行。例在建立表语句中包含有下列参数:

   PCTUSED 40

   在这种情况下,该表的数据段中一数据块,其以前使用空间已达到PCTFREE,之后当块的使用为39%或更低时,才可插入新行。

   利用PCTFREE、PCTUSED参数设置可优化数据块中的空间利用。例如数据块设置为PCTFREE=20,PCTUSED=40,系统是这样维护未用空间:

      .行可插入占用80%空间。因为PCTFREE为20%,该块必须保留20%的未用空间。

    .可利用该块所保留的未用空间修改已有的行。当已使用空间不低于40%,(如为39%或更低时),该块不能插入新行。

      .在已使用空间低于40%之后,新行可再一次插入该块。

      .行可插入到占用80%空间,必须留下20%未用空间,为修改存在的行使用。这样可继续不断循环。

   在数据库操作中有两种语句:DELETE语句和UPDATE语句可将占用的空间返回给一个块或多个块的未用空间。

(3) 模式和模式对象

   一个模式(schema)为模式对象(schema object)的一个集合,每一个数据库用户对应一个模式。模式对象为直接引用数据库数据的逻辑结构,模式对象包含如表、视图、索引、聚集、序列、同义词、数据库链、过程和包等结构。模式对象是逻辑数据存储结构,每一种模式对象在磁盘上没有一个相应文件存储其信息。一个模式对象逻辑地存储在数据库的一个表空间中,每一个对象的数据物理地包含在表空间的一个或多个数据文件中。例如:表、索引、聚集等模式对象,在指定表空间的数据文件上为该对象分配多少空间。图7.9 说明模式对象、表空间和数据文件之间的关系。

注意:模式与表空间之间的关系为:一个表空间可包含不同模式的对象,而一个模式中的对象可包含在不同的表空间中。

在第五章已提到模式对象,现详叙如下:

(a)表

   表(table)为数据库中数据存储的基本单位,其数据按行、列存储。每个表具有一表名和列的集合。每一列有一个列名、数据类型、宽度或精度、比例。一行是对应单个记录的列信息的集合。本章前面讲的设计数据库主要是指设计表(Table))和表之间的关系等。第五章已提到用SQL 语句实现创建表。

对于表的每一列可选择地指定完整性约束(integrity constraint)。

    在建立一非聚集表时,系统为它在一表空间中自动地分配一个数据段,以容纳表的数据。通过数据段的存储参数(storage parameter)控制数据段的范围的空间数量。利用PCTFREE、PCTUSED可控制数据段范围中数据块的未用空间的使用。

图6.10模式对象、表空间和数据文件之间的关系

   聚集表的数据存储在为聚集所建立的数据段中。建立聚集的表时不能指定存储参数。聚集所设置的存储参数,控制聚集中的全部表的存储。

   表的数据段所在的表空间可以是表的持有者(owner)的缺省表空间或者是在建表命令中命名的表空间。

   一数据库表的每一行以一行片(row piece)或多个行片形式存储。如果一个整行可插入到单个数据块中,那该行初始存储为一个行片。如果不能插入到单个数据块或者由于对已存在行修改引起超出该块时,一行可使用多个行片存储。一个数据块通常对每一行仅包含一个行片。如果一行的所有部分可存放在一块中,则以一行片存储。如果一行必须以多行片存储,这种行称为链接行,一个行片链接到一数据块。如果一行是链接行,行片是通过行片的ROWID链接起来。每一行片(链接的或不链接的)包含一行标题及列的数据。单个列也可跨越行片和数据块。

行标题先于数据,包含下列信息:

     .行片信息;

     .对于链接的行片包含有链接信息;

     .关于行片中列的信息;

     .对于聚集数据,包含聚集码信息。

   在行标题之后,每一行片包含有列信息和数据。对于存储250个或小于250个字符的列需要一个字节存放列长度。如果存储超过250个字节的列,则需要三个字节的列信息先于列数据。列数据所占的空间决定于其数据类型。如果列的数据类型是变长,则所需空间可容纳一个值,在修改该数据时可伸长和缩短。为了节省空间,对空列不存储数据仅存储列长度(为0)。

每一行在数据块标题的行目录中使用两个字节。

    每一行片由它的位置或地址所标识,称为ROWID。一旦赋给,该行片保持它的ROWID,直至相应的行被删除,或者用IMPORT或EXPORT实用程序输入或输出。如果一行的聚集码值改变,该行保持同一个ROWID,但还得到对ROWID新值的指针。由于ROWID对行片的生命周期是一个常数,在SQL语句中可以使用。

对于一表的一列可赋给一个缺省值,以致在插入新行时,该列的值可以忽略。

(b) 视图

    一个视图(view)是由一个或多个表(或其它视图)中的数据的一种定制的表示,是用一个查询定义,所以可认为是一个存储的查询(stored query)或是一个虚表(virtualtable)。视图可在使用表的许多地方使用。详见本书5.5节视图(View)。

(c)聚集

   聚集(cluster)是存储表数据的可选择的方法。一个聚集是一组表,将具有同一公共列值的行存储在一起,并且它们经常一起使用。这些公共列构成聚集码。例如EMP表和DEPT表共享DEPTNO列,所以EMP表和DEPT表可聚集一起,聚集码的列为DEPTNO列,该聚集将每个部门的全部职工行和该部门的行物理地存储在同一数据块中。

由于聚集将不同表的相关的行存储在同一数据块,其优点是:

      .可改进聚集的表连接的存取时间,减少磁盘I/O。

    .在一聚集中和聚集索引中,对每一聚集码值只存储一次,不管不同表中有多少行包含该值。这样它比非聚集表所需的存储要少。

   但聚集可降低INSERT语句的性能(当一个具有分离索引的表比较时),该缺点与空间使用和必须顺序扫描的块数有关。由于多个表在每一块中都有数据,所以存储一聚集的表所需的块数要比非聚集存储的表所需块数要多。聚集不影响应用设计,聚集的存在对用户或应用是透明的。存储在聚集的表中数据像存储在非聚集的表中数据一样经SQL存取。

    聚集的数据块同非聚集的数据块有相同格式,在表目录中有附加的数据。具有同一聚集码值所有行存储在同一数据块中。在建立聚集时,对存储一个聚集码值的全部行所需的平均空间数是由SIZE参数指定,SIZE决定了每一数据块可存放聚集码的最大数目。一个聚集码值在一数据块中仅存储一次。

    聚集码(cluster key)是聚集的表中公共的列或列组。聚集码的列是在建立聚集时定义。组成聚集码的列不能超过16列,其值的长度不能超过数据块可用空间的1/3,它不能包含有LONG或LONG RAW类型的列。

    在建立一聚集后,必须为聚集码列建立一索引,称为聚集索引,对于一个聚集码值有一索引项。在执行任何DML语句之前,必须建立聚集索引。像表索引,一个聚集索引建立一个索引段。聚集的数据段和它的索引段可位于不同的表空间。聚集索引有下列特点:

    .在聚集索引中对于全为空值的码有一索引项。

    .索引项是指向该聚集码值的链中的第一块。

    .如果聚集索引不存在,聚集的数据不能存取。

如果一聚集索引被删除,聚集中数据变为不可使用,只有在重新定义索引后才可使用。

(d)索引

   索引(index)是与表和聚集相关的一种选择结构。索引是为提高数据检索的性能而建立,利用它可快速地确定的信息。ORACLE索引为表数据提供快速存取路径。索引在本书第五章已叙述。

(e)序列生成器

   序列生成器(sequene generator)产生序列号。在多用户环境下该序列生成器特别有用,可生成和返回序列号而不需要磁盘I/O或事务封锁。

   序列号为ORACLE整数,最多可有38个数字。一个序列定义指出一般信息:序列的名字、上升或下降、序列号之间间距和其它信息。对所有序列的定义以行存储在SYSTEM 表空间中的数据字典表中,所以所有序列定义总是可用。由引用序列的SQL语句使用序列号,可生成一个新的序列号或使用当前序列号。一旦在用户会话中的SQL语句生成一序列号,该序列号仅为该会话可用。序列号生成是独立于表,所以同一序列生成器可用于一个和多个表。所生成序列号可用于生成唯一的主码。

(f) 同义词

   一个同义词(synonym)是任何表、视图、快照、序列、过程、函数或包的别名,其定义存储在数据字典中。同义词因安全性和方便原因而经常使用,可用于:

     .可屏蔽对象的名字及其持有者。

     .为分布式数据库的远程对象提供位置透明性。

     .为用户简化SQL语句。

   有两种同义词:公用(public)和专用(private)。一个公用同义词为命名为PUBLTC特殊用户组所持有,可为数据库中每一个用户所存取。一个专用同义词是包含在指定用户的模式中,仅为该用户和授权的用户所使用。

(g)程序单元

    程序单元(program unit)是指存储过程、函数和包(Package)。在本书第五章中对它们已详细叙述。

    所提供将相关的过程、函数、变量和其它包结构封装起来并存储在一起的一种方法,允许管理者和应用开发者利用该方法组织如此的程序(routine),来提供更多的功能和提高性能。

(h)数据库链等

   数据库链是一个命名的对象,说明从一数据库到另一数据库的一路径(path)。在分布式数据库中,对全局对象名引用时,数据库链被隐式地使用(详见本书第九章内容)。

二、用ORACLE建立和修改数据库

 

 

 

 

 

 

 

 

 

 

 

 

1. 建立数据库命令

建立一个数据库,可有下列选项:

     .置最大的实例数、数据文件数、日志文件组数及日志文件成员数;

     .指定数据文件和日志文件的名字和大小;

     .为日志文件选择使用方式。

   使用该命令的用户必须具有OS DBA角色的权限。该命令为最初使用准备一数据库,将删除指定文件中当前已有的数据。

命令格式如下:

 

 

    CREATE DATABASE [DB 名][CONTROLFILE REUSE][LOGFILE[GROUP 整数]<文件说明>,][MAXLOGFILES整数]    [MAXLOGMEMBERS整数][MAXLOGHISTORY整数][DATAFILE<文件说明>,][MAXDATAFILES整数][MAXINSTANCES整数][ARCHIVELOG][CHARACTER SET字符集名][EXCLUSIVE]

其中:

文件说明(日志文件组)的格式为:

 

 

 

   ‘文件名[(文件名)][SIZE整数[K][M][REUSE]

文件说明(文件文件)的格式为:

 

 

 

   ‘文件名[SIZE整数[K][M]][REUSE]

 

关键字和参数:

   DB名:为所要建立的数据库的名字,最长为8个字节。ORACLE将该名字写入到控制文件。它不能是SQL*DBA保留字。当忽略DB名时,ORACLE使用在初始化参数DB_NAME中所指定的名字。

   CONTROLFILE REUSE:重新使用由初始化参数CONTROL_FILES所标识的已存在的控制文件,其当前所包含的信息被忽略和重写。该选项仅在重建数据库时使用,如果所指定参数所需控制文件大于已有文件时,则不能使用该选项。这些参数是MAXLOGFILES、MAXLOGMEMBERS、MAXLOGHISTORY、MAXDATAFILES和MAXINSTANCES。如果忽略该选项,由参数CONTROL_FILES指定的文件已存在时,ORACLE将返回一个出错信息。

   LOGFILE:指定用作日志文件的一个或多个文件。每一个文件说明指定日志文件组,可包含一个或多个日志文件成员。本语句所指定的全部日志文件加到其号为1的日志线索。

  可为日志文件组选择GROUP参数值,每一值标识一个日志文件组,其值的范围由1至MAXLOGFILES参数。如果忽略,ORACLE自动生成一个值。通过动态性能表V$LOG可检验一日志文件组的组值。如果忽略LOGFILE子句,ORACLE建立两个缺省的日志文件组,其文件名和大小决定于OS。

   文件说明:用于说明一文件,它可作数据文件;或者说明一组文件(可为一个或多个),作为一日志文件组。文件说明在CREATE DATABASE、ALTER DATABASE、CREATE TABLESPACE或ALTER TABLESPACE中出现。其中:‘文件名’按OS的惯例说明;SIZE指定文件的大小,如果文件已存在,可忽略该参数。K表示以千字节为单位,M表示以兆字节为单位,忽略时是以字节为单位。对于已存在的文件,ORACLE允许重新使用该文件,利用REUSE指定,其大小必须与SIZE参数值相匹配。REUSE选项仅当使用SIZE选项时有意义。

   MAXLOGFILES:指定数据库可建的日志文件组的最大值,ORACLE利用这个值决定在控制文件中使用的空间大小,该空间用于存储日志文件名。其缺省值、最大值和最小值的变化依赖于OS。实例可存取的日志文件组的数目受初始化参数LOG_FILES所限定。

   MAXLOGMEMBERS;指定日志文件组的最大的成员数。ORACLE使用该值决定在控制文件中分配给日志文件名的空间大小。最小值为1,最大值和缺省值是变化的,依赖于OS。

   MAXLOGHISTORY:指定归档日志文件的最大数目,用于并行服务器选项的介质自动恢复。ORACLE利用该值决定在控制文件中分配给归档日志文件名的空间大小。缺省值为MAXINSTANCES值的倍数,是可变的,决定于OS。最大值受控制文件的大小所限制。

   DATAFILE:指定用作为数据文件的一个或多个文件,这些文件成为SYSTEM表空间的成分。如果忽略该子句,则建立一个数据文件,缺省文件的名字和大小依赖于OS。

   MAXDATAFILES:指定数据库可建立的最大数据文件数,其最小值为1,最大值和缺省值决定于OS。实例可存取的数据文件的数目受初始参数DB_FILES的限制。

   MAXINSTANCES:指定可同时装配或打开该数据库的实例的最大数目。这个值优先于初始化参数INSTANCES,最小值为1,最大值和缺省值依赖于OS。

   ARCHIVELOG:为日志文件组建立归档方式。在归档方式下,日志文件组在重用之前其内容必须归档。该选择准备用于介质恢复。

   NOARCHIVELOG:为日志文件组建立不归档方式。在该方式下,日志文件组在重用之前其内容不需归档,所以在该方式下不能作介质恢复。

   EXCLUSIVE:在EXCLUSIVE方式建立后,必须以专用方式装配数据库,在这种方式下,仅允许单个实例可存取该数据库。如果对数据库可由多实例存取,在第一次建立数据库后,关闭和卸装该数据库,然后以并行方式装配它。

   CHARACTER SET:指定数据库用于存储数据的字符。在数据库建立后,数据库字符集不能改变。支持的字符集和缺省值决定于OS。

   该命令删除准备为初始数据库使用的已有的数据文件中存在的数据。在建立数据库之后,以专用方式装配它打开它,使它能正常使用。

例6.2: 建立最小数据库,对全部变元使用缺省值。命令为:

       CREATE DATABASE

例6.3: 建立一数据库,使用每一变元。命令为:

       CREATE DATABASE NewTest

          CONTROLFILE REUSE

 

 

          LOGFILE GROUP 1 (diskb:log1.log,diskc:log1.log)

                  SIZE 50K,

 

 

                  GROUP 2 (diskb:log2.log.diskc:log2.log)

                  SIZE 50K

         MAXLOGFILES 5

         MAXLOGHISTORY 100

 

 

         DATAFILEdiska:dbone.datSIZE 2M

         MAXDATAFILES 10

         MAXINSTANCES 2

         ARCHIVELOG

         EXCLUSIVE 

2. 更改数据库命令

作用:按下列方式更改已存在的数据库:

    .装配数据库;

    .在移植到ORACLE7时,转换ORACLE版本6的数据字典;

    .打开数据库;

    .为日志文件组选择归档方式;

    .执行介质恢复;

    .增加或删除日志文件组或日志文件组的成员;

    .对日志文件成员或数据文件换名;

    .后备当前控制文件;

    .为了恢复,建立一个新文件代替老文件;

    .使数据文件在线或离线;

    .使日志文件组的一线索运行或不运行;

    .修改数据库的全局名。

   使用该命令的用户需具有ALTER DATABASE系统特权。

常用的部份语法格式如下:

      ALTER DATABASE [DB名][MOUNT[EXCLUSIVE][PARALLEL]]

 

 

      [ADDLOGFILE[THREAD整数][GROUP整数]文件说明,]

 

 

      RENAME FILE 文件名 TO 文件名][ENABLE[PUBLIC]THREAD整数]

      RENAME GLOBAL_NAME TO DB名[域名]

关键字和参数说明:

   DB名:标识要更改的数据库。如果忽略,ORACLE更改由初始化参数DB_NAME的值所标识的数据库,仅可更改初始化参数CONTROL_FILES指定的控制文件中所指定的数据库。

当实例未装配该数据库时可使用下列选项:

   NOUNT:装配数据库。如果选择EXCLUSIVE,以专用方式装配该数据库。这种方式仅允许该数据库同一个实例装配,如果该数据库已同另一个实例装配,则不能使用这种方式。如果选择PARALLEL,以并行方式安装数据库。这种方式允许该数据库同时同多个实例装配。如果另一个实例已以专用方式安装该数据库,此时不能再以并行方式与其实例相装配。缺省方式是EXCLUSIVE。

   在ALTER DATABASE 命令中如果实例有装配的数据库,该数据库为打开或关闭,只要所包含的文件不在使用,就可使用下列选项:

   ADDLOGFILE:加一个或多个日志文件组到指定的线索,使其对赋给该线索的实例可用。如果忽略THREAD参数,日志文件组加入到操作者所涉及的实例的线索。仅在使用并行服务器选项,在并行方式下才需使用THREAD参数。每一个文件说明指定一日志文件组,包含一个或多个成员。对每一个日志文件组可选择GROUP参数值,每一个值唯一地标识一个日志文件组(在所有线索的所有组中),其值的范围为1至MAXLOGFILE值。不能加多个具有同一GROUP值的日志文件组。如果忽略该参数,ORACLE自动地生成它的值。对于每一个日志文件组的GROUP值可通过对动态性能表V$LOG查询获得。

 RENAME:对数据库文件或日志文件成员换名。该子句仅能在控制文件中对文件换名,它不是在OS中对其真正换名。

操作者所涉及的实例已装配数据库并已打开,可使用下列选项:

   DISNABLE:使指定的线索不可实施,即使它不能应用于任何实例。如果使用一线索的实例已有安装的数据库,则不能使该线索不可实施。

   ENABLE:使指定的日志文件组的线索可实施。该线索必须至少有二个日志文件组。如果选择PUBLIC,使该实施的线索可用于任何实例,这些实例不要用初始化参数THREAD来显式请求指定的线索。如果忽略PUBLIC选项,该线索仅用于显式请求的实例,由初始化参数THREAD指定线索。

   RENAME GLOBAL_NAME:修改数据库的全局名。该DB名为新数据库的名字,最长为8个字符。域名选项可有效地确定数据库在网络上位于哪儿。修改数据库名自动地清除SGA的共享池的全部数据,然而,修改数据库名不改变在远程数据库已有数据库链、同义词和存储过程对该数据库的引用,该修改是远程数据库的管理员的责任。

例6.4:将名为STOCKS数据库,以专用方式安装。

     ALTER DATABASE Stocks MOUNT EXCLUSIVE

例6.5:对GROUP参数值为3的日志文件组增加两个成员。

     ALTER DATABASE Stocks

 

 

     ADD LOGFILE GROUP 3(diska:log3.log,diskb:log3.log)

     SIZE 50K

另一种形式:

     ALTER DATABASE Stocks

 

 

     ADD LOGFILE MEMBERdiska:log3.log,diskb:log3.log

     TO GROUP 3

例6.6:对日志文件成员换名。

     ALTER DATABASE Stocks

 

 

     RENAME FILEdiskb:3.logTOdiskd:log3.log

 该语句只将日志文件组的成员由一个文件改变成另一个,但该语句不真正将文件DISKB:LOG3.LOG名改成DISKD:LOG3.LOG,要通过OS执行这样操作。

例6.7:对线索5增加一日志文件组,其Group参数值为4,包含三个成员。

     ALTER DATABASE Stocks

 

     ADD LOGFILE THREAD 5 GROUP 4 (diska:log4.log,diskb:log4.log,diskc:log4.log)

例6.8:使线索5不能实施。

     LTER DATABASE Stocks

     DISABLE THREAD 5

例6.9:使线索5可实施,使它为任何ORACLE实例使用,那些实例不要显式地请求该线索。

      ALTER DATABASE Stocks

      ENABLE PUBLIC THREAD 5

 

例6.10:建立基于文件DISKY:DB1.DAT的数据文件DISKX:DB1.DAT

      ALTER DATABASE Stocks

 

      CREATE DATAFILEDISKX:DB1.DATASDISKY:DB1.DAT

例6.11:修改数据库的全局名。

      ALTER DATABASE stocks

      RENAME GLOBAL_NAME TO Sales.Austalia.acme.com

3. 控制文件

   控制文件(control file)可使用CREATE CONTROLFILE命令建立,该命令用于重建控制文件。在下列情况下要重建控制文件:

      .已存在的控制文件的全部副本由于介质故障已丢失。

      .要改变数据库的名字。

     .要改变日志文件组、日志文件成员、归档的日志文件、数据文件和可并行地安装和打开该数据库的实例的最大数。

   操作该命令的用户具有OSDBA角色权限,该数据库被任何实例所装配。

语法格式如下:

     CREATE CONTROLFILE[REUSE][SET]DATABASE DB名

 

     LOGFILE[GROUP整数]文件说明,[RESETLOGS][NOTRESETLOGS]

 

     DATAFILE文件说明,

    [MAXLOGFILES整数][MAXLOGMEMBERS整数]

    [MAXLOGHISTORY整数][MAXDATAFILES整数]

    [MAXINSTANCES整数][ARCHIVELOG]

关键字和参数说明:

    REUSE:说明由初始化参数CONTROL_FILES所标识的控制文件可被重用,删除其当前所包含的全部信息。如果忽略该选项,而任何的控制文件已存在,ORACLE将返回一个错误。

    SET DATABASE:修改数据库的名字。

    DATABASE:指定数据库的名字,该参数值必须是已存在的数据库名,其由以前的CREATE DATABASE 语句或CREATE CONTROLFILE语句建立。

    LOGFILE:为数据库指定日志文件组,必须列出全部日志文件组的全部成员。这些文件名必须已存在。

    RESETLOGS :忽略LOGFILE子句所列的文件的内容。在LOGFILE子句中的文件说明必须指定SIZE参数。ORACLE将全部日志文件组分配给线索1,使该线索为公用,可为任何实例使用。在使用该选项后,用ALTER DATABASE命令打开该数据库时,必须使用RESETLOGS选项。

    NORESETLOGS:说明在LOGFILE子句中全部文件在最后一次打开数据库中使用。这些文件必须是当前日志文件而不是恢复的后备。ORACLE将该日志文件组重新分配给以前分配的线索,并使它实施。如果指定Group值,ORACLE将对这些值与数据库最后打开时的组值进行检验。

    DATAFILE:指定数据库的数据文件,必须列出全部数据文件。这些文件必须全部存在,它们可以是恢复的后备,为介质恢复所需。

    MAXLOGFILES等与CREATEDATABASE命令中的相应关键字和参数的意义相同。

例6.12:重建一控制文件

    CREATE CONTROLFILE REUSE

    SET DATABASE orders_2

 

    LOGFILE GROUP 1(diskb:log1.olg.,diskc:log1.log) SIZE 50K,

 

    GROUP 2(diskb:log2.log,diskc:log2.log) SIZE 50K

    NORESETLOGS

 

    DATAFILEdiska:dbone.datSIZE 2M

         MAXLOGFILE 5

         MAXLOGHISTORY 100

         MAXDATAFILES 10

         MAXINSTANCES 2

    ARCHIVELOG

4. 表空间

   表空间是数据库中空间的集合,它可包含下列段:数据段、索引段、滚回段和临时段。所有数据库至少有一个表空间(称SYSTEM表空间),其在建立数据库时自动建立。对于其它的表空间必须用CREATE TABLESPACE命令建立,可用ALTER TABLESPACE命令使其在线或离线,或增加数据文件。

(1) 建立表空间命令

    该命令在数据库中建立一表空间。操作者必须具有CREATE TABLESPACE系统特权。

语法格式如下:

 

     CREATE TABLESPACE表空间名DATAFILES文件说明,

            [DEFAULT STORAGE存贮子句]

 

            [OFFLINE],

关键字和参数说明:

     表空间名:为所建立的表空间的名字。

     DATAFILE:指定组成表空间的数据文件或文件。

     DEFAULT STORAGE:为在该表空间中建立的全部对象指定缺少的存储参数,由存储子句指定。

   STORAGE存储子句用于指定存储特征,该子句可出现在建立或更改下列对象的命令中:聚集、索引、滚回段、快照、快照日志、表和表空间。

该子句的语法如下:

    STORAGE([INITINAL整数[K][M]]

         [NEXT整数[K][M]][MINEXTENTS整数]

         [MAXEXTENTS整数][PCTINCREASE整数]

         [OPTIMAL[整数[K][M]][NULL]]

 

    [FREELISTS整数][FREELIST GROUPS整数])

其关键字和参数说明:

   INITIAL:指定对象的第一个范围的大小,如果指定K则以千字节为单位;指定M时以兆字节单位;无选择时则以字节为单位。缺省值为5个数据块大小,最小值为2个数据块的大小,最大值是随OS而变化的。

   NEXT:指定分配给对象的下一范围的大小,其中K、M选择的含义同上。缺省值为5个数据块,最小值为1个数据块的大小,最大值是随OS而变化的。

   PCTINCREASE:指定第二个范围之后的每一个范围为前一个范围的增长的百分数。缺省值为50,含义是后一个范围比前一个范围大50%。最小值为0,含义是以后范围的大小均相同。最大值是随OS而变化的。对于回滚段不能指定PCTINCREASE,其值为0。

   MINEXTENTS:指定在建立段时可分配的范围的总数。该参数允许在建立对象时分配大量的空间,即使可用的空间不连续。其缺省值和最小值为1, 而对于回滚段的缺省值和最小值为2。最大值随OS而变化。

   如果MINEXTENTS值大于1,ORACLE根据INITIAL、NEXT和PCTINCREASE参数计算出以后范围的大小。

   MAXEXTENTS:指定ORACLE可分配给对象的范围总数,其最小值为1,缺省值和最大值随OS而变化。

   OPTIMAL:为回滚段指定一个适宜的大小,其选项K、M同INITIAL,该参数仅用于回滚段,不可用于其它对象。选择NULL时,为回滚段不指定一个合适大小,即ORACLE从不回收回滚段的范围。这个值不能小于由回滚段的MINEXTENTS,INITIAL,NEXT和PCTINCREASE参数所指定初始分配的空间大小。

   FREELIST GROUP:为表、聚集或索引指定自由表的组数,其缺省值或最小值为1。仅在使用具有并行服务器选项的ORACLE在并行方式下运行时才使用该参数。

   FREELISTS:为表、聚集或索引的每一自由表组指定自由表的数目。其缺省值或最小值为1,含义是每一个自由表组包含一个自由表,这个参数的最大值依赖于数据块的大小。

   STORAGE参数会在两个方面受影响:存取数据库中数据所花的时间长短和数据库中空间如何有效使用。如果在建立表空间时为STORAGE参数指定了值,该值为在该表空间分配段时作为缺省值。在建立聚集、索引、回滚段、快照、快照日志或表时还可对STORAGE参数指定其值,为这些对象按此值分配段;如果忽略任何存贮参数,则使用该表空间所定义的存储参数,对于索引是例外。在建立索引时忽略STORAGE参数,对其范围分配有特殊处理。在ALTER命令更改上述对象的存储参数,其新值仅对未来范围分配有影响,所以INITIAL 和MINEXTENTS参数不能改变其值。当更改表空间的存储参数时,新值仅对以后建立的对象有影响。

在建立表空间中其它选项的作用:

       .ONLINE:使建立的表空间在建立之后,用户立即可用(即为在线),当然用户对该表空间要被授权。

    .OFFLINE:使建立的表空间在建立之后,该表空间不能立即使用(即为离线)。在忽略上述选项时,其缺省值为ONLINE。

例6.13:在数据库中建立名为TABSPACE_2的表空间。

其命令为:

    CREATE TABLESPACE TABSPACE_2

 

    DATAFILE diska:tabspace_file2.datSIZE 20M

    DEFAULT STORAGE(INITIAL 10K NEXT 50K

        MINEXTENTS 1 MAXEXTENTS 99

    PCTINCREASE10)

    ONLINE

(2)更改表空间命令

作用:通过下列方式修改已存在的表空间:

    .增加或重新命名数据文件;

    .修改缺省的表空间存储参数;

    .使表空间在线或离线;

    .开始或停止后备。

    操作者具有ALTER TABLESTACE系统特权,可执行该命令的任何操作;如果具有MANAGE TABLESPACE系统特权,仅可作下列操作:

   .使表空间在线或离线;

   .开始或结束后备。

语法格式如下:

    ALTER TABLESPACE 表空间名

 

       [ADD DATAFILE文件说明,]

 

       [DENAME DATAFILE文件名TO 文件名]

       [DEFAULT STORAGE 存贮子句]

       [OFFLINE [TEMPORARY][IMMEDIATE]]

       [BEGIN BACKUP]

关键字和参数说明:

   表空间名:为所要更改的表空间的名字。

   ADD DATAFILE:将由文件说明所指定的数据文件加到该表空间。在表空间在线或离线进均可增加数据文件。要保证该数据文件不为其它数据库使用。

   RENAME DATAFILE:对表空间的一个或多个数据文件换名。在对数据文件换名前,要使表空间离线。该子句仅使表空间与新文件相联系,但它不能真正改变OS文件的名。要改变其文件名通过OS实现。

   DEFAULT STORAGE:为在该表空间中以后建立的对象指定新的缺省存储参数。

   ONLINE:使表空间在线。

   OFFLINE:使表空间离线,防止对它的段的存取。可有下列选项:NORMAL选项,对该表空间中全部数据文件执行一个检查点,它的所有数据文件必须在线。如果数据库是非归档方式,则必须使用该方式。TEMPORARY选项,对表空间中全部在线数据文件执行一个检查点,不必保证全部文件可写。在将表空间返回到在线前,所有离线文件可以要求介质恢复。IMMEDIATE选项,不要确保表空间的文件是可用,不执行一个检查点,在将它返回到在线前,必须执行介质恢复。缺省方式是NORMAL。当表空间为离线时,在该表空间中用户不能为对象或排序区分配空间。可用ALTERUSER命令为用户重新分配缺省表空间和临时表空间。

   BEGIN BACKUP:它意味对组成该表空间的数据文件要执行在线后备,这种方式不停止用户对表空间的存取。在开始在线后备之前必须使用该选项。

在后备进行时,不能执行下列操作:

    .使表空间正常地离线;

    .关闭实例;

    .开始该表空间另一个后备。

   END BACKUP:它意味表空间的在线后备完成,一旦完成在线后备,要使用该选项。

例6.14:通知数据库,开始后备。

      ALTER TABLESPACE accounting BEGIN BACKUP

例6.15:通知数据库,后备完成。

      ALTER TABLESPACE acounting END BACKUP

 

例6.16:将表空间ACCOUNTING的数据文件DISKA:PAY1.DAT改名为DISKB:RECEIVE.DAT:

    .使表空间离线;

          ALTER TABLESPACE ACOUNTING OFFLINE NORMAL

 

    .用OS命令将DISKA:PAY1.DAT拷贝到DISKB:RECEIVE1.DAT;

    .用ALTER TABLESPACE命名换名;

         ALTER TABLESPACE accounting

 

         RENAME DATAFILEdiska:pay1.datTOdiskb:receive1.Dat

    .将表空间返回到在线。

          ALTER TABLESPACE accounting ONLINE

(3) 删除表空间命令

作用:将一表空间从数据库中删去。

   操作者必须具有DROP TABLESPACE系统特权。在该表空间中没有回滚段分配给活动事务。

语法格式如下:

     DROP TABLESPACE表空间名

          [INCLUDING CONTENTS[CASCADE CONSTRAINTS]]

关键字和参数说明:

   表空间名:为被删除的表空间的名字。

   INLUDING CONTENTS:当删除包含有任何数据库对象的表空间时,必须指定该子句,其作用是删除表空间的全部内容。如果忽略该子句,而表空间不是空的,ORACLE返回一个出错信息,不删除该表空间。

   CASCADE CONSTRAINTS:删除其它表空间中的表的引用完整性约束,这些约束是对删除的表空间的表的主码或唯一码的引用。如果忽略该选项,但如此的引用完整性约束存在时,ORACLE将返回一个出错信息,不删除该表空间。

   可在表空间在线或离线情况下删除表空间,但建议用户采用在表空间离线情况下删除表空间,确保没有SQL语句(在同时运行的事务中)存取该表空间中的对象。

例6.17:删除MFRG表空间及其全部内容。

     DROP TABLESPACE MFRG

     INCLUDING CONTENTS CASCADE CONSTRAINTS 

 

三、初始化参数文件

  在启动一个实例时,ORACLE必须读入一初始化参数文件(initialilation parameter file),该参数文件是一个文本文件,包含有实例配置参数。这些参数置成特殊值,用于初始ORACLE实例的许多内存和进程设置,该参数文件包含:

    .一个实例所启动的数据库名字;

    .在SGA中存储结构使用多少内存;

    .在填满在线日志文件后作什么;

    .数据库控制文件的名字和位置;

    .在数据库中专用回滚段的名字。

参数文件例子:

    db_block_buffers=550 (注:在SGA中可缓冲的数据库块的数,它决定了SGA的大小。)

    db_name=ORA7PROD (注:数据库名,最多8个字符。)

    db_domain=US.ACME.COM (注:一个全局数据库名的扩展成分。)

    license_Max=users=64 (注:在数据库中可建用户的最大数。)

    #

    log_archive_dest=C:/logarch (注:为归档日志指定磁盘文件缺省位置等。)

    log_archive_format=arch%s.ora (注:指定归档日志文件的缺省文件名格式。)

    log_archive_start=TRUE(注:TRUE指定,实例启动时归档是自动的,FALSE是手工的。)

    log_buffer=64512 (在SGA中分配给日志缓冲区的字节数。)

    log_checkpoint_interval=256000(指定最新填满日志文件的块数,填满后需要激发一个检查点。)

    rollback_segments=rs_one,rs_two (注:按名将一个或多个回滚段分配给实例。)

DBA可调整可变参数来改进数据库系统的性能。

  初始化参数文件其常见名为INIT.ORA,真正的名字随发放介质而变化。在ORA_CLE Server 发放介质上包含有一个样板参数文件,适合于初次使用。为了使数据库系统具有最好性能可修改该文件。DBA可利用该初始化参数实现:

    .调整内存结构(如数据库缓冲区数目)可优化性能。

    .设置某些数据库的限制。

    .指定文件名。

   许多初始化参数可以细调,来改进数据库性能。参数文件是一个文本文件,包含有参数表及相应的列值。例如:

        SAVEPOINT=5

        PROCESSES=100

在参数文件中参数说明服从下列规则:

      .所有参数是可选的。

      .仅仅参数和注释可出现在参数文件。

      .对于每一个参数,在服务器中建立一个缺省值。这个值可依赖于OS,也可依赖于该参数。

      .参数可以按任何次序指定。

      .字母大小写仅在OS中有意义时起作用(如文件名)。

      .可在一行进入多个参数,参数名之间用空格隔开。例:

              PROCESS=100 SAVEPOINT=5 OPEN_CURSORS=10

      .对有些参数(如INIT_SQL_FILES)可进入多个值,值之间必须用逗号分开,整个用括号括起。例如:

              INIT_SQL_FILES=(SQL.BSQ,CATALOG.SQL,ENROLL_USER.SQL)

      .反斜杠(表示/有续行。例:

              ROLLBACK SEGMENTS=(SEG1,SEG2,/SEG3,SEG4,SEG5)

      .关键字IFILE用于嵌入另一文件。所嵌入文件其格式同原始参数文件,允许嵌套三级。

      .符号#用于开始一注释,该行的其余部分被忽略。

      .参数值可用双引号括起,如文件名,在这种方式下可包含特殊字符。

利用SQL*DBA命令可查看初始化参数的当前设置。形式为:

     SQLDBA> SHOW PARAMETERS

显示全部参数的当前值。也可以为:

     SQLDBA>SHOW PARAMETERS BLOCK

它将显示参数名中有BLOCK的全部参数。

原创粉丝点击