1. 创建ORACLE实例以后,需要先配置ORACLE的环境变量,我们通过su - oracle 切换用户至oracle(用户名为oracle)进行配置环境变量:~/.bash_profile,其中~代表当前用户的$HOME
EXPORTORACLE_HOME=/oracle/app/oracle/product/11.2.0/dbhome_1/
EXPORT ORACLE_SID=SGSORCL,
2. 配置oracle的监听listener.ora(如果没有,需要我们自己手动创建),一般在
[oracle@oracle admin]$ cat listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.31.2.121)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = gzyhdb)
(SID_NAME = SGSORCL)
)
)
ADR_BASE_LISTERNER = /oracle/app/oracle
3. 分别通过命令dbstart和lsnrctl start重启数据库和重启监听器(1521端口)
一般默认路径是在$ORACLE_HOME/bin目录下
4. 开始创建用户数据库(包括用户表空间):
使用oracle用户登录,进入sqlplus,进行操作:
$su - oracle |
[oracle@localhost ~]$ sqlplus /nolog SQL*Plus: Release 11.2.0.3.0 Production on 星期四 5月 28 11:33:06 2015 Copyright (c) 1982, 2011, Oracle. All rights reserved. SQL> conn system/system Connected. SQL> --创建数据表空间 SQL> create tablespace MTLDATA datafile '/oracle/oradata/orcl/MTLDATA.dat' size 10240m; --创建索引表空间 SQL> create tablespace MTLINDEX datafile '/oracle/oradata/orcl/MTLINDEX.dat' size 1024 m; --创建临时表空间 SQL> create temporary tablespace MTLTEMP tempfile '/oracle/oradata/orcl/MTLTEMP.dat' size 2048m;
--创建用户并指定表空间 SQL> create user gzyhdb identified by gzyhab default tablespace MTLDATA temporary tablespace MTLTEMP; --给用户授予权限 SQL> grant connect,resource to gzyhdb;
|
|
5. 在一切貌似顺利的时候,发现通过服务器上的sqlplus工具,connect可以连接成功,但是通过其他电脑上的oracle客户端(navicat或者plsql)都不能连接成功,客户端提示no listener(以下命令都需要用oracle的用户名下启动,除了配置hostname之外。)
提示:TNS-12541: TNS:no listener错误 ,通过上网查发现一般是监听配置不对,我追加了红框内的如下内容,指明了GLOBAL_DBNAME,和SID_NAME的值。
配置好后再次重启监听器时(通过lsnrctlstop关闭,通过lsnrctl start开启),又出现以下错误:
TNS-12547: TNS:lost contact
TNS-12560: TNS:protocol adapter error
TNS-00517: Lost contact
Linux Error: 104: Connection reset by peer
Connecting to(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 111: Connection refused
这个错误一般是由我们的服务器DNS没有配置127.0.0.1的域名解析,输入命令:vi /etc/hosts,并进行编辑并追加:127.0.0.1 localhost localhost.localdomain
6. 继续重启,发现还是不成功:
[oracle@redhat6 bin]$ ./lsnrctl start
LSNRCTL for Linux: Version 11.2.0.3.0 -Production on 15-MAY-2017 20:03:00
Copyright (c) 1991, 2011, Oracle. All rights reserved.
Starting/oracle/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 11.2.0.3.0 -Production
System parameter file is /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Log messages written to/oracle/app/oracle/diag/tnslsnr/oracle/listener/alert/log.xml
Listening on:(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.31.2.121)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Connecting to(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.31.2.121)(PORT=1521)))
发现一只在connecting....,并通过提示查看日志文件(日志文件目录:
Log messages written to/oracle/app/oracle/diag/tnslsnr/oracle/listener/alert/log.xml),日志最后打印如下:
type='UNKNOWN' level='16' host_id='redhat6.5' host_addr='127.0.0.1'> 日志中显示:host_id为'redhat6.5',输入命令验证:hostname,输出了:redhat6.5, 看来找到问题原因了。切换回root用户进行修改/etc/sysconfig/network,先将原来的主机名称从:redhat6.5改为其他名称(我们这里取名为oracle,此oracle与系统用户名oracle没有任何关系,也完全可以取名为abc) 此时如果不重启,系统不会生效,我们对它进行强制生效(通过命令:hostname=oracle) 然后再修改DNS配置文件,vi /etc/hosts,将172.31.2.121的主机名改为oracle(即netwok中的HOSTNAME;如果取名为abc,则需要将oracle改为abc),然后再重启监听器, ./lsnrctl start,启动成功。 7. 对于HOSTNAME和/etc/hosts的区别和解释,自己先网上查明。对于我们本案例, Hostname:是给数据库服务器Oracle的listener用的,它通过系统的HOSTNAME(我们配置的名字是oracle),找到/etc/hosts下对应的IP为172.31.2.121并解析。 错误的日志输出: type='UNKNOWN' level='16' host_id='oracle' host_addr='UNKNOWN'> 配置HOSTNAME和/etc/hosts之后的正确日志输出: type='UNKNOWN' level='16' host_id='oracle' host_addr='172.31.2.121'> (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.31.2.121)(PORT=1521))) 上述蓝色的HOST就是我们listener.ora中配置的HOST地址。