1.2 使用DBCA创建数据库

如果我们之前仅安装了数据库软件(或者也应用了补丁软件),在完成安装之后,可以通过运行DBCA(Database Configuration Assistant)来启动数据库创建过程。

1.2.1 DBCA的启动

DBCA可以通过命令行方式启动,在命令行键入“dbca”即可启动数据库创建助手界面,如图1-11所示。

图1-11 数据库DBCA启动界面

在Oracle 12c中,DBCA的初始页面如图1-12所示,其中增加的主要选项为“管理插接式数据库”,这是12c新增功能“插接式数据库”的对应选项(具体可以参考本书的第3章)。

图1-12 选择希望执行的操作

在Windows系统上,通过命令行来运行dbca命令,实际上调用的是$ORACLE_HOME\bin\下的dbca.bat批处理文件,可以简略地看一下这个批处理文件的内容(省略了部分内容):

D:\oracle\11.2.0\BIN>type dbca.bat

@set OH=D:\oracle\11.2.0

@set CLASSPATH=%DBCA_CLASSPATH%;%ORACLE_OEM_CLASSPATH%

@set PATH=%OH%\bin;%PATH%

"D:\oracle\11.2.0\jdk\jre\BIN\JAVA" -DORACLE_HOME="%OH%" -DJDBC_PROTOCOL=thin -mx128m oracle.sysman.assistants.dbca.Dbca

可以看到在设置了一系列的环境变量之后,通过调用 Java 运行时环境启动了 Java 工具DBCA。以下是Linux环境中,Oracle 12c的DBCA脚本执行代码,与其他版本基本相同:

[oracle@enmodb12c ~]$ which dbca

/u01/app/oracle/product/12.01/dbhome_1/bin/dbca

[oracle@enmodb12c ~]$ tail -2 /u01/app/oracle/product/12.01/dbhome_1/bin/dbca

# Run DBCA

exec $JRE_DIR/bin/java $JRE_OPTIONS $DEBUG_STRING -classpath $CLASSPATH

oracle.sysman. assistants.dbca.Dbca $ARGUMENTS

同样,最后一行命令启动了Java应用DBCA工具。以上就是DBCA的初始化及启动。

1.2.2 模板选择及EM选项

启动DBCA之后,就可以通过图形界面进行数据库各项参数的配置,下面对几个重要步骤进行一点说明。

在如图1-13所示的选择数据库模板界面中,可以选择使用模板来创建数据库或者通过自定义方式来创建。注意,图1-13中的(b)图来自Oracle 11gR2版本的相同界面,在这个界面上,已经带有明确的提示文字,指出“带数据文件的模板包含预先创建的数据库”,使用这样的模板可以在数分钟内创建完数据库,否则需要一个小时甚至更长时间。这些说明解释清楚了很多必要的问题。

图1-13 选择数据库模板(a)

图1-13 选择数据库模板(b)

我们选择通过自定义方式创建数据库,在界面中选择“定制数据库”即可。定制数据库不包含数据文件,需要实时创建,使用模板则会使用“种子数据库(Seed Database)”的备份集恢复出预先创建好的数据文件。

接下来的步骤3需要定义一个数据库名称和SID,步骤4则引入了自Oracle 10g开始的基于浏览器的Database Control项,此处通常选择缺省配置“使用Enterprise Manger配置数据库”复选框即可,如图1-14所示。

图1-14 设置数据库标识和OEM选项

图1-14 设置数据库标识和OEM选项(续)

在Oracle 11gR2的步骤4中,增加了一个选项页,用于定义自动维护任务,在这个页面,用户可以选择是否启用自动维护任务,这些任务包括“优化程序统计信息收集和预防性指导报告”,如图1-15所示。

图1-15 Oracle 11gR2的自动维护任务定义

提示:Oracle的每一个小的改动都有其背后的深层原因,在Oracle 10g中,自动运行的维护任务影响了很多正常的业务运行,导致故障,所以在这里,Oracle 将选择权交给用户。观察Oracle的每个变动非常有助于我们理解数据库的变革。参考1.4小节可以获得相关诊断案例。

这些缺省启用的任务可以通过 dba_autotask_task 视图查询获得,以下是 Oracle 11gR2 11.2.0.2版本的自动任务定义:

SQL> select client_name,task_name,status from dba_autotask_task;

CLIENT_NAME TASK_NAME STATUS

-------------------------------------- ---------------------------------- ------------

sql tuning advisor AUTO_SQL_TUNING_PROG ENABLED

auto optimizer stats collection gather_stats_prog  ENABLED

auto space advisor auto_space_advisor_prog ENABLED

1.2.3 数据库安全与口令

我们知道在Oracle 9i之前,数据库会为数据库用户指定缺省口令,SYS用户的缺省口令为change_on_install,SYSTEM的缺省口令为manager,但是由于很多用户经常忘记修改缺省口令,进而可能为数据库留下安全隐患,所以从Oracle 9i开始,Oracle要求用户在创建数据库时自行指定用户口令。

接下来是步骤5,在图1-16的(a)图中,可以简单地为所有初始用户定义一个缺省口令,但是这样显然不够安全,(b)图是Oracle 11gR2版本的界面,Oracle将(a)图中选项上下置换,缺省要求为所有用户指定不同的口令,小小的变化昭示着安全上的重视与增强。

图1-16 数据库身份证明(a)

图1-16 数据库身份证明(b)

在 12c版本中,Oracle将两个安全组件Database Vault和Label Security集成到了创建数据库的选项中。如果数据库软件包含了这些选件,那么在“Database Options”界面中就可以进行配置,如图1-17所示。这是Oracle在安全性方面的一项推进和整合增强。

图1-17 “Database Options”界面

1.2.4 存储管理及选件

步骤6是如图1-18所示的存储选项界面,该界面用于选择数据库的存储机制,通常可以选择文件系统存储,从 Oracle 10g开始 Oracle引入了自动存储管理(Automatic Storage Management)的新特性,我们将在后面章节详细介绍这一新特性。从Oracle 11gR2开始, Oracle 放弃了对于裸设备的支持,在选择存储选项时也就少了一个选项(仅有文件系统和ASM两个选项),以下(b)图来自Oracle 11gR2的安装截图。

图1-18 存储选项的选择(上为a图,下为b图)

注意,由于ASM技术主要是为RAC集群数据库开发的,所以在单机上使用ASM需要进行一些特殊的配置,在Oracle 10g中,需要启动CSS服务,在Oracle 11gR2中,需要安装Grid Infrastructure,图1-19中的(a)图是10g中的提示信息,而(b)图是11gR2中的提示信息。

图1-19 单实例ASM安装的必要条件(上为a图,下为b图)

步骤7和步骤8涉及空间位置的设置,如图1-20所示。其中步骤7指定数据库文件所在位置界面,数据库文件存储位置可以选择“使用Oracle管理的文件”选项,这实际上就是利用了Oracle 9i中引入的一个新特性OMF(Oracle Managed Files),在Oracle 11g的安装界面中,这个步骤被整合到了步骤 6 中;步骤 8 中恢复配置界面,该界面用于指定快速恢复区(Flash Recovery Area),这是Oracle 10g的一个新特性,用于简化用户的备份管理,快速恢复区可以是磁盘上的一个存储目录,也可以使用ASM存储,这里可以按照具体的需要设置;同时还可以在这个页面上选择是否启动数据库的归档模式。

图1-20 指定文件位置及闪回区设置

单击“下一步”按钮,进入步骤 9,在如图 1-21 所示的选择数据库组件和定制脚本界面中,有很多Oracle数据库组件,如果没有特殊的需要,为了简化和快速安装,可以去除大部分选项(这要根据需要进行选择,如果为了构建一个简化的测试数据库,则可以去除多数选件)。

图1-21 选择数据库组件和定制脚本

1.2.5 初始化参数选择设定

步骤10中包含了多个选项页,其中涵盖了大量重要的配置选项。

进入如图1-22所示的初始化参数界面,其中内存选项可以暂时接受数据库的初始推荐,这些参数可以在建库后再进行修改;其中(b)图是Oracle 11g的设置页面,变化不大。

图1-22 设置初始化参数(a)

图1-22 设置初始化参数(b)

在这个内存设置页面,实际上隐含了 Oracle 数据库从 10g 到 11g 的内存管理变化,在 10g中,通过设置 SGA_TARGET参数可以实现对于 SGA的自动管理,而在 11g中,通过设置 MEMORY_TARGET 参数可以实现对于 SGA+PGA 的统一内存调整和管理,这一变化隐藏在这一页面设置的背后,Oracle 的内存管理自动化在不同版本中在不断改进和增强。

在这个页面中可以为Oracle的内存使用选择一个比例,缺省值是40%,这是一个较为合理的开始,在数据库运行中,我们也可以根据需要对数据库的内存使用进行配置更改。

注意,数据块大小需要认真选择,如图1-23所示,一旦创建数据库之后,这个参数将不可修改(从Oracle 9i开始,Oracle支持在同一数据库中容纳不同block_size的表空间,但是初始定义的block_size将用于SYSTEM、UNDO等表空间,不可修改)。

图1-23 设置数据块大小

字符集部分也需要认真选择,在中文的Windows平台上,缺省的字符集是ZHS16GBK,如图1-24所示,可以不需要修改,但是在Linux/UNIX下,如果系统语言环境缺省不是中文,那么这里就要根据需要进行调整;国家字符集用以存储NCHAR、NVARCHAR2、NCLOB等类型数据,作为数据库主字符集的补充,可以用来存储不同国家的特殊字符、特殊编码等内容,主要作用是为了增强Oracle的字符处理能力。国家字符集在Oracle 9i中进行了重新定义,只能在 Unicode 编码下的 AL16UTF16 和 UTF8 中选择,通常选择默认值AL16UTF16 即可;对于连接模式,可以选择默认的“专用服务器模式”选项,如图 1-24的(b)图所示。

图1-24 设置字符集和连接模式(a)

图1-24 设置字符集和连接模式(b)

国家字符集(AL16UTF16与UTF8)的主要不同如下。

AL16UTF16是宽度固定的、双字节Unicode字符集;而UTF-8是宽度可变的、一至三个字节的Unicode字符集。

欧洲字符在UTF8字符集中按一至两个字节存储,在AL16UTF16中按两个字节存储,相比之下,UTF8 节省空间;对于亚洲字符,其在 UTF8 中按三字节存储,所需空间比在AL16UTF16中的双字节要多。

在创建数据表时,可以通过国家字符集相应的数据类型存储特殊的字符。

1.2.6 文件存储及创建选项

下一个步骤是数据库存储界面,给出了存储及文件信息,如图1-25所示,可以按照需要进行调整,通常选择默认设置即可;需要注意控制文件选项,其中定义了对于控制文件至关重要的几个参数,这些参数在此一旦确定,以后往往需要重建控制文件才能修改。

图1-25 数据库存储选项

最后一个步骤,可以选择将此前的设置存储为一个数据库模板,并生成创建数据库的脚本,如果接受“创建数据库”的选项,接下来就可以进行数据库的创建了(此处仅选择生成了模板和创建脚本),如图1-26所示。

图1-26 创建选项

单击“确定”按钮,进入如图1-27所示的界面,数据库完成了脚本生成工作。如果选择了创建数据库,此时将开始数据库创建工作。

图1-27 生成建库所需的脚本

1.2.7 告警日志及跟踪文件

在创建数据库的过程中遇到的错误,可以通过查找Oracle数据库的告警日志文件(alert file)获得,在某些情况下,还会有详细的跟踪文件(trace file)生成,这些文件的位置,在Oracle 11g之前,由*dump参数指定,告警日志文件alert_<ORACLE_SID>.log的位置由参数background_dump_dest定义:

SQL> show parameter background_dump_dest

NAME TYPE VALUE

----------------------------- ------------- -----------------------------------

background_dump_dest string D:\ORACLE\diag\rdbms\eyglee\eyglee\trace

可以在该参数的设置路径下,找到日志文件。从Oracle 11g开始,alert文件的格式发生了变化,除原有的文本格式外,还引入了XML格式。现在告警日志文件的存储位置受到一个新的参数影响,这个参数是diagnostic_dest,原有的*dump参数被废弃:

SQL> show parameter diag

NAME TYPE VALUE

----------------------------- ------------ ----------------------------------

diagnostic_dest string D:\ORACLE

diagnostic_dest是Oracle11g的新特性自动诊断库(Automatic Diagnostic Repository, ADR)的设置,该目录用于存放数据库诊断日志、跟踪文件等,通常称为ADR base,该参数的缺省值和环境变量ORACLE_BASE有关:

如果设置了ORACLE_BASE,则DIAGNOSTIC_DEST = ORACLE_BASE;

如果未设置ORACLE_BASE,则DIAGNOSTIC_DEST = ORACLE_HOME/log。

通过该目录结构,数据库整合存储了大量动态变化的日志及跟踪文件,方便管理和查看。在数据库出现问题时需要优先检查该文件,获得最及时的故障提示信息等。

查询v$diag_info视图可以获得跟踪诊断的相关信息,其中“Default Trace File”指出进程跟踪文件的可能名称:

SQL> select name,value from v$diag_info;

NAME VALUE

------------------------ -------------------------------------------------------------

Diag Enabled TRUE

ADR Base D:\ORACLE

ADR Home D:\ORACLE\diag\rdbms\eyglee\eyglee

Diag Trace D:\ORACLE\diag\rdbms\eyglee\eyglee\trace

Diag Alert D:\ORACLE\diag\rdbms\eyglee\eyglee\alert

Diag Incident D:\ORACLE\diag\rdbms\eyglee\eyglee\incident

Diag Cdump D:\ORACLE\diag\rdbms\eyglee\eyglee\cdump

Health Monitor D:\ORACLE\diag\rdbms\eyglee\eyglee\hm

Default Trace File D:\ORACLE\diag\rdbms\eyglee\eyglee\trace\eyglee_ora_3360.trc

Active Problem Count 3

Active Incident Count 45