The Steps to Create a New Oracle Database
创建一个Oracle数据库 (10g) 的步骤大致如下:
1) Create a parameter file and password file.
2) Use the parameter file to build an instance in memory
3) Issue the CREATE DATABASE command. This will generate, at a minimum, a control file, two online redo log files; and two data files for SYSTEM and SYSAUX tablespace, and a Data Dictionary.
4) Run SQL Scripts to generate the data dictionary views and the supplied PL/SQL packages
5) Run SQL Scripts to generate Enterprise Manager Database Control, along with any options (such as Java) that the database will require.
6) (On windows) Using ORADIM.EXE to create a Oracle Service on Windows Platform.
需要注意的是,数据字典表是在第三步,也就是CREATE DATABASE中创建的,之后会进行基于这些数据字典表的视图的创建 (step4)
通过DBCA可以很容易得到创建数据库的脚步文件,一共有如下几个文件:(<dbname>指的是创建数据库的名字)
1) init.ora
2) <dbname>.bat
3)<dbname>.sql
4) CreateDB.sql
5) CreateDBFiles.sql
6) CreateDBCatalog.sql
7) emRepository.sql
8) postDBCreation.sql
现在来看下每个文件的具体内容是什么,
1) init.ora
注意这是个静态的参数文件,在创建数据库结束前( postDBCreation.sql),静态的参数文件会被转成SPFILE.
这里面需要注意的是DB_BLOCK_SIZE和CONTROL_FILES.
DB_BLOCK_SIZE决定了database buffer cache中buffer的大小。这个值同样会被用来设置SYSTEM, SYSAUX表空间对应的数据文件的数据块的大小。在数据库创建之后,这个参数值是不能更改的。
CONTROL_FILES指向了控制文件的所在,在创建数据库的时候,它表示将在什么地方创建控制文件。
##############################################################################
# Copyright (c) 1991, 2001, 2002 by Oracle Corporation
##############################################################################
###########################################
# SGA Memory
###########################################
sga_target=531628032
###########################################
# Job Queues
###########################################
job_queue_processes=10
###########################################
# Miscellaneous
###########################################
compatible=10.2.0.1.0
###########################################
# Security and Auditing
###########################################
audit_file_dest=D:\oracle\product\10.2.0\admin\ocp10g\adump
remote_login_passwordfile=EXCLUSIVE
###########################################
# Sort, Hash Joins, Bitmap Indexes
###########################################
pga_aggregate_target=177209344
###########################################
# Database Identification
###########################################
db_domain=""
db_name=ocp10g
###########################################
# File Configuration
###########################################
control_files=("D:\oracle\product\10.2.0\oradata\ocp10g\control01.ctl", "D:\oracle\product\10.2.0\oradata\ocp10g\control02.ctl", "D:\oracle\product\10.2.0\oradata\ocp10g\control03.ctl")
db_recovery_file_dest=D:\oracle\product\10.2.0\flash_recovery_area
db_recovery_file_dest_size=2147483648
###########################################
# Cursors and Library Cache
###########################################
open_cursors=300
###########################################
# System Managed Undo and Rollback Segments
###########################################
undo_management=AUTO
undo_tablespace=UNDOTBS1
###########################################
# Diagnostics and Statistics
###########################################
background_dump_dest=D:\oracle\product\10.2.0\admin\ocp10g\bdump
core_dump_dest=D:\oracle\product\10.2.0\admin\ocp10g\cdump
user_dump_dest=D:\oracle\product\10.2.0\admin\ocp10g\udump
###########################################
# Processes and Sessions
###########################################
processes=150
###########################################
# Cache and I/O
###########################################
db_block_size=8192
db_file_multiblock_read_count=16
2) <dbname>.bat
这个bat文件主要是用来创建一些列的目录结构(遵循OFA) , 设置ORACLE_SID环境变量。然后通过ORADIM.EXE来创建windows服务,并设置成自动启动。然后启动sql*plus,运行脚本文件<oraclename>.sql
mkdir D:\oracle\product\10.2.0\admin\ocp10g\bdump
mkdir D:\oracle\product\10.2.0\admin\ocp10g\cdump
mkdir D:\oracle\product\10.2.0\admin\ocp10g\dpdump
mkdir D:\oracle\product\10.2.0\admin\ocp10g\pfile
mkdir D:\oracle\product\10.2.0\admin\ocp10g\udump
mkdir D:\oracle\product\10.2.0\db_1\cfgtoollogs\dbca\ocp10g
mkdir D:\oracle\product\10.2.0\db_1\database
mkdir D:\oracle\product\10.2.0\flash_recovery_area
mkdir D:\oracle\product\10.2.0\oradata\ocp10g
set ORACLE_SID=ocp10g
D:\oracle\product\10.2.0\db_1\bin\oradim.exe -new -sid OCP10G -startmode manual -spfile
D:\oracle\product\10.2.0\db_1\bin\oradim.exe -edit -sid OCP10G -startmode auto -srvcstart system
D:\oracle\product\10.2.0\db_1\bin\sqlplus /nolog @D:\oracle\product\10.2.0\admin\ocp10g\scripts\ocp10g.sql
3) <dbname>.sql
这个脚本设置了SYS/SYSTEM/SYSMAN/DBSNMP这几个USER的密码,随后通过orapwd.exe创建密码文件。最后依次调用CreateDB.sql,CreateDBFiles.sql,CreateDBCatalog.sql,emRepository.sql,postDBCreation.sql
PROMPT specify a password for sys as parameter 1;
DEFINE sysPassword = &1
PROMPT specify a password for system as parameter 2;
DEFINE systemPassword = &2
PROMPT specify a password for sysman as parameter 3;
DEFINE sysmanPassword = &3
PROMPT specify a password for dbsnmp as parameter 4;
DEFINE dbsnmpPassword = &4
host D:\oracle\product\10.2.0\db_1\bin\orapwd.exe file=D:\oracle\product\10.2.0\db_1\database\PWDocp10g.ora password=&&sysPassword force=y
@D:\oracle\product\10.2.0\admin\ocp10g\scripts\CreateDB.sql
@D:\oracle\product\10.2.0\admin\ocp10g\scripts\CreateDBFiles.sql
@D:\oracle\product\10.2.0\admin\ocp10g\scripts\CreateDBCatalog.sql
@D:\oracle\product\10.2.0\admin\ocp10g\scripts\emRepository.sql
@D:\oracle\product\10.2.0\admin\ocp10g\scripts\postDBCreation.sql
4) CreateDB.sql
通过startup nomount的方式创建instance, 用到的pfile就是在第一步中的init.ora.
这个文件的内容跟控制文件很类似。
connect "SYS"/"&&sysPassword" as SYSDBA
set echo on
spool D:\oracle\product\10.2.0\admin\ocp10g\scripts\CreateDB.log
startup nomount pfile="D:\oracle\product\10.2.0\admin\ocp10g\scripts\init.ora";
CREATE DATABASE "ocp10g"
MAXINSTANCES 8
MAXLOGHISTORY 1
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
DATAFILE 'D:\oracle\product\10.2.0\oradata\ocp10g\system01.dbf' SIZE 300M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL
SYSAUX DATAFILE 'D:\oracle\product\10.2.0\oradata\ocp10g\sysaux01.dbf' SIZE 120M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
SMALLFILE DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE 'D:\oracle\product\10.2.0\oradata\ocp10g\temp01.dbf' SIZE 20M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
SMALLFILE UNDO TABLESPACE "UNDOTBS1" DATAFILE 'D:\oracle\product\10.2.0\oradata\ocp10g\undotbs01.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED
CHARACTER SET ZHS16GBK
NATIONAL CHARACTER SET AL16UTF16
LOGFILE GROUP 1 ('D:\oracle\product\10.2.0\oradata\ocp10g\redo01.log') SIZE 51200K,
GROUP 2 ('D:\oracle\product\10.2.0\oradata\ocp10g\redo02.log') SIZE 51200K,
GROUP 3 ('D:\oracle\product\10.2.0\oradata\ocp10g\redo03.log') SIZE 51200K
USER SYS IDENTIFIED BY "&&sysPassword" USER SYSTEM IDENTIFIED BY "&&systemPassword";
spool off
这个文件创建了数据库,数据字典表也被创建了。 虽然这个时候数据库已经被创建了,但是是不可用的(unusable),还需要运行以下的文件才可以让数据库usable.
5) CreateDBFiles.sql
这个文件创建了user表空间,并设置成数据库的默认表空间。
connect "SYS"/"&&sysPassword" as SYSDBA
set echo on
spool D:\oracle\product\10.2.0\admin\ocp10g\scripts\CreateDBFiles.log
CREATE SMALLFILE TABLESPACE "USERS" LOGGING DATAFILE
'D:\oracle\product\10.2.0\oradata\ocp10g\users01.dbf' SIZE 5M REUSE
AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
ALTER DATABASE DEFAULT TABLESPACE "USERS";
spool off
6) CreateDBCatalog.sql
创建数据库的数据字典视图和PL/SQL包。
connect "SYS"/"&&sysPassword" as SYSDBA
set echo on
spool D:\oracle\product\10.2.0\admin\ocp10g\scripts\CreateDBCatalog.log
@D:\oracle\product\10.2.0\db_1\rdbms\admin\catalog.sql;
@D:\oracle\product\10.2.0\db_1\rdbms\admin\catblock.sql;
@D:\oracle\product\10.2.0\db_1\rdbms\admin\catproc.sql;
@D:\oracle\product\10.2.0\db_1\rdbms\admin\catoctk.sql;
@D:\oracle\product\10.2.0\db_1\rdbms\admin\owminst.plb;
connect "SYSTEM"/"&&systemPassword"
@D:\oracle\product\10.2.0\db_1\sqlplus\admin\pupbld.sql;
connect "SYSTEM"/"&&systemPassword"
set echo on
spool D:\oracle\product\10.2.0\admin\ocp10g\scripts\sqlPlusHelp.log
@D:\oracle\product\10.2.0\db_1\sqlplus\admin\help\hlpbld.sql helpus.sql;
spool off
spool off
7) emRepository.sql
创建Enterprise Manager Database Control工具。
set echo off
spool D:\oracle\product\10.2.0\admin\ocp10g\scripts\emRepository.log
@D:\oracle\product\10.2.0\db_1\sysman\admin\emdrep\sql\emreposcre D:\oracle\product\10.2.0\db_1 SYSMAN &&sysmanPassword TEMP ON;
WHENEVER SQLERROR CONTINUE;
spool off
8) postDBCreation.sql
做一些清理工作,例如创建spfile
connect "SYS"/"&&sysPassword" as SYSDBA
set echo on
spool D:\oracle\product\10.2.0\admin\ocp10g\scripts\postDBCreation.log
connect "SYS"/"&&sysPassword" as SYSDBA
set echo on
create spfile='D:\oracle\product\10.2.0\db_1\database\spfileocp10g.ora' FROM pfile='D:\oracle\product\10.2.0\admin\ocp10g\scripts\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 D:\oracle\product\10.2.0\db_1\bin\emca.bat -config dbcontrol db -silent -DB_UNIQUE_NAME ocp10g -PORT 1521 -EM_HOME D:\oracle\product\10.2.0\db_1 -LISTENER LISTENER -SERVICE_NAME ocp10g -SYS_PWD &&sysPassword -SID ocp10g -ORACLE_HOME D:\oracle\product\10.2.0\db_1 -DBSNMP_PWD &&dbsnmpPassword -HOST PC-201003131309 -LISTENER_OH D:\oracle\product\10.2.0\db_1 -LOG_FILE D:\oracle\product\10.2.0\admin\ocp10g\scripts\emConfig.log -SYSMAN_PWD &&sysmanPassword;
spool D:\oracle\product\10.2.0\admin\ocp10g\scripts\postDBCreation.log
以上就是创建一个Oracle数据库的大致过程。
--------------------------------------
Regards,
FangwenYu