2.1 使用DBCA创建数据库

创建数据库并不难。该过程很快捷、简单:只需要不到10分钟,输入只有两个单词的命令即可。但是,在开始创建过程之前,应理解几个概念:实例、数据库和数据字典。

2.1.1 实例、数据库和数据字典

Oracle 服务器由实例和数据库构成。二者是独立的,但又联系在一起。实例是RAM(Random Access Memory,随机访问内存)和CPU中的内存结构和进程,其存在是暂时的,用户可以启动和停止实例。数据库是磁盘上的文件,一旦创建,将永久存在,直至删除为止。创建实例只不过是构建内存结构并启动进程。创建数据库的任务由实例一次性完成,此后,实例可以多次打开和关闭数据库。没有实例,数据库就无法访问。

在数据库中,有一组称为“数据字典(data dictionary)”的表和其他对象。数据字典描述了数据库中的所有逻辑和物理结构,其中包括存储用户数据的所有段。创建数据库的过程就是创建支持数据字典需要的最小限度的物理结构,然后在其中创建数据字典。

实例由实例参数文件定义。参数文件包含的指令定义了如何在内存中建立实例,包括内存结构的大小和后台进程的行为。构建实例后,实例将处于“不加载(no mount)”模式。在此模式中,实例是存在的,但没有连接到数据库。实际上,此时甚至还没有创建数据库。

所有参数(通过参数文件指定,或隐式设置)都具有默认值,但DB_NAME参数例外。DB_NAME参数给出实例将连接到的数据库的名称。此名称也嵌套在控制文件中。CONTROL_FILES参数将控制文件的位置告知实例。此参数定义实例和数据库之间的连接。当实例读取控制文件时(通过读取CONTROL_FILES参数或默认值来查找),如果数据库名称不匹配,将不会加载数据库。加载模式(mount mode)表明实例已经成功地连接到控制文件。如果控制文件受损或不存在,就无法加载数据库。控制文件虽然小,但很重要。

控制文件包含的指针指向构成数据库其余部分的其他文件(联机重做日志文件和数据文件)。加载数据库后,实例通过查找并打开其他文件,从而打开数据库。所谓打开的数据库,即实例已打开了所有可用联机重做日志文件和数据文件的数据库。控制文件还包括数据文件到表空间的映射。这允许实例确定构成SYSTEM表空间的数据文件。在SYSTEM表空间中,它将找到数据字典。使用数据字典,实例可以将SQL代码中提到的对象的引用解析为引用所在的段,然后计算出这些对象的物理位置。

在创建数据库服务器时,必须执行以下步骤:

● 创建实例。

● 创建数据库。

● 创建数据字典。

实际上,还有第四步:

● 使数据库可用。

开始时与数据库一起创建的数据字典功能完备,但无法使用。它能够定义和管理用户数据,但不能供人使用,因为此时的结构过于晦涩难懂。要让用户或DBA能够真正使用数据库,必须基于数据字典创建一组视图,以人们能够理解的格式呈现数据字典。另外,还需要许多PL/SQL包来添加功能。

通过运行ORACLE_HOME/rdbms/admin目录中的一组SQL脚本来创建数据字典本身。这些脚本由CREATE DATABASE命令调用。第一个是sql.bsq,此脚本将接着调用其他多个脚本。这些脚本发出一系列命令,来创建构成数据字典的所有表和其他对象。

ORACLE_HOME/rdbms/admin目录中的其他脚本(前缀为“cat”)生成使数据库可以使用的视图和其他对象。例如catalog.sql和 catproc.sql,应该始终在创建数据库后立即运行。还有其他很多启动某些功能的可选“cat”脚本——其中的一些可在创建时运行,剩下的可以随后运行,以便日后安装新功能。

2.1.2 使用DBCA创建数据库

创建数据库的步骤如下:

(1) 创建一个参数文件和(可选)一个口令文件。

(2) 使用参数文件在内存中构建一个实例。

(3) 执行CREATE DATABASE命令,执行结果将至少生成一个控制文件、两个联机重做日志文件、用于SYSTEM和SYSAUX表空间的两个数据文件以及一个数据字典。其语法允许在这里执行更多的操作。

(4) 运行SQL脚本,生成数据字典视图与补充的PL/SQL包。

(5) 运行SQL脚本,生成代码,以执行Enterprise Manager Database Express以及该数据库需要的任何选项(例如Java)。

(6) 在Windows系统中,因为Oracle作为一种Windows服务运行,所以还存在一个额外步骤。Oracle提供了实用程序oradim.exe来帮助创建该服务。

通过SQL*Plus命令提示行或GUI工具Database Configuration Assistant(DBCA)可以交互式地执行上述步骤。也可以使用脚本或包含响应文件的DBCA来自动完成这个创建过程。

无论运行在哪种平台上,通过DBCA创建数据库都是最简单的方式。DBCA会创建一个参数文件和一个口令文件,然后生成若干脚本,以启动实例,创建数据库,生成数据字典和数据字典视图。此外,还可以手工创建参数文件和口令文件,然后在SQL*Plus 会话中完成剩余的工作。许多DBA都将上述两种方法结合使用:使用DBCA生成文件和脚本,然后查看和编辑它们,最后在SQL*Plus中运行它们。

要在Windows上启动DBCA,可以使用“开始”菜单中的快捷项。导航路径如下:开始 |程序 | Oracle-OraDB12Home1|Configuration and Migration Tools|Database Configuration Assistant。

请注意,此路径取决于安装时为Oracle Home指定的名称。另外,还可以在CMD命令提示行上运行dbca.bat脚本。标准安装完成后,该脚本会包含在Windows搜索路径中。

要在Linux中启动DBCA,首先应该设置始终为任何Linux DBA会话设置的环境变量:DISPLAY、ORACLE_ BASE、ORACLE_HOMEPATH。下面是执行此任务的脚本示例:

export DISPLAY=myhost:0.0

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/12.1.0/dbhome_1

export PATH=$ORACLE_HOME/bin:$PATH

注意,Base和Home将因安装时做出的不同选择而有所差异。在Windows环境中也存在变量,但通常由OUI定义为注册表变量集,而不是外壳变量。DISPLAY变量必须设置为X服务器的地址。要启动DBCA,请运行位于$ORACLE_HOME/bin目录下的dbca外壳脚本。

提示:

如果任何Linux可执行文件与Oracle可执行文件同名,则确保将$ORACLE_HOME/bin目录放在搜索路径的开头。一个知名的例证是rman,它既是Oracle工具,也是SUSE Linux实用程序。

请注意,除一个特例外,在创建数据库时做出的每个选择都可以在以后更改,但有些更改难以处理,还会导致停机。因此,不必做到诸事皆宜,但要尽量将其做好。

2.1.3 DBCA对话框

DBCA对话框包含约13步(取决于选项):

1.步骤1:数据库操作

第一步可用的单选按钮可以选择要执行的操作类型:

创建数据库:可以启动一个对话框,提示创建一个实例和一个数据库。

配置数据库选项:可以调整已有的数据库,可能是安装其他功能。

删除数据库:可以删除任何已有的实例和数据库。

管理模板:模板是一个存储、预配置的数据库。系统提供了一些模板,也可以从已有的数据库中创建自己的模板。

管理可插入的数据库:可插入的数据库是12c中的一个新功能,超出了OCA教学大纲的范围。

2.步骤2:创建模式

Create A Database With Default Configuration选项可以访问DBCA的一小部分功能。而Advanced Mode选项可以访问所有功能。

3.步骤3:数据库模板

模板是一个预配置数据库的存储版本,可以从中生成新数据库。从模板中创建数据库要比从头创建快得多,但并不是所有的选项都可配置。Oracle提供了两个示范模板:一个是一般用途的模板,它没有什么特别的配置;另一个是数据仓库模板,为查询处理而不是事务处理进行了优化。Custom Database选项会生成一个对话框,它在数据库的配置方式上非常自由,没有预定义的限制。

4.步骤4:数据库识别

该数据库必须要有一个全局数据库名。全局名由一个数据库名称和可选的数据库域组成。数据库名称嵌入在控制文件中,指定为DB_NAME实例参数,在服务器机器上必须是唯一的。该名称至多有8个字符,包括字母、数字、下划线(_)、数字符号(#)和美元符号($),第一个字符必须是字母。是否区分大小写可能随平台而异。数据库的名称是需要设置正确的一个值;它可以在以后更改,但这样做需要停机。

数据库域至多有128个字符,包括字母、数字、字符和数字符号(#)。句点可以用作域的不同元素之间的分隔符。域用于DB_DOMAIN实例参数。注意,虽然可以构造一个全局名称,它类似于在TCP网络上使用的完全限定的域名(FQDN),但它们之间是没有关系的。

第二个需要的值是系统标识符(SID)。这是要创建的Oracle的实例名,用于ORACLE_SID参数。它不应与DB_NAME值相同,但为了方便,它们通常是相同的。在数据库服务器中,它必须是唯一的。

提示:

用带有域的全局名称可以帮助区分不同机器上DB_NAME相同的数据库。为此,许多DBA追加机器的FQDN作为DB_DOMAIN。但根本不需要使用DB_DOMAIN。一些DBA认为,域是一种负担,可能是因为它们对数据库链接和数据库全局名称的影响,会导致混乱。

5.步骤5:管理选项

使用Oracle企业管理器(OEM)完全是可选的。如果想使用它,就有两个选项:Enterprise Manager Database Express 和Enterprise Manager Cloud Control。Enterprise Manager Database Express是OEM的一个版本,它在一个托管的数据库中配置。如果安装了第二个数据库,就需要一个独立的Database Express实例,在该数据库中配置。Enterprise Manager Cloud Control是Oracle的通用管理系统,通常运行在专用的机器上,其代理程序运行在每个目标服务器上。如果有一个可用的Cloud Control安装,DBCA就需要知道如何登录上去。

6.步骤6:数据库凭据

这一步提供SYS和SYSTEM模式的密码。SYS是拥有数据字典本身的模式,密码写到外部密码文件中。这个SYS用户非常特殊,一些重要功能可能需要密码(如启动和关机)。SYSTEM模式其实只是一个用户,类似于任何其他用户,但它有许多强大的权限。

Oracle最佳实践方式是,这些密码应至少8个字符,包括大小写字母,至少要有一个数字。字符可以是数据库字符集中的任意字符(详见本章后面的内容)。如果指定的密码太简单, DBCA就会发出警告,但仍允许继续。

这里,Windows变体是提示用户输入拥有Oracle Home的操作系统账户的密码。

提示:

最佳做法通常是:密码应使用小范围内的字符(大小写字母、数字和较常见的标点符号),且以字母开头。一些命令外壳解释程序可能无法处理不太常见的字符。

7.步骤7:存储位置

数据库可以在ASM磁盘组或文件系统目录中创建。无论用什么方式创建,都可以指定目的地,或者让DBCA根据ORACLE_BASE环境变量的派生值,确定存储数据库文件的位置。这两种存储类型都可以选择OMF(Oracle托管文件)。OMF允许Oracle控制所有数据库文件的命名,并构建一个合适的目录结构,来存储它们。

本步骤的Recovery Related Files(恢复相关文件)允许指定一个FRA(快速恢复区),用作备份和其他与恢复相关的文件的默认位置,并启用操作的归档日志模式。大多数(不是全部)产品数据库都运行在归档日志模式下,但该模式可以在数据库创建后的任何时刻启动。

8.步骤8:数据库选项

各个选项都是分开授予许可的,应根据自己的许可选择或取消选择。Sample Schemas标签会让DBCA把演示架构安装到它们自己的表空间中。

9.步骤9:初始化参数

有300多个公开可见的初始化参数,数千个所谓的隐藏参数。DBCA为数量最少的参数提供提示,并链接到一个编辑器上,在该编辑器上,可以看到其他参数的默认值,设置自己需要的参数。DBCA对话框的第9步会提示实例要使用的总内存量,或者指定SGA(System Global Area,系统全局区域)和PGA(Program Global Area,程序全局区域)的值。SGA由实例使用,可以在所有会话中访问;它分为许多子结构,其中一些可以单独调整。PGA为每个连接的会话和进程划分一个私有内存区域。DBCA对话框的这个阶段设置了一些内存参数。

Sizing标签显示了两个参数:DB_BLOCK_SIZE(但提示仅是Block Size)和PROCESSES。DB_BLOCK_SIZE很重要,它在创建数据库后就不能修改。这是因为它指定了SYSTEM表空间数据文件格式化的块的大小。SYSTEM表空间存储数据字典,改变它,需要重建数据字典,这等价于创建新数据库。默认的DB_BLOCK_SIZE是8KB。合法值是2KB、4KB、8KB、16KB和(一些平台上)32KB。

Character Sets标签允许选择数据库字符集和备选的国家字符集。数据库字符集用于数据字典和所有的字符数据类型,但NVARCHAR2、NCHAR和NCLOB除外,它们使用国家字符集。在理论上,创建数据库后,可以随时改变字符集,但这是一个非常危险的过程,没有人会轻易尝试。许多DBA认为,最佳实践方式是,不使用默认的字符集(它派生于操作系统),而使用Unicode,即AL32UTF8。

Connection Mode标签允许配置共享服务器。这个主题在第14章讨论。

提示:

没有DBA会因为选择默认的8KB作为DB_BLOCK_SIZE的值,而被解雇。使用其他值的情况很少见。但默认的字符集可能也不合适,尤其是客户可能使用非美国英语时,使用默认字符集就不合适了。

10.步骤10:创建选项

在这一步,Create Database复选框将启动实际的创建操作。Save As A Database Template复选框会根据前面的对话框生成一个存储的模板,该模板以后可以使用多次(这是在第3步选定的)。最后,Generate Database Creation Scripts复选框将生成并保存一组脚本,这组脚本可以手动运行,创建数据库。

11.步骤11:检查先决条件

DBCA运行几个简短的“sanity检查”,确认创建已完成。如果有任何失败,就应解决它们,之后继续检查。然而,可以选择忽略它们,继续进行。

提示:

DBCA验证检查并不全面。错误可能只有在第13步才显示出来。比较典型的是内存问题。例如,如果第9步为自动内存管理指定的内存量超过了系统上配置的共享内存,当时并不会显示出错。

12.步骤12:汇总

Summary窗口显示了DBCA要做的工作。扫描报告,如果看到任何不喜欢的东西,可以使用Back按钮,进行修改。

13.步骤13:进度页

Progress Page窗口显示脚本的创建 (如果要求),然后是数据库创建的各个阶段。这可能需要10分钟,也可能需要一个小时或更多。其区别主要取决于是否使用了模板,选择了什么选项,以及硬件规格。

练习2-1 用DBCA创建数据库

使用图形化DBCA工具创建一个数据库。尽量多地重复这个练习,如果RAM或磁盘空间较少,就删除任何以前创建的数据库。重要的是,熟悉这个过程,尝试对话框提供的各种选项。

根据平台是Windows、Linux 或其他,一些响应会不同。区别是很明显的,常与目录命名约定相关。下面是应遵循的步骤:

(1) 登录服务器。

以执行安装过程的操作系统用户的身份连接到服务器。标准账户名是oracle。

(2) 启动DBCA。

在命令外壳上,确保设置了适当的环境变量集。下面是一个在Linux系统上使用bash 外壳程序的典型对话框:

        db121a $
        db121a $ export DISPLAY=192.168.56.1:0.0
        db121a $ xclock
        db121a $ export ORACLE_BASE=/u01/app/oracle
        db121a $ export ORACLE_HOME=$ORACLE_BASE/product/12.1.0/dbhome_1
        db121a $ export PATH=$ORACLE_HOME/bin:$PATH
        db121a $ which dbca
        /u01/app/oracle/product/12.1.0/dbhome_1/bin/dbca
        db121a $ dbca

DISPLAY变量设置为指向X服务器(通常是PC)的地址。运行任何X程序来测试它,比如X-Clock。如果在控制台或者在VNC桌面上运行,这就是不必要的。接着,设置ORACLE_BASE值,假定一个OFA(Optimal Flexible Architecture,最优灵活架构)安装(用户oracle拥有的二进制文件)。ORACLE_HOME和PATH仍使用OFA标准。使用which实用程序确认,dbca在搜索路径上,因此启动它。

在Windows上,可以在“开始”菜单上找到一个到DBCA的链接,根据注册表中的变量设置运行它。或者,也可以在命令提示符上手动控制一切,如下所示:

        c:\> set ORACLE_BASE=c:\app\oracle
        c:\> set ORACLE_HOME=%ORACLE_BASE%\product\12.1.0\dbhome_1
        c:\> set PATH=%ORACLE_HOME%\bin; %PATH%
        c:\> where dbca
        c:\app\oracle\product\12.1.0\dbhome_1\BIN\dbca.bat
        c:\> dbca

(3) 对提示的响应如下所示:

A.选择Create Database单选按钮。单击Next按钮。

B.选择Advanced Mode单选按钮。单击Next按钮。

C.选择Custom Database单选按钮。单击Next按钮。

注意,这里,根据在Grid Infrastructure 产品是否已安装在服务器上,可能会显示一个Oracle Restart提示。忽略它,继续。

D.把Global Database Name和SID值都指定为orcl121。单击Next按钮。

E.选择Configure Enterprise Manager (EM) Database Express复选框。单击Next按钮。

F.选择Use The Same Administrative Password For All Accounts单选按钮,并输入Oracle121。单击Next按钮。

G.在Storage Type下拉框中选择File System,并选择Use Database File Locations From Template单选按钮。其他使用默认值。这会让DBCA在ORACLE_BASE下面创建数据库和快速恢复区。单击Next按钮。

H.在Database Components标签上,使用所有默认值。单击Sample Schemas标签,选择Sample Schemas复选框。单击Next按钮。

I.可接受的内存设置取决于自己的环境,默认值可能合适,也可能不合适。这些值通常有效,甚至在规格非常低的系统上,也是如此。在Memory标签上,选择Typical单选按钮,把Memory Size(SGA和PGA)的值设置为640MB,取消Use Automatic Memory Management复选框的选择。

在Character Sets标签上,选择Use Unicode (AL32UTF8)单选按钮,单击Next按钮。

J.选择Create Database和Generate Database Creation Scripts复选框。注意创建脚本的目录。单击Next按钮。

K.这一步不需要任何输入。

L.研究汇总。单击Finish按钮。

M.生成脚本,其后的一个小模态对话框指出脚本的位置(如果没有看到这个窗口,确保它没有隐藏在其他对象后面)。单击OK按钮。

向导运行时,注意前两页创建了实例和数据库,几分钟就完成了。而其他页负责创建数据字典视图和各种组件,需要的时间较长。

完成后,会显示一个成功窗口,其中列出了访问Enterprise Manager Database Express的URL(统一资源定位器),如下所示:

        http://dbl2la.example.com:5500/em

注意,这个URL以后要使用。

(4) 安装后,确认自己可以使用SQL*Plus,登录到新创建的数据库上。

在操作系统的提示符上,把ORACLE_SID环境变量设置为数据库实例的名字,然后登录并注销,在Windows上,这个例子如下所示:

        c:\> set ORACLE_SID=orcl121
        c:\> sqlplus / as sysdba
        SQL*Plus: Release 12.1.0.0.2 Beta on Sat Apr 6 12:10:42 2013
        Copyright (c) 1982, 2012, Oracle.  All rights reserved.
        Connected to:
        Oracle Database 12c Enterprise Edition Release 12.1.0.0.2 - 64bit Beta
        With the Partitioning, OLAP, Data Mining and Real Application Testing options
        SQL> exit
        Disconnected from Oracle Database 12c Enterprise Edition
        Release 12.1.0.0.2 - 64bit Beta
        With the Partitioning, OLAP, Data Mining and Real Application Testing options
        c:\>

在Linux上,这个例子如下所示:

        db121a orcl121$ db121a orcl121$ export ORACLE_SID=orcl121
        db121a orcl121$ sqlplus / as sysdba
        SQL*Plus: Release 12.1.0.0.2 Beta on Sat Apr 6 14:08:35 2013
        Copyright (c) 1982, 2012, Oracle.  All rights reserved.
        Connected to:
        Oracle Database 12c Enterprise Edition Release 12.1.0.0.2 - 64bit Beta
        With the Partitioning, OLAP, Data Mining and Real Application Testing options
        SQL> exit
        Disconnected from Oracle Database 12c Enterprise Edition
        Release 12.1.0.0.2 - 64bit Beta
        With the Partitioning, OLAP, Data Mining and Real Application Testing options
        db121a orcl121$

(5) 重复多次。

尽量经常做这个练习,做出自己的变体,直到熟悉所有的选项为止。在“步骤1:数据库操作”中,可以选择Delete Database单选按钮,删除以前创建的数据库。