第二篇来了!!其实昨天第一篇文章中已经把安装的过程详细的写完了,只剩下自启动的设置了,这个也很简单,就留在这里和监听一块设置了。接下来,就是使用oralce之前的要做的工作:建立监听和自己的数据库。

下面接着记录我建立自己的数据库的过程,我是使用图形界面来建库的,用命令的话,我这个水平还不够,慢慢学吧。回到正题,我使用dbca命令来调用oracle程序的图形界面建立数据库,当然也是使用oracle用户的身份来操作。

[oracle@oraclehostadmin]$ dbca

会出现如下图所示的界面:

Rad Hat Enterprise Linux 5.5上安装oracle 11g R2 (2)_建库

这是欢迎界面,单击下一步:

Rad Hat Enterprise Linux 5.5上安装oracle 11g R2 (2)_listener_02

选择创建数据库Create a Datebase,下一步:

Rad Hat Enterprise Linux 5.5上安装oracle 11g R2 (2)_lsnrctl_03

下一步,如无特殊要求,选择第一项即可

Rad Hat Enterprise Linux 5.5上安装oracle 11g R2 (2)_建库_04

设置数据库全局名和SID,两项参数设置成一致,应该还记得上篇中所描述的,在安装之前给oracle设置环境变量,其中有一条为export ORACLE_SID=dmb2 ,此处设置应该与这个值相同,设置好之后下一步:

Rad Hat Enterprise Linux 5.5上安装oracle 11g R2 (2)_linux_05

这里可以设置告警通知和数据库备份(从安全和维护的角度讲,应该做设置),我没有什么要求,暂时先不设置,默认即可,下一步:

Rad Hat Enterprise Linux 5.5上安装oracle 11g R2 (2)_oracle_06

这步设置账户密码,为了方便(但不安全),选择所有账户使用同一个密码,即上图,选择第二项“use the same administrative password for all accounts”,设置好之后,下一步:

Rad Hat Enterprise Linux 5.5上安装oracle 11g R2 (2)_oracle_07

选择数据库文件的存储类型和路径,存储的类型选裸设备要比文件系统更可靠,更安全,但是要麻烦、繁琐、复杂的多,之前安装操作系统时要把这些都考虑到,提前建好裸设备所需的分区和逻辑卷。先做简单的吧,就默认选取filesystem,存储路径也选择默认的使用模版,下一步

Rad Hat Enterprise Linux 5.5上安装oracle 11g R2 (2)_建库_08

一路默认,直到这一步,上图所示,是设置一些具体的参数,如内存、文件大小、数据库字符集等参数。设置数据库字符集,由于我之后还有另外的实验,需要设置字符集为ZHS16GBK。这里应该根据需要选择。当然,像之前的默认几步,如设置RecoveryArea ,都可以根据自己对数据库性能和安全性要求进行设置。其他参数没有特殊要求,就选取默认,下一步。后面如果对存储文件等无特别的要求和设置,这里就可以finish了。单击finish,会弹出一个配置的确认表,如无问题,点击OK。接下来就是创建数据的过程了,时间会有点长。下面是安装进度界面

Rad Hat Enterprise Linux 5.5上安装oracle 11g R2 (2)_lsnrctl_09

静候安装完成吧。

数据库建完之后,就该为之建立监听了。这项工作同样可以使用图形界面操作,或者直接修改监听文件,监听文件的路径是$ORACLE_HOME/network/admin/listener.ora,如果没有可以手动创建它。下面是我的主机上的oracle监听文件(红色部分是需要关注的地方),可做参考:

[oracle@oraclehost admin]$ cat listener.ora

# listener.ora Network Configuration File:/u01/app/oracle/network/admin/listener.ora

# Generated by Oracle configuration tools.

SID_LIST_LISTENER=

 (SID_LIST=

     (SID_DESC=

        (GLOBAL_DBNAME=dmb2)

        (SID_NAME=dmb2)

        (ORACLE_HOME=/u01/app/oracle)

      )

    )

LISTENER =

(DESCRIPTION =

  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.13)(PORT = 1521))

 )

ADR_BASE_LISTENER = /u01/app

[oracle@oraclehost admin]$

这是修改文件的方法,下面介绍使用图形界面的办法,通过netca的命令调用oralce的图形界面(我记得,10g中好像是netmgr命令,尝试一下好像也可以):

[oracle@oraclehost database]$ netca

接着会出现下面的界面,我们去选取监听配置“listener configuration”,下一步:

Rad Hat Enterprise Linux 5.5上安装oracle 11g R2 (2)_linux_10

选择添加,原本我还没有创建过监听,所以如下图也只能选添加,下一步

Rad Hat Enterprise Linux 5.5上安装oracle 11g R2 (2)_建库_11

这一步给监听命名,可以默认,如下图,单击下一步:

Rad Hat Enterprise Linux 5.5上安装oracle 11g R2 (2)_建库_12

选择通讯协议,我们这里选择TCP/IP,如下图:

Rad Hat Enterprise Linux 5.5上安装oracle 11g R2 (2)_listener_13

下一步就是选择监听端口,选择默认的1521,如果其他程序占用可以改成其他端口

Rad Hat Enterprise Linux 5.5上安装oracle 11g R2 (2)_建库_14

再下一步询问是否继续添加监听,我选否,监听配置完毕。

Rad Hat Enterprise Linux 5.5上安装oracle 11g R2 (2)_linux_15

到此,监听也建立完毕了。两种方法,根据个人习惯选择吧。个人觉得,还是直接修改文件更明了、直接。我比较倾向这个办法。下面该要启动数据库监听了。下面记录我启动监听的过程。监听的命令是lsnrctl,使用方法如下:

usage:lsnrctl {start/status/stop}

或者直接输入lsnrctl,会进入监听对话下,然后输入start/status/stop等命令进行操作,退出用exit。

查看监听状态:

[root@oraclehost ~]# su - oracle

[oracle@oraclehost ~]$ lsnrctl status


LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 18-JUL-2013 17:18:12


Copyright (c) 1991, 2009, Oracle.  All rights reserved.


Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.13)(PORT=1521)))

TNS-12541: TNS:no listener

TNS-12560: TNS:protocol adapter error

 TNS-00511: No listener

  Linux Error: 111: Connection refused

[oracle@oraclehost ~]$

发现出现错误,监听失败。那么我就查看错误出在那里,错误提示说是没有监听,那就是说监听没有启动,那就启动它:

[oracle@oraclehost ~]$ lsnrctl start

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 18-JUL-2013 17:34:23

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Starting /u01/app/oracle/bin/tnslsnr: please wait...


TNSLSNR for Linux: Version 11.2.0.1.0 - Production

System parameter file is /u01/app/oracle/network/admin/listener.ora

Log messages written to /u01/app/diag/tnslsnr/oraclehost/listener/alert/log.xml

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.13)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.13)(PORT=1521)))

STATUS of the LISTENER

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

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production

Start Date                18-JUL-2013 17:34:23

Uptime                    0 days 0 hr. 0 min. 3 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /u01/app/oracle/network/admin/listener.ora

Listener Log File         /u01/app/diag/tnslsnr/oraclehost/listener/alert/log.xml

Listening Endpoints Summary...

 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.13)(PORT=1521)))

Services Summary...

Service "dmb2" has 1 instance(s).

 Instance "dmb2", status UNKNOWN, has 1 handler(s) for this service...

The command completed successfully

[oracle@oraclehost ~]$

这下再去查看下监听的状态,我换了另外的方式:

[oracle@oraclehost ~]$ lsnrctl


LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 18-JUL-2013 17:35:38


Copyright (c) 1991, 2009, Oracle.  All rights reserved.


Welcome to LSNRCTL, type "help" for information.


LSNRCTL> status

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.13)(PORT=1521)))

STATUS of the LISTENER

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

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production

Start Date                18-JUL-2013 17:34:23

Uptime                    0 days 0 hr. 1 min. 28 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /u01/app/oracle/network/admin/listener.ora

Listener Log File         /u01/app/diag/tnslsnr/oraclehost/listener/alert/log.xml

Listening Endpoints Summary...

 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.13)(PORT=1521)))

Services Summary...

Service "dmb2" has 1 instance(s).

 Instance "dmb2", status UNKNOWN, has 1 handler(s) for this service...

The command completed successfully

LSNRCTL>

LSNRCTL>

LSNRCTL> exit

[oracle@oraclehost ~]$

我们也可以通过查看进程看监听进程是否已经起来:

[oracle@oraclehost ~]$ ps -ef | grep tnslsnr

oracle    4997     1  0 17:34 ?        00:00:00 /u01/app/oracle/bin/tnslsnr LISTENER -inherit

oracle    5017  4707  0 17:39 pts/2    00:00:00 grep tnslsnr

[oracle@oraclehost ~]$

我们知道了如何启动和停止监听,在这里说一下如何启动和停止oracle数据库。我们可以使用oracle自带的脚本dbstart和dbshut,也可以使用sqlplus这个工具。如何使用oracle自带的脚本呢?用oracle用户登录,这两个脚本在任何路径下都是可以执行的,因为我们在安装时,就已经把环境变量设置好了,脚本的位置是在$ORACLE_HOME/bin目录下。试一下吧!

[root@oraclehost ~]# su - oracle

[oracle@oraclehost ~]$ dbstart

ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener

Usage: /u01/app/oracle/bin/dbstart ORACLE_HOME

Processing Database instance "dmb2": log file /u01/app/oracle/startup.log

[oracle@oraclehost ~]$

提示有错,无法启动监听,这个是没问题的,因为oracle的这个脚本里,对监听的路径ORACLE_HOME_LISTNER是没有设置的,上边已经讲了我们该如何去启动监听,先不去管它。来查看一下进程看数据库是否已经启动了:

[oracle@oraclehost ~]$ ps -ef | grep ora

root      3636  3607  0 18:58 ?        00:00:00 hald-addon-storage: polling /dev/hdc

avahi     3940     1  0 19:01 ?        00:00:00 avahi-daemon: running [oraclehost.local]

oracle    4064     1  0 19:01 ?        00:00:00 /u01/app/oracle/bin/tnslsnr LISTENER -inherit

root      4545  4515  0 19:04 pts/1    00:00:00 su - oracle

oracle    4546  4545  0 19:04 pts/1    00:00:00 -bash

oracle    4809     1  0 19:05 ?        00:00:00 ora_pmon_dmb2

oracle    4811     1  0 19:05 ?        00:00:00 ora_vktm_dmb2

oracle    4815     1  0 19:05 ?        00:00:00 ora_gen0_dmb2

oracle    4817     1  0 19:05 ?        00:00:00 ora_diag_dmb2

oracle    4819     1  0 19:05 ?        00:00:00 ora_dbrm_dmb2

oracle    4821     1  0 19:05 ?        00:00:00 ora_psp0_dmb2

oracle    4823     1  0 19:05 ?        00:00:00 ora_dia0_dmb2

oracle    4825     1  0 19:05 ?        00:00:00 ora_mman_dmb2

oracle    4827     1  0 19:05 ?        00:00:00 ora_dbw0_dmb2

oracle    4829     1  0 19:05 ?        00:00:00 ora_lgwr_dmb2

oracle    4831     1  0 19:05 ?        00:00:00 ora_ckpt_dmb2

oracle    4833     1  0 19:05 ?        00:00:00 ora_smon_dmb2

oracle    4835     1  0 19:05 ?        00:00:00 ora_reco_dmb2

oracle    4837     1  0 19:05 ?        00:00:00 ora_mmon_dmb2

oracle    4839     1  0 19:05 ?        00:00:00 ora_mmnl_dmb2

oracle    4841     1  0 19:05 ?        00:00:00 ora_d000_dmb2

oracle    4843     1  0 19:05 ?        00:00:00 ora_s000_dmb2

oracle    4882     1  0 19:05 ?        00:00:00 ora_qmnc_dmb2

oracle    4958     1  0 19:05 ?        00:00:00 ora_cjq0_dmb2

oracle    4988     1  0 19:05 ?        00:00:00 ora_q000_dmb2

oracle    4990     1  0 19:05 ?        00:00:00 ora_q001_dmb2

oracle    5008     1  0 19:10 ?        00:00:00 ora_smco_dmb2

oracle    5010     1  0 19:10 ?        00:00:00 ora_w000_dmb2

oracle    5013  4546  3 19:11 pts/1    00:00:00 ps -ef

oracle    5014  4546  1 19:11 pts/1    00:00:00 grep ora

[oracle@oraclehost ~]$

我们看到,数据库已经成功起来了。关闭数据库用dbshut即可。我们也可以修改一下dbstart,找到监听路径设置并改成如下内容:

ORACLE_HOME_LISTNER=$ORACLE_HOME    //*把$ORACLE_HOME换成绝对路径*

例如,我的主机上$ORACLE_HOME是/u01/app/oracle,就应该修改成下面这样:

ORACLE_HOME_LISTNER=/u01/app/oracle

这样就实现执行dbstart一条命令就把数据库和监听一起都启动起来。

还有一种启动数据库的方法是使用sqlplus,命令格式如下:

startup [nomount|mount|open|force]

shutdown [normal|transactional|immediate|abort]

具体的参数解说这里就不赘述了,有兴趣的朋友可以网上搜一下,有很多讲解。下面试一下:

[oracle@oraclehost bin]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on Thu Jul 18 19:30:39 2013

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

SQL> conn / as sysdba

Connected.

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area  422670336 bytes

Fixed Size                  1336960 bytes

Variable Size             268437888 bytes

Database Buffers          146800640 bytes

Redo Buffers                6094848 bytes

Database mounted.

Database opened.

SQL>

SQL> exit

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

[oracle@oraclehost bin]$ ps -ef |grep ora

root      3636  3607  0 18:58 ?        00:00:00 hald-addon-storage: polling /dev/hdc

avahi     3940     1  0 19:01 ?        00:00:00 avahi-daemon: running [oraclehost.local]

root      4545  4515  0 19:04 pts/1    00:00:00 su - oracle

oracle    4546  4545  0 19:04 pts/1    00:00:00 -bash

oracle    5165     1  0 19:16 ?        00:00:00 /u01/app/oracle/bin/tnslsnr LISTENER -inherit

oracle    5537     1  0 19:31 ?        00:00:00 ora_pmon_dmb2

oracle    5539     1  0 19:31 ?        00:00:00 ora_vktm_dmb2

oracle    5543     1  0 19:31 ?        00:00:00 ora_gen0_dmb2

oracle    5545     1  0 19:31 ?        00:00:00 ora_diag_dmb2

oracle    5547     1  0 19:31 ?        00:00:00 ora_dbrm_dmb2

oracle    5549     1  0 19:31 ?        00:00:00 ora_psp0_dmb2

oracle    5551     1  0 19:31 ?        00:00:00 ora_dia0_dmb2

oracle    5553     1  1 19:31 ?        00:00:00 ora_mman_dmb2

oracle    5555     1  0 19:31 ?        00:00:00 ora_dbw0_dmb2

oracle    5557     1  0 19:31 ?        00:00:00 ora_lgwr_dmb2

oracle    5559     1  0 19:31 ?        00:00:00 ora_ckpt_dmb2

oracle    5561     1  0 19:31 ?        00:00:00 ora_smon_dmb2

oracle    5563     1  0 19:31 ?        00:00:00 ora_reco_dmb2

oracle    5565     1  1 19:31 ?        00:00:00 ora_mmon_dmb2

oracle    5567     1  0 19:31 ?        00:00:00 ora_mmnl_dmb2

oracle    5569     1  0 19:32 ?        00:00:00 ora_d000_dmb2

oracle    5571     1  0 19:32 ?        00:00:00 ora_s000_dmb2

oracle    5610     1  0 19:32 ?        00:00:00 ora_qmnc_dmb2

oracle    5622     1  1 19:32 ?        00:00:00 ora_cjq0_dmb2

oracle    5624     1  1 19:32 ?        00:00:00 ora_q000_dmb2

oracle    5626     1  0 19:32 ?        00:00:00 ora_q001_dmb2

oracle    5627  4546  0 19:32 pts/1    00:00:00 ps -ef

oracle    5628  4546  0 19:32 pts/1    00:00:00 grep ora

[oracle@oraclehost bin]$

这样启动数据库和使用dbstart脚本效果是一样的,当然使用sqlplus也是要使用lsnrctl启动监听的。sqlplus暂时说到这吧,还有很多知识,我也只是知道一星半点。慢慢学吧,我相信毛爷爷的那句话:星星之火是可以燎原滴!

知道了如何去启动数据库和监听,那么我们接下来就看看如何设置数据库的自启动吧。方法很多,比如编写脚本把oracle作为服务加到系统里设置自启动等等,这里就不说了。说说最简单的方法,就是使用oracle自带的启动脚本dbstart。看一看如何使用这个办法实现自启动。

首先,要想使用dbstart,必须要修改/etc/oratab这个文件,我们看一下这个文件:

[oracle@oraclehost bin]$ cat /etc/oratab

# This file is used by ORACLE utilities.  It is created by root.sh

# and updated by the Database Configuration Assistant when creating

# a database.

# A colon, ':', is used as the field terminator.  A new line terminates

# the entry.  Lines beginning with a pound sign, '#', are comments.

# Entries are of the form:

#   $ORACLE_SID:$ORACLE_HOME:<N|Y>:

# The first and second fields are the system identifier and home

# directory of the database respectively.  The third filed indicates

# to the dbstart utility that the database should , "Y", or should not,

# "N", be brought up at system boot time.

# Multiple entries with the same $ORACLE_SID are not allowed.

dmb2:/u01/app/oracle:Y

前边一堆注释,是在解释这个文件如何去用,像我的这个,把最后一行加粗部分的值改成你的SID和Y就行了。

然后,我们要把dbstart添加到rc.local下面,这个得使用root账户修改,oracle用户是没有权限修改的。添加如下两行命令(粗体红色)即可:

[root@oraclehost bin]# cat /etc/rc.local

#!/bin/sh

# This script will be executed *after* all the other init scripts.

# You can put your own initialization stuff in here if you don't

# want to do the full Sys V style init stuff.


touch /var/lock/subsys/local

su - oracle -c 'lsnrctl start'

su - oracle -c 'dbstart'

当然,如果如前面所说的那样,你自行修改过dbstart脚本中的关于ORACLE_HOME_LISTNER的设置,那么在/etc/rc.local中就不要添加su - oracle -c 'lsnrctl start'了。

设置完/etc/rc.local,我们就可以重启一下系统,测试一下,是否真的能够随系统而自动起来。

这个方法我已经试过了,是没有问题的。

讲到这里,这篇文章也就完成了,建库、建立监听和设置自启动都描述的很清楚了(自我感觉良好,脸皮比较厚)。如果我有荣幸,您能读到这篇拙作,有什么错误地方和疑问,请您留言,相互讨论,我们共同进步!