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) 
199120012002 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\adump
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

set verify off
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工具。

connect "SYS"/"&&sysPassword" as SYSDBA
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
原文地址:https://www.cnblogs.com/fangwenyu/p/1726330.html