Oracle9i 数据库管理实务讲座

vonezzz

贡献于2015-10-15

字数:0 关键词: Oracle 数据库服务器

整理制作:djrm 日期:2002-10-23 1 Oracle9i 数据库管理实务讲座 共分 7 部分 1、如何安装 Oracle 9i Enterprise Edition for Linux 2、Oracle9i Enterprise Edition 数据库系统概论 3、Oracle9i Instance 组成与运作原理 4、Oracle9i 数据库实体结构 5、手动建立 Oracle9i 数据库 6、利用 DBCA 建立 Oracle9i 数据库 7、Oracle9i 数据库控制文件 作者简介 何致億,专长为 Oracle、SQL Server 等大型数据库系统管理,资料仓储规划 建置,以及数据库应用程序系统开发。拥有 MCSD、MCDBA,Oracle OCP,RHCE, SCJP,Borland JBuilder Product Certified 等十余项国际认证。目前正致力于 Oracle9i 应用系统开发,并负责 Oracle9i 系列书籍中文化与 Oracle Press 技术校 稿工作。他同时也是美商 Oracle 與 Sun Microsystems 公司原厂认证讲师。您可 以透过 hochihyi@ms64.hinet.net 与他联系。 1 Oracle 9i 数据库管理实务讲座(一) 如何安装 Oracle 9i Enterprise Edition for Linux (原文刊登于 2001 年 11 月 Linuxer 杂志) 作者: 何致億, 美商甲骨文公司台湾分公司 特约顾问 前言 Oracle 9i 数据库系统可算是近几年来 Oracle 公司一项杀手级的产品,其功能 与应用面之广,连研究 Oracle 多年的我在第一次接触到产品规格时也不禁吓了 一跳!突然间一大堆的技术文件与白皮书排山倒海而来,一时之间还不知道该从 何着手。所以我花了几个月的时间在各种平台上进行环境测试以及新功能研究, 并将手边的资料大致整理了一下,希望在未来的专栏内容中都能陆续介绍给各位 Linuxer 杂志的忠实读者。 在这里有一点要先跟读者致歉:之前我曾经写过数篇有关 Oracle 8i 数据库 管理的文章,因为自己工作实在太忙(这可能只是我的借口!),加上 Oracle 9i 已 经 released。所以我决定先暂时停掉该部分的专栏,专心整理 Oracle 9i 的相关资 料。也非常谢谢这段期间来信鼓励以及给予建议的读者朋友们,在能力允许的范 围内,我将会尽最大的努力为大家整理最新的 Oracle 技术资料。当然除了数据 库管理技术之外,未来我也会应读者要求,加入利用 Java 设计 Oracle 9i 数据库 应用的文章,请大家继续给予批评指导! Oracle 试用软件之取得方式 因为 Oracle 9i 在 Linux 平台上正式通过认证的只有 SuSE Linux (7.1 与 7.2), 所以我就利用 SuSE Linux 7.1 Professional 版本为平台做为示范。Oracle 数据库则 是使用 Oracle 9i Enterprise Edition for Linux Intel release 1(9.0.1)。 大家一定觉得非常奇怪,为什么 Redhat Linux 没有经过 Oracle 9i 认证?说 实在的,这点我也不清楚!据 Redhat 的说法好象是来不及将最新版本交给 Oracle 作认证与测试,所以…….。不过 Redhat 已经在日前正式提出新闻稿表示在未来 新的 Oracle 版本一定会大力支持了(可能是被骂到受不了吧!?),请大家拭目以待 啰。 相信有许多人对于 Oracle 9i 已经垂涎许久了。我先为各位说明如何进行安 装前的准备动作。除了 Linux 操作系统之外,大家最关心的应该是如何”取 得”Oracle 9i 软件?关于这点我在二月份的专栏已经说明过,各位可以到 Oracle Technology Network(OTN)网站注册成为 OTN 会员,一但您成为 OTN 的正式会 员,就可以下载任何 Oracle 最新的技术文件以及软件。但是要注意的是所有下 载的软件其授权方式为”程序开发者授权”(Developer License),虽然具备完整版的 2 功能,但是您只能运用于开发测试或是进行评估,可不能进行商业用途! OTN 网址为:http://otn.oracle.com 图一:Oracle Technology Network 如果您尚未注册,就赶快点选首页右上角的【Membership】图标注册一个 新帐号吧!成功注册之后再回到 OTN 首页,点选左边【Software】下的 【Downloads】,就可以点选您要下载的 Oracle 试用软件。 图二:Oracle 软件下载区 3 请您在签署”程序开发授权同意书”(Oracle Technology Network Development License Agreement)之后请直接下载 Oracle 9i Enterprise Edition for Linux。Oracle 9i 安装程序共有三个档案,分别是 Linux9i_Disk1.cpio.gz、Linux9i_Disk2.cpio.gz、 Linux9i_Disk3.cpio.gz。因为这三个档案都是压缩档,您可以参考下列步骤进行 解压缩: 1. 执行 gunzip,例如: 2. 解开.cpio 檔: 注:如果您觉得这样的下载方式不太方便的话,OTN 网站还提供了软件订阅服 务,不过这项服务因为系统维护的关系,大概在 12 月左右才会再上线,请自行 注意网站上的讯息! 安装时之系统需求 操作系统需求 SuSE 7.1 (Kernel 2.4.4.) make-3.79 , binutils-2.10 CPU PII 233 MHz 以上 硬件需求 内存建议至少 512MB SWAP 空间建议为物理内存的两倍,至少需要 512MB 以上 磁盘空间 数据库系统:2 ~ 2.5 GB 预设数据库:约 1GB 资料暂存目录:至少需 400MB 注:Oracle 9i 安装程序 Oracle Universal Installer 在执行安装动作时会使用/tmp 作 为资料暂存目录。如果/tmp 目录之剩余空间不足,建议您设定 TMP 或是 TMPDIR 等环境变量,指向具有足够空间之目录即可。但是该目录必须开放可写入之权限。 > gunzip Linux9i_Disk1.cpio.gz > gunzip Linux9i_Disk2.cpio.gz > gunzip Linux9i_Disk3.cpio.gz > cpio –idmv cpio –idmv cpio –idmv passwd oracle > rpm –Uvh orarun9i.rpm 5 建议您还是尽量使用预设的设定较好。 图三:/etc/profile.d/oracle.sh 档案内容 图四:/etc/rc.config.d/oracle.rc.config 之档案内容。 注 1:在 /etc/profile.d/oracle.sh 所设定的 Oracle_SID 名称为 orcl,如果不想使 用这个名字的话,可以在更改掉档案的只读属性之后予以修改。例如我将 ORACLE_SID 更改成 ora901。 注 2:最重要的 Shared Memory 参数为 SHMMAX,建议的设定值为(物理内 存的一半)。例如我安装用的服务器内存为 512MB,则 SHMMAX 可设为 256MB,换算方式如下: 256 MB = (1MB=1048576 bytes) *256 = 268435456 bytes 6 4. 安装 JDK 在 Sun 网站上提供下载的 JDK for Linux 有两种格式,一种是.bin 档,另一 种是.rpm 檔。安装的方式分别如下: „ j2sdk-1_3_1-linux-i386.bin 的安装方式 1) 将 j2sdk-1_3_1-linux-i386.bin 复制到欲安装的目录下,例如 /usr/local。 2) 更改档案属性为”可执行”: 3) 执行 JDK 安装程序 „ j2sdk-1_3_1-linux-i386-rpm.bin 的安装方式 1) 执行 j2sdk-1_3_1-linux-i386-rpm.bin: 执行之后会在目前工作目录下产生一个 jdk-1.3.1.i386.rpm 档 案。 2) 利用 rpm 指令安装 JDK 程序套件: 当您完成以上几项准备工作之后。接下来就可以正式开始安装 Oracle 9i 了。 使用 Oracle Universal Installer 进行安装 当您完成所有前置准备动作后,请利用 oracle 帐户重新登入系统。建议您执行 env 指令确认所有环境变量是否设定无误: 接下来请切换至 Oracle 9i 第一片所在目录以执行安装程序,我是利用光盘片安 装,执行安装程序的方式为: # env # ./cdrom/runInstaller > chmod a+x j2sdk-1_3_1-linux-i386.bin > ./j2sdk-1_3_1-linux-i386.bin > chmod a+x j2sdk-1_3_1-linux-i386-rpm.bin > ./j2sdk-1_3_1-linux-i386-rpm.bin > rpm –iv jdk-1.3.1.i386.rpm 7 (/cdrom 为光驱 mount 之目录名称) 注:如果您也是利用光盘安装,请不要切换至/cdrom 目录下才执行 runInstaller, 原因容后说明。 Oracle Universal Installer 安装程序顺利激活之后,您可以看到如下图五之画面: 图五:激活 Oracle Universal Installer 2.0.1 跳过欢迎画面后就可以开始正式的安装啰! Step1: 设定 Oracle Inventory 之位置 首先您必须指定 Oracle Inventory 之所在目录。Oracle Inventory 是用来记录所有 安装过的 Oracle 产品清单,如果没有特殊的需求就请依照预设的目录 /opt/oracle/oraInventory 即可。 图六:设定 Oracle Inventory 之所在目录。 8 Step2:设定可更新 Oracle 软件之操作系统群组 在这里所设定的群组是用来更新 Oracle 软件所用,如果您决定只让 root 使用者 具备更新 Oracle 软件的权利,就不要指定任何群组名称。 因为SuSE Linux安装完毕就自动将 oracle帐户加至 oinstall群组,所以 Unix Group Name 字段就先显示了 oinstall,按下【Next】继续吧! 图七:设定可更新 Oracle 软件之操作系统群组。 Step3:建立 Oracle Inventory Oracle Universal Installer 已准备一个建立 Oracle Inventory 所用的 orainstRoot.sh 档案(位置是在/tmp/orainstRoot.sh),不过这个档案需利用 root 身分执行。此时您 可以再开启一个终端机窗口来执行该档案,如图九所示。待执行完毕再回到如图 八的窗口按下【Continue】。 9 图八:执行 orainstRoot.sh 之提示窗口。 图九:执行 orainstRoot.sh 建立 Oracle Inventory 目录。 Step4:指定 Oracle 安装程序来源与目的地所在目录 Oracle Home 为 Oracle 数据库系统所在之主要目录。因为在 /etc/profile.d/oracle.sh 内已设定 ORACLE_HOME 为/opt/oracle/product/9.0.1,所以下方 Destination 的 Path 字段会出现 ORACLE_HOME 之设定值。这里也不需要做变更。 10 图十:指定 Oracle 安装程序来源与目的地所在目录 Step5:选择欲安装的 Oracle 9i 产品种类 这里请勾选【Oracle 9i Database 9.0.1.0.0】,按下【Next】。 图十一:选择欲安装的 Oracle 9i 产品种类。 11 Step6:选择 Oracle 9i 数据库版本 如果您是第一次安装 Oracle 数据库系统,建议您选择【Enterprise Edition】或是 【Standard Edition】。而已有安装经验的读者则可以选择【Custom】方式自行决 定要安装的套件。 图十二:选择 Oracle 9i 数据库版本。 Step7:决定数据库基本组态 假定您上一个步骤是选择 Enterprise Edition 或是 Standard Edition,则会出现 Database Configuration 的窗口。您可以依照 Oracle 数据库的实际用途选择最佳的 组态。举例来说,如果是为了建置资料仓储所用的线上分析环境,则您可以选择 使用【Data Warehouse】选项。这里我们先选择一般用途【General Purpose】。 12 图十三:决定数据库基本组态。 Step8:设定 Oracle 数据库之识别资料 Oracle 数据库从 8i 以后的版本都是使用 Global Database Name 唯一识别每一个 Oracle 数据库。建议您设定数据库的名称为 Oracle SID 名称.网域名称。例如我 将 Oracle SID 设定为 ora901,数据库名称就可设为 ora901.uuu.com.tw。 图十四:设定 Oracle SID 与数据库名称。 13 Step9:指定数据库所使用的字符集。 字符集(Character Set)是建立 Oracle 数据库时最重要的一项设定,如果设定错误 的话,很可能无法正常存取中文资料喔!预设的字符集为 WE8ISO8859P1,您可 以由下方第三个选项的下拉式选单点选可存放中文字的 ”Traditional Chinese.ZHT16BIG5”字符集。 图十五:设定数据库所使用之字符集。 Step10:设定 JDK 之目录位置 最后一个设定动作是指定 JDK 的安装目录。请设定为您实际安装 JDK 的目录位 置。 图十六:设定 JDK 之目录位置。 14 按下【 Next】之后,Oracle Universal Installer 会显示等下要安装的 Oracle 9i 产品 摘要,确认无误之后按下【Install】就会开始档案复制与安装动作了。 图十七:要安装的 Oracle 产品摘要。 依照您所使用的硬件环境不同,安装的时间可能需要数十分钟,甚至一、两个钟 头。麻烦的是中途还需更换光盘片,所以只能在旁边看杂志啰! 过了一会儿以后画面上将会跳出一个窗口,提醒您放入 Oracle 9i 的第二片安装 程序光盘。如果您是从硬盘的解压缩后的资料来源所安装,则只要切换至第二片 安装程序所在目录即可。但如果是从光盘片安装的读者们可能会发现此时光驱无 法退片!?这时候请参考下列步骤更换光盘片: 1. 开启另一个终端机窗口。 2. 执行 umount 指令,卸载光驱。 3. 更换为第二片安装程序。 4. 重新 mount 光驱。 然后就可以继续安装动作了! > unmount /cdrom > mount /cdrom 15 图十八:安装程序正在进行档案复制动作。 注:也许某些读者会发现一个问题:在执行 umount 指令之后却收到”device is busy”的讯息,无法卸载光驱以及更换光盘片!还记得在执行 runInstaller 时,我 有提醒各位不要在/cdrom 下执行吗?如果您切换至/cdrom 下才执行 runInstaller, 这时光驱会被系统锁定,无法 umount。除非您可以找出是哪一个 process 锁住光 驱,利用 root 身分将其 kill 掉!否则………只好重来一次啰!! Step11:系统安装后的组态设定 等到安装程序将所有档案复制到系统之后,安装程序会再度要求您以 root 身分 执行 root.sh 程序 (位于 ORACLE_HOME 所指向的目录下,如 /opt/oracle/product/9.0.1)。 图十九:进行系统环境设定之提示窗口。 16 图二十:利用 root 身分执行 root.sh 程序。 此时您可以在另一个终端机窗口执行 root.sh (注意身分需切换为 root)。该程序会 询问您 bin 目录之位置,如果与默认值相同的话请直接按下【 Enter】键,否则需 输入正确的 bin 目录位置。执行 root.sh 之后再回到图十九的窗口内按下【OK】 即可继续后续的设定工作。 Step12:执行 Oracle 数据库组态工具 系统安装的最后一个阶段会自动执行数据库组态工具程序,其中包含两个特殊的 辅助精灵:Oracle 网络设定辅助精灵(Oracle Net Configuration Assistant)与 Oracle 数据库建置辅助精灵(Oracle Database Configuration Assistant)。 图二十一:执行 Oracle 数据库组态工具。 17 第一个自动执行的是 Oracle 网络设定辅助精灵,您可以藉由本精灵组态 Oracle 数据库服务器所监听的 Oracle Instance、网络服务名称(Net Service Name)以及透 过网络管理其它 Oracle 9i 数据库之相关设定。因为我们是第一次安装 Oracle 9i, 所以您可以先按下【Cancel】取消本精灵的执行,往后如果需要进行相关设定, 再执行 netca 指令就可以激活该程序。 图二十二:Oracle 网络设定辅助精灵欢迎画面。 第二个步骤会在 port 7777 安装 Oracle Web Server。完毕之后会激活最重要的 Oracle 数据库建置组态精灵(Oracle Database Configuration Assistant,简称 DBCA)。这个步骤是必要的,因为目前 Oracle Universal Installer 只在您的系统中 安装了 Oracle 9i 数据库服务器,尚未建置任何 Oracle 数据库!(感觉有点像是建 置了一间图书馆,可是却里面没有任何书籍!这间图书馆能用吗?) 所以必须藉由 DBCA 协助我们建置第一个 Oracle 9i 数据库。当然了,DBCA 并 不是建立 Oracle 数据库的唯一方法,往后我会详细为大家介绍 Oracle 9i 数据库 内部运作的原理,到时候再介绍其它建立 Oracle 数据库的方法以及相关注意事 项。 18 利用 Oracle Database Configuration Assistant 建立 Oracle 9i 数据库 DBCA 精灵激活之后会出现如下图之欢迎画面,请按下【Next】继续。 图二十三:Oracle Database Configuration Assistant 欢迎画面。 1. 选定 DBCA 所要执行的工作 Oracle 数据库建置组态精灵主要提供三项数据库的管理工作,分别是数据库 建立与删除,以及更改数据库组态设定。而 Oracle 9i 的 DBCA 还加入一项 新功能:数据库模板管理功能(Manage Templates)。 这里请选择第一项【Create Database】。 图二十四:选定 DBCA 所要执行的工作。 19 2. 选择建立数据库所需之模板文件。 DBCA 提供三种预设的模板文件: „ Data Warehouse:建置资料仓储、线上分析系统用数据库。 „ Transaction Processing:建置线上交易系统用数据库。 „ General Purpose:建立一般功能性数据库。 图二十五:选择建立数据库需之模板文件。 建议第一次安装之读者选择【General Purpose】选项。 表一、二、三、四、五则整理出【General Purpose】选项中各参数之系统默 认值,供各位读者参考。 Tips: 数据库模板管理功能 在 Oracle 9i 数据库系统内,您可以利用”数据库模板管理功能”简化 您的数据库管理工作。例如您可以将 Oracle 数据库设定储存为 XML 文件格式之模板档案(template),优点如下: „ 将现有的数据库设定储存成为模板文件之后,当您需要建 立第二个相同的数据库时,就不需要重复设定相同的参 数。 „ 修改现有模板文件以建立新的 Oracle 数据库。 „ 将模板文件复制到其它 Oracle 数据库服务器。相当于将数 据库之组态设定复制到另外一台 Oracle 服务器 20 表一:一般性参数之默认值 表二:起始参数(Initialization parameter)之默认值 Name Value background_dump_dest {ORACLE_BASE}/admin/{DB_NAME}/bdump compatible 9.0.0 control_files ("{ORACLE_BASE}/oradata/{DB_NAME}/control01.ctl", "{ORACLE_BASE}/oradata/{DB_NAME}/control02.ctl", "{ORACLE_BASE}/oradata/{DB_NAME}/control03.ctl") core_dump_dest {ORACLE_BASE}/admin/{DB_NAME}/cdump db_block_size 8192 db_cache_size 67108864 db_name dispatchers (PROTOCOL=TCP)(SER=MODOSE), (PROTOCOL=TCP)(PRE=oracle.aurora.server.GiopServer), (PROTOCOL=TCP)(PRE=oracle.aurora.server.SGiopServer) fast_start_mttr_target 300 java_pool_size 117440512 Large_pool_size 1048576 Open_cursors 300 processes 150 remote_login_passwordfile EXCLUSIVE resource_manager_plan SYSTEM_PLAN Option Name Selected Example Schemas true Oracle Intermedia true Oracle JVM true Oracle Label Security false Oracle OLAP Services true Oracle Spatial true Oracle Ultra Search true 21 shared_pool_size 117440512 sort_area_size 524288 Timed_statistics TRUE Undo_management AUTO Undo_tablespace UNDOTBS user_dump_dest {ORACLE_BASE}/admin/{DB_NAME}/udump 表三:数据库档案相关之参数默认值 表四:控制文件之参数默认值 Control file {ORACLE_BASE}/oradata/{DB_NAME}/control01.ctl {ORACLE_BASE}/oradata/{DB_NAME}/control02.ctl {ORACLE_BASE}/oradata/{DB_NAME}/control03.ctl 表五:重置交易纪录文件群组之参数默认值 Group Size(K) 1 102400 2 102400 3 102400 Name Tablespace Size(M) {ORACLE_BASE}/oradata/{DB_NAME}/cwmlite01.dbf CWMLITE 20 {ORACLE_BASE}/oradata/{DB_NAME}/drsys01.dbf DRSYS 20 {ORACLE_BASE}/oradata/{DB_NAME}/example01.dbf EXAMPLE 160 {ORACLE_BASE}/oradata/{DB_NAME}/indx01.dbf INDX 25 {ORACLE_BASE}/oradata/{DB_NAME}/system01.dbf SYSTEM 325 {ORACLE_BASE}/oradata/{DB_NAME}/tools01.dbf TOOLS 10 {ORACLE_BASE}/oradata/{DB_NAME}/undotbs01.dbf UNDOTBS 260 {ORACLE_BASE}/oradata/{DB_NAME}/users01.dbf USERS 25 {ORACLE_BASE}/oradata/{DB_NAME}/temp01.dbf TEMP 40 22 如果您已经熟悉如何设定各数据库参数,不想使用以上三种模板建立数据库的 话。可利用第四个选项【 New Database】自行设定所有 Oracle 数据库参数。但如 果您对于这方面不是很有经验的话,建议您尽量不要使用该选项建立数据库! 表六、七、八、九、十、十一则整理出【 New Database】选项中各参数之系统默 认值,供各位读者作为设定时之参考: 表六:一般性参数之默认值 表七:起始参数(Initialization parameter)之默认值 Name Value background_dump_dest {ORACLE_BASE}/admin/{DB_NAME}/bdump compatible 9.0.0 control_files ("{ORACLE_BASE}/oradata/{DB_NAME}/control01.ctl", "{ORACLE_BASE}/oradata/{DB_NAME}/control02.ctl", "{ORACLE_BASE}/oradata/{DB_NAME}/control03.ctl") core_dump_dest {ORACLE_BASE}/admin/{DB_NAME}/cdump db_block_size 8KB db_cache_size 50MB dispatchers "(PROTOCOL=TCP)(SER=MODOSE)", "(PROTOCOL=TCP)(PRE=oracle.aurora.server.GiopServer)", "(PROTOCOL=TCP)(PRE=oracle.aurora.server.SGiopServer)" fast_start_mttr_target 300 java_pool_size 50MB large_pool_size 1MB Option Name Selected Example Schemas true Oracle Intermedia true Oracle JVM true Oracle Label Security false Oracle Spatial true Oracle Ultra Search true 23 open_cursors 300 processes 150 remote_login_passwordfile EXCLUSIVE resource_manager_plan SYSTEM_PLAN shared_pool_size 50MB sort_area_size 524288 timed_statistics TRUE undo_management AUTO undo_tablespace UNDOTBS user_dump_dest {ORACLE_BASE}/admin/{DB_NAME}/udump 表八:控制文件之参数默认值 Control file {ORACLE_BASE}/oradata/{DB_NAME}/control01.ctl {ORACLE_BASE}/oradata/{DB_NAME}/control02.ctl {ORACLE_BASE}/oradata/{DB_NAME}/control03.ctl 表九:表格空间之参数默认值 Status Name Type Extent management ONLINE DRSYS PERMANENT LOCAL ONLINE EXAMPLE PERMANENT LOCAL ONLINE INDX PERMANENT LOCAL ONLINE SYSTEM PERMANENT DICTIONARY ONLINE TEMP TEMPORARY LOCAL ONLINE TOOLS PERMANENT LOCAL ONLINE UNDOTBS PERMANENT , UNDO LOCAL ONLINE USERS PERMANENT LOCAL 24 表十:数据库档案相关之参数默认值 表十一:重置交易纪录文件群组之参数默认值 3. 输入新数据库之识别资料 也许大家会觉得很奇怪,为什么还要指定一次数据库的识别资料,在安装时 Step8 不是设定过一次了吗?因为一台 Oracle 数据库服务器允许您建置多个 Oracle 数 据库,所以您每次执行 DBCA 指令激活 Oracle 数据库建置组态精灵时,精灵都 会询问您新数据库的识别资料。这里请您确认输入的资料与 Step8 所输入的资料 一致即可。 Status Name Tablespace Size(M) ONLINE {ORACLE_BASE}/oradata/{DB_NAME}/drsys01.dbf DRSYS 20480 ONLINE {ORACLE_BASE}/oradata/{DB_NAME}/example01.dbf EXAMPLE 10240 ONLINE {ORACLE_BASE}/oradata/{DB_NAME}/indx01.dbf INDX 25 ONLINE {ORACLE_BASE}/oradata/{DB_NAME}/system01.dbf SYSTEM 325 ONLINE {ORACLE_BASE}/oradata/{DB_NAME}/temp01.dbf TEMP 40 ONLINE {ORACLE_BASE}/oradata/{DB_NAME}/tools01.dbf TOOLS 10 ONLINE {ORACLE_BASE}/oradata/{DB_NAME}/undotbs01.dbf UNDOTBS 200 ONLINE {ORACLE_BASE}/oradata/{DB_NAME}/users01.dbf USERS 25 Group Size(K) 1 100 2 100 3 100 25 图二十六:确认新数据库之识别资料。 4. 决定数据库之运作模式 Oracle 9i 数据库针对客户端的联机处理分为两种模式: „ Dedicated Server Mode:对于每一个客户端联机,数据库都会配置独立的系 统资源。适用于以下两种情况: I. 客户端联机数目不是很多。 II. 客户端所执行的为例行性处理之批次作业,执行时间较长。 „ Shared Server Mode:多个客户端联机共享相同的系统资源,适用于客户端 联机数目较多的情况。选择此运作模式时会同时激活 Oracle 之多执行绪服 务器功能。 图二十七:决定数据库之运作模式。 因为是测试用环境,所以请先选择【Dedicated Server Mode】。 26 5. 设定 Oracle 数据库起始参数。 因为起始参数设定的优劣将会直接影响数据库之执行效能,除非您了解各参数之 意义与设定方式,否则尽量不要随意更动其设定值。请直接按下【 Next】进行下 一步骤。 图二十八:设定数据库起始参数。 6. 确认数据文件存放位置 在 Database Storage 窗口的左半部会以树状图列出目前数据库设定下各档案的存 放位置。如果您想自行更改档案储存位置,可按下右下角的【File Location Variables】按钮进行调整。 图二十九:确认数据文件存放位置。 27 7. 选择是否建立新的数据库模板 最后您可以将 DBCA 所做的设定储存为一个新的数据库模板,以便未来建立新 数据库时可以参考。方式是勾选【Save as a Database Templates】选项,然后在 【Name】字段中输入新的模板名称。 图三十:选择是否建立新的数据库模板。 在图三十的窗口中按下【Finish】按钮后会出现如图三十一之窗口,提醒您系统 中的某些重置交易纪录文件会在数据库建立时被覆写。此时无须理会此项警告, 按下【Yes】即可。 图三十一:DBCA 之警告讯息。 28 8. 最后确认所有数据库组态设定 DBCA 最后会将所有数据库的组态设定值整理出一张清单,按下【OK】后 DBCA 就会开始建置新数据库。 图三十二:确认所有数据库组态设定。 当出现图三十三之窗口时就算大功告成了!请先记下 SYS 与 SYSTEM 这两个系 统管理预设帐号之密码,分别为 change_on_install 与 manager。为了数据库安全 性考量,请记得在登入数据库之后更改这两个帐号之密码。按下【 Exit】后就可 以结束 Oracle Universal Installer 安装程序了。 图三十三:数据库建置完毕之提示窗口。 29 测试安装后之 Oracle 9i 数据库 好不容易将 Oracle 9i 数据库系统安装完毕,接下来就来验收一下成果吧! 此时您可以利用 Oracle 数据库的客户端工具 SQL*Plus 登入 Oracle 数据库,方式 是在操作系统下执行 sqlplus 指令: 激活 SQL*Plus 后,您可以利用系统提供的使用者帐号 scott(密码为 tiger)登入 Oracle 数据库。然后试着执行以下指令查询数据库内的 emp 表格: 图三十四:利用 SQL*Plus 登入 Oracle 数据库。 后记 不晓得大家是否可以顺利跟随我所说明的各项步骤完成 Oracle 9i 的安装?也许 有部分的读者已感觉到有点吃不消了!事实上, Oracle 数据库系统在众家数据库 中真的算是相当复杂的,不仅是安装系统的步骤繁琐,数据库的管理技术更是博 大精深!不过也因为如此,学会 Oracle 数据库之后身价真的是不同凡响喔! 从下一期开始,我将从基本的 Oracle 数据库使用方式开始介绍,正式带领各位 进入 Oracle 9i 的世界,我们下次见! > sqlplus SQL> select empno,ename,sal from emp; 1 Oracle9i 数据库管理实务讲座(二) Oracle9i Enterprise Edition 数据库系统概论 (原文刊登于 2001 年 12 月 Linuxer 杂志) 作者: 何致億, 美商甲骨文公司台湾分公司 特约顾问 Oracle9i 数据库除了延续 Oracle 8i 强大的功能之外,还加入许多革命性的数据处 理技术,其目的在成为网际网络应用以及电子商务的最佳数据库平台。究竟我们 应该如何来评估一个数据库系统的优劣呢?一般来说,以下几点是重要的参考依 据: „ 数据库可用性(Availability) „ 数据库延展性(Scalability) „ 效能表现(Performance) „ 程序开发环境 „ 管理的难易度 而 Oracle9i 对于以上各项,均提供了绝佳的解决方案: Oracle9i 数据库之高可用性与稳定性 不管是在任何环境下,Oracle9i 都可担任执行关键性任务(mission-critical)之数据 库系统。在维持数据库的高可用性与稳定性方面,Oracle9i 期望达成三个目标: ¾ 提供零资料遗失之环境 ¾ 针对已毁损之数据库,提供快速且精准之修复技术 ¾ 尽量减少数据库离线处理的需求 唯有完全符合以上三点之需求,才足以称得上具备高度可运转性与稳定性之数据 库系统!所以 Oracle 提出数项特殊技术,使得 Oracle9i 在可运转性方面的表现傲 视群雄,稳居电子商务应用数据库之领导地位: 利用强化后的备援数据库(Standby database)与 Flashback Query 机制,提供零 资料损失之环境 Oracle9i 数据保护方面新增了多项功能,特别是备援数据库的许多运作步骤都可 以自动化,例如初始化备援数据库、主从数据库之间的切换,以及错误移转…等。 简单的说,主数据库内的所有资料将完整地保留在备援数据库,一但主数据库发 生问题,系统将会立即切换至备援数据库,所有资料交易不致停摆,资料的一致 性与完整性也不会受到影响。 不过有一点要注意的是:虽然主数据库可搭配备援数据库协同运作,将资料遗失 或毁损的情况降到最低,但是身为一个数据库管理者,您绝对无法预防与避免人 2 为性错误!举例来说,业务专员可能不小心删除一笔重要的客户资料;或是程序 设计师误删了产品价格文件。诸如此类的人为性错误不胜枚举!也许有些读者心 里会想”数据库不是都会做备份吗?既然资料不小心被删除了,再还原回来不就 好了?” 没错,这样的想法完全正确!但是您可能不了解一般大型数据库的备份与还原 (Backup & Recovery)机制(有机会的话我也会为各位详细介绍 Oracle9i 数据库的 备份机制)。事实上,在进行数据库的修复或是复原动作时,或多或少都会影响 到系统的正常运作,这需视您处理的资料量多寡以及采用的备份方式而定。 换句话说,还原数据库也需要耗费”时间”!我所指的时间不仅是 DBA 花在重建 数据库的时间,也包含 ”数据库因为受影响而停摆的时间”!试想,如果贵公司的 数据库因为人为性错误频率过高,导致系统的 平均可运转性偏低,这样子的数据 库严格来说也不能称为好数据库。(哇!那要是以这个标准来看,岂不是没有一 家数据库是可以用的!?请注意,我所探讨的是因为人为因素所产生的问题,跟 数据库是哪个厂牌并没有直接关系) 为了将上述问题发生的情况降到最低,Oracle9i 新增了一项回溯查询(Flashback query)的功能。经过适当组态之后,如果使用者不小心删除了重要数据,即使删 除指令已经被 commit,也可以藉由回溯查询回存特定时间点的资料。 强大的数据库修复能力 以数据库的修复功能而言,其实 Oracle 8i 就已经做的相当不错了。但是 Oracle9i 提供更精确的资料复原能力。举例来说,如果某一个 table 所在的磁盘区块发生 毁损,Oracle9i 全新的磁盘修复功能可以只针对毁损的区块进行修复,同一个资 料表的其它资料区块则依旧处于 online 状态,不会影响其它使用者的存取! 利用快速的资料回写机制,缩短数据库离线时间 万一 Oracle9i 数据库服务器不幸发生当机情况时,新的资料修复算法(two-pass recovery algorithm)可以寻找出资料文件内哪些区块是需要进行读写修复的,有效 地缩短数据库重新上线的时间。此外,Oracle9i 也提供一些特殊的参数,例如: FAST_START_MTTR_TARGET 可用来限制数据库平均恢复时间(即当机之后多少 时间之内必须恢复上线状态) 3 Oracle9i 的高延展性 在数据库系统的延展性方面,Oracle9i Real Application Clusters 可搭配适当组态 的丛集架构(Clusters),提供企业应用程序高度的延展性与可用性。藉由简单易用 的单一系统管理方式,Oracle9i Real Application Clusters 可让丛集系统内的多个节 点同时存取单一数据库,并利用水平延展的方式有效提升整体数据库系统之效 能。此外,Oracle9i Real Application Server 还具有自我调整的能力,可将数据库 的负载平均分配到丛集系统中的不同节点。 Oracle9i Real Application Clusters 之快取融合(Cache Fusion)功能 Oracle9i 之快取融合功能可集合丛集中各节点的高速缓存,以满足数据库之需求。 换句话说,查询指令可由本地端的高速缓存或是其它节点的高速缓存获取所需的 资料,降低磁盘读取的机会。因为本地端节点可以由丛集数据库中任何节点得到 所需的资料,在进行更新资料时将不需要为了同步化资料而产生额外的磁盘读写 动作。磁盘读写动作只会发生在高速缓存内找不到所需资料,或是资料交易需被 确认(Commit)时。这种建置方式可以有效地扩大数据库高速缓存的工作范围,减 少磁盘读写动作,且大幅提升数据库之作业能力。 可延展的连线作业状态管理功能(Session State Management) Oracle9i 新的分享式内存配置功能、Java 联机支持能力的改进、以及多执行绪服 务器之增强功能等特性,都可以大幅减少每一位 Oracle9i 数据库使用者所需占用 的内存空间。您可预期的是: Oracle9i 将允许您在同样的硬件环境上服务更多的 数据库使用者,并执行更多的应用程序! Oracle9i 数据库之效能提升 Oracle 数据库的效能表现一直以来都是在水准之上,最适合担任企业内部执行关 键性任务之数据库服务器。Oracle9i 为了在现今网际网络与电子商务环境中能够 完成更严苛的数据处理要求,数项特定的数据处理引擎也经过最佳化的调整。 改良后的 PL/SQL 引擎可针对 PL/SQL 指令选择最佳的执行计划: 之前版本的 PL/SQL 引擎利用 Cost-Based Optimization 的算法来决定执行计划 (execution plan),主要是以系统 I/O 处理资源作为衡量的标准。而在 Oracle9i 中 另加入了 CPU-Cost 与 Memory-Cost 的最佳化算法,使得 PL/SQL 引擎可利用最 佳的执行计划处理资料。不仅速度较快,系统资源的使用也更有效率! 4 先进的资料 I/O 动作: 在 I/O 处理方面,Oracle9i 使用自我微调式的直接读写方式存取资料(self tuning direct I/O)。在索引上则是利用预先抓取(prefetching)、以及忽略/扫描(skip/scan) 的方式进行索引值之搜寻。无论是资料仓储环境或是线上交易系统都可大幅提升 资料读写之效能。特别是在超大型资料仓储系统(1000GB 以上)的分析环境, Oracle9i 数据库也拥有相当令人激赏的表现。 图 1:超大型资料仓储环境下各数据库系统之评比。 资料来源:Transaction Processing Performance Council(2001 年 10 月)。 更佳的 Java 虚拟机器: Oracle9i 内建的 Java 虚拟机器拥有下列特点: ¾ 改良后的垃圾回收机制(garbage collection)能够更有效率地管理内存。 ¾ 更佳的 Java 语言原生编译技术可以更快速地编译 Java 程序。 ¾ 增强式对象分享功能可提升 Java 程序的执行效率。 此外,JDBC 与 SQLJ 的效能提升也同时改善了中介层以及客户端的 Java 应用程 序执行效率。 新增的网络通讯协议可提升联机时之效能: Oracle9i 的网络服务新增了一项虚拟接口(Virtual Interface,VI)通讯协议,对于应 用程序服务器与后端 Oracle9i 数据库之间的联机大约有 10%之效能提升。VI 与 TCP/IP 最大的不同点在于:VI 是专为丛集运算环境特别设计的精简型通讯协议。 其运作原理是利用高速的网络硬设备来分担资料讯息传递之负荷,让 CPU 可以 专注于更重要的资料运算动作。 5 Oracle9i 数据库之开发环境 为了无限提升程序设计师的研发能力,Oracle 已将开发企业级应用程序所需具备 的一切工具整合在新的开发工具套件(Oracle Internet Developer Suite,Oracle iDS) 之内。Oracle iDS 包含数种功能强大之开发工具,如 Forms Developer、Designer、 JDeveloper、Reports Developer、Discover 以及 Portal。 Oracle iDS 具备以下特点: „ 建立在 Java、XML 以及 CORBA 等网际网络标准之上。 „ 适合各种研发方式,例如商业逻辑组件开发、可视化模型建构。 „ 提供轻松建置企业入口网站之解决方案。 例如 Oracle Portal 就可从企业应用软件的层面整合各式信息,快速建置出具个人 化功能的企业入口网站。 而在快速开发应用程序方面,Oracle JDeveloper 9i 是一个整合式的可视化 Java 开 发环境,且支持 J2EE 与 XML。可提供 Java 程序设计师快速开发出 Java Applets、 JSPs、Servlets、EJB 等 Java应用程序。除此之外,JDeveloper 9i 也可搭配 BI Beans(Business Intelligence Beans)与 Oracle9i OLAP Service,建构出高效能的资料仓 储分析系统。 图 2:Oracle9i JDeveloper 100% Java 开发工具。 6 Oracle9i 数据库之管理工具 在 Oracle9i 内提供一套图形接口的数据库管理工具 — Oracle Enterprise Manager(OEM)。Oracle9i Enterprise Manager 主要的核心应用程序如下:Oracle Enterprise Security Manager、Oracle9i Text、Oracle Real Clusters Management、 Oracle Spatial Index Advisor、Oracle Directory Manager、Oracle Forms Server Manager、Oracle Policy Manager、OLAP Services、Oracle Cube Viewer、Oracle Net Manager、以及 Oracle Data Guard Manager。 有了 Oracle9i Enterprise Manager,DBA 将可以集中管理 Oracle9i 数据库以及相 关的服务。OEM 具备以下特点: ¾ 提供图形化管理接口,有效降低 Oracle 数据库管理者的工作负担,并提升 数据库的管理效率。 ¾ Oracle Enterprise Manager 可以从客户端直接登入远程 Oracle 数据库进行管 理;或是利用 Oracle Management Server 建构三层式的数据库管理环境。 ¾ 实时监控被管理的 Oracle 数据库,并进行效能调整。 ¾ 在不同的时间点针对各数据库排定例行性工作。 ¾ 允许 DBA 们客制化自己较偏好的管理环境。 图 3:Oracle9i Enterprise Manager 管理工具。 除了 Oracle Enterprise Manager 之外,Oracle 还提供了数项进阶的数据库管理套 件,让 DBA 可以轻易地对数据库进行效能调整或是系统诊断: 7 „ Oracle Tuning Pack 允许您从各种角度去调校 Oracle 9i 数据库之效能,并最佳 化您的数据库系统。例如找出撰写不佳的 SQL 指令;或是调整 Oracle 数据 库之起始参数。Tuning Pack 包含七项功能完整的效能调校工具,分别是: Oracle Expert、Oracle Index Tuning Wizard、Oracle SQL Analyze、Oracle Tablespace Map、Reorg Wizard、Outline Editior、Outline Management。 有了以上几种工具,您将可以实时发现数据库效能低落的原因,或是找出效 能瓶颈所在。 „ Oracle Diagnostic Pack 是一套简易的系统诊断工具,您可藉由此项工具检测 出数据库内可能隐藏的问题。例如进阶的事件检测系统(Advanced Events)会 在 Oracle Instance 不正常被 Shutdown 时,自动透过 Enterprise Manager 发出 Email 警告数据库管理者。Diagnostic Pack 共包含下列工具:Oracle Advanced Events、Oracle Performance Manager、Oracle Capacity、Oracle TopSessions、Oracle Trace 以及 e-Business Management Tools。 „ Oracle Change Management 则可用来追踪数据库对象的定义。当您因为新的应 用程序系统所需而升级数据库时,Change Management Pack 可消除与避免资 料遗失的问题。当应用程序修改时所产生的复杂关联性及其影响,都可使用 此套件进行分析与处理,并自动进行数据库更新动作。 „ Oracle Management Pack for Oracle Applications 可延伸 Oracle Enterprise Manager 的功能,以便进行 Oracle Applications 的监控、诊断、容量规划以及 效能调整。 „ Oracle Management Pack for SAP R/3 可对 SAP R/3 系统进行实时监控。无论是 历史资料分析,或是未来计画中将包含的事件整合、主机与应用程序的单点 管理,都可使用此套件进行容量规划与控制。 Oracle9i 数据库系统之进阶功能 进阶的安全性功能(Advanced Security) Oracle Advanced Security 为 Oracle9i 企业版之外挂功能之一。具备以下优点: „ 针对各种资料交换以及通讯协议提供加密方式,包含 Oracle Net/SSL、 IIOP/SSL、甚至 JDBC Thin-client 的加密。 „ 可整合协力厂商提供的认证机制与授权方式,以及单一签入(Single sign-on) 之服务。 „ 整合 PKI 机制(Public key Infrastructure),且支持 SSL 与 X.509 Version 3 等公开 金钥方式。Oracle 也已提供了 Oracle Wallet Manager 与 Oracle Enterprise Login Assistant 工具方便您进行设定与管理。 8 „ 可搭配兼容于 LDAP Version 3 的目录服务服务器,方便集中管理数据库使用 者。除了 Oracle Internet Directory 之外,也可整合 Microsoft 的 Active Directory。 图 4:Advanced Security 在 Oracle 网络环境中所扮演的角色。 (资料来源:Oracle9i Security Overview release 9.0.1) 资料分割功能(Partitioning) Oracle Partitioning是Oracle数据库相当厉害的数据处理技术,您可将一个超大型的 table或是index切割成数个较小的单位,分别存放在不同的tablepace (甚至不同的实 体硬盘)。不仅可有效提高数据管理性,对于系统效能的提升更是超乎想象。因 为如此,在Data Mart或是Data Warehousing等超大型资料分析环境下,Oracle数据 库的分析处理能力一直都是其它数据库望尘莫及的。 Oracle9i 线上分析服务(Oracle9i OLAP Service) Oracle9i OLAP Service 与 Oracle9i 数据库紧密地结合,提供一个全方位的资料分析 处理环境。 „ Oracle9i 数据库提供大型资料仓储系统绝佳的资料储存环境。 „ OLAP Service 本身就是一个效能极佳的数据处理引擎,另外可轻易透过内建 的 Java OLAP API 或是搭配 Oracle BI Beans 开发出各式的 Java 应用程序。 9 图 5:Oracle9i OLAP Service 之定位与架构。 (资料来源:Oracle9i Business Intelligence Beans) Oracle 资料采撷(Data Mining) Oracle9i 企业版加入资料采撷先进的分析功能。当您想使用资料采撷技术处理资 料时,不需要再把庞大的资料转入其它数据库之后才能进行。因此您可藉由资料 采撷快速地针对特定资料进行分类、关联、以及预测等处理动作,相关的数据处 理分析还可透过 Oracle 所提供 Java 应用程序接口来完成。这意味着程序设计师 们可以立即开发出高水平的商业智能应用程序。 此外,Oracle9i 的资料采撷功能还可以和 Oracle9i Application Server 的个人化服 务互相结合,在电子商务网站上动态地提供实时的产品建议,以发挥一对一市场 行销功能。 Oracle9i 各版本之功能性与定位 Oracle9i 共有三种版本,分别为:个人版(Personal Edition)、标准版(Standard Edition)、以及企业版(Enterprise Edition)。Oracle9i 个人版可以安装在一般安装 Windows 98 或是 Windows 2000 professional 的桌上型计算机中,程序开发人员将 可以更方便地开发与测试 Oracle 数据库应用程序。标准板与企业版则较适合做 为一般商业环境之数据库服务器。 各版本之功能与特性整理如下表: 10 特性/功能 Oracle9i 标准版 Oracle9i 企业版 备注 高可用性 Oracle Data Guard X 3 Basic readable standby database 3 3 Fast-start selectable recovery time X 3 Online index build X 3 Online table reorganization/redefinition X 3 Online index coalesce X 3 Global index maintenance during DDL 3 3 Flashback Query 3 3 Quiesce database X 3 Block-level media recovery X 3 Incremental backup and recovery X 3 Online backup and recovery 3 3 Parallel backup and recovery X 3 Point-in-time tablespace recovery X 3 Trial recovery X 3 Oracle Fail Safe 3 3 Windows only Transparent application failover X 3 延展性 Oracle Real Application Clusters X 3 Extra cost option Java native compilation 3 3 PL/SQL native compilation 3 3 安全性 Advanced Security Option X 3 Extra cost option Oracle Label Security X 3 Extra cost option Encryption toolkit 3 3 Virtual Private Database X 3 Fine grained auditing X 3 11 Password management 3 3 Proxy authentication 3 3 开发环境 Oracle Programmer 3 3 Extra cost option Java support 3 3 SQLJ 3 3 Requires Oracle Programmer JDBC drivers 3 3 XML support 3 3 Objects and extensibility 3 3 PL/SQL stored procedures and triggers 3 3 PL/SQL Server Pages 3 3 User-defined aggregates 3 3 Microsoft Transaction Server integration 3 3 Windows only COM cartridge 3 3 Windows only AppWizard for Visual Studio 3 3 Windows only Globalization support 3 3 Autonomous transactions 3 3 iSQL*Plus 3 3 管理性 Oracle Enterprise Manager 3 3 Oracle Change Management Pack X 3 Extra cost option Oracle Diagnostics Pack X 3 Extra cost option Oracle Tuning Pack X 3 Extra cost option Oracle Management Pack for Oracle Applications X 3 Extra cost option Oracle Management Pack for SAP R/3 X 3 Extra cost option Automatic undo management 3 3 Self-tuning memory management 3 3 Server managed backup and recovery 3 3 12 Recovery Manager 3 3 Legato Storage Manager 3 3 Duplexed backup sets X 3 Database Resource Manager X 3 Oracle Managed Files 3 3 Resumable space allocation 3 3 Unused index identification 3 3 VLDB, 资料仓储, 商业智能 Oracle Partitioning X 3 Extra cost option Oracle OLAP X 3 Extra cost option Oracle Data Mining X 3 Extra cost option Optimizer statistics management 3 3 Analytic functions 3 3 Bitmapped index and bitmapped join index X 3 Descending index 3 3 Function-based index 3 3 Automated parallel query degree X 3 Parallel analyze X 3 Requires Oracle Partitioning Parallel bitmap star query optimization X 3 Parallel DML X 3 Requires Oracle Partitioning Parallel index build X 3 Requires Oracle Partitioning Parallel index scans X 3 Parallel load 3 3 Parallel query X 3 Star query optimization 3 3 Sample scan 3 3 Summary management X 3 Long operations monitor 3 3 Direct Path Load API 3 3 Export transportable X 3 13 tablespace Import transportable tablespace 3 3 External tables 3 3 MERGE 3 3 Multi-table insert 3 3 Pipelined table functions 3 3 Synchronous Change Data Capture X 3 Advanced Queueing 3 3 Messaging Gateway to IBM MQSeries X 3 Basic Replication 3 3 Updatable materialized view site Advanced Replication X 3 Multi-master replication Distributed queries 3 3 Distributed transactions 3 3 Heterogeneous Services 3 3 网络支持 Connection pooling 3 3 Oracle Connection Manager X 3 Oracle Names 3 3 Oracle Net Services 3 3 内容管理 Oracle Spatial X 3 Extra cost option Dynamic Services 3 3 Oracle Database Workspace Manager 3 3 Parallel text index creation X 3 Ultra Search 3 3 interMedia 3 3 Oracle Text 3 3 Internet File System 3 3 其它数据库特性 Database event triggers 3 3 14 DBMS_REPAIR package 3 3 DBMS_METADATA package 3 3 Drop column 3 3 Index-organized table 3 3 Instead-of triggers 3 3 LOB (large object) support 3 3 Locally-managed tablespaces 3 3 LogMiner 3 3 Multiple block size support 3 3 Plan stability 3 3 Reverse key index 3 3 Temporary table 3 3 * 资料来源: Oracle9i: A family of Database Products (Oracle White Paper) 结语 概览 Oracle9i 数据库之功能与特性之后,相信各位读者应该已经对 Oracle9i 有 了基本的认识。照我原先的规划是应该在本期就开始 Oracle9i 数据库的基本管理 方式,但已有某些读者来信给予我相当不错的建议,且希望我就 Oracle9i 先进行 整体性介绍。所以本期我以企业级电子商务数据库的角度来介绍 Oracle9i 较重要 的特性及其优点,未来的专栏内容将会针对 Oracle9i 数据库管理的必备技术为 大家做更深入的讨论。 作者简介 何致億,美商甲骨文公司特约顾问 专长为 Oracle、SQL Server 等大型关系型数据库系统管理,资料仓储规划建置, 以及数据库应用程序系统开发。拥有 MCSD、MCDBA,Oracle OCP,RHCE, SCJP,Borland JBuilder Product Certified 等十余项国际认证。目前正致力于 Oracle9i 应用系统开发,并负责 Oracle9i 系列书籍中文化与 Oracle Press 技术校 稿工作。他同时也是 Oracle、Sun Microsystems 公司等原厂认证讲师。您可以透 过 hochihyi@ms64.hinet.net 与他联系。 译作: Oracle9i 入门手册 Oracle9i 技术手册 Oracle9i 应用程序服务器 --Portal 技术手册 OCP 认证专家系列(一):Oracle9i SQL 概论 1 Oracle9i 数据库管理实务讲座(三) Oracle9i Instance 组成与运作原理 (原文刊登于 2002 年 01 月 Linuxer 杂志) 作者: 何致億, 美商甲骨文公司台湾分公司 特约顾问 前言 前两期的专栏内容已分别为大家介绍了 Oracle9i for Linux 的安装方式,以及 Oracle9i 企业版概观。但是如何组态与管理 Oracle9i 数据库才是我们要讨论的 重点。本文将深入探讨 Oracle9i Instance 的组成要素与其运作原理,为您揭开 Oracle9i 的神秘面纱。 本文将涵盖以下主题: „ Oracle9i 服务器架构简介。 „ 何谓 Oracle9i Instance „ 系统全域区 „ 背景处理程序 在开始任何 Oracle9i 数据库管理工作之前,您必须先熟悉 Oracle9i 服务器之整 体架构及其运作原理。所以我先为大家简介 Oracle9i 服务器的基本组成架构。 Oracle9i 服务器架构 以 Oracle9i 数据库系统本身而言,大致上可区分为两个主要部分: „ Oracle9i 执行个体(Oracle9i Instance) „ Oracle9i 数据库档案(Database files)。 简言之,Oracle9i Instance 是指数据库服务器的内存与相关处理程序。您可以 想象它就是 Oracle9i 的心脏。数据库实体则由操作系统内的各式档案组成。如 果您想深入了解 Oracle9i 系统运作或从事进阶的效能调校,那么一定要搞清楚 这两部分彼此的互动关系才行!Oracle9i 服务器基本架构如图 1 所示: 2 图 1:Oracle9i 服务器基本架构。 图 1 上半部为内存内 Oracle9i Instance,下半部则是位于操作系统的各种数据库 档案(有关这些档案的细部信息将在下一期说明)。彼此之间是藉由各个背景处理 程序互相沟通。 接下来我们先讨论 Oracle9i Instance 的组成要素。 何谓 Oracle9i Instance? 第一次接触 Oracle 数据库的使用者经常对「Oracle Instance」这个名词感到混 淆,因为 Instance 这个单字从字典上查到的意义跟数据库一点关系也没有!某 些中文书译者喜欢将 Oracle Instance 译为「Oracle 实例」,但是我认为这个译 名十分不恰当!我个人比较倾向称它为「 Oracle 执行个体」;俗称「 Oracle 数据 库引擎」。既然是数据库引擎,就表示 Oracle 数据库内大大小小的事都跟它有关 系,当然这也是我们一开始就先讨论的主要原因啰。 Oracle9i 执行个体主要是由以下两项要素组成: „ 系统全域区(System Global Area) „ 背景处理程序(background processes) 来看看什么是「系统全域区」? 3 系统全域区 当您激活 Oracle9i 数据库时,系统会先在内存内规划一个固定区域,用来储存 每位使用者所需存取的资料,以及 Oracle9i 运作时必备的系统信息。我们称此 区域为系统全域区(System Global Area),俗称 SGA (注 1) 。 在 Oracle8i 时,SGA 的大小是由起始参数档(initialization parameter file )内的 某些参数所设定。但最麻烦的是每次调整参数之后必须等重新激活数据库才生效 (感觉就像在Windows系统修改了一些设定就要重新开机)。光是数据库的关闭与 激活就花去不少时间(难怪大家羡幕 Oracle Consultant 很好赚….., just kidding!! ),何况是执行关键性任务的数据库哪能一天到晚开来关去!? 从 Oracle9i 开始,DBA 可以动态配置内存的大小;这样的技术我们称为「dynamic SGA」。有了dynamic SGA ,SGA 的各组成区域都可以动态地进行规划与调 整,而不需先关闭数据库。 一般来说,我们还是应该在激活 Oracle9i 之前就妥善规划好适当的内存空间。 例如,起始参数档的 SGA_MAX_SIZE(注2)可设定 SGA 所占用的最大内存空 间。如果考虑 Oracle9i 的执行效能,理应将此参数尽可能设到最大!但有一点 需要注意的是:SGA_MAX_SIZE 尽量不要超过物理内存大小,否则将会使用 到硬盘上的虚拟内存,反而导致效能低落。 SGA 的大小可由起始参数档之特定参数所控制,表1整理出与SGA相关的参数 名称及其意义: 参数名称 用途 SGA_MAX_SIZE 设定 SGA 总大小 DB_CACHE_SIZE 设定由标准区块组成的Database Buffer Cache 大小 LOG_BUFFER 设定 Log Buffer 之大小 SHARED_POOL_SIZE 设定 Shared pool 之大小 LARGE_POOL_SIZE 设定 large pool 大小;预设为 0 注1:在多人使用的环境下,SGA 的资料可分享给所有同时上线的联机阶段使 用,所以 SGA 有时也称为 Shared Global Area。 Tips: 起始参数档(Initialization Parameter file)之意义 如上所述,Oracle Instance 被激活时,系统必须藉由某些参数值来配置适当 大小的内存空间。换言之,我们可以在激活 Instance 之前就先规划这些参数 的设定值,并储存在操作系统下的某个档案里。往后只要利用此档案就可开 启相对应的 Oracle Instance — 我们就将这个档案称之为起始参数档。 4 注2:如果 SGA_MAX_SIZE 之设定值小于其它 SGA 相关参数设定值的总和; 或是小于各相关参数默认值的总和,则 SGA_MAX_SIZE 之设定值无效。 如图 1 所示,SGA 又包含数个重要区域,分别是: „ Database Buffer Cache (资料快取缓冲区) „ Redo Log Buffer (重置日志缓冲区) „ Shared Pool (共享区) „ 其它,如 Large pool 以下是每个区域之意义、用途,以及相关设定方式。 资料快取缓冲区 为 SGA 的主要成员,用来存放读取自数据文件的资料区块复本,或是使用者曾 经处理过的资料。其用途在于有效减少存取资料时造成的磁盘读写动作,进而提 升资料存取之效能。所有同时上线的使用者都可以共享此缓冲区的资料。 整个资料快取缓冲区包含两种缓冲区串行,分别是 write list 与 LRU list: „ Write list 存放 dirty buffers(注 3)之复本,会在适当时机写入磁盘。 „ LRU list 包含:free buffers,dirty buffers 与 pinned buffers。其中 free buffer 为空白的缓冲区,随时可存放资料;pinned buffer 则是目前使用 中的缓冲区。 注 3: dirty buffer 是存放”已修改,但尚未写入磁盘的数据”之缓冲区。 资料快取缓冲区运作原理 当使用者第一次向 Oracle9i 送出资料查询请求时,Oracle9i 会先在资料快取缓 冲区内寻找该资料。如果欲查询的资料恰好已存在于缓冲区内(这样的情况我们 称之为 cache hit ),就直接从内存读出资料。 反之,如果缓冲区内并没有使用者欲查询的资料(此情况称为 cache miss ), Oracle9i 就会先从磁盘上数据文件读出适当的数据区块,放入缓冲区之后,使用 者才从缓冲区读取资料。您可以想象一下:在 “cache hit” 的情况下查询资料的 速度是不是比在 ”cache miss” 的情况还快很多呢?事实上,这就是资料快取缓 冲区的主要用途所在。 让我们进行更深入的讨论! 当资料区块从磁盘读出,准备放入缓冲区时,系统必须先确定资料快取缓冲区内 有 free buffers。这时候 Oracle9i 会开始扫描 LRU list,扫描的原则为: 5 „ 从 LRU 端扫到 MRU 端 „ 当扫描到 free buffer;或是已扫描的缓冲区数目超过临界值时,就会停止扫 描动作 „ 扫描 LRU list 时如果发现了 dirty buffer,就将它移到 write list,然后继续 扫描 如果扫描过程顺利在 LRU list 内找到 free buffer,那么 Oracle9i 就会把从磁盘读 出的数据区块放入此 free buffer 中,然后再把它移到 LRU list 的 MRU 端。 但是,如果 LRU list 真的都没有 free buffer 怎么办呢?那么 Oracle9i 就会停止 扫描动作,然后通知数据库写入器(database writer)背景处理程序将部分 dirty buffers 先写入磁盘,接着从 LRU list 的 LRU 端开始清除缓冲区。如此一来就 可以空出新的 free buffer 了。 Tips:LRU list 与 LRU 算法 所谓 LRU (least recently used)算法之基本概念为:当内存内剩余可利用的空 间不足时,缓冲区尽可能先保留使用者最常使用的资料;换言之,优先清除 ” 较不常使用的资料”,并释放其空间。我以图标方式为大家说明: 我们将 LRU list 想象成是长条型一连串的缓冲区集合,两端点分别为「MRU 端」以及「LRU 端」。所谓的「MRU」为「Most Recently Used」之缩写,我 将之译为”最常使用的”(或是”最近使用的”)。所以,愈靠近 MRU 端的缓冲区, 代表其为被使用者最近查询过的资料。同理,我们将「 LRU」端视为”最不常 被查询的资料(Least Recently Used)”,或是 ”很久都没被再次查询的资料”。如 下图 2 中的 State 0 所示:(假设目前 LRU list 没有任何资料存放) 图 2:LRU list 第一种使用情况。 6 图 2 的 State1、State2、State3 仿真某个使用者欲从 Oracle9i 数据库查询出三 笔资料(A 资料、B 资料、C 资料)。这三笔数据从磁盘读出后,依序放入 LRU list 的 free buffers。以 State3 为例:因为 C 资料是”最近刚刚使用”的资料,所 以最靠近 MRU 端;相较之下, A 资料是”有一段时间都没用的资料”,所以比 较靠近 LRU 端。依此类推,如果使用者持续地查询资料或进行相关数据处理 动作,则 LRU list 内的缓冲区都会被填满,如图 2 的 State m 所示:M 资料填 满最后一个 free buffer。 如果下一次的查询动作准备再从磁盘读出 N 资料时存入缓冲区时,LRU list 已经没有 free buffer 可以使用,系统只好清空 LRU 端存放 A 资料的缓冲区, 接着再放入 N 资料,结果如图 2State n 所示。这就是 LRU 算法的基本运作方 式。 让我们讨论另一种情况: 假设在 State3 之后,恰好有某些使用者持续地查询 A 资料 — 这会导致 A 资 料一直存放在靠近 MRU 端的缓冲区。如果 M 资料被放入 LRU list 最后一个 缓冲区,结果将如图 3 的 State m’ 所示:您会发现图 3 的 State m’ 与图 2 的 State m 有点不同(缓冲区的存放数据完全相同,但存放位置不尽相同)。这时 候 LRU list 内也没有 free buffer 了,所以再放入 N 资料时,系统会清除 LRU 端存放 B 资料的缓冲区。不同于第一种情况的是:因为 ”A 资料查询率高于 B 资料”,所以 LRU 算法让 A 资料在缓冲区存放较长的时间,而先移除 ”较不常 使用”的 B 资料。 图 3:LRU list 第二种使用情况。 7 设定资料快取缓冲区之大小 在 Oracle9i 设定资料快取缓冲区的方式有别于 Oracle8i 数据库。Oracle8i 的 资料快取缓冲区容量由下列公式所决定: 需注意的是 Oracle8i 内 DB_BLOCK_SIZE 在数据库建立之后就不能更改。 然而 Oracle9i 数据库支持多重区块大小 — 除了预设的 DB_BLOCK_SIZE 之 外,DBA 也可以另外设定其它大小的资料区块。因此在 Oracle9i 数据库中由 DB_BLOCK_SIZE 所设定的资料区块,我们称为「标准资料区块(standard block)」,其合理的大小可设定在 2k – 32k 之间。Oracle9i 的起始参数 DB_CACHE_SIZE 就是设定以”标准区块”所构成的资料快取缓冲区之容量。 重置日志缓冲区 纪录 Oracle 数据库内所有资料异动的详细信息(例如资料异动前后的新旧资料), 我们将这些信息的储存地点称为 redo entries。系统也会在适当时机将 redo entries 内的信息写入磁盘内的档案(注 4),以便数据库毁损时可进行必要的复原 (Recovery)动作。 注 4:由 LGWR 背景处理程序负责将 redo entries 写入重置日志文件(Redo log files)。 设定重置日志缓冲区的大小 起始参数档之 LOG_BUFFER 参数可用来设定此缓冲区的容量,单位为 bytes。 一般来说,如果重置日志缓冲区的容量较大,可减少日志文件读写动作。重置日 志缓冲区的默认值等于操作系统资料区块的四倍。 共享区 当使用者将 SQL 指令送至 Oracle 数据库后,系统将会先解析(parse)语法是否正 确。解析时所需要的系统信息,以及解析后的结果(parse tree 与 execution plan) 将放置在共享区内。如果不同的使用者执行了相同的 SQL 指令,就可以共享已 解析好的 parse tree 与 execution plan,加速 SQL 指令的执行速度。 Oracle8i 资料快取缓冲区大小 = DB_BLOCK_SIZE * DB_BLOCK_BUFFERS DB_BLOCK_SIZE:资料区块(data block)之单位大小。 DB_BLOCK_BUFFERS :缓冲区数目;每个缓冲区大小相当于一个资料区块之 大小。 8 共享区之组成 共享区内包含数种不同用途的快取缓冲区,主要可分为两类: „ 函式快取缓冲区(Library cache) 包含:共享 SQL 区(Shared SQL Area),私有 SQL 区(Private SQL Area),以 及 PL/SQL 程序单元区。解析完成的 parse tree 与 execution plan 就是放在共 享 SQL 区内。 „ 数据字典缓冲区(Dictionary cache)。 Oracle9i 在解析 SQL 叙述句时所需要的系统信息都是放在此缓冲区内,可 能包含:资料表 (视观表)的名称、字段名称与资料型态;数据库使用者之相 关系统管理权限,或是对象存取权限…等。 设定共享区之大小 起始参数档内的 SHARED_POOL_SIZE 可设定共享区之大小,其默认值大小 为 8M(注 5)。 注 5:在 32-bit 操作系统下,共享区预设大小为 8M;如果在 64-bit 操作系统, 共享区预设大小为 64M。 背景处理程序 除了 SGA 之外,系统也会自动激活数个特定的背景处理程序(Background Processes),主要的背景处理程序为: „ DBWn (Database Writer) 负责将资料快取缓冲区内异动过的资料区块回写至硬盘内的数据文件(这个 动作又称为 checkpoint)。Oracle 系统预设只会激活一个 DBWn(DBW0)处理 程序。但在一般的大型线上交易 (OLTP)系统下,数据库异动情况可能十分频 繁,您可依实际需求额外配置其它的 Database Writer 处理程序 (DBW1-DBW9),可以有效地提升 Oracle9i 写入数据文件之效率! 有一点需要注意的是:在单一处理器的服务器系统,配置额外的 DBWn 处 理程序并无实质帮助。 „ LGWR (Log Writer) 在交易被确认时,LGWR 会遵循「先期写入协议」 ,负责将重置日志缓冲区 内的资料异动纪录循序写入重置日志文件。 LGWR 之动作时机为: 1. 当使用者确认(commit)某交易时,LGWR 会写入一笔确认纪录。 2. 下列几种情况: ¾ 自动周期性地动作,间隔时间为 3 秒 ¾ 重置日志缓冲区之剩余空间不到 2/3 9 ¾ 当 DBWn 回写资料文件时,必要的时候 LGWR 也会动作 „ SMON (System Monitor) 如果是因为停电或是其它因素导致 Oracle 数据库不正常被关闭,下一次激 活数据库时将由 SMON 进行必要的数据库修复动作。其主要工作有: ¾ 数据库重新激活后的必要修复动作 ¾ 回收不用的暂时性区段(temporary segments) ¾ 收集”字典管理数据表空间”的 free extents ¾ 修复交易不正常结束造成的问题 „ PMON (Process Monitor) 当某个使用者处理程序异常终止时,PMON 会执行「程序修复(process recovery)」动作 — 清除资料快取缓冲区内不再使用的空间,并释放该程序 之前使用的系统资源。举例来说,PMON 会重新设定 transaction table 的状 态,释放原交易被锁定的资料,然后从程序清单中移除已终止之程序代号 (process ID)。 PMON 也会定期检查各服务器处理程序以及分配器之状态,如果某个处理 程序因故停摆,也是由 PMON 负责将它重新激活。 „ CKPT (Checkpoint) CKPT 会在适当时候产生一个 checkpoint 事件,其意义为: 1. 确保缓冲区内经常被异动的资料也要定期被写入资料文件。 对于这点,也许大家会觉得非常疑惑。Oracle9i 的 LRU 算法不是会尽 量将使用者”最常使用的资料”保留在缓冲区内,以提升资料存取的效率 吗?没错,但请大家思考一个问题:如果完全遵循LRU算法的话,DBWn 只会将”最不常使用”的资料回写至资料文件,这些 ”经常被使用”的资料 反而没机会存回硬盘!要是数据库当机或毁损,这些资料只能从重置日 志文件的纪录才能还原回来,无形中造成系统的额外负担。所以由 CKPT 掌控 checkpoint 时机,以确保这些资料照样可被妥善储存。 2. 在 checkpoint 之后,因为所有更新过的数据已经回写至磁盘数据文件, 万一 Oracle9i 需要进行 instance recovery 时,就不再需要 checkpoint 之 前的重置纪录,可缩短数据库重新激活的时间。 此外,checkpoint 发生后,CKPT 会先通知 DBWn 将资料快取缓冲区的 dirty buffers 回写到数据文件,然后更新数据文件与控制文件之 checkpoint 信息。 Tips: 何谓「先期写入协议(Write-ahead protocol)」? 在 DBWn 将 dirty buffer 回写至资料文件之前,重置日志缓冲区内相关的 都必须完成写入动作。如果 DBWn 发现某些重置纪录尚未写入重置日志 文件,它也会通知 LGWR 前来处理。等到 LGWR 将重置日志缓冲区的 纪录写入完毕时,DBWn 才会开始写入资料文件—此即为「先期写入协 10 „ RECO(Recover) 在 Oracle9i 分布式数据库环境中,RECO 处理程序会自动处理分布式交易失 败时产生的问题。何谓分布式交易呢?简单的说,就是在同一个交易内针对 多个数据库同时进行数据处理动作。与传统资料交易相较之下,分布式交易 的要求将严苛许多!因为这些数据库可能分散在网络上,所以分布式交易的 成功与否其中一个关键因素就在于网络传输速度与品质。试想,某个分布式 交易需要将资料同时送进 5 个 Oracle9i 数据库,此时可能因为网络问题(例 如断线或是响应等待时间过长),导致其中一个数据库无法更新这笔交易资 料。那么此交易就会发生问题,无法做最后的 commit 动作;我们将此种交 易称为 in-doubt transaction。这时候 RECO 处理程序会自动重新登入包含在 分布式交易之各数据库,并尝试进行 in-doubt transaction 之修复动作。 注 6:如果起始参数档 DISTRIBUTED_TRANSACTIONS 参数值设定为 0, 则激活 Oracle Instance 时不会执行 RECO 处理程序。 „ ARCn(Archiver) Oracle9i 数据库设定为 ARCHIVELOG mode(封存日志模式)时,ARCn 处理 程序会在 ”log switch” 发生时自动将重置日志文件复制一份到指定的目录 下;重置日志文件之副本称为 ”Archived logs” (封存日志文件)。 每个 Oracle9i instance 最多可激活 10 个 ARCn 处理程序(ARC0 to ARC9)。 起始参数档之 LOG_ARCHIVE_MAX_PROCESSES 允许您组态 ARCn 处理 程序之个数;或是执行 ALTER SYSTEM 指令动态地调整。该参数值之默认 值为 1。事实上,您并不需要设定此参数,因为在封存模式下 Oracle9i 会自 动判断所需的 ARCn 个数。一但目前的 ARCn 处理程序无法负荷时,LGWR 会自动激活新的 ARCn 处理程序。 除了以上七个重要的背景处理程序之外,Oracle9i 数据库运作时还有其它的背景 处理程序互相搭配及运作,例如 Job Queue、LMS、QMNn 等处理程序。如果您 想获取进一步的信息,可参阅 OTN 网站的《Oracle9i Database Concepts》。 Tips:何谓Log switch? 当目前的重置日志文件被填满时,LGWR 会切换到下一个可使用的重置 日志文件,这个日志文件的切换动作就称为 「log switch」。预设情况 下,log switch 会自动发生。 11 结语 本期内容介绍了 Oracle9i 的内存结构与其运作原理,下一期我将从数据库与操 作系统两个角度深入讨论 Oracle9i 数据库之实体结构,与常用的数据库对象。 1 Oracle9i 数据库管理实务讲座(四) Oracle9i 数据库实体结构 (原文刊登于 2002 年 02 月 Linuxer 杂志) 作者: 何致億, 美商甲骨文公司台湾分公司特约顾问 上一期我为大家介绍了 Oracle9i 服务器架构,并探讨 Oracle9i 执行个体之组成 要素与其运作原理,本期将把重点放在 Oracle9i 数据库实体结构。 Oracle9i 数据库结构 谈及 Oracle 数据库结构时,我们应该从两个角度来探讨:分别是数据库的「逻 辑层面」与「实体组成」 。简单的说,「逻辑层面」是由 ”数据库内部”观看其组成 要素,包括:资料表空间(tablespaces)、区段(segments)、延伸区块(extents)、 资料区块(data block)、以及纲要对象(Schema objects)(注1)。而「实体组成」则 是从”操作系统”角度来看 Oracle9i 数据库的实体构成项目,包括:数据文件 (Data files)、重置日志文件(redo log files)、控制文件(control files)、密码文件 (password)、起始参数档(initialization parameter files)…等等。如果您有心成为 一个顶尖的 Oracle DBA,那么不仅要对以上各项如数家珍般熟悉,还要了解其 内部运作与相互关系才行。首先我们就先从「逻辑层面」探访 Oracle9i 数据库! 数据库之逻辑组成 无论是任何规模的企业,在管理数据库系统时,DBA 都应该依据实际系统需求 或是未来可能的管理方式,规划出一个或多个资料储存区域。重点是希望将资料 分门别类地妥善存放。譬如,您可能会希望将公司内会计系统的帐务资料与产品 销售纪录分开存放。 Oracle9i 数据库允许 DBA 自行规划各种用途的资料表空间(Tablespace),以便 存放不同型态的资料与数据库对象。举例来说,存放 Oracle 系统信息的「资料 辞典」(data dictionary)可放在 SYSTEM 资料表空间;应用系统资料可存放在 USER 资料表空间;而所有数据表的索引(Index)则可单独存放在 INDX 数据表 空间内(注2)。 一般来说,Oracle9i 数据库至少应规划出五个以上的资料表空间,如下图一所示: 注1:Oracle9i 的纲要对象即为俗称的 ”数据库对象”。 注2:SYSTEM 为 Oracle 数据库预设的资料表空间; USER 与 INDX 则是由 DBA 自行规划建置 的。 2 图一:Oracle9i 数据库之资料表空间。 那么,先从资料的最小储存单位 — 「资料区块」谈起。 何谓「资料区块」? 许多初次接触数据库的读者最好奇的一点是:” 资料究竟是如何存放在数据库 呢?”。其实,Oracle9i 数据库有几种资料储存体,其中最小的储存单元就称为 「数据区块」(data block)。资料区块大小是由起始参数档的 DB_BLOCK_SIZE 参数所决定,且在新建 Oracle9i 数据库之前就必须明确地定义。实际上,资料 区块大小与”操作系统的磁盘读写区块”(O.S. blocks)也有关系,所以您必须将 DB_BLOCK_SIZE 设定为 O.S. blocks 的整数倍。附带一提:Oracle9i 在存取 资料时是以 data block 为最小读取单位,而不是以 OS block 为单位。 从 Oracle9i 开始,数据库内可以设定多种资料区块大小。换句话说,Oracle9i 数据库内分为「标准资料区块」与「非标准资料区块」 ;预设情况下 SYSTEM 资 料表空间就是以「标准资料区块」建立而成。 何谓「延伸区块」? 除了资料区块之外,Oracle9i 数据库还有所谓的「延伸区块」 (extents)。虽然资 料区块是 Oracle9i 最小的资料读写单位,但值得注意的是:Oracle9i 在”配置” 储存空间时,并不是以资料区块为单位,而是改采「延伸区块」的方式来配置空 间。那么,使用「延伸区块」究竟有何好处呢?当您执行 DDL 指令建立数据库 对象时(例如 CREATE TABLE 指令),Oracle9i 会先配置出一连串的资料区块; 直到这些资料区块全部存满资料后,下次再配置一连串的资料区块。这些连续的 资料区块就统称为「延伸区块」。 举例来说,假定您准备在 Oracle9i 数据库内存放 80 KB 的资料,Oracle9i 可以 3 先配置一个「延伸区块」,其大小可为资料区块(8 KB)的 5 倍;然后视实际需要 再配置第二个「延伸区块」(大小还是 40 KB)。如此一来,只要两次的空间配置 动作就可以存放 80 KB 的资料了!试想,如果 Oracle9i 每次只配置 8 KB 的「资 料区块」让您存放资料,总共需要 10 次空间配置动作才能放满 80 KB 的资料, 是不是比较没有效率呢?由此可见,「延伸区块」的确有其存在的必要性。 何谓「区段」? 依照不同的数据处理性质,您可能需要在资料表空间内划分出不同区域,以存放 不同资料;我们将这些区域称之为「区段」(segment)。例如,存放数据的称为 「数据区段」、存放数据的称为「索引区段」 。而「区段」其实就是由许多「延伸 区块」组合而成。除了上述两种「区段」以外, Oracle9i 数据库内还有另外两种 区段结构,分别是: 「暂时性区段」(temporary segment)与「退回区段」(rollback segment)。下图二说明了 Oracle9i 数据库内各逻辑组成要件之间的阶层关系: 图二:Tablespace、Segment、Extent、Block 之间的关系。 所以,从 Oracle9i 数据库的「逻辑层面」来看,我们知道: „ 资料是存放在每个「资料区块」内,资料读写动作也将以「资料区块」为单 位。 „ 空间配置的动作则是引用「延伸区块」的概念。一个「延伸区块」由一连串 的「资料区块」所构成。 „ 依实际资料量多寡,资料(或数据库对象)由多个「延伸区块」所组成。 „ 「资料表空间」内可划分不同的「区段」 ;而每个「区段」内又包含许多「延 伸区块」。 „ 在每个 Oracle9i 数据库内可规划不同的「资料表空间」 ,用以存放不同型态 的资料。 4 截至目前为止,无论是资料区块、延伸区块、区段、甚至数据表空间,都只是逻 辑上的数据储存概念。实际上, Oracle9i 数据库是藉由数个操作系统内实体档案 来维系数据库系统之正常运作。接下来我们将从操作系统角度来探讨 Oracle9i 的实体组成要素。 数据库之实体组成 还记得上一期文章中我们曾经综览 Oracle9i 服务器基本架构吗?如果从操作系 统的观点来看,Oracle9i 数据库的实体组成要素就是操作系统内各式档案,最 重要的有:数据文件、重置日志文件、控制文件、起始参数档 …等。下图三描述 了 Oracle9i 数据库的基本架构。 图三:Oracle9i 数据库基本架构。 数据文件 每个 Oracle9i 数据库都包含为数不等的实体「数据文件」。数据库内所有逻 辑数据库对象都是存放在数据文件内,如:数据表、索引….等。 一但数据文件被建立后,系统就会在磁盘上配置出适当空间给数据文件;但尚 未存放任何使用者资料。等到未来使用者将资料存入数据库时,Oracle9i 才会 在数据文件内配置出「数据区段」,以存放数据。而这些动作都是由 Oracle9i 自 动完成的。 当然了,如果数据文件剩余空间不足,您就必须调整数据文件大小;或增加新 的数据文件。所以在 Oracle9i 数据库内,一个数据库对象有可能横跨多个数据 文件 (数据文件相关的管理与维护动作将在未来专栏内容中详细探讨) 。 如前所述,Oracle9i 数据库内可规划一个以上的「资料表空间」。但如果由 5 操作系统角度来看,「资料表空间」其实是由一个或数个实体「数据文件」所组 成。换句话说,数据库的所有资料就是位于操作系统的各「数据文件」内。 所以: „ 一个「数据文件」只能对应的一个「资料表空间」。 „ 一个「资料表空间」可包含多个「数据文件」。 如下图四所示:SYSTEM 「资料表空间」对应到操作系统的 system01.ora 「数 据文件」(注3);USER 「资料表空间」则是包含 user01.ora 与 user02.ora 两 个「数据文件」。 图四:资料表空间与数据文件之对应。 重置日志文件 除了「数据文件」外,最重要的 Oracle9i 数据库实体档案就是「重置日志文件」 (redo log files),也就是大家俗称的「交易日志」(transaction log)。虽然它与「数 据文件」不同,但是彼此间却有密不可分的关系!简单的说, Oracle9i 重置日志 文件会负责纪录数据库内任何数据处理情况(注4)。当资料被异动时,所有异动纪 录会先保留在内存的重置纪录缓冲区,并在适当时机由 LGWR 背景处理程序负 责写入至硬盘上重置日志文件(注5)。如此一来,所有资料异动情况都会完整地保 留下来。万一您的 Oracle9i 数据库不小心当机或是遭遇毁损,Oracle9i 将凭借 重置日志文件内相关纪录将资料复原至最完整的状态—这个动作我们又称为 『Roll Forward』。 注3:任何 Oracle9i 数据库都必须要有一个 SYSTEM 资料表空间,所以 Oracle9i 会在建立数 据库时自动将第一个数据文件配置给 SYSTEM 数据表空间。 注4:这里的数据处理动作泛指新增、修改、删除;但查询动作除外。 注5:有关重置纪录缓冲区与 LGWR 背景处理的互动过程,请参阅我在 2002 年 1 月 Linuxer 杂志 的专栏文章。 6 重置日志文件的配置方式 请注意,Oracle9i 数据库正常运作的先决条件是至少配置两个(组)重置日志文 件! 假定目前 Oracle9i 数据库拥有两个重置日志文件,分别是 redo01.ora 与 redo02.ora。因为重置日志文件是以循环方式使用,所以当 redo01.ora 写满后就会 轮到 redo02.ora — 这个动作称为「日志切换」(log switch)。理论上,当 redo02.ora 写满后应该会立刻从 redo01.ora 重新开始写入动作。但实际上并非如此 — Oracle9i 会等到 redo01.ora 内纪录的资料异动情况真正反应在数据文件之后(记 得我们曾经提过的 CKPT 处理程序吗?),才会覆写 redo01.ora 的资料。在一个 大型线上交易(OLTP)系统下,如果资料交易量十分频繁,建议您不妨配置五个以 上重置日志文件。以免 Oracle9i 进行「日志切换」时还要等候 CKPT 处理程序执 行「检查点动作」(checkpoint),因而影响系统效能。 在执行关键性任务(mission-critical)的数据库系统中,为了避免硬件问题导致重 置日志文件毁损(例如硬盘产生坏轨),我们会考虑建置「多重重置日志文件」 (multiplexed redo log)。所谓的「多重重置日志文件」其实就是在其它硬盘内同 时存放多份重置日志文件之复本。以下图五为例:假定原来的重置日志文件为 Redo_A01.ora 与 Redo_A02.ora。我在第二个磁盘又额外规划了两个重置日志文 件 — Redo_B01.ora 与 Redo_B02.ora(分别为 Redo_A01.ora 与 Redo_A02.ora 之 复本)。这时候 Redo_A01.ora 与 Redo_B01.ora 就构成所谓的「重置日志群组」(redo log group);而 Redo_A01.ora 与 Redo_B01.ora 分别为该群组之「群组成员」 (member)。 一但您以「重置日志群组」的方式规划重置日志文件,LGWR 会同时将异动 纪录写入相同群组的所有成员。也就是说,LGWR 会将资料同时写入 Redo_A01.ora 与 Redo_B01.ora,等到发生「日志切换」动作后,再同时写入 Redo_A02.ora 与 Redo_B02.ora。可想而知,万一这两颗硬盘其中之一不幸损毁。 重置日志文件将不受任何影响。 尽管「多重重置日志文件」的概念已具备容错功能,但是对于重置日志文件之 写入效能却有一定程度的影响!这也是我们在规划之初就必须考虑的重点之一。 7 图五:多重重置日志文件的配置方式。 控制檔 每个 Oracle9i 数据库也都会有一个「控制文件」 ,用以纪录与描述数据库的实体 结构。「控制文件」内记录以下重要信息: „ Oracle9i 数据库名称与建立时间。 „ 数据文件与重置日志文件之名称,及其所在位置。 „ 交易纪录序列码(log sequence number)。 每当数据库被激活时,Oracle9i 会在执行个体激活后立刻读取控制文件内容,待 所有数据库实体组成档案之所在信息都收集完毕,数据库才会被开启。为了避免 控制档毁损导致数据库系统停摆,建议您比照「多重重置日志群组」的方式 — 至 少配置两个控制文件,并存放在不同实体硬盘(注6)。 起始参数档 在激活执行个体之前,Oracle9i 必须依照特定参数设定值来配置内存空间,并激 活相关背景处理程序。而 DBA 可以事先规划这些参数,并存放在操作系统内的 某个档案。往后将利用这个档案来开启相对应的 Oracle9i 执行个体 。这个档案 就是所谓的「起始参数档」。 起始参数档包含以下主要内容: „ 系统全域区相关的组态设定 „ 其它各起始参数之名称与设定值 注6:除了数据库激活时需读取控制档以外。进行数据库复原动作时也必须存取控制档内容。 8 „ 控制文件名称与存放路径 „ 重置日志文件之相关设定 您可以利用任何文字编辑器来建立或修改起始参数档,通常起始参数档的名称为 init.ora 或是 init.ora。假定 Oracle9i 执行个体的名称为 ora901,起始参数 档之档名就可以定为 initora901.ora。以下是一个起始参数文件范例: # Copyright (c) 1991, 2001 by Oracle Corporation # Cache and I/O db_block_size=8192 db_cache_size=67108864 # Cursors and Library Cache open_cursors=300 # Diagnostics and Statistics background_dump_dest=/opt/oracle/admin/ora901/bdump core_dump_dest=/opt/oracle/admin/ora901/cdump timed_statistics=TRUE user_dump_dest=/opt/oracle/admin/ora901/udump # Distributed, Replication and Snapshot db_domain=uuu.com.tw remote_login_passwordfile=EXCLUSIVE # File Configuration control_files=("/opt/oracle/oradata/ora901/control01.ctl", "/opt/oracle/oradata/ora901/control02.ctl", "/opt/oracle/oradata/ora901/control03.ctl") # MTS dispatchers="(PROTOCOL=TCP)(SER=MODOSE)", "(PROTOCOL=TCP)(PRE=oracle.aurora.server.GiopServer)", "(PROTOCOL=TCP)(PRE=oracle.aurora.server.SGiopServer)" # Miscellaneous compatible=9.0.0 db_name=ora901 9 除了上述档案之外,Oracle9i 数据库内还包含密码文件(password file)、重置日 志封存盘(Archived Redo log files)。有关这些档案的使用时机与管理方式将在未 来专栏中陆续为大家深入介绍。 了解 Oracle9i 数据库的实体组成后,我们就可以继续往下探讨 Oracle9i 数据库 的激活/关闭方式。 # Network Registration instance_name=ora901 # Pools java_pool_size=117440512 large_pool_size=1048576 shared_pool_size=117440512 # Processes and Sessions processes=150 # Redo Log and Recovery fast_start_mttr_target=300 # Resource Manager resource_manager_plan=SYSTEM_PLAN # Sort, Hash Joins, Bitmap Indexes sort_area_size=524288 # System Managed Undo and Rollback Segments undo_management=AUTO undo_tablespace=UNDOTBS 10 激活与关闭 Oracle9i 数据库 在激活Oracle9i数据库之前,首先您必须了解数据库的各种激活状态: „ NOMOUNT „ MOUNT „ OPEN 下表一列出不同的激活状态,与其使用时机: 激活状态 说明 NOMOUNT „ 仅激活Oracle9i执行个体,不会挂载(mount)Oracle数 据库。 „ 配置系统全域区(SGA),激活各背景处理程序。 „ 数据库尚无法使用。 „ DBA可执行ALTER DATABASE指令将数据库开启至 MOUNT或是OPEN状态。 „ 通常使用于第一次建立数据库,或是需重建控制档时。 MOUNT „ 激活Oracle9i执行个体。 „ 开启控制档。 „ 挂载Oracle9i数据库,但尚未开启之。 „ 数据库尚无法使用,但是DBA可以进行特殊的管理工 作(例如更改数据库内重置日志文件的封存模式)。 OPEN „ 激活Oracle9i执行个体。 „ 开启控制档。 „ 挂载Oracle9i数据库之后立刻开启。 „ 使用者可以存取数据库。 表一:Oracle9i数据库各种激活状态。 当您的系统内尚未建立任何数据库之前,只能先将 Oracle9i 执行个体开启至 NOMOUNT 状态,接着利用 CREATE DATABASE 指令建立 Oracle9i 数据库。 待数据库顺利建立时(数据库内相关的信息已纪录至控制文件),才可以执行 ALTER DATABASE 指令将数据库开启至 OPEN 状态;或是先将执行个体关闭, 再一口气将数据库开启至 OPEN 状态。 欲开启/关闭 Oracle9i 数据库时可利用以下几种工具: „ SQL*Plus。 „ Oracle Enterprise Manager。 11 „ Recovery Manager。 一般来说,前两种是比较常用的方式。值得注意的是:在 Oracle8i 之前版本可 使用 Server Manager 来激活/关闭 Oracle 数据库,或是执行系统维护的相关指 令。从 Oracle8i 以后,所有 Server Manager 的指令都可以在 SQL*Plus 下执行。 而 Oracle9i 已移除 Server Manager,统一由 SQL*Plus 做为 Oracle9i 的客户端 工具。 激活 Oracle9i 数据库的方式 欲开启 Oracle9i 数据库之前,您必须先以 SYSDBA 身分登入,然后执行 STARTUP 指令。下列步骤假设您是从 SQL*Plus 激活数据库: 1. 激活 SQL*Plus。 这里我们使用了 nolog 选项,这是假设目前 Oracle9i 数据库尚未激活, 当然也无法登入数据库。所以我们仅先进入 SQL*Plus 环境。 2. 利用 SYSDBA 身分登入。 3. 执行 START 指令,其基本语法为: 例如: 在一般情况下,如果要将 Oracle9i 数据库开启至 OPEN 状态,可以直接执 行 STARTUP 指令。 结果如下图五所示: SQL> connect 使用者名称/密码 as sysdba $ sqlplus /nolog STARTUP PFILE = 起始参数档名称 激活状态 STARTUP PFILE = initora901.ora NOMOUNT STARTUP 12 图五:利用 SQL*Plus 开启 Oracle9i 数据库至 OPEN 状态。 由图五可得知:激活 Oracle9i 执行个体时会先配置出系统全域区,然后是 挂载数据库,最后才会将数据库开启至 OPEN 状态。 关闭 Oracle9i 数据库的方式 关闭数据库时,您也必须以 SYSDBA 登入后执行 SHUTDOWN 指令。 SHUTDOWN 指令共有下列四种选项: „ Normal „ Transactional „ Immediate „ Abort 下表二整理出每个选项之用途与使用时机: SHUTDOWN 选项 说明 Normal „ 其它使用者无法再登入数据库,但现有使用者可继续 未完成的数据处理动作。Oracle9i 会等待所有使用者离 线后才关闭数据库。 „ 下次开启 Oracle9i 数据库时,系统不需进行执行个体 修复动作(Instance Recovery)。 „ 为系统预设的关闭数据库选项。 Transactional „ 不允许其它使用者再登入数据库。 „ 正在进行的资料交易动作不会受到影响。 „ 等到交易正常结束(不管是确认或是退回交易) 13 Oracle9i 才结束使用者联机阶段。待所有使用者离线后 才关闭数据库。 „ 下次开启 Oracle9i 数据库时,系统不需进行执行个体 修复动作。 Immediate „ 不允许其它使用者再登入数据库。 „ 自动退回(rollback)所有未确认的交易 „ Oracle9i 自动结束所有使用者联机阶段,并关闭数据 库。 „ 资料交易的一致性与完整性可能会受到影响。 „ 下次开启 Oracle9i 数据库时,系统不需进行执行个体 修复动作。 Abort „ 不允许其它使用者再登入数据库。 „ 正在进行的所有交易会立刻中断(不会 rollback)。 „ Oracle9i 会自动中断所有使用者联机阶段。 „ 资料交易的一致性与完整性可能会受到影响。 „ 下次开启 Oracle9i 数据库时,系统会自动进行执行个 体修复动作。 表二:Oracle9i 数据库的关闭指令选项。 关闭数据库的方式如激活数据库的方式类似,您可以在登入 SQL*Plus 之后执行 SHUTDOWN 指令。结果如图六所示: 图六:关闭 Oracle9i 数据库。 14 通常我们都是以 Normal 或是 Transactional 来关闭数据库。除非必要,否则请 尽量不要使用 SHUTDOWN ABORT 去关闭 Oracle9i 数据库,以免影响使用者 正在进行的数据处理工作。 结语 在本期内容里,我以两种角度探讨了 Oracle9i 数据库的组成要素。个人认为这 是学习 Oracle 最重要的工作。在我从事 Oracle 数据库管理相关教学工作以来, 这部分也是上课学员普遍认为较难接受的观念之一。但是只要这些基本观念搞清 楚,就像练武时任督二脉已被打通一般,未来研读 Oracle 的相关技术将会如鱼 得水。最近也有读者来信和我讨论 Oracle9i 数据库的管理技巧。当然了,Oracle9i 也有很棒的图形接口管理工具 — Oracle9i Enterprise Manager。 未来的专栏内容我必然会为大家介绍 Oracle9i Enterprise Manager 的使用方式 与技巧。有了 Enterprise Manager,管理 Oracle9i 数据库将如虎添翼! Oracle9i 数据库管理实务讲座(五) 手动建立 Oracle9i 数据库 (原文刊登于 2002 年 03 月 Linuxer 杂志) 作者: 何致億, 美商甲骨文公司台湾分公司特约顾问 前几期我们分别探讨 Oracle9i 核心要素与数据库实体组成,相信大家对于 Oracle9i 数据库服务器已经具有一定程度的了解了。本期我将介绍手动建置 Oracle9i 数据库的步骤与相关注意事项。 本文内容将涵盖下列主题: 1. 建立数据库的前置工作 2. 起始参数档的重要参数 3. 手动建立 Oracle9i 数据库的步骤 4. 如何移除 Oracle9i 数据库 不管原因为何,当您准备自行建立 Oracle9i 数据库时,都必须事先做好妥善准 备。因为手动建立 Oracle9i 数据库并不是件容易的事,可能的话应该尽量使用 Oracle9i 提供的「数据库建置辅助精灵」来建立新数据库。但是要想成为一个 合格的 Oracle DBA,您也必须熟稔手动建立数据库的方式,才能面对建置 Oracle9i 数据库所可能碰到的任何问题。 首先我们先看看建立 Oracle9i 数据库之前应注意那些事情。 建立 Oracle9i 数据库的前置处理工作 在开始建立新的 Oracle9i 数据库之前,建议您先做好下列准备工作: 1. 评估资料表与索引的存放位置,并预估其所需空间(如果可能的话)。 2. 规划操作系统下数据库实体档案的部署方式 — 良好的档案配置将大幅改 善资料存取效能。不管是安装 Oracle 服务器软件或是建置新数据库时,都 必须特别注意这点。例如说,您可以将重置日志文件 (Redo Log files) 置于 其它磁盘或是 RAID 1 磁盘阵列上;而将数据文件置于 RAID 5 磁盘阵列 上。 1. 选定「全域数据库名称」(global database name) — 它是在网际网络上识 别 Oracle9i 数据库的方式,由 数据库名称 与 网域名称 组成,分别设定 在起始参数档的 DB_NAME 与 DB_DOMAIN 参数内。 2. 熟悉起始参数档内较重要的参数,甚至「服务器参数档」 (server parameter file)的使用时机与其功用。 3. 选定适当的数据库字符集。所有字符资料都是依照特定字符集存入数据库, 因此您必须在建立数据库时指定适当字符集 (注1)。 4. 选定「标准资料区块」大小 — 设定在起始参数档的 DB_BLOCK_SIZE 参 数。除了 SYSTEM 资料表空间,其它资料表空间也可以遵循「标准资料 区块」的设定。此外,在 Oracle9i 数据库中,您可以设定额外四种「非标 准资料区块」。需要注意的是,「标准资料区块」大小在数据库建立完成后 即无法更改。 1. 针对未来数据库的运作情况,订立一份良好的数据库备份计划,以便数据库 毁损时能在最短时间内予以修复。 2. 熟悉 Oracle9i 数据库的激活/关闭方式,与其搭配的各种选项(如 STARTUP 指令的 nomount、mount、open 选项)。 1. 确认物理内存是否足以激活 Oracle9i Instance。 2. 确认 Oracle9i 服务器机的磁盘空间足够,以建置新数据库。 除了本文提及的注意事项,您也可以查阅各种操作系统专属的 Oracle9i 安装指 南,以获取更详尽的信息。 选择数据库建置方式 Oracle9i 数据库建置过程包含下列三项主要工作: 1. 建置新的数据库实体档案,包含资料文件、重置日志文件。 2. 建立控制档,并予以初始化。 3. 建置 Oracle9i 存取数据库系统时必要的数据字典(data dictionary)。 实际上,您可能经由下列三种方式之一来建置新的 Oracle9i 数据库时: 1. 使用 Oracle「数据库建置组态精灵」(Database Configuration Assistant, DBCA)。 Oracle Universal Installer 在安装过程中会适时激活 DBCA 协助您建立数 据库,视您选择的安装种类而定。DBCA 将以图形接口方式引导您逐步完 成 Oracle9i 数据库的建置工作。若是安装过程未激活 DBCA,您也可以事 后单独激活 DBCA 建立新数据库,甚至建立第二个 Oracle9i 数据库。 2. 执行指令文件(script)手动建立 Oracle9i 数据库 如果您手边恰好保存着上次建立 Oracle9i 数据库所用的指令文件,那么您 可以直接编修该指令文件,并予以执行。否则,建议您使用 Oracle9i 提供 的范例指令文件进行编修。Oracle9i 不仅提供了数据库建置范例指令文件, 也提供了起始参数范例文件。您可视实际需要进行必要调整。 注1:有关 Oracle 9i 数据库的字符集种类与名称, 请参阅《Oracle9i Globalization Support Guide Release 1》 1. 移转(migrate)或升级(upgrade)既有数据库。 如果您的应用系统正在存取既有 Oracle 数据库,除非您需要一个全新的数 据库或是测试用环境,否则应该不需要建立新数据库。在此情况下,您所面 临的将是数据库移转或升级议题。有关这方面的详尽信息,请参阅《Oracle9i Database Migration》手册。 再谈起始参数档 还记得上一期曾经提过的起始参数档吗?因为手动建立 Oracle9i 数据库之 前必须先激活 Oracle9i Instance,因此您必须先建立一个起始参数档。建立新 的起始参数档时,最快速的方式就是编辑 Oracle9i 提供的范例档案,然后另存 新档。我较习惯的方式是直接编辑既有起始参数档之复本,然后视实际需要进行 调整。因为起始参数档可供设定的参数非常多,如果某些参数未经过明确设定, Oracle9i 会自动代入默认值。 第一次以手动方式建立 Oracle 数据库时,建议您尽可能不要修改各起始参数 值。等到您熟悉每个参数的意义与使用时机之后,再利用文字编辑器调整或新增 其它参数。除此之外,Oracle9i 允许您建立服务器参数文件(以二进制格式存放)。 该档案内的参数可在 Oracle9i Instance 激活后执行 ALTER SYSTEM 指令予 以修改。 以下是建置新数据库之前必须新增或编辑的起始参数,包括: 1. 全域数据库名称 2. 控制文件名称与路径 3. 资料区块大小 4. 影响 SGA 容量的起始参数 5. 设定处理程序最大数目 6. 设定空间回复(Undo)管理方法 设定全域数据库名称 Oracle9i 的全域数据库名称由「数据库名称」与「网域名称」所组成,其中「数 据库名称」设定于 DB_NAME 起始参数,而「网域名称」则是设定于 DB_DOMAIN 参数。这两个参数合并之后就可以在网际网络上唯一识别每一个 Oracle9i 数据库。举例来说,假设我们欲建立的 Oracle9i 数据库之全域数据库 名称为 mydb.uuu.com.tw,那么可在起始参数档内设定下列两参数: DB_NAME = mydb DB_DOMAIN = uuu.com.tw Tips: 您可以执行 ALTER DATABASE RENAME GLOBAL_NAME 指令更改 Oracle9i 数据库的全域数据库名称;在您更改 DB_NAME 与 DB_DOMAIN 这 两个起始参数后必须将 Oracle9i 数据库重新激活才会生效。此外,控制档也必 须重新建立。 关于 DB_NAME 起始参数 DB_NAME 必须是文字字符串,且不能超过 8 个字符。在建立数据库的过程中, DB_NAME 设定值会记录在资料文件、控制文件、以及重置日志文件之中。如 果您激活 Oracle9i Instance 的时候,起始参数档内设定的 DB_NAME 不同于 控制文件内所纪录的,那么数据库将无法激活。 关于 DB_DOMAIN 起始参数 DB_DOMAIN 通常是数据库主机所在位置的网域名称。如果您欲建立的数据库 将加入分布式数据库运算环境,请特别注意此参数的设定。 设定控制档 如前所述,控制文件是 Oracle9i 数据库内相当重要的档案。因此您必须在新 的起始参数档内加入 CONTROL_FILE 参数以设定控制文件之文件名与路径。 当您执行 CREATE DATABASE 时,列在 CONTROL_FILE 之中的控制档将 随之建立。如果起始参数档忽略了此项参数,则 Oracle9i 会在执行 CREATE DATABASE 指令时自动建立控制文件并命名之,然后放在系统预设路径下。 那么,如果 CONTROL_NAME 内设定的控制文件已经存在于操作系统下该 怎么办呢?此时 Oracle9i 会自动覆盖既有的控制档。如果您想建立全新的控制 档,请确定 CONTROL_NAME 设定的控制文件名不会与操作系统下任何文件 名重复。 依照过去经验,Oracle 强烈建议您为每个数据库至少规划两个控制档,并分 散在两个实体磁盘上。如此可避免任一控制文件毁损时造成系统停摆。 设定资料区块大小 Oracle9i 数据库内存放资料的最小单位为「资料区块」(data block)。数据库 内「标准资料区块」大小是设定在起始参数档之 DB_BLOCK_SIZE 参数。 Oracle9i 数据库内最重要的 SYSTEM 资料表空间就是以 DB_LOCK_SIZE 设定值为基础所建立。此外 DB_BLOCK _SIZE 也是建立新资料表空间时预设 的资料区块大小。除了标准资料区块大小之外, Oracle9i 支持额外 4 种「非标 准资料区块」大小。 关于 DB_BLOCK_SIZE 起始参数 从 Oracle9i 开始,DB_BLOCK_SIZE 所设定的仅是标准资料区块大小;绝 大多数的数据库环境只需要设定该参数即可。一般来说, DB_BLOCK_SIZE 可 设定为 4K 或 8K。如果此参数未经设定,则 Oracle9i 会自动依照数据库所在 操作系统平台自行决定适当的资料区块大小。 需要注意的是,标准资料区块大小在数据库建立之后就无法改变 — 除非重建 数据库。如果数据库的「资料区块」大小不同于「操作系统区块」大小,那么建 议您将 DB_BLOCK_SIZE 设为「操作系统区块」大小之整数倍。假定操作系 统区块大小为 4K,则不妨设定 DB_BLOCK_SIZE = 8192。在某些情况下,这 样的组态方式将会显著地提升资料存取效能。 何谓「非标准资料区块」? 由「非标准资料区块」构成的资料表空间可经由 CREATE TABLESPACE 指 令搭配 BLOCKSIZE 子句建立之;其区块大小设定值可为 2K、4K、8K、16K、 32。需注意的是此类型资料区块将受到操作系统环境限制,不是所有操作系统 都可以设定上述所有区块大小。 欲使用「非标准资料区块」时,您还必须适当组态 SGA 内数据库缓冲区的 子缓冲区,方式是藉由 DB_nK_CACHE_SIZE 参数所设定(此参数容后说明)。 此项机制是 Oracle9i 提出的新功能,在转移数据库时特别好用。举例来说, 您的 OLTP 数据库也许将资料区块大小设定为 4K,但是资料仓储系统使用的 数据库却将资料区块大小设定为 8K。藉由「非标准资料区块」的机制,您就可 以平顺地将 OLTP 数据库的资料转移到资料仓储系统的数据库。 影响 SGA 容量的起始参数 此类型起始参数将控制内存内「系统全域区」 (System Global Area,SGA) 的 大小,除了 SGA_MAX_SIZE 之外,其它参数几乎都可以经由 ALTER SYSTEM 指令动态地更改。借着此项特性,您可以在 Oracle9i Instance 运作 时动态地增加或缩小 SGA 容量。 设定「数据库缓冲区」大小 一般情况下,Oracle9i 数据库缓冲区(database buffer cache)大小是由起始参 数档 DB_CACHE_SIZE 参数所决定。此时数据库缓冲区是以「标准资料区块」 作为资料存取单位。如果您想在 Oracle9i 数据库使用多重资料区块大小,则必 须设定一组 DB_BLOCK_SIZE 与 DB_nK_CACHE_SIZE 参数。如果上述两 项参数在起始参数档未明确设定,则 Oracle9i 会自动设定适当的 DB_CACHE_SIZE 值,且将 DB_nK_CACHE_SIZE 设定为 0。 关于 DB_CACHE_SIZE 起始参数 在 Oracle8i 以前,数据库缓冲区大小是由 DB_BLOCK_BUFFERS 与 DB_BLOCK_SIZE 所决定;从 Oracle9i 开始将由 DB_CACHE_SIZE 取代 之。需要注意的是,DB_CACHE_SIZE 是以 DB_BLOCK_SIZE 所设定的标 准资料区块大小为基准。为了向前兼容,在 Oracle9i 中仍旧可以设定 DB_BLOCK_BUFFERS 参数。但是 DB_BLOCK_BUFFERS 属于静态参数, 无法在 Oracle9i 数据库运作时进行动态调整,也不能与其它动态参数互相搭配 使用。 关于 DB_ nK_CACHE_SIZE 起始参数 从 Oracle9i 开始提供了「非标准资料区块」的支持,可经由下列参数设定: 1. DB_2K_CACHE_SIZE 2. DB_4K_CACHE_SIZE 3. DB_8K_CACHE_SIZE 4. DB_16K_CACHE_SIZE 5. DB_32K_CACHE_SIZE. 各参数之中的 nk 即是设定非标准资料区块的大小。我以下列参数设定为例: 使用上述参数所组态的数据库缓冲区将拥有以下特性: 1. 「标准资料区块」大小为 4K。 2. 「标准资料区块」大小构成的数据库缓冲区容量为 20M。 3. 第一种「非标准资料区块」大小为 2K,其构成的缓冲区容量为 10M。 4. 第二种「非标准资料区块」大小为 8K,其构成的缓冲区容量为 8M。 请注意一点,DB_ nK_CACHE_SIZE 参数不能设定「标准资料区块」之缓冲区 大小。举例来说,如果 DB_BLOCK_SIZE 设定为 4K,就不能再设定 DB_4K_CACHE_SIZE 参数。 设定「共享区」与「大型区」容量 SGA 内的共享区(Shared Pool)与大型区(Large Pool)分别由 SHARED_POOL_SIZE 与 LARGE_POOL_SIZE 所设定;这两个参数都属于 DB_BLOCK_SIZE=4096 DB_CACHE_SIZE=20M DB_2K_CACHE_SIZE=10M DB_8K_CACHE_SIZE=8M 动态参数 (注2)。如果起始参数档内未设定这两个参数,则 Oracle9i 将自动决 定其适当大小。 设定 SGA 的相关注意事项 SGA 最大容量由 SGA_MAX_SIZE 所控制。您可以动态地改变该参数值, 但是需注意 SGA_MAX_SIZE 为数据库缓冲区、共享区、大型区、以及其它 SGA 组件之容量总和。各区域之大小不能超过 SGA_MAX_SIZE 所设定。如 果 SGA_MAX_SIZE 未设定,则 Oracle9i 会自动设定 SGA_MAX_SIZE 为 所有 SGA 组件大小之总和。 设定处理程序最大数量 起始参数 PROCESSESS 可决定同时间连接 Oracle9i 的操作系统程序最 大数量。该参数值必须大于 6;其中 5 个是 Oracle9i 背景处理程序,加上 1 个 使用者处理程序。假定同一时间您的 Oracle9i 数据库同时间会有 100 使用者 上线,那么 PROCESSES 至少应设定为 105。 设定空间回复管理方式 任何数据库都应该具备某种特殊机制来确保交易的一致性与完整性。在 Oracle9i 数据库内即存有一份重要的交易相关信息,以便必要时可退回(rollback) 失败的交易,或是回复 (undo)某个数据处理动作。Oracle 将这些信息统称为「回 复项目」(undo entries)。Oracle9i 的回复项目存放在「回复资料表空间」 (undo tablespace) 或是「退回区段」(rollback segments)。 UNDO_MANAGEMENT 起始参数 针对回复项目的管理,起始参数档的 UNDO_MANAGEMENT 可设定由下列两 种方式之一激活 Oracle9i Instance: 1. AUTO:以 ”自动回复管理模式” 激活 Oracle9i Instance;其回复项目将储 存于「回复资料表空间」。 2. MANUAL:以 ”手动模式” 激活 Oracle9i Instance;其回复项目将储存于 「退回区段」。 为了向前兼容,UNDO_MANAGEMENT 的默认值为 MANUAL。 关于 UNDO_TABLESPACE 起始参数 当 Oracle9i Instance 以 ”自动管理模式” 激活时,将尝试寻找第一个可用的 注2: SHARED_POOL_SIZE 与 LARGE_POOL_SIZE 在 Oracle9i 以前为静态变量。 「回复资料表空间」以存放「回复项目」。如果执行 CREATE DATABASE 指 令,且 UNDO_MANAGEMENT 设定为 AUTO 时,Oracle9i 就会自动建立一 个名为 SYS_UNDOTBS 的「回复资料表空间」。此资料表空间将是 ”自动管 理模式” 下预设的「回复资料表空间」。 此外,您还可以设定 UNDO_TABLESPACE 起始参数,以明确指定 Oracle9i 所使用的「回复资料表空间」为何。如果系统内缺乏可用的「回复资料表空间」, 则 Oracle9i Instance 虽然可以激活,但是将使用 SYSTEM 退回区段。Oracle 建议您尽量妥善运用「回复资料表空间」来取代「回复区段」,因为前者不但易 于管理,也可以设定「回复项目」之维护时间。 关于 ROLLBACK_SEGMENTS 起始参数 ROLLBACK_SEGMENTS 起始参数内列出一连串「非系统退回区段」之相 关信息。当数据库以 ”手动模式” 进行回复项目管理时,Oracle9i Instance 将 会在激活时要求此类型退回区段。如果该参数内无任何设定值,则使用「系统退 回区段」。 Oracle9i 数据库的 ROLLBACK_SEGMENTS 参数是为了向前兼容 而保留,建议您以「回复资料表空间」取代之。 手动建立 Oracle9i 数据库 完成所有前置准备工作之后,您就可以依照先前的规划建立 Oracle9i 数据库。 有别于使用「数据库建置组态精灵」(Database Configuration Assistant),手动 建立数据库的方式主要是执行 CREATE DATABASE 指令。以下是建立 Oracle9i 数据库 mydb 的完整步骤: 1. 设定 Oracle SID 2. 选择 DBA 验证方式 3. 建立起始参数档 4. 激活 Oracle Instance 5. 执行 CREATE DATABASE 指令 6. 建立其它资料表空间 7. 建立数据字典视观表 步骤 1: 设定 Oracle SID 在一般情况下,每个 Oracle9i 数据库都必须对应一个 Oracle9i Instance。所 以在建立数据库之前,您必须先指定 Oracle9i Instance 的系统标识符(system identifier),此系统标识符就是俗称的 Oracle SID;您也可以将它视为 Oracle9i Instance 之名称。 因为 Oracle SID 可用以辨识不同的 Oracle 数据库,因此 SID 名称必须是 唯一的,可经由操作系统的环境变量 ORACLE_SID 设定之 (注3)。以下范例将 设定数据库所使用的 Oracle SID 为 mydb: 步骤 2: 选择 DBA 验证方式 您必须经过数据库之验证手续,且被赋予适当系统权限后才可以建立 Oracle9i 数据库。Oracle9i 用来验证 DBA 的方式有两种,分别是「密码文件验证」与 「操作系统验证」。建议您第一次手动建立数据库时先使用 oracle 帐号(安装 Oracle9i 所用的帐号) 经由「操作系统验证」来登入 SQL*Plus。有关密码文件 的建立与使用方式将在未来专栏中为大家详细介绍。 步骤 3: 建立起始参数档 为了简化管理动作,建议您将起始参数档置放于 Oracle9i 预设目录下,并且 依照标准格式为起始参数档命名。Oracle9i 起始参数档名之格式为: 其预设存放路径则为: 以 mydb 数据库为例,起始参数档名称可命名为 initmydb.ora,并存放在 opt/oracle/product/9.0.1/dbs 目录下 (注4)。如此一来,每当您欲执行 STARTUP 指令激活 Oracle9i Instance 时,系统会自动到预设目录下寻找起始 参数档,不需额外指定 PFILE 选项。 以下范例起始参数文件之部分内容: 注3:起始参数档之 DB_NAME 参数值必须与 ORACLE_SID 完全吻合。 注4:以我的 Oracle9i 数据库为例: ORACLE_BASE = /opt/oracle,而 ORACLE_HOME = $ORACLE_BASE/product/9.0.1,所以起始参数文件之预设目录应为 opt/oracle/product/9.0.1/dbs。 ORACLE_SID = mydb export ORACLE_SID init.ora $ORACLE_HOME/dbs Sample Initialization Parameter File # Cache and I/O DB_BLOCK_SIZE=4096 DB_CACHE_SIZE=20971520 # Diagnostics and Statistics BACKGROUND_DUMP_DEST=$ORACLE_HOME/admin/mydb/bdump CORE_DUMP_DEST=$ORACLE_HOME/admin/mydb/cdump TIMED_STATISTICS=TRUE USER_DUMP_DEST=$ORACLE_HOME/admin/mydb/udump # Control File Configuration CONTROL_FILES=("$ORACLE_HOME/oradata/mydb/control01.ctl", "$ORACLE_HOME/oradata/mydb/control02.ctl", "$ORACLE_HOME/oradata/mydb/control03.ctl") # Archive LOG_ARCHIVE_DEST_1='LOCATION=$ORACLE_HOME/oradata/mydb/archive' LOG_ARCHIVE_FORMAT=%t_%s.dbf LOG_ARCHIVE_START=TRUE # Miscellaneous COMPATIBLE=9.0.0 DB_NAME=ora901 # Distributed, Replication and Snapshot DB_DOMAIN=uuu.com.tw REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE # Network Registration INSTANCE_NAME=ora901 # Pools JAVA_POOL_SIZE=31457280 LARGE_POOL_SIZE=1048576 SHARED_POOL_SIZE=52428800 # Processes and Sessions PROCESSES=150 # Redo Log and Recovery FAST_START_MTTR_TARGET=300 # Resource Manager RESOURCE_MANAGER_PLAN=SYSTEM_PLAN # Sort, Hash Joins, Bitmap Indexes SORT_AREA_SIZE=524288 步骤 4: 激活 Oracle Instance 在 Oracle9i 数据库中,较常用来激活 Oracle9i Instance 的方式是使用 SQL*Plus 与 Oracle9i Enterprise Manager。以前者为例,您必须先进入 SQL*Plus 环境,然后切换为 sysdba 身份,方式为: 接下来您必须执行 STARTUP 指令将 Oracle9i Instance 开启至 NOMOUNT 状态。一般来说,只有在建立新数据库,或是进行特定数据库维护工作时才会将 Instance 开启至 NOMOUNT 状态。因为将 Instance 开启至 MOUNT 状态时 就会尝试挂载 Oracle9i 实体数据库。试想,若系统本身尚未建立数据库实体档 案,怎么可能 Instance 开启至 MOUNT 或是 OPEN 状态呢?以下是 STARTUP 指令的执行方式: 此为 STARTUP 指令最基本的执行方式。因为我们将起始参数文件置于预设目 录($ORACLE_HOME/dbs)下,所以不需指定 PFILE 选项。否则,您所执行的 STARTUP 指令应该类似于: 截至目前为止,我们才算是完成执行 CREATE DATABASE 指令前的所有准备 工作 — 在内存内已顺利配置 SGA,并激活各种背景处理程序。但此时系统本 身尚未存在任何实体数据库。接下来是最重要的步骤 — 执行 CREATE DATABASE 指令。 步骤 5: 执行 CREATE DATABASE 指令 当您执行 CREATE DATABASE 指令建立新数据库时,Oracle9i 会完成下列 各项主要工作: 2. 建立新数据库的实体档案,如资料文件、重置日志文件。 3. 更新控制文件内相关信息。 4. 建立 SYSTEM 资料表空间与 SYSTEM 退回区段(rollback segment)。 5. 建立数据字典 6. 设定数据库使用的字符集 7. 设定数据库所在时区 $ SQLPLUS /nolog CONNECT / AS sysdba STARTUP NOMOUNT STARTUP NOMOUNT pfile = $ORACLE_HOME/pfile/initmydb.ora 以下是 CREATE DATABASE 指令之范例: 我将以上 CREATE DATABASE 指令较重要的部分整理如下: 1. 数据库名称为 mydb,其全域数据库名称(global database name)为 mydb.uuu.com.tw。 1. 依照起始参数档 CONTROL_FILES 参数所设定的名称与路径分别建立三 个控制档。 2. MAXINSTANCES 参数:可用来开启该数据库的 Instance 数目。 3. MAXDATAFILES 参数:该数据库所拥有的最大数据文件数量。 4. 如 DATAFILE 子句所设定,该数据库 SYSTEM 资料表空间所相对应的操 作系统档案为 $ORACLE_HOME/oradata/mydb/system01.dbf。假如该档 案已事先存在,则予以覆写。 5. UNDO_TABLESPACE 用以建立与命名「回复资料表空间」(undo tablespace)。 1. DEFAULT_TEMPORARY_TABLESPACE 用以建立与命名该数据库预设 的「暂时资料表空间」。 2. ZHT16BIG5 为数据库内存放资料的字符集。 3. AL16UTF16 为「国际字符集」(NATIONAL CHARACTER SET) 设定值, 为 NCHAR、NCLOB、与 NVARCHAR2 等 unicode 字段所使用的字符 集。AL16UTF16 为 SQL NCHAR 资料型态预设的字符集,其编码方式为 CREATE DATABASE mydb MAXINSTANCES 1 MAXLOGHISTORY 1 MAXLOGFILES 5 MAXLOGMEMBERS 5 MAXDATAFILES 100 DATAFILE '$ORACLE_HOME/oradata/mydb/system01.dbf' SIZE 200M REUSE UNDO TABLESPACE undotbs DATAFILE '$ORACLE_HOME/oradata/mydb/undotbs01.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 2048K MAXSIZE UNLIMITED DEFAULT TEMPORARY TABLESPACE temptbs1 CHARACTER SET ZHT16BIG5 NATIONAL CHARACTER SET AL16UTF16 LOGFILE GROUP 1 ('$ORACLE_HOME/oradata/mydb/redo01.log') SIZE 100M, GROUP 2 ('$ORACLE_HOME/oradata/mydb/redo02.log') SIZE 100M, UTF-16。 4. 新数据库拥有三个线上重置日志文件(online redo log files),分别设定在 LOGFILE 子句中。MAXLOGHISTORY、MAXLOGFILES、与 MAXLOGMEMBERS 为重置日志文件的相关设定。 5. 因为 CREATE DATABASE 指令内并未包含 ARCHIVELOG 子句,所以 该数据库并不会进行重置日志文件的封存动作。您可以在数据库建立后执行 ALTER DATABASE 指令将数据库切换为「封存模式」(ARCHIVELOG mode)。起始参数文件内与「封存模式」相关的参数为 LOG_ARCHIVE_DEST_1、LOG_ARCHIVE_FORMAT、与 LOG_ARCHIVE_START。 6. 在 CREATE DATABASE 指令内也可加上 SET TIME_ZONE 子句以设定 数据库时区(time zone)。如果省略该子句,则数据库预设时区(time zone) 与操作系统时区相同。 步骤 6: 建立其它资料表空间 上期专栏内容中我们曾经探讨过 Oracle9i 的资料表空间规划方式。以步骤 5 的 CREATE DATABASE 指令而言,新数据库内将只有一个 SYSTEM 资料表 空间。为了更有效地使用及管理 Oracle9i 数据库,建议您另外新增数个资料表 空间,依照应用系统实际需求而定。以下指令分别建立 users 与 indx 数据表 空间。 步骤 7: 建立数据字典视观表 除了建立额外的资料表空间外,您还必须在数据库建立之后执行两个重要的指令 文件:catelog.sql 与 cataproc.sql。这两个指令文件将在 Oracle9i 数据库内建 立管理工作必备的视观表、同义字(synonyms)、以及 PL/SQL 套件(packages)。 1. catalog.sql: 本指令文件内容为:在数据字典数据表上建立相关视观表、动态效能视观表、 CREATE TABLESPACE users LOGGING DATAFILE '$ORACLE_HOME/oradata/mydb/users01.dbf ' SIZE 25M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL; CREATE TABLESPACE indx LOGGING DATAFILE '$ORACLE_HOME/oradata/mydb/indx01.dbf ' SIZE 25M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL; 以及存取各种视观表所用的同义字。此外,catalog.sql 也会将这些视观表 的使用权限授权给数据库使用者。 2. cataproc.sql: 本指令文件内包含执行 PL/SQL 程序所需的所有指令文件。 移除 Oracle9i 数据库的方式 移除 Oracle9i 数据库的方式有两种。传统方式是手动删除所有数据库实体档 案;较简便的方式是使用「数据库组态辅助精灵」。 如果您想手动移除先前建立的 Oracle9i 数据库,步骤可能会稍微繁琐一点。 因为所有数据库相关档案(包含资料文件、重置日志文件、控制文件、起始参数 文件、重置日志封存盘...等)都必须自操作系统删除。如果您不清楚这些档案的 存放位置,可查询 V$DATAFILE、V$LOGFILE、与 V$CONTROLFILE 等数 据字典视观表。如果您欲移除的数据库是设定在「封存模式」,那么建议您先检 视起始参数档内 LOG_ARCHIVE_DEST_ n、LOG_ARCHIVE_DEST、与 LOG_ARCHIVE_DUPLEX_DEST 等参数,以便从操作系统删除旧有重置日志 封存盘。 结语 本期谈到如何以手动方式建置 Oracle9i 数据库,以及 CREATE DATABASE 指令的主要项目。希望各位读者对于 Oracle9i 数据库的建置过程都能有一定程 度的了解。未来有机会我将为大家示范如何经由「数据库组态辅助精灵」来建置 Oracle9i 数据库。届时您将发现,原来建置 Oracle9i 数据库竟然如此简单! 1 Oracle9i 数据库管理实务讲座(六) 利用 DBCA 建立 Oracle9i 数据库 (原文刊登于 2002 年 04 月 Linuxer 杂志) 作者: 何致億, 美商甲骨文公司台湾分公司特约顾问 上期专栏中曾介绍过如何在 Oracle9i 服务器执行 CREATE DATABASE 指令 建立数据库。随即收到许多读者的热烈响应,其中有不少读者在建立数据库时碰 到一些问题,并来信求助。我大致做一个归纳,发现大家最常碰到的问题不外以 下两点: „ CREATE DATABASE 指令过于复杂,可否使用「数据库建置辅助精灵」建 立新数据库? „ 如何管理服务器上第二个 Oracle9i 数据库? (例如激活或关闭) 其中「数据库建置辅助精灵」即为 Oracle Database Configuration Assistant,简称 DBCA。关于 DBCA 的使用方式我曾在第 24 期 Linuxer 杂志的《Oracle9i 数 据库管理实务讲座(一)》一文中介绍过。如果大家还有印象,当时曾介绍如何安 装 Oracle9i 服务器软件。在安装过程最后一个步骤 Oracle Universal Installer 将 激活 DBCA 协助您建立第一个 Oracle9i 数据库。当然啰,您也可以在任何时 候单独激活 DBCA,进行特定数据库管理工作,例如:建立新数据库、组态既 有数据库、管理 Oracle9i 数据库模板…等。最重要的是,它完全是 GUI 接口! 只要遵循各项提示就可以轻易建立并管理 Oracle9i 数据库了。 至于如何管理第二个 Oracle9i 数据库就真的需要一点技巧。有些读者好不容易 成功建立了第二个数据库,但是却无法激活或关闭,更别说怎么使用了。本文也 将针对这个部分进行说明。 首先,让我们来看看如何激活 DBCA? 利用 DBCA 建立 Oracle9i 数据库 在使用 DBCA 之前,先检视一下目前环境。以我的系统为例:操作系统为 SuSE Linux 7.2,安装了 Oracle9i Enterprise Edition Release 9.0.1,Oracle9i 数据 库的 ORACLE SID 设定为 ora901。 接着我们将经由 DBCA 建置第二个 Oracle9i 数据库,步骤如下: 1. 使用 oracle 帐号登入 Linux 系统,并执行 dbca 程序。执行后您将看到 2 DBCA 的激活画面,如下图 1 所示: 图 1:DBCA 激活画面。 2. 选择 DBCA 执行模式: 如下图 2 所示,Oracle9i DBCA 总共提供四种操作模式,协助您进行不同的 数据库管理工作,分别是: „ 建置数据库 (Create a database) „ 组态数据库各项设定 (Configuration database options in a database) „ 删除数据库 (Delete a database) „ 模板管理 (Manage Templates) 前三项是 Oracle8i 就已支持的功能,第四项 “模板管理” 则是 Oracle9i DBCA 新增功能之一。值得注意的是,如果是由 Oracle Universal Installer 安 装程序激活的 DBCA,则无法选取第二项与第三项。这里请选择第一项 “Create a database”。 图 2:DBCA 提供的四种操作模式。 3 3. 选择您欲建置的数据库模板: DBCA 提供三种数据库预设模板文件。您可以直接使用这些模板文件建置 新的 Oracle9i 数据库;或是依照实际环境需求,自行调整既有模板后再建 置新数据库。三种预设数据库模板分别是: „ 资料仓储 (Data Warehouse) „ 线上交易处理 (Transaction processing) „ 一般性用途 (General Purpose) 之前我们曾使用过第三个 “General Purpose” 模板建立新数据库,因此这次 我们选择第四个 “New Database” 选项。 图 3:选择数据库模板种类。 4. 输入数据库识别资料: 首先您必须提供此数据库的 “Global Database Name”(全域数据库名称) 以 及 SID。所谓的「全域数据库名称」是从 Oracle8i 之后所提出,其主要目 的是希望能够在网络上唯一识别每个 Oracle 数据库。它的格式通常是: [Oracle SID 名称].[数据库主机所在网域名称] 以我的环境为例:目前数据库主机所在网域名称为 uuu.com.tw,第二个 Oracle9i 数据库的 SID 欲设定为 testdb。那么全域数据库名称就可以设定 为 testdb.uuu.com.tw。如下图 4 所示。 4 图 4:设定 Oracle9i 数据库识别资料。 5. 选择数据库欲支持的选项: DBCA 允许您在建立新数据库时指定欲支持的选项,其中: „ Oracle Spatial 是 Oracle 数据库中存取多维资料的方法之一,通常 用于地理信息系统(GIS)。所谓的 GIS 系统包含以下数据处理动作: 资料采集、资料编辑、地图绘制、影像处理、报表产生与资料分析等。 „ Oracle Ultra Search 支持多媒体数据管理功能,例如声音、影像、 动画与文字,可用来建置多元化的 Web 应用程序。 „ Example Schema 是否建置 Oracle9i 提供的各式范例数据库对象。 图 5:设定数据库欲支持的选项。 5 6. 选择新数据库的运作模式: Oracle9i 数据库可设定在两种模式下运作: „ 专属服务器模式(Dedicated Server Mode) „ 共享服务器模式(Shared Server Mode) 如果将数据库设定在 ”专属服务器模式”,则 Oracle9i 会针对每个客户端联 机配置独立的系统资源;适用于联机数目较少的环境。反之,若是设定成 “共 享服务器模式”,则多个客户端联机将共享所有系统资源。 图 6:选择新数据库运作模式。 7. 设定起始参数: 如图 7 所示,针对起始参数的设定共分成四个页签,分别是【Memory】、 【Archive】、【DB Sizing】、【File Location】。以内存设定为例,DBCA 就提 供了相当人性化的设定方式: „ Typical(典型) 可设定同时间上线人数,并指定 SGA 总容量。较特别 的是,SGA 大小是以 “ 物理内存的百分比” 来设定。换句话说,您只 要决定这个新数据库能够占用多少内存即可,DBCA 会适当的分配给 SGA 各区域。 „ Custom(自订) 可以自行决定 SGA 各区域的内存配置数情况。此选项 适合较有经验的数据库管理者。 6 图 7:配置 Oracle Instance 所需内存。 8. 设定数据库封存模式: 「封存模式」(Archive Log Mode)是 Oracle 数据库特殊的运作模式。当数据 库启用「封存模式」时,Oracle9i 会将线上重置日志文件(Online Redo Log Files) 另外备份至特定目录下,这就是所谓的「封存」 (Archive)动作。激活 「封存模式」的优点在于数据库备份工作较有弹性 (有关 Oracle9i 数据库备 份机制将在未来专栏中介绍),资料交易的安全性也相对提高;但缺点是系 统负担较重。 如果您欲启用「封存模式」,请勾选图 8 中【Archive Log Mode】选项,并 设定重置日志封存盘之格式。建议您将重置日志封存盘存放在其它硬盘,可 有效提升封存动作之效率。 图 8:是否启用封存模式。 9. 设定资料区块大小、排序内存与字符集: 此处有三个重要设定,分别是资料区块大小、排序内存最大值以及字符集。 7 资料区块与字符集已在之前专栏内容介绍过,这里不再赘述。请特别注意排 序内存(Sort Area)的设定。一般来说,Oracle9i 会在内存内完成资料排序动 作。如果数据库需要经常执行大量资料排序指令,则【 Sort Area Size】应设 大一点。 图 9:设定资料区块、排序内存与字符集。 10. 指定起始参数文件存放位置: 最后一个页签是指定起始参数档与追踪档(Trace files)的存放位置。您可以依 照目前系统环境进行适当调整。假如您不清楚目前的 ORACLE_BASE 与 ORACLE_HOME 设定值,可点选右下角的【File Location Variables…】按 钮。 图 10:指定起始参数文件之存放位置。 到这里为止,较重要的数据库设定工作已大致完成,按下【 ALL Initialization Parameters…】可检视所有起始参数设定值。 8 11. 确认数据库档案存放位置: 在真正开始建立数据库以前,DBCA 会整理出各种数据库的存放位置。您 可以先展开 Storage 下面的子资料夹,然后检视各档案实际存放路径;必要 时可直接修改之。 图 11:确认数据库档案存放位置。 12. 建立数据库模板文件: 总算到了最后一个设定窗口,此时只要按下【Finish】就可以开始建立新数 据库。尽管如此,还是建议您注意一下此处提供的模板建立功能。数据库模 板管理是 Oracle9i DBCA 相当实用的功能之一,它允许您将先前所有数据 库设定值储存起来,做为下次建置新数据库的参考。当您勾选【Save as a Database Template】之后就可以在下方的 Name 字段输入模板名称,以及必 要的附注说明。 图 12:选择是否建立此数据库之模板文件。 9 按下【Finish】之后就可以把剩下的工作交给 DBCA 了!它会先建置起始参数 档,然后在激活 Oracle Instance 之后进行一连串的工作,如图 13 所示。实际建 置时间需视您的硬设备而定。 图 13:进行数据库建置过程 看到图 14 之窗口时就可以松一口气了。如果您想知道数据库建置过程详细信息, 请到 /opt/oracle/admin/testdb/create 目录下寻找相关纪录文件。有一点需提醒大 家,虽然是第二个数据库,但其 SYS 与 SYSTEM 帐号的密码仍分别为 change_on_install 还有 manager,请记得在登入数据库后自行修改。此外,除了 SYS 与 SYSTEM 帐号,其余使用者帐号预设均为锁定状态。您可以点选下方 的【Password Management…】进行调整。 图 14:系统预设帐号密码之提示窗口。 10 如何管理第二个 Oracle9i 数据库? 现在 Oracle9i 服务器上已经建立了两个数据库,应该如何管理呢?目前这两个 数据库的配置情况如下图 15 所示: „ 第一个数据库是安装 Oracle9i 时建立的,Oracle SID 为 ora901。 „ 第二个数据库是我们刚才透过 DBCA 建立的,其 Oracle SID 为 testdb。 图 15:Oracle9i 服务器上两个各自独立的数据库。 假定目前我们是用 oracle 帐号登入 Linux 操作系统,如果直接执行 sqlplus 启数据 库,您将发现开启的是 ora901 数据库。这是因为目前 ORACLE_SID 设定为 ora901 (在 /etc/profile.d/oracle.sh 档案内设定 )。如下图 16 所示,在激活 Oracle9i 数据库之后,您可 在操作系统下执行: ps –ef | grep ora_ 以查看目前系统内运作中 Oracle9i 数据库背景处理程序。 图 16:从操作系统角度查看激活中 Oracle9i 背景处理程序。 11 那么应该如何激活第二个 Oracle9i 数据库呢? 其实做法有很多种,而最简单的 方式就是直接更改 ORACLE_SID 设定值。以 SuSE Linux 7.2 为例,更改 ORACLE_SID 的方式如下: declare ORACLE_SID = testdb 更改之后请执行 echo 指令确认之,如图 18 所示。然后您可以再登入 SQL*Plus 激活 Oracle9i 数据库。这一次您将发现激活的是 testdb 数据库。建议您在数据 库激活后查询 v$instance 资料字典视观表: SELECT instance_name FROM v$instance; 查询结果为 testdb,即为目前的 ORACLE Instance 名称。 图 17: 激活第二个 Oracle9i 数据库。 您可以在操作系统下执行: ps –ef | grep ora_ 执行结果如图 18 所示,第二个 Oracle9i 数据库的背景处理程序也顺利激活。 图 18:两个 Oracle9i 数据库的背景处理程序同时执行。 同理,如果您想关闭 testdb 数据库的话,也可以先将 ORACLE_SID 设定为 12 testdb。然后在登入数据库后执行 shutdown 指令,如下图 19 所示。 图 19: 关闭 testdb 数据库。 后记 最近收到相当多读者的来信,除了对 Oracle9i 系列文章给予正面肯定之外, 也不吝指教许多意见。对我个人而言,真是一则以喜,一则以忧。喜的是愈来愈 多人不再害怕 Oracle 数据库,愿意花时间动手尝试安装与组态。忧的是因为个 人工作因素,实在没有办法一一为大家解答所有问题。这点真的要请大家见谅! Oracle数据库以往给予一般 IT 人员的印象大概只能用 “高不可攀” 四个字 来形容。虽然其数据处理技术凌驾各家厂商,稳坐关系型数据库龙头宝座,但是 其系统管理技术却不是三两下可以精通的。也因此让许多人望之却步! 我个人认为,任何关系型数据库系统其实都大同小异,只要了解基本架构与 运作原理,想精通数据库就事半功倍啰。 1 Oracle9i 数据库管理实务讲座(七) Oracle9i 数据库控制文件 (原文刊登于 2002 年 05 月 Linuxer 杂志) 作者: 何致億, 美商甲骨文公司台湾分公司特约顾问 经过前几期专栏文章的洗礼,相信大家对于 Oracle9i 数据库应该已具备一些基 本管理概念,但是这还不足以驾驭 Oracle9i 数据库!接下来我将从实务角度深 入解说 Oracle9i 数据库的各种核心组成组件,与各种数据库管理技巧。本期先 从 Oracle9i 数据库的控制文件(Control files) 开始谈起。 控制檔的角色 每一个 Oracle9i 数据库都必须有一个控制档。它是一个小型二进制档案,主要 是储存 Oracle9i 数据库结构信息,包括: „ 数据库名称 „ 数据库建立时间 „ 资料文件名称与所在位置 „ 重置日志文件名称与所在位置 „ 目前的日志序列码(log sequence number) „ 检查点信息 简言之,控制档可用来描述 Oracle9i 实体结构。因此开启 Oracle9i 数据库时 一定要读取控制文件才能取得所有数据库实体档案相关信息。一旦控制文件不幸 毁损,数据库便无法顺利开启。也因为如此,控制档的管理与维护工作显得格外 重要。 如何管理控制檔 设定控制文件名称与所在位置 因为控制文件将用来存放 Oracle9i 数据库的实体结构信息,即使目前尚未建置 Oracle9i 数据库,您也必须先准备好控制档!换言之,在激活 Oracle Instance 时 就必须知道控制文件的名称与所在位置。为此,控制文件的相关信息必须设定在 起始参数档内,才能在开启 Oracle Instance 时一并读取控制档内容,进而激活 Oracle9i 数据库。控制文件的名称与所在路径位置是设定在起始参数档内 CONTROL_FILES 参数。 如何配置控制文件 每个 Oracle9i 数据库最好拥有两个以上控制档,并各自存放在不同磁盘上。如 2 此一来当控制档因故毁损时,您便可以在最短时间内修复控制文件,尽可能缩短 数据库停摆时间。假定您的 Oracle9i 数据库目前配置了三个控制文件,那么 Oracle 如何维护这些控制档呢? Oracle9i 与控制档的互动方式如下: „ 开启 Oracle 数据库时,只会读取第一个控制文件(顺序以 CONTROL_FILES 的设定值为基准)。 „ 如果需要将特定信息写入控制文件,则 Oracle 会同时写入 CONTROL_FILES 参数所指定的档案。 „ 当某个控制档发生问题时,Oracle Instance 将因此停摆。 如前所述,各控制档复本应该分散在不同实体磁盘。因此实际上规划一个正式系 统时,请仔细思考控制文件与重置日志文件之搭配方式。 假定目前的重置日志群组有两个,分别置于 /u01 与 /u02 两个磁盘;每个重置 群组包含三个重置日志文件: /u01/oradata/ora901/log1a.rdo (Group1) /u01/oradata/ora901/log2a.rdo (Group2) /u02/oradata/ora901/log1b.rdo (Group1) /u02/oradata/ora901/log2b.rdo (Group2) /u03/oradata/ora901/log1c.rdo (Group1) /u03/oradata/ora901/log2c.rdo (Group2) 此时不妨在 /u01 与 /u02 各配置一个控制文件。如此可有效降低重置日志文件 与控制文件同时遗失的风险。因为不管哪个磁盘出问题,另一个磁盘仍然保留完 整的重置日志文件与控制文件资料。 如何决定控制档大小 Oracle9i 控制檔大小主要是由 CREATE DATABASE 指令内数个参数所决定, 分别是: MAXDATAFILES、MAXLOGFILES、MAZLOGMEMBERS、 MAXLOGHISTORY 与 MAXINSTANCES。 控制檔建立方式 经由 CREATE DATABASE 指令建立控制文件 Oracle9i 控制文件在建立数据库的同时就会一并建立;换句话说,当您执行 CREATE DATABASE 之后就会产生控制档。但是有一点必须注意:CREATE DATABASE 指令内并未指定控制文件相关信息! 其实控制文件的名称与所在 位置是定义在起始参数档的 CONTROL_FILES 参数,其命名方式必须视操作 系统环境而定;例如 Windows 系统与 Linux 系统的档案路径表示法就不相同。 3 以下是 CONTROL_FILES 参数之定义方式: CONTROL_FILES = ( /u01/oracle/ora901/control01.ctl, /u02/oracle/ora901/control02.ctl, /u03/oracle/ora901/control03.ctl) 如果 CONTROL_FILES 参数所指定的文件名称已经存在于操作系统中怎么办? 此时您在执行 CREATE DATABASE 指令时就会发生错误,不过只要加上 CONTROL FILE REUSE 子句即可。然而,如果现有控制档名称与 CONTROL_FILES 所设定的名称相同,但是其 “大小” 却不同,那么您还是无 法使用 REUSE 选项。 建立额外的控制档 为了避免控制文件(或其所在磁盘)毁损时影响到 Oracle9i 数据库正常运作,您 也许需要在其它硬盘上新增其它控制档。最简单的方式就是先将既有控制文件复 制到目的位置,然后将控制文件名称加入起始参数档的 CONTROL_FILES 之 中。同理,如果想更改控制档名称,也可以先将控制文件复制到目的位置后予以 更名,再更新 CONTROL_FILES 参数。请注意,不管是上述何项动作,都应 该先关闭 Oracle9i instance 再进行。在其它磁盘建立额外控制文件的步骤如 下: 1. 关闭 Oracle9i 数据库。 2. 在操作系统下将既有控制文件复制到目的位置。 3. 开启起始参数档,并修改 CONTROL_FILES 参数。您必须将新的控制文件 名与所在目录名称加入 CONTROL_FILES 参数。 4. 重新开启 Oracle9i 数据库。 建立全新的控制檔 除了将控制文件复制到其它磁盘之外,某些时候您可能需要建立 ”全新的” 控制 檔,例如: „ 目前数据库既有的控制文件不幸毁损,不仅未进行备份,也尚未在其它磁盘 建立镜射控制文件。 „ 您希望更改 CREATE DATABASE 指令内设定的控制文件相关参数,例如: 数据库名称,或是 MAXLOGFILES、MAXLOGMEMBERS 与 MAXLOGHISTORY 等参数。 举例来说,在分布式运算环境中可能会有两部 Oracle9i 数据库名称相同,其中 一台必须更改数据库名称。也有可能因为 MAXLOGFILES 与 MAXLOGMEMBERS 最初设定值太小,现在必须加大。上述情况都必须建立全 新的控制档。以下是建立详细的建置步骤: 4 1. 先整理一份数据库档案清单,其中包含所有数据文件与重置日志档案之路径 与名称。V$LOGFILE 与 V$DATAFILE 这两个视观表可协助您进行这项供 工作,例如: SELECT member FROM v$logfile; SELECT NAME FROM V$DATAFILE; 5 2. 关闭数据库。请尽可能以 NORMAL 选项关闭数据库,必要时才使用 IMMEDIATE 或 ABORT 选项。 3. 重新激活 Oracle Instance 至 NOMOUNT 状态: STARTUP NOMOUNT; 4. 执行 CREATE CONTROLFILE 指令建立新的控制文件。以下范例将为 ora901 数据库建立一个全新的控制档: CREATE CONTROLFILE SET DATABASE ora901 LOGFILE GROUP 1 ( '/u01/oracle/ora901/redo01_01.log', '/u01/oracle/ora901/redo01_02.log'), GROUP 2 ( '/u01/oracle/ora901/redo02_01.log', '/u01/oracle/ora901/redo02_02.log'), GROUP 3 ( '/u01/oracle/ora901/redo03_01.log', '/u01/oracle/ora901/redo03_02.log') NORESETLOGS DATAFILE '/u01/oracle/ora901/system01.dbf' SIZE 300M, '/u01/oracle/ora901/rbs01.dbf' SIZE 50M, '/u01/oracle/ora901/users01.dbf' SIZE 500M, '/u01/oracle/ora901/temp01.dbf' SIZE 100M MAXLOGFILES 100 MAXLOGMEMBERS 3 MAXDATAFILES 500 MAXINSTANCES 10 ARCHIVELOG; 注意,如果您打算在控制文件内更改数据库名称,则必须使用 RESETLOGS 选项,否则请使用 NORESETLOGS 选项。 5. 必要时修改起始参数档 CONTROL_FILES 参数。如果数据库名称已被更 改,请记得修改 DB_NAME 参数。 6. 将数据库开启至 Open 状态: ALTER DATABASE OPEN; 6 如果您建立控制文件时曾搭配 RESETLOGS 选项,那么执行 ALTER DATABASE 指令时必须加上 RESETLOGS 选项: ALTER DATABASE OPEN RESETLOGS; 备份控制档 也许您已经在不同磁盘上配置多个控制文件,但这并不表示控制档永远不会毁 损。为此,您应该适时备份这些控制档;特别是在 Oracle9i 数据库实体结构经 过变动时,例如: „ 新增或移除数据文件,或是更改某数据文件名称。 „ 新增或移除表格空间,或是更改表格空间的状态。 „ 新增或移除重置日志档案(或群组)。 欲备份控制档时,您可执行 ALTER DATABASE BACKUP CONTROLFILE 指 令,分为以下两种方式: 1. 将控制文件备份到某个二进制档案,例如: ALTER DATABASE BACKUP CONTROLFILE TO '/backup/controlfile/control.bkp'; 2. 制作能够重建控制档之 SQL 叙述句,例如: ALTER DATABASE BACKUP CONTROLFILE TO TRACE; 这道指令会将某个 SQL 叙述句写入数据库的追踪文件。您可从追踪档内撷 取出这段程序代码,进而重建控制档。 如何修复控制档(或其复本) 情境:目前您的 Oracle9i 数据库拥有三个控制档,分别置于三个不同磁盘: /u01/ora901/controlfile/control01.ctl /u02/ora901/controlfile/control02.ctl /u03/ora901/controlfile/control03.ctl 状况一:control02.ctl 不幸毁损,导致 Oracle9i 数据库无法正常运作。 7 解决方式:参考下列步骤修复控制档复本,并重新激活数据库: 1. 关闭 Oracle9i 数据库,在操作系统下将控制文件复制一份至 /u02/ora901/, 目的是覆盖掉毁损的旧控制档: % cp /u01/ora901/controlfile/control01.ctl /u02/ora901/controlfile/control02.ctl; 2. 重新开启 Oracle9i 数据库。 状况二:control02.ctl 所在磁盘整个毁损(该磁盘并未存放其它数据库相关档案) 解决方法A:以其它磁盘取代毁损磁盘 1. 关闭 Oracle9i 数据库,在操作系统下将控制文件复制一份至其它磁盘之适当 目录 (例如 /u04): % cp /u01/oracle/ora901/control01.ctl /u04/oracle/ora901/control02.ctl; 2. 更改启始参数档内 CONTROL_FILES 参数,例如: CONTROL_FILES =( /u01/oracle/ora901/control01.ctl, /u03/oracle/ora901/control03.ctl, /u04/oracle/ora901/control02.ctl) 3. 重新开启 Oracle9i 数据库。 解决方法B:移除 control02.ctl 设定值 1. 关闭 Oracle9i 数据库。 2. 更改启始参数档内 CONTROL_FILES 参数,移除原先 control02.ctl 之路径 与名称。 3. 重新开启 Oracle9i 数据库。 需注意的是:使用方法A以后,您的 Oracle9i 数据库仍然保有三个控制档;但 是使用方法B之后只剩下两个控制档。 如何查询控制文件相关信息 欲查询 Oracle9i 控制文件相关资料时可参考下列几种方式: 1. 执行 SHOW PARAMETER 指令: 8 2. 查询 V$CONTROLFILE 视观表: SELECT name FROM V$CONTROLFILE; 9 3. 查询 V$PARAMETER 视观表: SELECT name, value from V$PARAMETER WHERE name = 'control_files';

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档