提出问题比解决问题重要,知道做什么比知道如何做更重要

windows平台从零开始手工创建oracle数据库

上一篇 / 下一篇  2008-04-16 14:00:54 / 个人分类:ORACLE相关

 
显然通过手工创建数据库的方式可以更多的暴露oracle操作细节,更好的理解oracle运行的机制。本次测试的平台是win2003企业版,oracle92。
一、安装oracle软件ITPUB个人空间2EJ~!]L p
只安装数据库软件,不要创建默认数据库,安装完成后oracle会创建如下服务:
OracleMTSRecoveryServiceITPUB个人空间q*l d8K:b2Xy
OracleOraHome92AgentITPUB个人空间KaS6SoE0V/T1m
OracleOraHome92ClientCache
+OP[1Q6Ie1X3H |.{M0OracleOraHome92HTTPServer
1T&c_E j_0OracleOraHome92PagingServerITPUB个人空间E gW^w4KUA
OracleOraHome92SNMPPeerEncapsulator
,~ s3{0O@5TP5T0OracleOraHome92SNMPPeerMasterAgentITPUB个人空间Px@U!^L&R"e5u
以上服务并不是我们最关心的服务
二、创建实例
在创建一个实例之前,来做如下测试:
开始-运行-cmd-sqlplus /nolog
_j JZ7?$C6Q U0conn / as sysdba 系统将给出如下错误提示:
SQL> conn / as sysdba
IQ^+l\wT0ERROR:
M$fBU3jnYJpt_j0ORA-12560: TNS: 协议适配器错误:
其原因在于没有当前系统没有一个运行的oracle实例,而且sqlplus也不知道你要连接哪个实例。ITPUB个人空间Y(dQ&z7u
下面开始创建一个名称为ora9的实例,最简单的方法是在命令行下运行oracle ora9,实例将以一个程序的方式运行,显然这不是专业的做法,oracle提供了一个注册实例的工具
&n E1D7R5|'chxL0在命令运行oradim -new -sid ora9
QPY ^\ d0
一个名称为OracleServiceora9的服务被创建ITPUB个人空间^KMTOY
接下来在注册表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0增加一个键值ORACLE_SID=ORA9
di9uG5E0再次连接,系统将提示连接到一个空闲的实例,什么是空闲的实例,空闲的实例意味着没有数据库加载和打开,没有SGA,也没有后台进程,而只有服务器进程。
既然已经有个了一个空的实例,我不免产生了一个startup的冲动,just do it看看接下来会发生什么。
SQL> startup
1]IgtJ Zc0ORA-01078: failure in processing system parametersITPUB个人空间 y0Yp8VEB5h
LRM-00109: N^7(4r?*2NJ}ND<~ 'C:\ORACLE\ORA92\DATABASE\INITORA9.ORA'
恩,有乱码,不过看样子好像是需要一个初始化的参数文件,接下来我们就构建这样一个初始化文件。
C:\oracle\ora92\admin\sample\pfile目录下一个initsmpl.ora复制到'C:\ORACLE\ORA92\DATABASE\改名为initora9.ora,打开文件,有很多配置项不过都注释掉了,不要被这些选项吓到,全部清空,再次运行startup,系统给出如下信息

zd pi4C {0SQL> startupITPUB个人空间-WA4V2h QQ
ORACLE instance started.
Total System Global Area   97589952 bytes
EnXRMI z5j*sf-?0Fixed Size                   453312 bytes
?p_ k6i:rw0H0Variable Size              46137344 bytes
U,G{ NY-Z0Database Buffers           50331648 bytes
D,`*l \ iY)O X n0Redo Buffers                 667648 bytes
f%_%X*vy.W$e0ORA-01506: missing or illegal database name
错误是说缺少database name,shutdown实例再换一个启动方式
 
SQL> startup nomountITPUB个人空间&u6J!\ },\ Ht
ORACLE instance started.
Total System Global Area   97589952 bytesITPUB个人空间&CCFv)G-gY
Fixed Size                   453312 bytesITPUB个人空间-p%L o9c^:\ m3R
Variable Size              46137344 bytesITPUB个人空间1N!~.j%ue u$n
Database Buffers           50331648 bytesITPUB个人空间._wDxP'k.X [)c%e
Redo Buffers                 667648 bytes
r f)wG5u+I)|A0SQL>
这次没有错误提示了,为什么呢ITPUB个人空间'y r-z8`.S[I/?E
startup命令系统将执行以下操作,启动实例,加载数据库,打开数据库
Fo5s s6k0MpS(rB0startup nomount意味着只启动实例,不加载数据库当前情况下系统还没有数据库,而且也没有在配置文件制定db_name报错就在所难免了。
 
SQL> select instance_name, status from v$instance;
INSTANCE_NAME    STATUSITPUB个人空间+m0PTM#}7fw
---------------- ------------ITPUB个人空间-iwBW C1F$OI(w
ora9             STARTED
可以看到实例的当前状态是started,接下来我们开始创建数据库
三、创建数据库
非常简单的一个命令create database,运行看看有什么结果,可以想象到会产生什么错误
SQL> create database;
5QS-Hx7{N&l,E2Y:J0create databaseITPUB个人空间7RJ(R3?b P)ve\
              *ITPUB个人空间;A\^d.\xk/gx
ERROR at line 1:
F\F~(E p Z0ORA-01506: missing or illegal database name
A3NH+I7L4g0
没有数据库名字,原因在于initora9.ora文件里缺少一个关键的配置db_name='ora9db',注意数据库名称可以和实例名称不一致,如果配置了此项可以避免这个错误提示,不要紧,在这个命令下我们手工指定数据库名称,再来一次
SQL> create database ora9db;
Database created.
SQL>
创建成功了
SQL> select instance_name, status from v$instance;
INSTANCE_NAME    STATUSITPUB个人空间n C [!h'A?L c
---------------- ------------ITPUB个人空间hB.Z aE&tg
ora9             OPEN
状态改变了ITPUB个人空间J/hH\LJ!I%F;y\\b
SQL> select name from v$datafile;
NAME
|&tl:w.}\0--------------------------------------------
C:\ORACLE\ORA92\DATABASE\DBS1ORA9.ORA
C:\ORACLE\ORA92\DATABASE\DBS1ORA9.ORA
这是数据库的数据文件
SQL> select name from v$tablespace;
NAMEITPUB个人空间:V*Mzy"Igh
------------------------------
x]ZPm1^3t:P0SYSTEM
MH+vkv^ Zc8C0这是SYSTEM表空间
SQL> select name from v$controlfile;
NAME
}td8Z]p0-------------------------------------------
C:\ORACLE\ORA92\DATABASE\CTL1ORA9.ORA
这是控制文件
SQL> select member from v$logfile;
MEMBERITPUB个人空间,Mwt^0}0P8w
-------------------------------------------
C:\ORACLE\ORA92\DATABASE\LOG1ORA9.ORAITPUB个人空间+Tr0K y{
C:\ORACLE\ORA92\DATABASE\LOG2ORA9.ORA
6?'}&fd,|4{-T0这是日志文件
显然这一步ORACLE在幕后做了很多操作
---创建数据文件,控制文件,日志文件
---创建了SYSTEM表空间
---创建了数据字典
---设置数据库字符集SELECT name,value$ from sys.props$ where name like '%NLS%'可以看到
---装载并打开数据库
不过工作还没有完成,还要继续下一步的操作
四、运行脚本创建数据字典视图、同义词和PL/SQL包
SQL> @%oracle_home%\rdbms\admin\catalog.sql
执行完会有2个object的status是invalid
SQL> @%oracle_home%\rdbms\admin\catproc.sql
此一步不一定能够创建成功
五、创建其他表空间
 
六、总结一下步骤
上面所做的测试只是为了研究oracle数据库创建所要作的工作,生产环境下要创建数据库还要对各个步骤进行润色,总的说来需要如下几个步骤
确定实例名-->创建服务-->创建初始化数参数文件-->启动实例-->执行create database-->创建其他表空间-->运行脚本创建数据字典视图和程序包-->创建服务端参数文件
七、附录,初始化参数文件示例和创建数据库的完整脚本

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-12-05  
 123456
78910111213
14151617181920
21222324252627
28293031   

数据统计

  • 访问量: 1283
  • 日志数: 23
  • 建立时间: 2007-12-29
  • 更新时间: 2008-07-07

RSS订阅

Open Toolbar