Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2518107
  • 博文数量: 540
  • 博客积分: 11289
  • 博客等级: 上将
  • 技术积分: 6160
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-11 20:27
个人简介

潜龙勿用,见龙在田

文章分类

全部博文(540)

文章存档

2018年(2)

2013年(5)

2012年(24)

2011年(104)

2010年(60)

2009年(217)

2008年(128)

分类: Oracle

2009-04-03 14:33:01

对于许多数据库管理员来说,究 竟是不是一个难以管理和驾驭的怪兽级数据库,会不会让他们管理生涯饱受折磨?当看到其命令行界面时,很多人会问这么一个问题。如果你想通过一个应用程序操 控使用这个数据库,那么你应当是一名终端用户;因此对这类人而言,界面越透明当然越好,而命令行界面显然不够理想。而如果你想成为精通数据库的技术员,成 为排除数据库故障的检修员,成为当大家碰到数据库难题时会向他求助的万能先生的话,你就不能嫌脏怕累,而要不辞劳苦地深入了解数据库的结构和机理,这样你 才能知道数据库到底怎么运作,发生了什么问题。命令行界面正是你需要适应并了解的东西。

  为什么要手动创建数据库?

  创建数据库也应该是你要深入了解的内容之一。当然,Oracle本身提供有图形用户界面工具可以帮助用户出色地完成这项任务。但是如果失败了 呢?如果你在创建的过程中出现了警告或错误信息呢?这时候你应当怎么办?你是否想知道在这些信息背后到底是哪里出了问题?你是否想要更进一步了解 Oracle在数据库创建的过程中到底是怎么变的戏法吗?来手动创建一次数据库,相信就能为你阐明一切。

  当你手动创建一个数据库时,你就要在sqlplus提示符下输入指令。通常情况下你需要将这些指令添加到一个sql脚本,随后从sqlplus 调用这个脚本。假设所有的路径和选项都正确,设定的大小可用,而且在数据库创建过程中没有达到容量的极限的话,那么整个创建过程应当顺利运行。而且,如果 你开发了一个想要部署到Oracle数据库商的应用程序,你的应用程序也可以提供一份数据库创建脚本,按照你设定的方式来运行。

  什么时候使用手动方法创建数据库?

  显然,当你第一次学习Oracle时,你应当使用手动方法来创建数据库。一旦你完全理解其中的奥妙,你就可以考虑使用图形用户界面来简化你的工 作。不过,如果你想控制文件的命名规范,建议你还是坚持使用手动方法。此外,当有新版本的Oracle数据库发布时,一定要通过手动方法检查一下有什么新 选项添加到了创建数据库的语法当中。那如果你要创建一大堆特征相似的数据库呢?这种时候,手动创建的方法更具有吸引力,因为这样能够减少我们的工作量。

  如何手动创建数据库

  首先我们把我们要创建的数据命名为DBJ。接着,至少你得给DBJ设置OCLE_D环境变量,编辑initDBJ.ora,添加如下脚本:

  db_name=DBJ

  然后启动sqlplus,发布如下指令:

  SQL> startup nomount;

  SQL> create ;

  Oracle会为所需要的所有参数设置一些默认值,例如应当将数据文件、控制文件放在哪里,分配多少内存等,然后启动实例,不挂载任何文件。创 建数据库指令(create database)将要求Oracle创建一个数据库,这个数据库带有最小系统和sysaux表空间等默认设置。

  不过现实中,我们可能想要指定很多其他的选项。下面我们来看看现实中创建Oracle数据库脚本更真实的例子:

  connect / as sysdba;
  startup nomount;
  EATE ABASE "dbj"
  DFILE
  '/u01/oradata/sysdbj01.dbf' size 500M
  SYSAUX DATILE
  '/u01/oradata/auxdbj01.dbf' size 500M
  UNDO TABLESPACE dbjundo DATAFILE
  '/u01/oradata/unddbj01.dbf' size 250M
  LOGFILE
  '/u02/oradata/rdodbj01.dbf' size 10M,
  '/u02/oradata/rdodbj02.dbf' size 10M
  CHATER SET "WE8ISO8859P1"
  IONAL CHARACTER SET "UTF8"
  EXTE MANAGEMENT LOL
  DEFAULT TEMPORARY TABLESPACE mytemp TEMPFILE
  '/u01/oradata/tmpdbj01.dbf' SIZE 500M
  NRCHIVELOG
  MAXDATAFILES 1000
  MAXLOGFILES 10;
  # create the rest of the  dictionary
  @?/rdbms/admin/.sql
  @?/rdbms/admin/catproc.sql

详解创建的各阶段

  当我们发布“startup nomount”的指令时,我们是让Oracle以一种不同于平常使用的方式启动。不同在哪里呢?我们让Oracle。其实,我们让Oracle只启动实 例,而不安装数据库,也不打开数据库,并启动所有的后台进程,并为系统全局区域(SGA)分配内存。为什么不启动数据库?因为在现阶段我们还没有一个可以 挂载的数据库,也就是以一个有效形式存在的数据文件集合。

  当我们发出“create database”指令的时候,Oracle将创建系统表空间、sysaux表空间、undo表空间和临时表空间,并为该数据库设置字符集。也就是设置数 据文件的头信息,表明我们想要创建本地管理表空间,还有就是设置归档或非归档模式。一旦这些都完成了,Oracle就会运行一个名为sql.bsq的神奇 文件。建议大家看看这个文件的内容,会很有趣且很有用。这是Oracle的自举代码(bootstrapping code),可以供我们查看并了解其中内容。我们可以在$ORACLE_HOME/rdbms/adminsql.bsq目录中找到这个sql.bsq文 件。注意,这个文件会随着版本的不同而有所改变,所以定期查看一下其中的变化很能说明一些问题。

  这个运行之后,就是创建Oracle数据字典了。catalog.sql和catproc.sql只是在真正的数据字典上创建有用的视图以及每个Oracle数据库都需要有的各种存储过程、包和函数。

  结论

   手动创建数据库并不是一件只和命令行打交道的乏味单调的苦差事,它可以很有趣也可以很有意义。深入了解Oracle数据库创建的过程有助于你理解数据库 的内部运作原理,让我们可以了解构成每个Oracle数据库方方面面的元素。在这个过程中,我们可以了解更多关于init.ora、Oracle所倚赖的 自举脚本、数据字典的创建机制以及实例和数据库之间的区别等等重要的知识。

FROM:IT专家网
阅读(928) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~