MAC电脑,在 Docker 中已经运行过一次 Oracle 镜像后,再次运行具体操作。
在 Docker 中已经运行过一次 Oracle 镜像后,再次运行具体操作取决于你的需求,以下是常见场景及对应方法:
一、若之前容器已停止,想重新启动并进入该容器
- 查看已停止的容器 :在终端输入 docker ps -a ,这会列出所有容器,包括已经停止的,找到之前运行 Oracle 镜像所创建的容器对应的容器 ID 或名称。
- 启动容器 :使用 docker start 容器ID/名称 命令启动之前运行过的 Oracle 容器,例如 docker start myoracle (假设容器名称为 myoracle )。容器启动后,它就会在后台运行。
- 进入容器 :若想进入容器内部进行操作,可执行 docker exec -it 容器ID/名称 bash 或 docker exec -it 容器ID/名称 /bin/sh ,比如 docker exec -it myoracle bash ,这样就能进入容器内部的终端,像操作普通 Linux 系统一样对 Oracle 相关内容进行管理。
当重新连接docker后 连接oracle数据库 错误提示:
IO 错误: The Network Adapter could not establish the connectionThe Network Adapter could not establish the connectionThe Network Adapter could not establish the connectionConnection refused, socket connect lapse 1 ms. /0:0:0:0:0:0:0:1 1521 0 1 trueConnection refused, socket connect lapse 1 ms. /0:0:0:0:0:0:0:1 1521 0 1 trueConnection refusedConnection refused
出现这个错误的原因可能是多方面的,以下是常见的排查和解决步骤:
1. 检查容器是否正常运行
首先,确保容器已经成功启动并正在运行:
docker ps -a
如果容器状态显示为 Up ,说明容器正在运行。如果状态显示为 Exited ,则需要查看容器日志以确定问题:
docker logs 436953cc4594
这里确定应该是oracle版本与数据文件版本不一致导致的 我进行容器的重新安装
对启动命令进行了稍微修改,在创建容器时,添加 -e ORACLE_EDITION=enterprise 环境变量,以确保使用企业版。以下是修改后的 docker run 命令:
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 \
-e ORACLE_EDITION=enterprise \
-v /Users/liuyue/docker/oracle19c/oradata:/opt/oracle/oradata \
--name oracle19c \
docker.cnb.cool/kangaroohy/open-source/images/oracle:19c-ee
删除旧容器(如果需要)
如果需要重新创建容器,可以先删除旧容器:
docker stop oracle19c
docker rm oracle19c
然后使用修改后的命令重新创建和启动容器。
验证容器状态
创建容器后,查看其状态:
docker ps -a
容器启动成功后,检查容器健康状态: 容器的状态显示为 Up 5 seconds (health: starting) ,说明容器正在启动过程中,健康检查可能还没有完成。可以稍等片刻,再次查看容器状态:
docker ps -a
如果健康状态变为 healthy ,说明容器已经正常运行。
检查挂载卷权限: 确保挂载卷在宿主机上的目录存在,并且有正确的权限:
ls -ld /Users/liuyue/docker/oracle19c/oradata
如果目录不存在,创建它:
mkdir -p /Users/liuyue/docker/oracle19c/oradata
并确保有足够的权限:
chmod 777 /Users/liuyue/docker/oracle19c/oradata
在容器内部执行
如果你更倾向于在容器内部执行 sqlplus ,可以先进入容器,然后在容器内部执行命令:
进入容器
docker exec -it oracle19c bash
在容器内部执行 SQL*Plus
进入容器后,执行以下命令连接到数据库:
sqlplus sys/123456@ORCL as sysdba
或者,也可以直接从容器内部连接到本地数据库:
sqlplus sys/123456@localhost:1521/ORCL as sysdba
接下来你可以执行一些基本的数据库操作来验证和管理数据库:
1. 查询数据库实例状态
在 SQL*Plus 中执行以下命令来查看数据库实例的状态:
SELECT status FROM v$instance;
如果状态为 OPEN ,说明数据库实例已经启动并可以使用。
2.查看数据库中的表空间
执行以下命令来查看数据库中的表空间:
SELECT tablespace_name, status FROM dba_tablespaces;
这将列出所有表空间及其状态。
3.查看数据库中的用户
执行以下命令来查看数据库中的用户:
SELECT username, account_status FROM dba_users;
这将列出所有用户及其账户状态。
4.创建一个测试表
你可以创建一个测试表来验证数据库是否正常工作:
CREATE TABLE test_table (id NUMBER PRIMARY KEY,name VARCHAR2(50)
);
插入一些测试数据:
INSERT INTO test_table (id, name) VALUES (1, 'Test');
COMMIT;
查询测试表:
SELECT * FROM test_table;
这将显示你插入的测试数据。
示例会话
你的 SQL*Plus 会话可能像这样:
SQL> SELECT status FROM v$instance;STATUS
--------
OPENSQL> SELECT tablespace_name, status FROM dba_tablespaces;TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINESQL> SELECT username, account_status FROM dba_users;USERNAME ACCOUNT_STATUS
------------------------------ --------------------
SYS OPEN
SYSTEM OPEN
DBSNMP OPEN
OUTLN OPEN
ORACLE_OCM OPENSQL> CREATE TABLE test_table (2 id NUMBER PRIMARY KEY,3 name VARCHAR2(50)4 );Table created.SQL> INSERT INTO test_table (id, name) VALUES (1, 'Test');1 row created.SQL> COMMIT;Commit complete.SQL> SELECT * FROM test_table;ID NAME
---------- --------------------------------------------------1 Test