Linux Oracle中常遇到的一些有关问题及命令总结

Linux Oracle中常遇到的一些问题及命令总结

1.linux更改主机名

 

(1)#hostname oracledb    临时修改主机名

(2) vi /etc/sysconfig/network   修改hostname

(3) vi /etc/hosts        修改IP对应的主机名

 

2.linux重启oracle实例及监听的各种方法

(注意操作的顺序应该是先监听,后数据库实例)

 

方法1:

 

用root以ssh登录到linux,打开终端输入以下命令:

 

cd $ORACLE_HOME   #进入到oracle的安装目录 
dbstart           #重启服务器 
lsnrctl start     #重启监听器 

 

方法2:

 

Sql代码

 

cd $ORACLE_HOME/bin   #进入到oracle的安装目录 
./dbstart             #重启服务器 
./lsnrctl start       #重启监听器

 

方法3:

 

(1) 以oracle身份登录数据库,命令:su – oracle

(2) 进入Sqlplus控制台,命令:sqlplus /nolog

(3) 以系统管理员登录,命令:connect / as sysdba

(4) 启动数据库,命令:startup

(5) 如果是关闭数据库,命令:shutdown immediate

(6) 退出sqlplus控制台,命令:exit

(7) 进入监听器控制台,命令:lsnrctl

(8) 启动监听器,命令:start

(9) 退出监听器控制台,命令:exit

(10) 重启数据库结束

 

方法4:(自已写脚本)

 

1)启动脚本(dbstart.sh)

 

lsnrctl start
sqlplus /nolog <<EOF
connect / as sysdba
startup;
exit
EOF

 

$sh dbstart.sh 即可

 

2)关闭脚本(dbstop.sh)

  

lsnrctl stop
sqlplus /nolog <<EOF
connect / as sysdba
shutdown immediate;
exit
EOF

 

$sh dbstop.sh 即可

 

小结:

linux中启动oracle主要分两步:一个是启动监听器,一个是启动实例(一般都忘记了这一步),具体命令如下:

 

1.进入oracle根目录
cd $ORACLE_HOME/bin
 
2.进入监听
./lsnrctl

3.启动监听器
start

4.退出监听
exit

5.进入sqlplus
sqlplus /nolog

6.使用管理员连接
connect as sysdba

7.启动ORACLE实例
startup

 

 

3.lsnrctl status命令结果The listener supports no services这一问题解决办法

 

问题现象如下:

[oracle@oracledb admin]$ lsnrctl status
 
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 08-JUL-2015 05:00:53
 
Copyright (c) 1991, 2009, Oracle.  All rights reserved.
 
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                08-JUL-2015 04:35:53
Uptime                    0 days 0 hr. 24 min. 59 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /opt/oracle/app/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File         /opt/oracle/app/diag/tnslsnr/oracledb/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
The listener supports no services
The command completed successfully

 

首先需要知道我们可以通过netca来配置Listener动态监听,通过mgr来配置静态监听。

如果这两种方式都不好使,还有一个方法就是手动修改listener.ora文件,添加以下几行内容:

 

SID_LIST_LISTENER =  

(SID_LIST =  

  (SID_DESC =  

  (GLOBAL_DBNAME = orcl)

  (SID_NAME = orcl)

  )

)

 

然后重新加载一次监听就可以注册上实例了

 

[oracle@oracledb ~]$ lsnrctl reload

 

重新查看监听状态lsnrctl status

 

 LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 08-JUL-2015 05:05:41
 
Copyright (c) 1991, 2009, Oracle.  All rights reserved.
 
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                08-JUL-2015 04:35:53
Uptime                    0 days 0 hr. 29 min. 47 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /opt/oracle/app/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File         /opt/oracle/app/diag/tnslsnr/oracledb/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
Services Summary...
Service "orcl" has 1 instance(s).
  Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

 

注意"UNKNOWN"就表示是静态注册的,如果是"READY"则表示是动态注册的

 

总结:以上利用了手动修改配置静态监听的方法成功注册了Oracle实例,动态监听往往需要等实例启动后,过一段时间才会注册上,而静态监听则可以马上注册。而且一旦实例重启会造成动态监听暂时无效,有些版本的bug甚至会导致动态监听的注册就再也起不来了。所以我对于监听的观点是,尽量配置静态监听,这样就可以避免很多由监听带来的问题,诸如我们经常会碰到的几个ora error:ora-12541、ora-12514、ora-12154等,尤其是在RAC和DG中,一个监听的问题,往往会带来很大的麻烦,尤其需要引起大家的注意。

 

4.常用的两个命令查询数据库实例名和服务名

 

SQL> select instance_name from v$instance
 
INSTANCE_NAME
----------------
orcl
 
SQL> show parameter service_names
 
NAME                                 TYPE        VALUE 
------------------------------------ ----------- ------------------------------ 
service_names                        string      orcl