通过docker安装oracle数据库,并使用navicat远程测试连接的详细教程

tech2026-06-04  2

文章目录

一、前言二、通过docker安装oracle2.1 拉取镜像2.2 创建和运行容器2.2 配置oracle数据库2.3 配置oracle网络,实现远程访问连接2.4 navicat测试连接 三、总结

一、前言

oracle数据库是甲骨文公司旗下的一款关系型数据库产品,提供完整的数据管理功能,相较于mysql、redis等轻量级数据库,oracle数据库显得有点笨重,但因其数据安全性强、稳定性强等优点,仍被很多企业公司所使用。这里是通过docker容器技术来安装oracle,并使用navicat测试连接的详细教程。

二、通过docker安装oracle

oracle体积很大,大约需要4G左右内存,如果不确定服务器所剩内存空间多大,可以通过下面命令查看内存使用情况:free -m,内存的单位为M

2.1 拉取镜像

有两种途径,一个是从docker hub社区中获取,另一个是下载国内阿里云的,下面进行分别介绍:

docker search oracle 查看有哪些可用的oracle镜像,例如oracleinanutshell/oracle-xe-11g等,然后docker pull 镜像名拉取镜像,但有些镜像下载后还需要进行额外下载安装文件,过程挺麻烦,这里不作叙述。 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g拉取国内镜像,该镜像大小为2.99G,已经集成了oracle环境,拉取完可以直接用,推荐使用这款oracle镜像docker images查看镜像是否成功被拉取

2.2 创建和运行容器

拉取完镜像,下一步就是在利用镜像创建一个容器,从而使得oracle跑起来,使用如下命令: docker run --name 容器名 -d -p 8094:1521 registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g 这里说明一下几个参数:

1. --name 容器名 2. -d 允许后天运行 3. -p 端口映射,服务器开放的端口:oracle开放的端口,即通过访问服务器ip:端口就访问oracle数据库(oracle默认1521)

如果返回一个容器id则创建成功,然后可以查看是否容器成功启动docker ps 如果PORT没有出现端口映射,则说明容器没有成功启动,则需要检查镜像是否完整,也可以通过docker logs 容器名来查找运行日志排除错误。 至此,docker安装oracle完成,下一步则需要进行配置oracle

2.2 配置oracle数据库

尊重版权,本节内容参考了一个博客用户的笔记,并在此基础上完善。

首先需要进入到oracle容器中,使用命令docker exec -it 容器名/容器id bash 修改环境变量,切换到root:su root,密码是helowin,然后编辑文件vi /etc/profile,在文件尾部添加如下几行内容: # oracle home目录 export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2 # oracle 服务名或者 SID名,要记住这个名字helowin,它是naivcat登录的重要选项 export ORACLE_SID=helowin # oracle环境变量 export PATH=$ORACLE_HOME/bin:$PATH

要记住export ORACLE_SID=helowin,helowin是naivcat登录的重要选项,最后使用指令source /etc/profile使环境变量立即生效 3. 创建软连接,使用命令ln -s $ORACLE_HOME/bin/sqlplus /usr/bin 4. 创建新的表空间,在/home/oracle下创建tablespace文件夹mkdir /home/oracle/tablespace,然后登录启用命令sqlplus /nolog,即可输入sql命令,连接数据库命令conn /as sysdba,返回“Connected”,接下来创建表空间、创建数据库用户和授权用户

创建表空间TEST CREATE TABLESPACE TEST LOGGING DATAFILE '/home/oracle/tablespace/TEST.DBF' SIZE 32M AUTOEXTEND ON NEXT 32M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL; 创建用户tester,密码是123456 CREATE USER tester IDENTIFIED BY 123456 ACCOUNT UNLOCK DEFAULT TABLESPACE TEST TEMPORARY TABLESPACE TEST_TEMP; 赋予用户权限 GRANT CONNECT,RESOURCE TO tester; GRANT DBA TO tester;(可选,DBA为数据库管理员权限)

设置完后,使用exit命令返回我们的oracle,接着测试刚才创建的用户是否正常使用,使用命令sqlplus tester/123456 用户/密码,如果能跳转到SQL,则成功创建了用户

2.3 配置oracle网络,实现远程访问连接

修改oracle配置,主要修改listener.ora和tnsnames.ora两个文件,首先我们需要进到这两个文件目录cd /home/oracle/app/oracle/product/11.2.0/dbhome_2/network/admin,如果这个目录不对,我们可以通过这样查找find / | grep /network/admin,这样会返回所有匹配的目录路径,然后再选出我们的文件目录

使用vi listener.ora命令修改listener.ora,内容如下: # listener.ora Network Configuration File: /home/oracle/app/oracle/product/11.2.0/dbhome_2/network/admin/listener.ora # Generated by Oracle configuration tools. LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) # localhost:1521 ) ) ADR_BASE_LISTENER = /home/oracle/app/oracle

使用vi tnsnames.ora命令修改tnsnames.ora,内容如下: # tnsnames.ora Network Configuration File: /home/oracle/app/oracle/product/11.2.0/dbhome_2/network/admin/tnsnames.ora # Generated by Oracle configuration tools. LISTENER_HELOWIN = (ADDRESS = (PROTOCOL = TCP)(HOST = loaclhost)(PORT = 1521)) HELOWIN = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = helowin) ) )

这里需要注意的是,HOST改为localhost,PORT改为1521,SERVICE_NAME设置为helowin,这个与前面2.2 节配置oracle数据库设置的export ORACLE_SID=helowin 相同。 当然也可以在oracle用户下通过命令lsnrctl status来查看服务是否被侦听,如果报错:lsnrctl command not found,则需要先su 密码是helowin后,再切换到su - oracle 即可,

1. lsnrctl status 查看网络状态 2. lsnrctl reload 重启网络 3. lsnrctl start 开启网络 4. lsnrctl stop 停止网络

这里的helowin和helowinXDB就是启动中的服务名,需要放在tnsnames.ora中SERVICE_NAME ,这里为保持一致,选择helowin

一切配置好之后,执行lsnrctl reload 重启网络

2.4 navicat测试连接

需要注意几点:

主机ip地址是个人服务器的ip地址,端口是服务器的端口号,该端口号自动映射到oracle数据库的1521端口(docker已经设好)服务名是helowin而不是默认的ORAL用户名和密码就是在oracle新建数据库的账号密码,这里是tester:123456

三、总结

通过docker安装oracle数据库,并使用navicat远程测试连接整个教程至此结束,花费了一天的时间从入门到完成任务,过程很曲折,百度很频繁,自身对问题的理解和耐心还是存在不足之处,以后面对类似问题会采取更好的逻辑思维和处理方法,共勉!

最新回复(0)