ITPub博客

首页 > 数据库 > Oracle > 手工创建数据库

手工创建数据库

原创 Oracle 作者:dotaddjj 时间:2011-08-10 13:43:45 0 删除 编辑

Oracle数据库的启动分为三个状态nomount,mount,open,三个状态需要的文件了spfile,controlfile,datafile,log file。第一次看eygle的《循序渐进》的第一章就是手工创建数据库解析。当时由于是5个月前刚接触oracle,很多东西都不会很理解,现在这几天又好好看了下,期间我也手工创建数据库一两次,晒下其中的有些注意的地方。

1 首先我们先做点准备工作吧,oracle软件肯定需要安装的吧,然后数据库文件的储存目录

Mkdir oracle_baseadminsfadump

Mkdir oracle_baseadminsfbdump 准备用于存储警告日志文件和后台跟踪日志

Mkdir oracle_baseadminsfcdump

Mkdir oracle_baseadminsfudump 准备用于存储用户跟踪日志

Mkdir oracle-baseoradatasf 准备存储数据文件 日志文件 控制文件

2 数据库是由实例来访问的,首先需要我们利用oradim工具来创建一个数据库实例

C:>Oradim -new -sid sf

数据库实例sf的服务已经注册到windows services中去,此时实例并不是os上面的提示的创建成功,实例在nomount创建成功启动需要sga和后台进程。

3 但是此时实例是已经创建完毕了,但是如何启动实例了,首先我们需要sys用户连入未启动的数据库实例,这个时候是需要sys用户密码验证文件,利用工具orapwd来创建

C:>Orapwd file=oracle_homedatabaseorapwsf. Entries=2 password=oracle

上述的entries是sys指定的最大用户数。因为数据库实例未启动,普通用户无法连入此时sys用户可以通过密码验证文件来启动数据库,就需要密码验证文件。

4 实例创建已经完成,密码验证文件也已经生成,但是此时由于没有spfile或者pfile参数文件,我们只能

C:>Set oracle_sid=sf

指定oracle_sid,让操作系统可以通过oracle_sid来启动数据库对应的后台进程

C:>sqlplus sys/oracle as sysdba;

此时是无法startup nomount的了。

此时我们可以手工创建一个pfile。

Mkdir oracle_homedatabaseinitsf.ora

此时我们创建了一个pfile参数文件或者cp一个别的实例pfile来修改,不过还是手工创建吧,pfile文件中在我以前的nomount状态数据库详解中记载到pfile文件中只需要一个参数就能启动数据库,那就是db_name=sf,我们在pfile默认参数下创建一个只有一个db_name参数的pfile文件。

Sql>startup nomount

数据库实例此时已经可以启动了,此时我们已经只用了上面三步就把一个只安装oracle软件的机器成功的创建了数据库实例并启动到nomount状态。

5 nomount状态是oracle实例启动过程,此时数据库分配sga和oracle后台进程,此时我们并没有涉及到控制文件和数据文件 日志文件中物理文件的创建,接下来我们需要执行建库脚本。

create database sf

datafile 'd:oracleproduct10.2.0oradatasfsystem01.dbf' size 100M

default temporary tablespace temp tempfile 'd:oracleproduct10.2.0oradatasftemp01.dbf' size 100M

undo tablespace "undotb" datafile 'd:oracleproduct10.2.0oradatasfundotb01.dbf' size 100M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED

sysaux datafile 'd:oracleproduct10.2.0oradatasfsysaux01.dbf' size 100M

logfile group 1 ('d:oracleproduct10.2.0oradatasfredo01.log') size 10M,

group 2 ('d:oracleproduct10.2.0oradatasfredo02.log') size 10M,

group 3 ('d:oracleproduct10.2.0oradatasfredo03.log') size 10M;

今天早上我运行此脚本,出现很多次的失败,由于是oracle10G,我在上述脚本中

default temporary tablespace temp tempfile 'd:oracleproduct10.2.0oradatasftemp01.dbf' size 100M 后习惯的加上了extent management local,结果错误一次,查阅资料因为是10G数据库都是默认的本地管理extent,不存在字典管理表空间,所以附加extent management local反而报错。刚开始上述脚本中没有sysaux datafile 'd:oracleproduct10.2.0oradatasfsysaux01.dbf' size 100M,运行时再次报错,因为sysaux作为oracle10G中的system辅助表空间必须在建库脚本中指定。同样可以觉得oracle10G的必须的表空间是system sysaux temp undotb也就是系统表空间和辅助系统表空间,临时表空间和回滚表空间是必须的,建库脚本中必须指定。但是当我再次运行上述脚本还是会报错,这时候想到上面的pfile文件,pfile文件中由于只指定了db_name参数,由于mount状态需要controlfile,个人尝试在pfile中加载如下内容

pfile文件:

db_name=sf

control_files=("D:oracleproduct10.2.0oradatasfcontrol01.ctl", "D:oracleproduct10.2.0oradatasfcontrol02.ctl", "D:oracleproduct10.2.0oradatasfcontrol03.ctl")

undo_management='AUTO'

undo_tablespace='undotb'

后面的undo的两个参数,经过测试在建库成功后是即使删除上述undo两个参数数据库都能从nomout mount open,等于如果pfile中只有db_name参数,数据库是无法mount状态的,需要pfile来指定controlfile。

(由于此pfile中没有设置background_dump_dest,user_dump_dest等用于存放后台日志 警告日志 用户跟踪日志,默认的都存储在oracle_homerdbmstrace下了,最好还是指定上述参数吧跟踪日志存储在在开头的指定的目录中,方便查看)

6 用catalog.sql创建数据字典

start d:oracleproduct10.2.0db_1rdbmsadmincatalog.sql

7 用catproc.sql创建系统包

start d:oracle]product10.2.0db_1rdbmsadmincatproc.sql

8执行pupbld.sql

connect system/manager

start d:oracleproduct10.2.0db_1sqlplusadminpupbld.sql

9 重新关闭数据库并打开

shutdown immediate

startup nomount

alter database mount

alter database open

关于上述的6,7,8脚本由于内容较多,个人没有过多分析里面的脚本,个人觉得有些有些oracle的东西刚开始接触第一次不是一下子就弄明白的,需要反复的查看复习。例如这篇原创笔记大概5个月前我是绝对写不出来的,而且看eygle的书基本上是90%以上完全不懂,现在回过头来看里面的手工建库虽然有点复杂,但是自己确实能理清楚了,而且还能有点自己的想法!学习就是一个反复的过程!坚持!

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25362835/viewspace-1053687/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: sga的自动管理
请登录后发表评论 登录
全部评论
  • 博文量
    220
  • 访问量
    1662975