在宿主机中使用PLSQL连接Docker中配置的Oracle
不想繁琐的在机器上安装 Oracle 数据库。利用 Docker 拉取 Oracle 镜像,创建实例。并通过宿主机的PLSQL 连接,以便进行需要的后续操作。
一、环境说明:
宿主机操作系统:Windows 10
Docker版本:Docker version 19.03.8
二、操作步骤
-
下载 Oracle instantclient 下载地址下载 Basic Package 即可。
-
解压到指定目录,如: D:\Develop\instantclient_19_8。
-
D:\Develop\instantclient_19_8 目录下新建 network/admin/ 并在其目录下 新建 tnsnames.ora 文件。
-
在 Docker 中 ,进入Oracle 容器的 bash,使用 sqlplus 登录 Oracle,并查看 service_names 。
- 使用如下命令进入 Oracle 的 bash
docker exec -it oracle11g /bin/bash
- 进入之后 cd $ORACLE_HOME 切换到 ORACLE_HOME 目录下,使用 sqlplus 进行登录。
root@92e15e179d42:/# cd $ORACLE_HOME root@92e15e179d42:/u01/app/oracle/product/11.2.0/xe# sqlplus
- 使用如下命令查看 oracle 的 service name。
SQL>show parameter service_name
-
查看 Docker 在宿主机上的 IP 地址,在网络连接上查看Docker虚拟机的 IPV4 属性上的地址。
-
编辑之前建立好的 tnsnames.ora 文件。内容如下:
test_docker_oracle= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST= 172.18.20.129)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = xe) ) )
HOST 为 Docker 在宿主机上的 IP 地址, SERVICE_NAME 是之前在 Docker 中 ORACLE 中查看得到的服务名。
-
配置 Windows 环境变量。
ORACLE_HOME = D:\Develop\instantclient_19_8
TNS_ADMIN = %ORACLE_HOME%\network\admin
NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK
将 ORACLE_HOME 配置到 Path 变量中。
-
启动 PLSQL。此时登录画面可以选择的数据库选项有刚刚配置的 test_docker_oracle
-
登录成功,即连接成功。
三、遇到的问题
-
Error while trying to retrieve text for error ORA-01804
解决:
1.检查一下环境变量的配置是否正确。不能存在其他版本的oracle 的配置。
2.检查PLSQL的配置oci库是否配置正确。指定 instantclient 的 oci 库。 -
登录时候,连接超时。
解决:此时需要宿主机测试 与 Docker 是否连通。如果 ping 不通。则需要建立路由。
route add 172.18.20.129 mask 255.255.255.0 192.168.43.151
将 Doker 和 宿主机 路由连通。