1.2 使用 DBCA 创建数据库
如果我们之前仅安装了数据库软件(或者也应用了补丁软件),在完成安装之后,可以通过运行DBCA(Database Configuration Assistant)来启动数据库创建过程。
1.2.1 DBCA的启动
DBCA可以通过“开始”菜单中的选项来启动,也可以通过命令行方式启动,在命令行键入“dbca”则可以启动数据库创建助手界面,如图1-9所示。
在Windows系统上,通过命令行来运行dbca命令,实际上调用的是$ORACLE_HOME\bin\下的dbca.bat批处理文件,可以简略地看一下这个批处理文件的内容(省略了部分内容):
图1-9 Database Configuration Assistant欢迎界面
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。
在 UNIX 系统中原理类似,来看下面一段取自 Sun Solaris 环境(现在已经变成了 Oracle Solaris)下的代码:
bash-2.05$ uname -a
SunOS db210-rac2 5.9 Generic_117171-12 sun4u sparc SUNW,Sun-Fire-V210
bash-2.05$ which dbca
/opt/oracle/product/10.2.0/db/bin/dbca
摘录一点dbca文件的代码:
bash-2.05$ more /opt/oracle/product/10.2.0/db/bin/dbca
#!/bin/sh -f
# Classpath
JRE_CLASSPATH=$JRE_DIR/lib/$JRE_FILE
# Run DBCA
$JRE_DIR/bin/java -Dsun.java2d.font.DisableAlgorithmicStyles=true
-DORACLE_HOME=$OH -DDISPLAY=$DISPLAY -DJDBC_PROTOCOL=thin -mx128m
-classpath $CLASSPATH oracle.sysman.assistants.dbca.Dbca $ARGUMENTS
同样最后一行命令启动了Java应用DBCA工具。以上就是DBCA的初始化及启动。
1.2.2 模板选择及EM选项
启动DBCA之后,就可以通过图形界面进行数据库各项参数的配置,下面对几个重要步骤进行一点说明。
在如图1-10所示的选择数据库模板界面中,可以选择使用模板来创建数据库或者通过自定义方式来创建。注意,右图来自Oracle Database 11gR2版本的相同界面,在这个界面上,已经带有明确的提示文字,指出“带数据文件的模板包含预先创建的数据库”,使用这样的模板可以在数分钟内创建完数据库,否则需要一个小时甚至更长时间。这些说明解释清楚了很多必要的问题。
图1-10 选择数据库模板
我们选择通过自定义方式创建数据库,在界面中选择“定制数据库”即可。定制数据库不包含数据文件,需要实时创建,使用模板则会使用“种子数据库(Seed Database)”的备份集恢复出预先创建好的数据文件。
接下来的步骤3 需要定义一个数据库名称和SID,步骤4 则引入了自Oracle Database 10g开始的基于浏览器的Database Control项,此处通常选择缺省配置“使用Enterprise Manger配置数据库”复选框即可,如图1-11所示。
图1-11 设置数据库标识和OEM选项
在Oracle Database 11gR2的步骤4中,增加了一个选项页,用于定义自动维护任务,在这个页面,用户可以选择是否启用自动维护任务,这些任务包括“优化程序统计信息收集和预防性指导报告”,如图1-12所示。
图1-12 Oracle Database 11gR2的自动维护任务定义
Oracle的每一个小的改动都有其背后的深层原因,在Oracle Database 10g中,自动运行的维护任务影响了很多正常的业务运行,导致故障,所以在这里,Oracle 将选择权交给用户。观察Oracle的每个变动非常有助于我们理解数据库的变革。参考1.4小节可以获得相关诊断案例。
这些缺省启用的任务可以通过 dba_autotask_task 视图查询获得,以下是 Oracle 11gR211.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要求用户在创建数据库时自行指定用户口令。
在图1-13左图中可以简单地为所有初始用户定义一个缺省口令,但是这样显然不够安全,右图是Oracle 11gR2版本的界面,Oracle将左图中选项上下置换,缺省的就要求为所有用户指定不同的口令,小小的变化昭示着安全上的重视与增强。
图1-13 数据库身份证明
1.2.4 存储管理及选件
步骤6是如图1-14所示的存储选项界面,该界面用于选择数据库的存储机制,通常可以选择文件系统存储,从Oracle 10g开始Oracle引入了自动存储管理(Automatic Storage Management)的新特性,我们将在后面章节详细介绍这一新特性。从Oracle Database 11gR2开始,Oracle放弃了对于裸设备的支持,在选择存储选项时也就少了一个选项(仅有文件系统和 ASM 两个选项),图1-14的右图来自Oracle 11gR2的安装截图。
注意,由于ASM技术主要是为RAC集群数据库开发的,所以在单机上使用ASM需要进行一些特殊的配置,在Oracle 10g中,需要启动CSS服务,在Oracle 11gR2中,需要安装Grid Infrastructure,图1-15的左图是10g中的提示信息,右图是11gR2中的提示信息,详细内容可以参考本书的第6章。
图1-14 存储选项的选择
图1-15 单实例ASM安装的必要条件
步骤7和步骤8涉及空间位置的设置。其中步骤7指定数据库文件所在位置界面,数据库文件存储位置可以选择“使用Oracle管理的文件”选项,这实际上就是利用了Oracle 9i中引入的一个新特新OMF(Oracle Managed Files),在Oracle 11g的安装界面中,这个步骤被整合到了步骤6中。步骤8中恢复配置界面,该界面用于指定快速恢复区(Flash Recovery Area),这是Oracle 10g的一个新特性,用于简化用户的备份管理,快速恢复区可以是磁盘上的一个存储目录,也可以使用 ASM 存储,这里可以按照具体的需要设置。同时还可以在这个页面上选择是否启动数据库的归档模式,如图1-16所示。
图1-16 指定文件位置及闪回区设置
单击“下一步”按钮,进入如图1-17所示的选择数据库组件和定制脚本界面,Oracle的数据库组件有很多,为了简化和快速安装,可以去除大部分选项(这要根据需要进行选择,如果为了构建一个简化的测试数据库,则可以去除多数选件)。
图1-17 选择数据库组件和定制脚本
1.2.5 初始化参数选择设定
步骤10中包含了多个选项页,其中涵盖了大量重要的配置选项。
进入如图1-18所示的初始化参数界面,其中内存选项可以暂时接受数据库的初始推荐,这些参数可以在建库后再进行修改;右图是11g的设置页面,变化不大。
图1-18 设置初始化参数
在这个内存设置页面,实际上隐含了Oracle数据库从10g到11g的内存管理变化,在10g中,通过设置 SGA_TARGET 参数可以实现对于 SGA 的自动管理,而在 11g 中,通过设置MEMORY_TARGET参数可以实现对于SGA+PGA的统一内存调整和管理,这一变化隐藏在这一页面设置的背后,Oracle的内存管理自动化在不同版本中在不断改进和增强。
在这个页面可以为Oracle的内存使用选择一个比例,缺省的是40%,这是一个较为合理的开始,在数据库运行中,我们也可以根据需要对数据库的内存使用进行配置更改。
注意:数据块大小需要认真选择,如图1-19所示,一旦创建数据库之后,这个参数将不可修改(从Oracle 9i开始,Oracle支持在同一数据库中容纳不同block_size的表空间,但是初始定义的block_size将用于SYSTEM、UNDO等表空间,不可修改)。
字符集部分也需要认真选择,在中文的Windows平台上,默认的字符集就是ZHS16GBK,如图1-20所示,可以不需要修改,但是在Linux/UNIX下,如果系统语言环境默认不是中文,则这里需要根据需要进行调整;对于连接模式,可以选择默认的“专用服务器模式”选项,如右图所示。
图1-19 设置数据块大小
图1-20 设置字符集和连接模式
1.2.6 文件存储及创建选项
下一个步骤是数据库存储界面,如图1-21所示,给出了存储及文件信息,可以按照需要进行调整,通常选择默认设置即可。需要注意控制文件选项,其中定义了对于控制文件至关重要的几个参数,这些参数在此一旦确定,以后往往需要重建控制文件才能修改。
最后一个步骤,可以选择将此前的设置存储为一个数据库模板,并生成创建数据库的脚本,如果接受“创建数据库”的选项,接下来就可以进行数据库的创建了(此处仅选择生成了模板和创建脚本),如图1-22所示。
图1-21 数据库存储选项
单击“确定”按钮,进入如图1-23所示的界面,数据库完成了脚本生成工作。如果选择了创建数据库,此时将开始数据库创建工作。
图1-22 创建选项
图1-23 生成建库所需的脚本
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
可以在该参数的设置路径下,找到日志文件。从 Oracle11g 开始,alert 文件的格式发生了变化,除原有的文本格式外,还引入了 XML 格式。现在告警日志文件的存储位置受到一个新的参数影响,这个参数是diagnostic_dest,原有的*dump参数被废弃:
SQL> show parameter diag
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
diagnostic_dest string D:\ORACLE
diagnostic_dest是Oracle11g的新特性自动诊断库(Automatic Diagnostic Repository,ADR)的设置,该目录用于存放数据库诊断日志、跟踪文件等,通常称为称作ADRbase,该参数的默认值和环境变量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