数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

ORACLE启动相关问题


发布日期:2022年05月28日
 
ORACLE启动相关问题

在安装ORACLE g完成后发现不少问题现整理如下

首先用oracle用户登陆

sqlplus sys as sysdba

提示输入密码(安装oracle时第一步设置的密码)

启动数据库

SQL>startup

ORACLE instance started

Total System Global Area bytes

Fixed Size bytes

Variable Size bytes

Database Buffers bytes

Redo Buffers bytes

Database mounted

Database opened

若之前已启动系统将提示ORA: cannot start alreadyrunning ORACLE shut it down first

可用如下命令关闭数据库

·shutdown normal正常方式关闭数据库

·shutdown immediate 立即方式关闭数据库

·shutdown abort直接关闭数据库正在访问数据库的会话会被突然终止

SQL> conn scott/tiger

Connected

若scott用户在安装oracle时没被解锁可通过以下方法解锁scott用户

首先以system帐户登陆sqlplus密码为安装时设置的

然后 alter user scott account unlock;

提示重输密码OK了

SQL> select * from tab;

TNAME TABTYPE CLUSTERID

DEPT TABLE

EMP TABLE

BONUS TABLE

SALGRADE TABLE

哈哈又看到久违的这几张表了说明oracle服务端已正常启动

以下测试通过远程登陆判断监听是否正常

首先执行在linux下用oracle用户登陆输入命令开启监听lsnrctl start

如果无法正常启动监听屏幕应该会有一些打印信息不过我没碰到所以暂时就先不讨论异常情况啦!

oracle我是在vm虚拟机上装的(ps:机子配置太低一路上那个卡啊还好我意志坚强再卡都装起来了^_^)把虚拟机ip设为(用setup命令里面有个关于网络配置功能)我的xp系统ip为

默认网关都设为 可通过ping命令判断局域网是否能通一ping就通了先恭喜自己一下!

在保证了oracle的服务和监听都能起来两台机也能ping通的前提下接着在xp安装oracle客户端我是装i的选择好安装目录其他的按默认就行了装好后在安装目录ora\network\admin下用记事本编辑tnsnameora文件我的配置如下

ORCL =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME = orcl)

)

)

#orcl 为oracle的sid host为要oracle服务器地址

配置好之后可以cmd里面用tnsping orcl看看是不是能通延迟才毫秒~~成功啦~

之前有遇到过执行tnsping命令时提示不是内部或外部命令这是因为环境变量的造成的只要在path里面加一个oracle安装目录下的bin路径就可以啦或者土一点先cd到bin目录下再执行tnsping~~~不过还是不建议用这种土鳖的方法配个环境变量可以一劳永逸嘛~~~~(ps:这里说的都是在xp里执行的不是linux里哇只是友情提醒一下高手看了您别笑我~)

之后我又安装了PLSQL Developer (这个东西那是相当好用啊!)

一切准备就绪!打开PLSQL Developer输入username/passwd database选择刚才在tnsname里配的orcl哎哟登上去了灰常开心啊!!!

看来一切都很顺利下面麻烦来了······

关于dbstart的设置

每次通过上述的方法来启动数据库比较麻烦下面尝试用dbstart启动数据库

首先用oracle用户登陆输入dbstart 发现如下屏幕打印提示

Failed to autostart Oracle Net Listene using /ade/vikrkuma_new/oracle/bin/tnslsnr

baidu一下发现下面这篇文章(截取部分)

看来是listener服务没有起来但是执行lsnrctl start却能启动listener服务

搜索dbstart文件中的tnslsnr字符串

grep tnslsnr dbstart

返回结果:

if [ f $ORACLE_HOME_LISTNER/bin/tnslsnr ] ; then

echo Failed to autostart Oracle Net Listene using $ORACLE_HOME_LISTNER/bin/tnslsnr

看来可能是ORACLE_HOME_LISTNER环境变量引起的查找 ORACLE_HOME_LISTNER

grep ORACLE_HOME_LISTNER dbstart

返回结果

# ) Set ORACLE_HOME_LISTNER

ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle

if [ ! $ORACLE_HOME_LISTNER ] ; then

echo ORACLE_HOME_LISTNER is not SET unable to autostart Oracle Net Listener

LOG=$ORACLE_HOME_LISTNER/listenerlog

if [ f $ORACLE_HOME_LISTNER/bin/tnslsnr ] ; then

$ORACLE_HOME_LISTNER/bin/lsnrctl start >> $LOG >& &

export VERLIST=`$ORACLE_HOME_LISTNER/bin/lsnrctl version | grep LSNRCTL for | cut d f | cut d f`

echo Failed to autostart Oracle Net Listene using $ORACLE_HOME_LISTNER/bin/tnslsnr

$LOGMSG Restart Oracle Net Listener using an alternate ORACLE_HOME_LISTNER: lsnrctl start

其中有一段给ORACLE_HOME_LISTNER环境变量赋值但是这个路径是不对的编辑dbstart文件

vi dbstar

将该行改为export ORACLE_HOME_LISTNER=$ORACLE_HOME

保存退出

满心欢喜的再次dbstart没反应还有个dbshut也是没反应继续baidu如下

dbstart需要修改/etc/oratab

your_sid:/oracle/product/:N

将最后N修改为Y

更加满心欢喜的再次dbstart哇哈哈起来了~~~果然baidu一下你就知道!!(虽然心里觉得似乎更牛不知道为什么每次第一反应就是baidu ^_^)

用dbshut也能正常关闭数据库了怎么有种妇唱夫随的感觉····

再次回到xp用PLSQL Developer登陆oh yeah~~~连上了!!!看来一切都正常了~~~

终于可以心安理得的休息一下啦···(boo同学借您的心安理得用一下您没意见吧?)

以下是之前看到自动启动数据库的方法先贴上来等有空又有心情的时候再试试吧

数据库的启动

欲启动数据库服务在系统启动后登录oracle用户

su – oracle

lsnrctl start

dbstart

emctl start dbconsole

isqlplusctl start

这样可以手工启动数据库若要让数据库在系统启动时随之启动就需要多动点手了

. 首先修改/etc/oratab 把orcjava:/home/oracle/OraHome_:N改为orcjava:/home/oracle/OraHome_:Y

. 然后修改/etc/rclocal

添加如下几行

su oracle c lsnrctl start

su oracle c dbstart

su oracle c emctl start dbconsole

su oracle c isqlplusctl start

进入/home/oracle/OraHome_/bin 修改dbstart文件将oratab=etc/oratab

重新启动reboot 看看系统能否自动加载服务

如果仍然不能请检查环境变量是否正确如果/etc/下无oratab文件到/home/oracle/install/目录下复制oratab文件到/etc下并修改

#自动启动

~~~~~~~~~~~~~~~~~~~~华丽的分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

前两天在linux里成功的安装了OracleG每次启动oracle数据库都是用oracle用户登陆然后执行dbstart启动数据库每次启动时都会报错

Failed to autostart Oracle Net Listene using /ade/vikrkuma_new/oracle/bin/tnslsnr

看来是listener服务没有起来但是执行lsnrctl start却能启动listener服务

搜索dbstart文件中的tnslsnr字符串

grep tnslsnr dbstart

返回结果:

if [ f $ORACLE_HOME_LISTNER/bin/tnslsnr ] ; then

echo Failed to autostart Oracle Net Listene using $ORACLE_HOME_LISTNER/bin/tnslsnr

看来可能是ORACLE_HOME_LISTNER环境变量引起的查找 ORACLE_HOME_LISTNER

grep ORACLE_HOME_LISTNER dbstart

返回结果

# ) Set ORACLE_HOME_LISTNER

ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle

if [ ! $ORACLE_HOME_LISTNER ] ; then

echo ORACLE_HOME_LISTNER is not SET unable to autostart Oracle Net Listener

LOG=$ORACLE_HOME_LISTNER/listenerlog

if [ f $ORACLE_HOME_LISTNER/bin/tnslsnr ] ; then

$ORACLE_HOME_LISTNER/bin/lsnrctl start >> $LOG >& &

export VERLIST=`$ORACLE_HOME_LISTNER/bin/lsnrctl version | grep LSNRCTL for | cut d f | cut d f`

echo Failed to autostart Oracle Net Listene using $ORACLE_HOME_LISTNER/bin/tnslsnr

$LOGMSG Restart Oracle Net Listener using an alternate ORACLE_HOME_LISTNER: lsnrctl start

其中有一段给ORACLE_HOME_LISTNER环境变量赋值但是这个路径是不对的编辑dbstart文件

vi dbstar

将该行改为export ORACLE_HOME_LISTNER=$ORACLE_HOME

保存退出然后执行dbstart就没问题了呵呵

想系统启动是自动启动数据库可以通过修改/etc/rcd/rclocal文件

一开始我写的命令是

su oracle c ora_App/product//db_/bin/lsnrctl start

su oracle c ora_App/product//db_/bin/dbstart

但是su oracle c ora_App/product//db_/bin/lsnrctl start是参数start不起作用它进入了lsnrctl命令提示符并没有启动后来把命令用双引号引起来就可以了如下

su oracle c ora_App/product//db_/bin/lsnrctl start

是可以启动了但是启动时报错如下:

Message not found; No message file for product=network facility=TNSTNS: Message not found; No message file for product=network facility=TNS

TNS: Message not found; No message file for product=network facility=TNS

但是如果我用oracle用户登陆执行lsnrctl start就不报错看来是在root用户中执行su oracle c ora_App/product//db_/bin/lsnrctl start有些Oracle环境变量没有设置查了一下su 命令的参数其中有个l参数

l或login 改变身份时也同时变更工作目录以及HOMESHELLUSERLOGNAME此外也会变更PATH变量

加上参数

su oracle lc ora_App/product//db_/bin/lsnrctl start

正常了!呵呵终于弄完了总算是一晚上没白费

或许这么做比较专业点

可以在/etc/initd/下写一个shell就叫oracle好了内容如下

#!/bin/sh

ORACLE_HOME=/home/oracle/oracle/product//db_

ORACLE=oracle

case $ in

start)

echo start oracle

su oracle c $ORACLE_HOME/bin/dbstart $ORACLE_HOME &

su oracle c $ORACLE_HOME/bin/lsnrctl start ;;

stop)

echo stop oracle

su oracle c $ORACLE_HOME/bin/dbshut &

su oracle c $ORACLE_HOME/bin/lsnrctl stop ;;

*)

echo usage: $ {start|stop}

exit

;;

esac

这个就可以控制oracle的启动和关闭为了完成自启动可以在/etc/rcd/(runlevel 是如果runlevel是就在/etc/rcd/下)建立一个链接文件ln s /etc/initd/oracle /etc/rcd/Soracle这样就可以完成自启动了

               

上一篇:Matlab建立到Oracle数据库的连接

下一篇:精妙SQL语句介绍