- OCA/OCP认证考试指南全册(第3版) Oracle Database 12c(1Z0-061,1Z0-062,1Z0-063) (计算机与信息)
- (美)John Watson等
- 2274字
- 2021-03-26 13:10:11
2.2 使用DBCA生成数据库创建脚本
没有理由不使用DBCA交互式创建数据库,但在许多情况下,最好通过命令行创建数据库。为什么?原因可能如下:
● 服务器可能没有图形功能。
● 更改控制功能可能需要测试过的脚本。
● 可能需要创建许多相同的数据库。
● 不希望坐在屏幕前响应提示。
无论什么原因,如果有脚本,手工创建数据库都很简单。编写脚本的最简单方式是让DBCA完成。
2.2.1 生成脚本
要生成脚本,可以启动DBCA,进入对话框,选择合适的选项。在步骤10,选择对应的复选框,再选择一个目录。默认位置是ORACLE_BASE下面。在Windows上,数据库orcl121的一般位置如下:
c:\app\oracle\admin\orcl121\scripts
在Linux上,一般位置如下:
/u01/app/oracle/admin/orcl121/scripts
无论什么平台,脚本的结构都相同:以数据库命名的外壳脚本(例如,对于Linux,是orcl121.sh;对于Windows,是orcl121.bat)。该脚本执行一些操作系统(OS)任务,再启动SQL*Plus,以运行SQL脚本(称为oracle121.sql)。SQL脚本完成数据库创建的剩余工作。研究这些脚本和它们调用的脚本是有益的。
2.2.2 创建脚本
起点是外壳脚本。看看Linux版本示例:
#! /bin/sh OLD_UMASK='umask' umask 0027 mkdir -p /u01/app/oracle/admin/orcl121/adump mkdir -p /u01/app/oracle/admin/orcl121/dpdump mkdir -p /u01/app/oracle/admin/orcl121/pfile mkdir -p /u01/app/oracle/audit mkdir -p /u01/app/oracle/cfgtoollogs/dbca/orcl121 mkdir -p /u01/app/oracle/fast_recovery_area mkdir -p /u01/app/oracle/fast_recovery_area/orcl121 mkdir -p /u01/app/oracle/oradata/orcl121 mkdir -p /u01/app/oracle/product/12.1.0/dbhome_1/dbs umask ${OLD_UMASK} ORACLE_SID=orcl121; export ORACLE_SID PATH=$ORACLE_HOME/bin:$PATH; export PATH echo You should Add this entry in the /etc/oratab: orcl121:/u01/app/oracle/product/12.1.0/dbhome_1:Y /u01/app/oracle/product/12.1.0/dbhome_1/bin/sqlplus /nolog @/u01/app/oracle/admin/orcl121/scripts/orcl121.sql
这会通过DBCA对话框提供的、ORACLE_BASE和ORACLE_HOME环境变量的值,或者默认值,利用合适的访问权限来创建几个目录。接着调用SQL *Plus 启动SQL脚本oracle121.sql。Windows 上的变化是调用ORADIM实用程序,在运行实例的账户下创建Windows服务。
根据在DBCA对话框中选择的选项,生成的SQL脚本有很大区别。下面是一个例子:
set verify off ACCEPT sysPassword CHAR PROMPT 'Enter new password for SYS: ' HIDE ACCEPT systemPassword CHAR PROMPT 'Enter new password for SYSTEM: ' HIDE host /u01/app/oracle/product/12.1.0/dbhome_1/bin/orapwd file=/u01/app/oracle/ product/12.1.0/dbhome_1/dbs/orapworcl121 force=y extended=y @/u01/app/oracle/admin/orcl121/scripts/CreateDB.sql @/u01/app/oracle/admin/orcl121/scripts/CreateDBFiles.sql @/u01/app/oracle/admin/orcl121/scripts/CreateDBCatalog.sql @/u01/app/oracle/admin/orcl121/scripts/sampleSchema.sql @/u01/app/oracle/admin/orcl121/scripts/apex.sql @/u01/app/oracle/admin/orcl121/scripts/postDBCreation.sql @/u01/app/oracle/admin/orcl121/scripts/lockAccount.sql
ACCEPT命令提示输入SYS和SYSTEM模式的密码。接着,脚本调用一个主外壳程序,运行orapwd实用程序。这个实用程序用平台特定的名称创建外部密码文件。在Linux上,它是$ORACLE_ HOME/dbs/orapw<DBNAME>(其中<DBNAME>是数据库的名称);在Windows上,它是% ORACLE_ HOME%\database\PWD<DBNAME>.ora。
下面是一组对其他SQL脚本的调用,从CreateDB.sql开始:
SET VERIFY OFF connect "SYS"/"&&sysPassword" as SYSDBA set echo on spool /u01/app/oracle/admin/orcl121/scripts/CreateDB.log append startup nomount pfile="/u01/app/oracle/admin/orcl121/scripts/init.ora"; CREATE DATABASE "orcl121" MAXINSTANCES 8 MAXLOGHISTORY 1 MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 DATAFILE '/u01/app/oracle/oradata/orcl121/system01.dbf' SIZE 700M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SYSAUX DATAFILE '/u01/app/oracle/oradata/orcl121/sysaux01.dbf' SIZE 550M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED SMALLFILE DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/u01/app/oracle/oradata/orcl121/temp01.dbf' SIZE 20M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED SMALLFILE UNDO TABLESPACE "UNDOTBS1" DATAFILE '/u01/app/oracle/oradata/orcl121/undotbs01.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED CHARACTER SET AL32UTF8 NATIONAL CHARACTER SET AL16UTF16 LOGFILE GROUP 1 ('/u01/app/oracle/oradata/orcl121/redo01.log') SIZE 51200K, GROUP 2 ('/u01/app/oracle/oradata/orcl121/redo02.log') SIZE 51200K, GROUP 3 ('/u01/app/oracle/oradata/orcl121/redo03.log') SIZE 51200K USER SYS IDENTIFIED BY "&&sysPassword" USER SYSTEM IDENTIFIED BY "&&systemPassword"; spool off
第二行使用提供的密码用SYS用户的身份进行连接。第5行使用参数文件init.ora以非装载模式启动数据库。这个文件包含的参数是默认设置的,或者是在DBCA对话框中指定的。下一个命令(一直到文件尾)创建了数据库。
提示:
记住模式:nomount命令表示“建立内存结构,启动进程。”
CREATE DATABASE “oracle121”命令行的后面是一些限制的设置 ( 例如MAXDATAFILES=100表示这个数据库限制为100个数据文件),之后是4个表空间的子句:
● SYSTEM表空间(存储数据字典)在数据文件system01.dbf中,其大小为700MB。
● SYSAUX表空间(不与数据字典关联、但关系紧密的对象)在数据文件sysaux01.dbf中,其大小为550MB。
● 默认的临时表空间TEMP(用于临时数据——会话需要的空间,仅持续较短时间)在临时文件temp01.dbf中,其大小为20MB。撤消表空间UNDOTBS1(用于撤消段,是确保事务持续性所必须的)使用数据文件undotbs01.dbf,其大小为200MB。
接着指定数据库和语言的字符集。在例子中指定了Unicode。LOGFILE部分指定,数据库应有3个联机日志文件组,每个组都包含一个50MB的文件(日志文件成员)。最后,设置SYS和SYSTEM的密码。
这个数据库创建目录仅运行了几分钟。它只是创建了数据库所需的最小结构,最重要的是创建了数据字典。然后,控制权返回给调用的SQL脚本,它(在本例中)启动了更多的脚本。
● CreateDBFiles.sql创建了表空间USERS,用作默认的表空间,以存储永久对象(如表)。
● CreateDBCatalog.sql调用一组脚本,根据数据字典和各种提供的PL/SQL包,生成需要的视图。
● 接着几个脚本(JServer.sql到apex.sql)生成在DBCA对话框中选择的各个选项。
● postDBCreation.sql在创建后立即运行所有必要的操作,例如应用绑定的包,把pfile转换为spfile。
● lockAccount.sql锁定所有预先注册的账户(有几个例外),最后重新启动数据库。
根据DBCA对话框中的选项,生成的脚本及其内容互不相同。例如,如果第3步选择从模板中创建数据库,整个过程就简单许多,因为数据库不需要创建,大多数工作都通过调用RMAN Recovery Manager过程来完成,实际上是在模板中从一个备份中恢复数据库。
2.2.3 初始化参数文件
要启动数据库实例,DBCA必须创建一个初始化参数文件。选择创建数据库或生成脚本的选项时,就会生成该文件。该文件在其他脚本所在的目录下生成,在CreateDB.sql脚本的STARTUP命令下指定。
startup nomount pfile="/u01/app/oracle/admin/orcl121/scripts/init.ora";
下面是练习2-1的对话框生成的文件(为简洁起见,删除了注释):
db_block_size=8192 open_cursors=300 db_domain="" db_name="orcl121" control_files=("/u01/app/oracle/oradata/orcl121/control01.ctl", "/u01/app/oracle/fast_recovery_area/orcl121/control02.ctl") db_recovery_file_dest="/u01/app/oracle/fast_recovery_area" db_recovery_file_dest_size=5061476352 compatible=12.0.0.0.0 diagnostic_dest=/u01/app/oracle processes=300 sga_target=503316480 audit_file_dest="/u01/app/oracle/admin/orcl121/adump" audit_trail=db remote_login_passwordfile=EXCLUSIVE dispatchers="(PROTOCOL=TCP) (SERVICE=orcl121XDB)" pga_aggregate_target=167772160 undo_tablespace=UNDOTBS1
所有这些参数都在后面的章节中讨论。该文件在上百个参数中仅指定了16个,是运行典型数据库所需的最少参数集。根据环境、规模和性能的要求,后面将添加更多的参数。
练习2-2 使用DBCA生成数据库创建脚本
使用DBCA生成几组数据库创建脚本。尽量多重复几次,每次都提供不同的数据库名和SID,选择不同的选项。下面是要执行的步骤:
(1) 启动DBCA。响应提示,如下所示:
A.选择Create Database单选按钮。单击Next按钮。
B.选择Advanced Mode 单选按钮。如果选择Create A Database With Default Configuration,就不会显示生成脚本的提示。单击Next按钮。
C.选择General Purpose Or Transaction Processing单选按钮。单击Next按钮。
D.把Global Database Name和SID值都指定为gpdb。单击Next按钮。
E.取消选择所有选项,单击Next按钮。
F.输入密码Oracle121。单击Next按钮。
G.在Storage Type下拉框中选择File System,其他使用默认值。单击Next按钮。
H.使用所有默认值,单击Next按钮。
I.使用所有默认值,单击Next按钮。
J.取消选择Create Database和Save As A Database Template复选框,选择Generate Database Creation Scripts复选框。注意创建脚本的目录。单击Next按钮。
K.这一步不需要任何输入。
L.研究汇总。注意从模板中安装,将包含上一练习提到的所有选项,还给不同的参数指定了值。单击Finish按钮。
M.生成脚本,单击OK按钮,再单击Close按钮。
(2) 研究脚本。
尝试逆向工程创建过程。注意使用模板,使该过程简单许多。比较这个练习和上个练习生成的脚本。
(3) 重复。
重复这个练习,使用不同的设置,熟悉DBCA对话框和它生成的脚本非常重要。