当前位置:Linux教程 - Oracle - Oracle Database HOWTO

Oracle Database HOWTO



        
    LinuxByte注:本站有Oracle for Linux下载

    作者:Paul Haigh, [email protected]
    译者:曾达康, [email protected]
    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 的网页,这应该会在一九九九年上半年推出。

    参考资料:

    http://www.oracle.com/html/linux.html
    http://www.news.com/News/Item/0,4,24436,00.html
    http://www.zdnet.com/pcweek/news/0720/20morac.html

    2. 安装 Oracle 软件
    2.1 伺服器的准备工夫
    建立 Oracle 用户
    如大家所料,我们需要一个用户来保存 Oracle 的资料库。因为我们不想重新链结 Oracle 核心(容後再谈),我们要接受 Oracle 内定的使用者及群组名称,即使用者为 ORACLE,而群组为 DBA。


    以 root 的身分签入

    建立使用者 oracle 及群组 dba。

    --------------------------------------------------------------------------------

    $ groupadd dba
    $ useradd oracle


    --------------------------------------------------------------------------------

    确保使用者 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) 到系统上)。

    以 Oracle 的身份签入
    到 /home/oracle/7.3.3.0.0 目录。
    从光碟抄出把所有安装档案

    --------------------------------------------------------------------------------

    $ cp -a /mnt/cdrom/* .


    --------------------------------------------------------------------------------

    解压光碟上的所有 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_SUP_TCPIP))
    STATUS of the LISTENER
    ------------------------
    Alias LISTENER
    Version TNSLSNR for SCO System V/386: Version 2.3.3.0.0 - Production
    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_SUP_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 down.\" >> /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 [email protected] 解决了它∶


    -----------------------------------------------------------------
    发布人:netbull 来自:非常Linux