最终根据CSDN中大佬成功安装Docker镜像 完成oracel
1.拉取镜像
docker pull docker.cnb.cool/kangaroohy/open-source/images/oracle:19c-ee
2.容器运行
docker run -d \
-p 1521:1521 \
-p 5500:5500 \
-e ORACLE_PDB=ORCL \
-e ORACLE_PWD=123456 \
-e ORACLE_CHARACTERSET=AL32UTF8 \
-e INIT_SGA_SIZE=3000 \
-e INIT_PGA_SIZE=1000 \
-v /Users/liuyue/docker/oracle19c/oradata:/opt/oracle/oradata \
--name oracle19c \
docker.cnb.cool/kangaroohy/open-source/images/oracle:19c-ee
3.容器创建成功后需要连接数据库
以下是使用 DBeaver 连接 Docker 容器中 Oracle 数据库的步骤:
1. 下载 Oracle JDBC 驱动
从 Oracle 官方网站下载适合 Oracle 19c 的 JDBC 驱动程序,通常是 ojdbc8.jar 文件。
2. 打开 DBeaver
启动 DBeaver 应用程序。
3. 创建新连接
点击“数据库”菜单,选择“新建连接”。
4. 选择 Oracle 数据库
在数据库类型列表中选择“Oracle”,然后点击“下一步”。
- 主机:如果 Docker 容器和 DBeaver 在同一台机器上运行,主机名应为 localhost 。
- 端口:使用你在 docker run 命令中映射的 Oracle 端口,这里应为 1521 。
- 服务名:根据你的 docker run 命令,服务名是 ORCL 。
- 用户名:通常为 SYS 。
- 密码:在 docker run 命令中设置的 ORACLE_PWD ,这里是 123456 。
DBeaver 会自动生成 JDBC URL,通常格式为:
jdbc:oracle:thin:@localhost:1521/ORCL
点击“驱动设置”按钮,点击“浏览”按钮,找到你下载的 ojdbc8.jar 文件。
点击“测试连接”按钮,确保所有配置正确,连接测试成功。
点击“完成”按钮,完成 DBeaver 与 Oracle 数据库的连接。
- 确保防火墙允许通过 1521 端口的连接。
- 如果容器内的数据库服务没有正确启动,可以通过 docker logs 命令查看日志进行排查。
- 如果连接失败,可以检查 DBeaver 的日志视图以获取更详细的错误信息。
在连接oracle数据进行配置时,ORA-12514 是一个典型的 Oracle 错误,表示数据库监听器不知道请求的服务名。这通常意味着服务名配置有误,或者数据库实例尚未注册到监听器。以下是解决该问题的步骤:
1.检查服务名
确保在 DBeaver 中配置的服务名与数据库实例的实际服务名一致。可以使用以下命令在容器中检查服务名:
docker exec -it oracle19c sqlplus / as sysdba
进入 SQL*Plus 后,运行以下命令查看服务名:
SELECT value FROM v$parameter WHERE name = 'service_names';
确保 DBeaver 中的服务名与查询结果一致。
2.检查数据库实例是否启动
确保数据库实例已经启动并注册到监听器。在 SQL*Plus 中运行以下命令:
SELECT status FROM v$instance;
如果数据库实例未启动,启动它:
STARTUP;
3.检查监听器状态
检查监听器是否正在运行,并且是否知道服务名。在容器中运行以下命令:
docker exec -it oracle19c lsnrctl status
如果监听器未启动,启动它:
docker exec -it oracle19c lsnrctl start
4.检查监听器配置
如果监听器未注册服务名,可以手动重新注册。在 SQL*Plus 中运行:
ALTER SYSTEM REGISTER;
5.检查防火墙和端口
确保防火墙未阻止 1521 端口,并且 Docker 容器正确映射了 1521 端口。
6. 重新连接
完成上述检查和修复后,重新尝试在 DBeaver 中连接数据库。
示例命令
以下是完整的检查和修复步骤:
# 进入容器
docker exec -it oracle19c bash
# 进入 SQL*Plus
sqlplus / as sysdba
# 检查服务名
SELECT value FROM v$parameter WHERE name = 'service_names';
# 检查数据库实例状态
SELECT status FROM v$instance;
# 如果实例未启动,启动它
STARTUP;
# 退出 SQL*Plus
EXIT;
# 检查监听器状态
lsnrctl status
# 如果监听器未启动,启动它
lsnrctl start
# 重新注册服务名
sqlplus / as sysdba
ALTER SYSTEM REGISTER;
EXIT;