Oracle Database HOWTO 作者:Paul Haigh, paul@nailed.demon.co.uk 译者:曾达康, a9504480@graduate.hku.hk 1.2 版, 一九九八年八月四日(翻译日期∶一九九八年八月三十一日) _________________________________________________________________ 在 Linux 系统中安装及设定 Oracle 资料库伺服器之指南。 _________________________________________________________________ 1. 导言 * 1.1 版本历史 * 1.2 Copyright * 1.3 Disclaimer * 1.4 本 HOWTO 的目的 * 1.5 系统要求 * 1.6 Oracle Corporation 的新消息 2. 安装 Oracle 软件 * 2.1 伺服器的准备工夫 * 2.2 从光碟安装 * 2.3 安装後的工作 3. 建立一个资料库 * 3.1 建立初始档 (Initialisation File) * 3.2 建立资料库安装命令稿 * 3.3 执行资料库的安装安令稿 * 3.4 启动资料库 * 3.5 停止资料库 * 3.6 建立内定用户 (Default User) 4. 在伺服器上设定 SQL*Net * 4.1 tnsnames.ora * 4.2 listener.ora * 4.3 sqlnet.ora * 4.4 开始及结□监听程式 5. 用户的设定 * 5.1 视窗用户 * 5.2 Unix 用户 6. 自动启动及停止 * 6.1 dbstart 及 dbstop * 6.2 init.d 及 rc.d 7. 其他事宜 * 7.1 Intelligent Agent 8. 疑难排解 * 8.1 我不能在 Oracle 7.2.x 中建立资料库。 * 8.2 7.3.4.x 的 svrmgrl 产生 segmentation fault。 9. 荣誉 _________________________________________________________________ 1. 导言 1.1 版本历史 * 0.1 版 - 一九九八年二月廿一日 - Paul Haigh - 最先的版本。 * 0.2 版 - 一九九八年三月一日 - Paul Haigh - 加上了校对者的评论。 * 1.0 版 - 一九九八年三月十日 - Paul Haigh - 在 LDP 出版。 * 1.1 版 - 一九九八年六月二十日 - Paul Haigh - 重新整理及加上疑难排解 。 * 1.2 版 - 一九九八年八月四日 - Paul Haigh - 加上 Oracle Corporation 的新闻及删去未来改进一节。 1.2 Copyright The Oracle Database HOWTO copyright (c) 1998, Paul Haigh. Like all Linux HOWTO documents, this may be reproduced and distributed in whole or in part, in any medium, physical or electronic, so long as this copyright notice is retained on all copies. Commercial redistribution is allowed and encouraged; however the author would like to be notified of such distributions. You may translate this HOWTO into any language whatsoever provided that you leave this copyright statement and disclaimer intact, and that you append a notice stating who translated the document. 1.3 Disclaimer While I have tried to include the most correct and up to date information available to me, I cannot guarantee that usage of information in this document does not result in loss of data or equipment. I provide NO WARRANTY about the information in the HOWTO and I cannot be made liable for any consequences resulting from using the information in this HOWTO. 1.4 本 HOWTO 的目的 在这 HOWTO 中我会尝试说明如何安装及管理一个在 Linux 上执行的 Oracle 资 料库,我会特别说明 Oracle 伺服器的安装,SQL*Net 的设定及用户 (client) 的设定。 这文件并不是一份有关使用及管理一个 Oracle 资料库的入指引。如果你想要这 类资料,O'Reilly 及其他出版商都有推出这方面的佳作。 我也不会说明在 Unix 上 Oracle 程式的开发过程。如果你对这有绝对需要,我 建议你从 SCO 处购买 SCO development system (包括 OpenServer 5.x)。据我 所知,这可以十分合理的十九块美元从 www.sco.com 得到。 1.5 系统要求 要跟从这篇 HOWTO 的内容,你需要以下东西。 * Oracle Server CD 中的 SCO Openserver (7.3.3.0.0 版) 这必须是合法的版本。记著 Oracle 是一间牟利的公司,她会对其 产品收费。如果你想要免费而又支援 SQL 的资料库,请用 PostgresSQL 或其他类以程式。 你也可从 Oracle 网页中下载一个 tar 档案,从中得到一个六十 天的试用许可证 (license) 及安装 Oracle 。我并没有亲自试过 它,它是未经确认的。 * 一台 Linux 伺服器 如果没有的话,你就不会阅读这文件了,是吗? * 2.0.30+ 的核心 我不保证这些指示对任何其他核心来说准确。(我对 2.0.30 也不 作出保证……) * iBCS 安装及使用你所用的平台的最新版本非常重要。(我正在使用 Redhat Linux 的 iBCS-2.0-10.i386.rpm。) * 大量磁碟空间 600 Mb 以上是个合理的数字。使用更少的空间也可以,但你需要 作出一些牺牲,我从不这样开始。不过,我会尝试指出在哪里可腾 出空间。 * 32Mb 以上记忆体 我知道这听起来很多,特别是以 Linux 来说, 但请记著 Oracle 是个复杂的软件。在 SCO,你不会觉得有问题! 我不是说 Oracle 不能在较少记忆体的情形下工作,不过这样会少 过 Oracle 的建议,我也不赞成这样做。 * Oracle 的许可证 (License) 我知道我已提出过,但我想大家知道这是重要的。没有许可证而使 用 Oracle 的软件是违法的。 1.6 Oracle Corporation 的新消息 Oracle 屈服於来自 Linux 社群的压力。Oracle Corporation 已经决定向在 Linux 平台的 Oracle 8 提供官方支援。据 Oracle 网址说,这将会在一九九八 年十二月推出。 更好的消息是 Oracle 会把 Oracle 应用软件移植到 Linux 平台。根据 Oracle 的网页,这应该会在一九九九年上半年推出。 参考资料: * [1]http://www.oracle.com/html/linux.html * [2]http://www.news.com/News/Item/0,4,24436,00.html * [3]http://www.zdnet.com/pcweek/news/0720/20morac.html 2. 安装 Oracle 软件 2.1 伺服器的准备工夫 建立 Oracle 用户 如大家所料,我们需要一个用户来保存 Oracle 的资料库。因为我们不想重新链 结 Oracle 核心(容後再谈),我们要接受 Oracle 内定的使用者及群组名称, 即使用者为 ORACLE,而群组为 DBA。 1. 以 root 的身分签入 2. 建立使用者 oracle 及群组 dba。 ______________________________________________________________ $ groupadd dba $ useradd oracle ______________________________________________________________ 3. 确保使用者 oracle 有初始目录 (home directory) ______________________________________________________________ $ mkdir /home/oracle $ mkdir /home/oracle/7.3.3.0.0 (Oracle 的版本) $ chown -R oracle.dba /home/oracle ______________________________________________________________ 2.2 从光碟安装 不幸地,SCO 光碟的 Oracle 安装程式不能运作。使用者会遇到一连串不同的问 题,从 core dump 到当机。所以我们要自己从光碟把档案抄到硬碟及解压: (确保光碟已挂 (mount) 到系统上)。 1. 以 Oracle 的身份签入 2. 到 /home/oracle/7.3.3.0.0 目录。 3. 从光碟抄出把所有安装档案 ______________________________________________________________ $ cp -a /mnt/cdrom/* . ______________________________________________________________ 4. 解压光碟上的所有 Oracle 档案。 ______________________________________________________________ $ find . -name *_ -exec ~/7.3.3.0.0/orainst/oiuncomp {} \; ______________________________________________________________ 2.3 安装後的工作 Root 的工作 把以下数行加到 /etc/profile 或加到每一个会使用 Oracle 的用家的 .profile 中。 ______________________________________________________________ # Oracle 专用 ORACLE_HOME=/home/oracle/7.3.3.0.0 ORACLE_SID=orcl ORACLE_TERM=vt100 export ORACLE_HOME ORACLE_SID ORACLE_TERM # 为 Oracle 修改路径 PATH="$PATH:$ORACLE_HOME/bin" ______________________________________________________________ 我们也需要修改 Oracle ulimit 提升工具的拥有人及许可 (permissions)。 ______________________________________________________________ $ chown root.root $ORACLE_HOME/bin/osh $ chmod u+s $ORACLE_HOME/bin/osh ______________________________________________________________ Oracle 的工件 修改 Oracle 档案的许可来确保操作正确。 ______________________________________________________________ $ chmod +x $ORACLE_HOME/bin/* $ chmod u+s $ORACLE_HOME/bin/oracle ______________________________________________________________ Oracle 的工具要求把讯息放在 $ORACLE_HOME/tool_name/mesg 目录。所以我们 要把及 msg_ship 目录下的msg 档案移到 mesg 目录下。 ______________________________________________________________ $ mv $ORACLE_HOME/plsql/mesg/mesg_ship/* $ORACLE_HOME/plsql/mesg/. $ mv $ORACLE_HOME/rdbms/mesg/mesg_ship/* $ORACLE_HOME/rdbms/mesg/. $ mv $ORACLE_HOME/svrmgr/mesg/mesg_ship/* $ORACLE_HOME/svrmgr/mesg/. ______________________________________________________________ 如果没有以下目录,要建立它们: ______________________________________________________________ $ mkdir $ORACLE_HOME/rdbms/log $ mkdir $ORACLE_HOME/rdbms/audit $ mkdir $ORACLE_HOME/network/log ______________________________________________________________ 可移除的东西 以下目录可以安全地移除: * $ORACLE_HOME/guicommon2/ * $ORACLE_HOME/ctx/ * $ORACLE_HOME/md/ * $ORACLE_HOME/mlx/ * $ORACLE_HOME/precomp/ * $ORACLE_HOME/slax/ 3. 建立一个资料库 Oracle 伺服器现已安装了,我们需要建立一个资料库来测试它。 如果你使用 Oracle 7.2.x 或之前版本,请阅读下面的疑难排解部分。 3.1 建立初始档 (Initialisation File) 把 $ORACLE_HOME/dbs/init.ora 抄到 $ORACLE_HOME/dbs/initorcl.ora: ______________________________________________________________ $ cd $ORACLE_HOME/dbs $ cp init.ora initorcl.ora ______________________________________________________________ 加上以下数行: ______________________________________________________________ db_name = orcl COMPATIBLE=7.3.3.0.0 ______________________________________________________________ 3.2 建立资料库安装命令稿 在 $ORACLE_HOME/dbs 目录下建立一个名为 makedb.sql 的命令稿档: ______________________________________________________________ connect internal startup nomount set echo on spool makedb.log create database orcl maxinstances 1 maxlogfiles 8 datafile '$ORACLE_HOME/dbs/orcl_syst_01.dbf' size 40M reuse logfile '$ORACLE_HOME/dbs/orcl_redo_01.dbf' size 1M reuse, '$ORACLE_HOME/dbs/orcl_redo_02.dbf' size 1M reuse, '$ORACLE_HOME/dbs/orcl_redo_03.dbf' size 1M reuse; @$ORACLE_HOME/rdbms/admin/catalog.sql create tablespace rollback datafile '$ORACLE_HOME/dbs/orcl_roll_01.dbf' size 8.5M reuse; create tablespace temp datafile '$ORACLE_HOME/dbs/orcl_temp_01.dbf' size 5M reuse temporary; create tablespace users datafile '$ORACLE_HOME/dbs/orcl_user_01.dbf' size 10M reuse; create rollback segment r1 tablespace rollback storage ( optimal 5M ); alter rollback segment r1 online; connect system/manager @$ORACLE_HOME/rdbms/admin/catdbsyn.sql connect internal @$ORACLE_HOME/rdbms/admin/catproc.sql connect system/manager @$ORACLE_HOME/sqlplus/admin/pupbld.sql spool off exit ______________________________________________________________ 3.3 执行资料库的安装安令稿 开始 svrmgrl 及执行命令稿∶ ______________________________________________________________ $ cd $ORACLE_HOME/dbs $ svrmgrl Oracle Server Manager Release 2.3.3.0.0 - Production Copyright (c) Oracle Corporation 1994, 1995. All rights reserved. Oracle7 Server Release 7.3.3.0.0 - Production Release PL/SQL Release 2.3.3.0.0 - Production SVRMGR> connect internal Connected. SVRMGR> startup nomount ORACLE instance started. Total System Global Area 4313312 bytes Fixed Size 41876 bytes Variable Size 4140364 bytes Database Buffers 122880 bytes Redo Buffers 8192 bytes SVRMGR> @makedb SVRMGR> exit Server Manager complete. ______________________________________________________________ 3.4 启动资料库 开始时,我们要亲手启动资料库(我们稍後会把这工件自动化)。要启动 Oracle 的资料库,我们要来内部连接 (connected internally) 了的情况下执行 startup 指令: ______________________________________________________________ $ svrmgrl Oracle Server Manager Release 2.3.3.0.0 - Production Copyright (c) Oracle Corporation 1994, 1995. All rights reserved. Oracle7 Server Release 7.3.3.0.0 - Production Release PL/SQL Release 2.3.3.0.0 - Production SVRMGR> connect internal Connected. SVRMGR> startup ORACLE instance started. Total System Global Area 4313316 bytes Fixed Size 41876 bytes Variable Size 4140368 bytes Database Buffers 122880 bytes Redo Buffers 8192 bytes Database mounted. Database opened. SVRMGR> exit Server Manager complete. ______________________________________________________________ 3.5 停止资料库 先旨声明,在未关闭一个 Oracle 资料库的情况下重新启动 Linux 很有可能会使 资料库损毁。 因此,在我们执行 Linux 的 shutdown 指令前最好先关闭资料库: ______________________________________________________________ $ svrmgrl Oracle Server Manager Release 2.3.3.0.0 - Production Copyright (c) Oracle Corporation 1994, 1995. All rights reserved. Oracle7 Server Release 7.3.3.0.0 - Production Release PL/SQL Release 2.3.3.0.0 - Production SVRMGR> connect internal Connected. SVRMGR> shutdown Database closed. Database dismounted. ORACLE instance shut down. SVRMGR> exit Server Manager complete. ______________________________________________________________ 3.6 建立内定用户 (Default User) 在建立资料库时,会自动产生两个特别的用户: ______________________________________________________________ Username Password SYSTEM MANAGER SYS change_on_install ______________________________________________________________ 这些用户通常是用来保存标准的资料字典 (data dictionary) 资料在资料库中。 尽快把密码修改是一个好主意。 可以这样做: ______________________________________________________________ sqlplus system/manager SQL*Plus: Release 3.3.3.0.0 - Production on Sat Feb 21 12:43:33 1998 Copyright (c) Oracle Corporation 1979, 1996. All rights reserved. Connected to: Oracle7 Server Release 7.3.3.0.0 - Production Release SQL> alter user system identified by ; User altered. SQL> alter user sys identified by ; User altered. SQL> exit; Disconnected from Oracle7 Server Release 7.3.3.0.0 - Production Release PL/SQL Release 2.3.3.0.0 - Production ______________________________________________________________ 用户 system/manager 就如 UNIX 中的 root,因此我们要建立另一个权力较少的 用户以防损失。(记著要先开启资料库才建立用户。) 连接到 SQL*Plus 及建立用户: ______________________________________________________________ $ sqlplus system/manager SQL*Plus: Release 3.3.3.0.0 - Production on Sat Feb 21 12:43:33 1998 Copyright (c) Oracle Corporation 1979, 1996. All rights reserved. Connected to: Oracle7 Server Release 7.3.3.0.0 - Production Release PL/SQL Release 2.3.3.0.0 - Production SQL> create user identified by 2 default tablespace users 3 temporary tablespace temp; User created. SQL> grant connect, resource to Grant succeeded. SQL> exit Disconnected from Oracle7 Server Release 7.3.3.0.0 - Production Release PL/SQL Release 2.3.3.0.0 - Production ______________________________________________________________ 系统中已有一个新用户,你可以用他来试用新系统。要签入 Oracle 资料库: ______________________________________________________________ $ sqlplus / ______________________________________________________________ 如果这在没有错误讯息的情况下完成,你已有一个运作中的 Oracle 资料库。如 果你只会从这部电脑连接到这资料库,而不会从其他地方,你可休息了! 不过,如果你像大部分人般想设定网络软件使你可以从其他电脑连接,请继续读 下去。 4. 在伺服器上设定 SQL*Net 所有这些档案都会用於设定 Oracle 的网络软件(SQL*Net,和 Oracle8 的 Net8 差不多)。这些档案应该都建立在伺服器中的 $ORACLE_HOME/network/admin 目录。 4.1 tnsnames.ora TNSNAMES.ORA 档设定所有这电脑提供的服务。现在我们描述所有挂上了伺服器的 资料库。对伺服器上所有资料库你要加上类似以下的一段: ______________________________________________________________ orcl.world = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (COMMUNITY = tcp.world) (PROTOCOL = TCP) (Host = ) (Port = 1521) ) (ADDRESS = (COMMUNITY = tcp.world) (PROTOCOL = TCP) (Host = ) (Port = 1526) ) ) (CONNECT_DATA = (SID = ORCL) ) ) ______________________________________________________________ 4.2 listener.ora listener.ora 档描述所有其他电脑可得到的服务及伺服器的监听程式 (listener) 所需的所有设定。 它有一段包括监听程式名称、监听程式地址、监听程式提供服务的资料库及参数 设定 (listener name, listener address, databases served by the listener and configuration parameters)。 这里有一个例子: ______________________________________________________________ # 监听程式名称及所收听的地址 LISTENER = ( ADDRESS_LIST = (ADDRESS = (PROTOCOL=tcp) (HOST=) (PORT=1521) (COMMUNITY=UK_SUP_TCPIP) ) (ADDRESS = (PROTOCOL=ipc) (KEY=700) (COMMUNITY=UK_SUP_TCPIP) ) ) # 列出监听程式提供的服务 SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SID_NAME=orcl) (ORACLE_HOME=/home/oracle/7.3.3.0.0) ) ) # 开始参数设定 TRACE_LEVEL_LISTENER=OFF TRACE_FILE_LISTENER = "listener" LOG_FILE_LISTENER = "listener" CONNECT_TIMEOUT_LISTENER = 10 STOP_LISTENER = YES DBA_GROUP = dba ______________________________________________________________ 4.3 sqlnet.ora sqlnet.ora 档包括对网络上一个特定节点 (node) 的设定。这些资料和资料库的 数目及监听程式的数目无关。这个档案中最重要的东西是 Dead Connection Timeout 变数的设定。 Dead connection timeout 检查每一个接到该资料库的行程及确保用户端仍有反 应。如果那用户(类型不拘)并无反应,对应的 Oracle 伺服器影子行程 (shadow process) 便会被杀。 如果你有很多用户存取那资料库,这点非常有用。尤其是当你仍在程式开发阶段 ,用户多数不能正确地结□的时候。 以下是我的 sqlnet.ora 档,供各读者参考: ______________________________________________________________ TRACE_LEVEL_CLIENT = OFF sqlnet.expire_time = 30 # 两次检查客户相差的秒数 names.default_domain = world name.default_zone = world ______________________________________________________________ 4.4 开始及结□监听程式 现在有关监听程式及 SQL*Net 的设定已经完成,我们可以试用网络软件来驳到资 料库。(之前我们只是直接连接到资料库,现在则是在模拟使用远程 (remote) 用户。) 使用以上的设定来启动监听程式: ______________________________________________________________ $ lsnrctl LSNRCTL for SCO System V/386: Version 2.3.3.0.0 - Production on 23-FEB-98 20:38 :25 Copyright (c) Oracle Corporation 1994. All rights reserved. Welcome to LSNRCTL, type "help" for information. LSNRCTL> start Starting /home/oracle/7.3.3.0.0/bin/tnslsnr: please wait... TNSLSNR for SCO System V/386: Version 2.3.3.0.0 - Production System parameter file is /home/oracle/7.3.3.0.0/network/admin/listener.ora Log messages written to /home/oracle/7.3.3.0.0/network/log/listener.log Listening on: (ADDRESS=(PROTOCOL=tcp)(DEV=6)(HOST=192.168.1.1)(PORT=1521)) Listening on: (ADDRESS=(PROTOCOL=ipc)(DEV=10)(KEY=700)) Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=magic.com)(PORT=1521)(COMMUNITY=UK_S UP_TCPIP)) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for SCO System V/386: Version 2.3.3.0.0 - Pro duction Start Date 23-FEB-98 20:38:50 Uptime 0 days 0 hr. 0 min. 0 sec Trace Level off Security OFF SNMP ON Listener Parameter File /home/oracle/7.3.3.0.0/network/admin/listener.ora Listener Log File /home/oracle/7.3.3.0.0/network/log/listener.log Services Summary... orcl has 1 service handler(s) The command completed successfully LSNRCTL> exit ______________________________________________________________ 要停止监听程式: ______________________________________________________________ $ lsnrctl LSNRCTL for SCO System V/386: Version 2.3.3.0.0 - Production on 23-FEB-98 20:43 :20 Copyright (c) Oracle Corporation 1994. All rights reserved. Welcome to LSNRCTL, type "help" for information. LSNRCTL> stop Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=magic.com)(PORT=1521)(COMMUNITY=UK_S UP_TCPIP)) The command completed successfully LSNRCTL> exit ______________________________________________________________ 如果你的 DNS 并不传回指定的主机的 IP 地址,启动及结□监听程式会花一点时 间(依据 DNS 2-3 的逾时变数 (timeout variable),大致在 2-3 分钟之间)。 如果真的发生这情况,请耐心等待,不必担心。 5. 用户的设定 5.1 视窗用户 在 PC 上使用较新版本的 Oracle Client Software 设定 SQL*Net 十分简单。最 佳(也最方便)得到一个运作完全正常的用户是使用 Oracle 提供的 SQL*Net Easy Configuration 工具。 这工具有一个精灵 (wizard) 的介面,可带领你设定 tnsnames.ora 及 sqlnet.ora 两个档案。 选择 "Add Database Alias" 及在被问及时打入代号名称。这代号是你用以指定 资料库的名称,这应该和资料库名称相同(这里是 orcl)。 在通讯协定 (protocol) 中选择 TCP/IP,在被问及时回答主机名称 (machine hosting the database) 及资料库名称 (instance name)。 就是这样了。 不过,即使你没有 SQL*Net Easy Configuration 工具也不用担心。你只需在 $ORACLE_HOME/network/admin 目录中建立和在伺服器中一模一样的 tnsnames.ora 和 sqlnet.ora 档。这样会使你得到相同的别名(这是一个好主意 )。 5.2 Unix 用户 UNIX 用户和视窗用户分别不大。如果你有 Oracle 的 Network Manager,做法和 以上差不多。没有的话,再说一次,只需使用和伺服器 $ORACLE_HOME/network/admin 目录中相同的设定档。 6. 自动启动及停止 6.1 dbstart 及 dbstop Oracle 资料库的自动启动及停止可籍 Oracle 提供的 dbstart 及 dbshut 档达 成 (在 7.3.3.0.0 中)。这些档案又耍依靠 /etc/oratab 存在才能使用(虽然 更改 dbshut 和 dbstart 档可使解除这限制。) /etc/oratab 档格式如下: ______________________________________________________________ SID:ORACLE_HOME:AUTO ______________________________________________________________ 例如 ______________________________________________________________ orcl:/home/oracle/7.3.3.0.0:Y leaveup:/home/oracle/7.3.2.1.0:N ______________________________________________________________ 6.2 init.d 及 rc.d 要在开机关机时自动启动和结□资料库的话,你需要修改 Linux 的启动命令稿。 这并不困难,不过,我需要指出这些改动因应不同的 Linux 发行版本 (slackware, debian, redhat 等)而有所不同。我这些例子适用於 Redhat 5.0。要为你所用的 Linux 作出修改,请先参考你手头上的 Linux 文件。(虽然 这实际上应该适用於所有 Sys V UNIX。) 首先,我们要建立会执行 /etc/rc.d/init.d 目录中 dbshut 及 dbstart 的命令 稿。把以下档案命名为 /etc/rc.d/init.d/oracle: ______________________________________________________________ #!/bin/sh # # /etc/rc.d/init.d/oracle # 解说∶启动及停止 Oracle 资料库和监听程式 # 检查如何执行命令稿 case "$1" in start) echo -n "Starting Oracle Databases: " echo "----------------------------------------------------" >> /var/log /oracle date +"! %T %a %D : Starting Oracle Databases as part of system up." >> /var/log/oracle echo "----------------------------------------------------" >> /var/log /oracle su - oracle -c dbstart >> /var/log/oracle echo "Done." echo -n "Starting Oracle Listeners: " su - oracle -c "lsnrctl start" >> /var/log/oracle echo "Done." echo "" echo "----------------------------------------------------" >> /var/log /oracle date +"! %T %a %D : Finished." >> /var/log/oracle echo "----------------------------------------------------" >> /var/log /oracle touch /var/lock/subsys/oracle ;; stop) echo -n "Shutting Down Oracle Listeners: " echo "----------------------------------------------------" >> /var/log /oracle date +"! %T %a %D : Shutting Down Oracle Databases as part of system do wn." >> /var/log/oracle echo "----------------------------------------------------" >> /var/log /oracle su - oracle -c "lsnrctl stop" >> /var/log/oracle echo "Done." rm -f /var/lock/subsys/oracle echo -n "Shutting Down Oracle Databases: " su - oracle -c dbshut >> /var/log/oracle echo "Done." echo "" echo "----------------------------------------------------" >> /var/log /oracle date +"! %T %a %D : Finished." >> /var/log/oracle echo "----------------------------------------------------" >> /var/log /oracle ;; restart) echo -n "Restarting Oracle Databases: " echo "----------------------------------------------------" >> /var/log /oracle date +"! %T %a %D : Restarting Oracle Databases as part of system up." >> /var/log/oracle echo "----------------------------------------------------" >> /var/log /oracle su - oracle -c dbstop >> /var/log/oracle su - oracle -c dbstart >> /var/log/oracle echo "Done." echo -n "Restarting Oracle Listeners: " su - oracle -c "lsnrctl stop" >> /var/log/oracle su - oracle -c "lsnrctl start" >> /var/log/oracle echo "Done." echo "" echo "----------------------------------------------------" >> /var/log /oracle date +"! %T %a %D : Finished." >> /var/log/oracle echo "----------------------------------------------------" >> /var/log /oracle touch /var/lock/subsys/oracle ;; *) echo "Usage: oracle {start|stop|restart}" exit 1 esac ______________________________________________________________ 不要吝啬於检查这个档案到底有没有真的正确地启动和停止系统中的资料库。请 检查记录档(log file),看看有没有错误讯息。 弄妥这命令稿後,我们要在正确的执行等级目录 (runlevel directories) /etc/rc.d/rcX.d 中建立及删除符号连结 (symbolic links)。 以下指令确保在执行等级 2, 3 及 4 下会叫出资料库∶ ______________________________________________________________ $ ln -s ../init.d/oracle /etc/rc.d/rc2.d/S99oracle $ ln -s ../init.d/oracle /etc/rc.d/rc3.d/S99oracle $ ln -s ../init.d/oracle /etc/rc.d/rc4.d/S99oracle ______________________________________________________________ 要在重新启动时停止资料库,我们需要以下连结∶ ______________________________________________________________ $ ln -s ../init.d/oracle /etc/rc.d/rc0.d/K01oracle # 停止 $ ln -s ../init.d/oracle /etc/rc.d/rc6.d/K01oracle # 重新启动 ______________________________________________________________ 7. 其他事宜 7.1 Intelligent Agent 如果你需要 Oracle Intelligent Agent,我发现你不需修改任何设定便能执行它 。要启动 IA 的话∶ ______________________________________________________________ $ lsnrctl dbsnmp_start ______________________________________________________________ 要停止 IA∶ ______________________________________________________________ $ lsnrctl dbsnmp_stop ______________________________________________________________ 不会出现任何讯息说明启动或停止 intelligent agent 是否成功。不过,在用户 端它有对 Enterprise Manager 作出回应,所以我假设它运作正常。 8. 疑难排解 这里有一些关疑难排解的提示。 8.1 我不能在 Oracle 7.2.x 中建立资料库。 Oracle 7.2.x 产品错误地假设你想设定平行伺服器 (parallel server)。内置的 init.ora 档中有以下一句∶ ______________________________________________________________ # define parallel server (multi-instance) parameters ifile = ora_system:initps.ora ______________________________________________________________ 要解决这问题只需把它变为注解∶ ______________________________________________________________ # define parallel server (multi-instance) parameters #ifile = ora_system:initps.ora ______________________________________________________________ 8.2 7.3.4.x 的 svrmgrl 产生 segmentation fault。 有不少人报告过这问题给我。Gerald Weber gerald_weber@master.co.at 解决了 它∶ ______________________________________________________________ Hi Paul, 首先非常感谢你的帮助,不过,你所想到的问题全都和我所遇到的无关。 问题出在於 iBCS 模拟器。 似乎 Oracle 执行了一个目前版本的 iBCS 并不支援的系统设定呼叫 (sysconf-calls)。 请看以下的 trace∶ <7>[22]615 sysconf(34) <7>iBCS2 unsupported sysconf call 34 <7>[22]615 sysconf error return linux=-22 -> ibcs=22 <7>[24]615 sysconf(34) <7>iBCS2 unsupported sysconf call 34 <7>[24]615 sysconf error return linux=-22 -> ibcs=22 解决方法∶修正 iBCS 源程式码。使用以下的修正档∶ --- sysconf.c Sun Apr 19 19:19:15 1998 +++ sysconf.c.ori Sun Apr 19 19:28:45 1998 @@ -60,7 +60,6 @@ #define _SC_JOB_CONTROL 5 #define _SC_SAVED_IDS 6 #define _SC_VERSION 7 -#define _SC_HACK_FOR_ORACLE 34 #define _SC_PAGESIZE 11 @@ -97,11 +96,6 @@ case _SC_SAVED_IDS: { return (1); } - - case _SC_HACK_FOR_ORACLE: { - return (1); - } - case _SC_PAGESIZE: { return PAGE_SIZE; ______________________________________________________________ 9. 荣誉 这文件根据 Bob Withers, bwit@pobox.com 的一篇文件写成。其他资料是来自 Georg Rehreld, rehfeld@wmd.de 和 David Mansfield, david@claremont.com 所写的文件。 其他的校对工作由 Bob Withers, Mark Watling, mwatling@mjw-ltd.demon.co.uk, Peter Sodhi, petersodhi@unn.unisys.com and Greg Hankins, greg.hankins@cc.gatech.edu 完成。 我要多谢所有参与这篇文件的人的支持及所作出的研究。特别要多谢 Bob Withers 和 Mark Watling 的附加意见及作出的帮忙。 References 1. http://www.oracle.com/html/linux.html 2. http://www.news.com/News/Item/0,4,24436,00.html 3. http://www.zdnet.com/pcweek/news/0720/20morac.html