
1.3 使用DBCA创建数据库
本节我们讲解如何使用DBCA来协助创建数据库,相对于原始的使用手工方式创建数据库,使用DBCA可以明显减少建库时间,从而提高建库的效率。为了使读者从本质上理解DBCA建库的过程,我们对使用DBCA建库时生成的建库脚本文件进行分析,让读者不但学会使用DBCA,还能从根本上理解DBCA是如何创建数据库的,其实Oracle的自动化工具就是在后台运行,以前手工建库的过程,只是做了一些封装使得读者少犯错误,并且提高建库效率。
1.3.1 DBCA概述
DBCA是Oracle设计基于Java的图形用户界面工具,所以它可以运行在任何安装了Java虚拟机的操作系统平台上,在安装Oracle数据库时,会自动安装Java虚拟机,在启动DBCA时Oracle会启动虚拟机来运行DBCA。
启动DBCA的方式有两种,一是通过Oracle数据库软件安装程序的“配置和移植工具”→“Database Configuration Assistant”来启动数据库,如图1-1所示。

图1-1 使用安装程序启动DBCA
二是通过在DOS窗口中输入DBCA来启动,如图1-2所示。

图1-2 在DOS中启动DBCA
此时,DOS运行了DBCA程序,并且在DBCA运行期间DOS界面会一直存在。
使用DBCA不仅仅是创建数据库,作为数据库配置助手它还有其他功能,即“配置数据库”,“删除数据库”,“管理创建数据库模板”(使用以前的模板创建新模板,从已存在的数据库创建新模板,删除模板)。
1.3.2 创建数据库过程
使用1.3.1节中的方法启动DBCA工具后,单击“下一步”按钮,弹出如图1-3所示的对话框。

图1-3 选择DBCA的操作
此时,对话窗口提示用户可以执行的操作,它也说明了DBCA具有“创建数据库”、“配置数据库选件”、“删除数据库”、“管理模板”以及“配置自动存储管理”等功能。选择创建数据库,然后单击“下一步”按钮。此时,弹出数据库模板对话框,如图1-4所示。

图1-4 选择创建数据库的模板
在图1-4中有三个选项使用模板来创建数据库,即“一般用途或事务处理”、“定制数据库”和“数据仓库”,我们根据数据库的业务要求选择其一,笔者选择“一般用途或事务处理”。单击“下一步”按钮,弹出设置数据库标识对话框,如图1-5所示。图1-5中参数“全局数据库名”提示设置数据库标识,用以标识一个唯一的全局数据库,因为数据库至少需要一个实例来维护和使用,所以还要设置实例名,一般实例名和全局数据库名相同(便于维护),在读者输入“全局数据库名”时,在实例名SID中会自动输入相同的内容。我们设置其名称为lin。然后单击“下一步”按钮,弹出“管理选项”如图1-6所示。

图1-5 设置数据库标识
在图1-6中选择管理数据库的工具,默认选择使用Enterprise Manager来配置数据库,使用Enterprise Manager的Database Control来管理数据库。我们单击“下一步”按钮,弹出设置数据库身份证明对话框,如图1-7所示。此时要求设置数据库口令,两种选择来设置数据库口令,一是对所有用户使用一个口令,一是“使用不同的管理口令”使得不同的用户可以设置自己的管理口令,我们选择“所有账户使用同一管理口令”来设置统一口令。

图1-6 管理选项

图1-7 设置用户密码
单击图1-7的“下一步”按钮,弹出“网络设置”对话框,如图1-8所示。需要将刚创建的数据库注册到系统已有的监听程序,因为我们在安装数据库软件时已经创建了一个数据库,所以已经存在一个监听程序。此时,我们选择“将此数据库注册到所有监听程序”,单击“下一步”按钮,弹出如图1-9所示的“存储选项”对话框。

图1-8 网络设置
在图1-9中,要求选择存储设置,此时有三个选项。使用“文件系统”存储数据库这个方式基于操作系统的数据库文件,使用“自动存储管理(ASM)”可以有效改进系统I/O,但是对ASM系统需要配置一个磁盘组,也可以使用“裸设备”。此时我们选择使用“文件系统”。单击“下一步”按钮,弹出“数据库文件所在位置”对话框,如图1-10所示。

图1-9 存储选项
在图1-10中指定数据库文件的位置,即将数据库的各种数据文件存放的目录,此时有三个选项:“使用模板中的数据库文件位置”、“所有数据库文件使用公共位置”和“使用Oracle-Managed Files”,默认“使用模板中的数据库文件位置”,我们使用默认设置。

图1-10 数据文件所在位置
默认设置的Oracle_HOME为F:\app\Administrator\product\11.1.0\db_1,单击图1-10的“下一步”按钮,弹出“恢复配置”对话框,如图1-11所示。

图1-11 恢复设置
在图1-11中要求设置快速恢复区,在Oracle10g中提供了一个快速恢复区,用户数据库自动恢复时使用的是备份数据空间,当使用RMAN备份时可以选择使用该恢复区,使得数据库的各类恢复行为自动化,该区域默认为{Oracle_BASE}\flash_recovery_area,区域空间大小为2GB,这些参数都可以调节,快速恢复区的存储目录通过“浏览”按钮选择,而快速恢复区的大小通过输入数值设置。我们继续单击“下一步”按钮,弹出如图1-12所示的数据库内容设置对话框。
图1-12的“数据库内容设置”提示是否使用“示例方案”,该方案会创建一个EXAMPLE的表空间,提供了如“人力资源”、“产品介质”等具体方案,主要作为演示用,我们选择默认设置,即不使用“示例方案”,也不使用“定制脚本”,单击“下一步”按钮,弹出如图1-13所示的对话框,该对话框要求设置数据库的初始化参数。

图1-12 数据库内容设置

图1-13 设置内存初始化参数1
这里需要设置四项内容,分别是“内存”、“调整大小”、“字符集”和“连接模式”。我们依次介绍这些内容,首先设置内存大小,如图1-13所示。Oracle的DBCA自动获取了当前数据库的内存大小,根据经验,设置内存大小的40%给该数据库使用,我们采用默认值并选择“使用自动内存管理”,内存参数在建库后可以动态修改。然后单击“调整大小”,弹出调整大小对话框如图1-14所示。
在图1-14中,首先需要设置Oracle数据库块大小,该块是Oracle分配存储空间的最小单位,也是Oracle数据输入输出的最小单位,该参数一旦确定无法修改,除非重建数据库,接着是设置和该数据库连接的操作系统进程数量,该值最小为6,因为其中5个是启动实例时必需的后台进程,1个为用户进程。单击“字符集”,弹出设置字符集对话框如图1-15所示。

图1-14 设置内存初始化参数2

图1-15 设置内存初始化参数3
在图1-15中设置数据库字符集,默认是采用操作系统的语言设置,如果是中文Windows系统,则默认为ZHS16GBK。单击“连接模式”,弹出设置连接模式对话框,如图1-16所示。连接模式分为专用连接和共享连接两种,专用模式是每个客户连接启动一个专有的PGA和专有的相关资源,而共享模式是多个客户连接数据库服务器时使用共享的资源空间。我们选择默认设置,即专用服务器模式。
单击图1-16中的“下一步”按钮,弹出如图1-17所示的对话框进行“安全设置”。此时,选择“保留增强的11g默认安全设置”,单击“下一步”按钮,弹出如图1-18所示的“自动维护任务”对话框。

图1-16 设置内存初始化参数4

图1-17 创建数据库的安全设置
在图1-18中选择“启用自动维护任务”使得Oracle 11g数据库完成自动管理维护任务,这些任务可以在预定义的维护时间窗口内完成,系统同时限定了使用OS的CPU时间。然后单击“下一步”按钮,弹出如图1-19所示的“数据库存储”对话框。

图1-18 启动数据库的自动维护任务

图1-19 数据库存储参数设置
在图1-19中,需要用户进行控制文件、表空间、数据文件以及重做日志组的参数设置,如控制文件中的最大重做日志文件数、最大数据文件数等,可以进行修改表空间的大小,创建重做日志组等操作。然后单击“下一步”按钮,弹出“创建选项”的对话框,如图1-20所示。

图1-20 数据库创建选项
图1-20中的创建选项有:“创建数据库”、“另存为数据库模板”和“生成数据库创建脚本”,我们选择“创建数据库”和“生成数据库创建脚本”,此时在“目标目录”中自动显示脚本文件的存储目录,用户也可以通过“浏览…”按钮自己选择一个存储目录,然后单击“完成”按钮,则创建数据库,并生成数据库模板和数据库创建脚本,如图1-21所示。
在图1-21中提示建库的详细信息,如初始化参数、字符集、表空间、数据文件、重做日志文件等信息。单击“确定”按钮,则弹出如图1-22所示的对话框,生成建库的脚本文件,单击“确定”按钮后开始创建数据库,建库过程如图1-23所示。

图1-21 创建数据库的详细信息

图1-22 生成创建数据库的脚本

图1-23 开始创建数据库
当图1-23中的创建进度达到100%时,会弹出如图1-24所示的对话框,提供创建数据库的详细信息,如数据库标识,数据库服务器参数文件位置以及账户信息等。单击“退出”按钮,完成数据库的创建。

图1-24 数据库创建完成
1.3.3 理解建库脚本的含义
在使用DBCA创建数据库时,依据之前的配置生成了创建数据库的脚本,其实只要修改一些参数,如数据库名,然后通过手工执行这些脚本就可以创建数据库。我们通过在Oracle10g中使用DBCA创建数据库中生成的脚本来理解DBCA创建数据库的过程,首先查看脚本文件的文件目录,如下所示。
F:\Oracle\product\10.2.0\admin\lin\scripts>dir 驱动器 F 中的卷是 Oracle10g 卷的序列号是 000B-1DED F:\Oracle\product\10.2.0\admin\lin\scripts 的目录 2009-09-15 08:42 <DIR> . 2009-09-15 08:42 <DIR> .. 2009-09-15 08:43 338 context.sql 2009-09-15 08:43 1,176 CreateDB.sql 2009-09-15 08:43 717 CreateDBCatalog.sql 2009-09-15 08:43 339 CreateDBFiles.sql 2009-09-15 08:43 192 cwmlite.sql 2009-09-15 08:43 292 emRepository.sql 2009-09-15 08:43 2,488 init.ora 2009-09-15 08:43 187 interMedia.sql 2009-09-15 08:43 408 JServer.sql 2009-09-15 08:43 790 lin.bat 2009-09-15 08:43 1,247 lin.sql 2009-09-15 08:43 191 odm.sql 2009-09-15 08:43 196 ordinst.sql 2009-09-15 08:43 1,214 postDBCreation.sql 2009-09-15 08:43 180 spatial.sql 2009-09-15 08:43 371 xdb_protocol.sql 16 个文件 10,326 字节 2 个目录 64,568,418,304 可用字节
如果手工创建数据库,首先需要运行lin.bat文件,下面我们看看该文件的内容,如图1-25所示。

图1-25 查看脚本文件lin.bat的内容
可见,该文件首先是创建一系列目录,然后设置数据库名,通过oradim.exe工具配置实例,然后启动SQLPLUS,执行lin.sql脚本文件创建数据库。
我们继续查看lin.sql的内容。如图1-26所示,该文件的开始部分用于定义用户口令,然后使用sys用户的口令创建口令文件。

图1-26 查看脚本文件lin.sql的内容
接着将执行一系列的脚本文件,如下所示。
@F:\Oracle\product\10.2.0\admin\lin\scripts\CreateDB.sql @F:\Oracle\product\10.2.0\admin\lin\scripts\CreateDBFiles.sql @F:\Oracle\product\10.2.0\admin\lin\scripts\CreateDBCatalog.sql @F:\Oracle\product\10.2.0\admin\lin\scripts\JServer.sql @F:\Oracle\product\10.2.0\admin\lin\scripts\odm.sql @F:\Oracle\product\10.2.0\admin\lin\scripts\context.sql @F:\Oracle\product\10.2.0\admin\lin\scripts\xdb_protocol.sql @F:\Oracle\product\10.2.0\admin\lin\scripts\ordinst.sql @F:\Oracle\product\10.2.0\admin\lin\scripts\interMedia.sql @F:\Oracle\product\10.2.0\admin\lin\scripts\cwmlite.sql @F:\Oracle\product\10.2.0\admin\lin\scripts\spatial.sql @F:\Oracle\product\10.2.0\admin\lin\scripts\emRepository.sql @F:\Oracle\product\10.2.0\admin\lin\scripts\postDBCreation.sql
下面我们主要介绍几个重要的脚本文件。
1.CreateDB.sql
该脚本文件用于创建数据库,内容如下所示。首先使用SYS用户登录数据库,该用户具有SYSDBA权限。然后启动数据库实例,此时使用参数脚本文件中的初始化参数文件init.ora。然后创建数据库。
F:\Oracle\product\10.2.0\admin\lin\scripts>type createdb.sql connect "SYS"/"&&sysPassword" as SYSDBA set echo on spool F:\Oracle\product\10.2.0\admin\lin\scripts\CreateDB.log startup nomount pfile="F:\Oracle\product\10.2.0\admin\lin\scripts\init.ora"; CREATE DATABASE "lin" MAXINSTANCES 8 MAXLOGHISTORY 1 MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 DATAFILE SIZE 300M AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SYSAUX DATAFILE SIZE 120M AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED SMALLFILE DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE SIZE 20M AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED SMALLFILE UNDO TABLESPACE "UNDOTBS1" DATAFILE SIZE 200M AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED CHARACTER SET ZHS16GBK NATIONAL CHARACTER SET AL16UTF16 LOGFILE GROUP 1 SIZE 51200K, GROUP 2 SIZE 51200K, GROUP 3 SIZE 51200K USER SYS IDENTIFIED BY "&&sysPassword" USER SYSTEM IDENTIFIED BY "&&systemPassword"; set linesize 2048; column ctl_files NEW_VALUE ctl_files; select concat('control_files=''', concat(replace(value, ', ', ''','''), '''')) ctl_files from v$parameter where name ='c ontrol_files'; host "echo &ctl_files >>F:\Oracle\product\10.2.0\admin\lin\scripts\init.ora"; spool off
最后将控制文件信息注册到初始化参数文件init.ora中,并且该脚本文件的执行过程都记录在文件F:\Oracle\product\10.2.0\admin\lin\scripts\CreateDB.log中。
2.CreateDBFiles.sql
该脚本文件的作用是创建数据库数据文件的表空间,并且将该表空间作为用户创建的数据库对象的默认存储空间,其内容如下所示。
F:\Oracle\product\10.2.0\admin\lin\scripts>type createdbfiles.sql connect "SYS"/"&&sysPassword" as SYSDBA set echo on spool F:\Oracle\product\10.2.0\admin\lin\scripts\CreateDBFiles.log CREATE SMALLFILE TABLESPACE "USERS" LOGGING DATAFILE SIZE 5M AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED EXTENT MANAGEME NT LOCAL SEGMENT SPACE MANAGEMENT AUTO; ALTER DATABASE DEFAULT TABLESPACE "USERS"; spool off
上述输出说明表空间USERS为小文件表空间(在Oracle10g中与大对象表空间对应)以及表空间的一些参数设置。如区段管理方式、表空间增长方式以及段管理方式等。
3.CreateDBCatalog.sql
该脚本文件主要用于创建数据库的数据字典,创建PL/SQL所需要的软件包和过程,以及用户的概要文件和相关过程等信息,该文件的内容如下所示。
F:\Oracle\product\10.2.0\admin\lin\scripts>type CreateDBCatalog.sql connect "SYS"/"&&sysPassword" as SYSDBA set echo on spool F:\Oracle\product\10.2.0\admin\lin\scripts\CreateDBCatalog.log @F:\Oracle\product\10.2.0\db_1\rdbms\admin\catalog.sql; @F:\Oracle\product\10.2.0\db_1\rdbms\admin\catblock.sql; @F:\Oracle\product\10.2.0\db_1\rdbms\admin\catproc.sql; @F:\Oracle\product\10.2.0\db_1\rdbms\admin\catoctk.sql; @F:\Oracle\product\10.2.0\db_1\rdbms\admin\owminst.plb; connect "SYSTEM"/"&&systemPassword" @F:\Oracle\product\10.2.0\db_1\sqlplus\admin\pupbld.sql; connect "SYSTEM"/"&&systemPassword" set echo on spool F:\Oracle\product\10.2.0\admin\lin\scripts\sqlPlusHelp.log @F:\Oracle\product\10.2.0\db_1\sqlplus\admin\help\hlpbld.sql helpus.sql; spool off spool off
4.emRepository.sql
该脚本文件用于创建EM(企业管理器)的档案库,该文件的内容如下所示。
F:\Oracle\product\10.2.0\admin\lin\scripts>type emRepository.sql connect "SYS"/"&&sysPassword" as SYSDBA set echo off spool F:\Oracle\product\10.2.0\admin\lin\scripts\emRepository.log @F:\Oracle\product\10.2.0\db_1\sysman\admin\emdrep\sql\emreposcre F:\Oracle\product\10.2.0\db_1 SYSMAN &&sysmanPassword TEMP ON; WHENEVER SQLERROR CONTINUE; spool off
5.postDBCreation.sql
该脚本文件用于完成数据库创建以后的工作,如创建SPFILE参数文件、修改用户口令、配置监听器等,该脚本文件的内容如下所示。
F:\Oracle\product\10.2.0\admin\lin\scripts>type postDBCreation.sql connect "SYS"/"&&sysPassword" as SYSDBA set echo on spool F:\Oracle\product\10.2.0\admin\lin\scripts\postDBCreation.log connect "SYS"/"&&sysPassword" as SYSDBA set echo on create spfile='F:\Oracle\product\10.2.0\db_1\database\spfilelin.ora' FROM pfile='F:\Oracle\product\10.2.0\admin\lin\scri pts\init.ora'; shutdown immediate; connect "SYS"/"&&sysPassword" as SYSDBA startup ; alter user SYSMAN identified by "&&sysmanPassword" account unlock; alter user DBSNMP identified by "&&dbsnmpPassword" account unlock; select 'utl_recomp_begin: ' || to_char(sysdate, 'HH:MI:SS') from dual; execute utl_recomp.recomp_serial(); select 'utl_recomp_end: ' || to_char(sysdate, 'HH:MI:SS') from dual; host F:\Oracle\product\10.2.0\db_1\bin\emca.bat -config dbcontrol db -silent -DB_UNIQUE_NAME lin -PORT 1521 -EM_HOME F:\ Oracle\product\10.2.0\db_1 -LISTENER LISTENER -SERVICE_NAME lin -SYS_PWD &&sysPassword -SID lin -Oracle_HOME F:\Oracle\p roduct\10.2.0\db_1 -DBSNMP_PWD &&dbsnmpPassword -HOST localhost -LISTENER_OH F:\Oracle\product\10.2.0\db_1 -LOG_FILE F:\ Oracle\product\10.2.0\admin\lin\scripts\emConfig.log -SYSMAN_PWD &&sysmanPassword; spool F:\Oracle\product\10.2.0\admin\lin\scripts\postDBCreation.log
这里主要是告诉读者脚本就是手动建库的SQL指令操作的集合,自动建库就是将手工建库的过程通过各种.SQL文件自动化,这样就使得读者能更好地理解DBCA自动建库的过程。