使用docker 安装oracle 11g 挂载数据目录并修改SID centos-7

建议:建议使用其它系统去装ubuntu或Rocky(因为centos已经停止维护)
1、安装docker
这里就不细写了,可以查看清华镜像源或者阿里镜像源
清华:https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/
阿里:https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.57e31b11xiluIS

2、在本机创建持久化数据目录

mkdir -p /opt/oracle/flash_recovery_area
mkdir -p /opt/oracle/oradata

3、docker部署oracle _11g
(1)准备工作

#将镜像pull下来
docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
#查看一下
docker images
#然后先启动一下生成一下数据文件和控制文件
docker run -d --name oracle -p 1521:1521 registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
#将数据目录拷出来
docker cp oracle:/home/oracle/app/oracle/oradata /opt/oracle/oradata

docker cp oracle:/home/oracle/app/oracle/flash_recovery_area/helowin /opt/oracle/flash_recovery_area/helowin
#停止镜像
docker stop oracle
#删除停止镜像
docker rm oracle
#修改用户组
chown -R 500:500 /opt/oracle/
#进行查看权限
 cd /opt/oracle/
 #列出
 ll

(2)开始启动新的镜像并指定创建的数据目录

-d: 以守护(detached)模式运行容器。这意味着容器会在后台运行,而非与当前终端关联,允许您在不附加到容器标准输入和输出的情况下继续使用命令行。

–restart=always: 设置容器的重启策略。当 Docker 主机重启或容器意外退出时,Docker 将始终尝试重新启动此容器。这对于确保关键服务如数据库始终保持运行状态非常有用。

–name oracle_llg: 为新创建的容器指定一个易于识别的名称 oracle_llg,以便后续管理和操作容器时使用。

-p 1521:1521: 映射宿主机(host)端口 1521 到容器内部的端口 1521。这样,外部应用程序可以通过宿主机的 1521 端口访问容器中运行的 Oracle 数据库服务。

–privileged=true: 为容器赋予特权模式。在特权模式下,容器内的进程拥有主机上的所有权限,包括访问硬件设备、执行某些受限操作等。这对于运行需要高度系统权限(如直接访问特定设备)的服务如
Oracle 数据库可能是必要的。

-v /opt/oracle/oradata:/home/oracle/app/oracle/oradata: 创建一个卷挂载,将宿主机目录 /opt/oracle/oradata 挂载到容器内部的 /home/oracle/app/oracle/oradata。这样,容器中的
Oracle 数据库可以使用宿主机上的存储空间来持久化其数据文件,即使容器被删除或重启,这些数据仍会被保留。

-v /opt/oracle/flash_recovery_area/helowin:/home/oracle/app/oracle/flash_recovery_area/helowin:
另一个卷挂载,将宿主机目录 /opt/oracle/flash_recovery_area/helowin
挂载到容器内部的相同路径。这通常是用于存放 Oracle 数据库的闪回恢复区域(Flash Recovery
Area),包含备份、归档日志等重要恢复数据,确保这些数据同样能在容器生命周期之外得到持久化。

registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g:
指定要使用的镜像。这是一个从阿里云(Hangzhou region)上的 Docker 注册表拉取的镜像,由 helowin 用户提供的
oracle_11g 镜像。这个镜像包含了运行 Oracle 11g 数据库所需的所有软件环境和配置。

#启动挂载数据目录的镜像(建议再挂载一个备份目录)
docker run \
    -d \
    --restart=always \
    --name oracle_llg \
    -p 1521:1521 \
    --privileged=true \
    -v /opt/oracle/oradata:/home/oracle/app/oracle/oradata \
    -v /opt/oracle/flash_recovery_area/helowin:/home/oracle/app/oracle/flash_recovery_area/helowin \
    registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
#启动后查看
docker ps

(3)创建用户和修改sys的密码

#进入镜像
docker exec -it oracle_llg /bin/bash
#source一下文件
source ~/.bash_profile
#登录qdl修改sys密码并创建用户
sqlplus /nolog
#下面修改其用户的密码并创建用户的操作
SQL> conn / as sysdba
Connected.
#修改sys用户密码
SQL> alter user sys identified by ucaqaz;

User altered.
#创建tianmen用户并设置密码
SQL> create user tianmen identified by ucaqaz;

User created.
#授予权限tianmen
SQL> grant connect,resource,dba to tianmen;

Grant succeeded.
#提交修改
SQL> commit;

Commit complete.

#执行命令更新的Oracle数据库中的默认配置文件,此配置文件关联的所有用户的密码有效期限制被移除。
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

Profile altered.

SQL> exit

(4)尝试登录

#使用sys进行登录
sqlplus sys/ucaqaz@helowin as sysdba

Connected to:

#使用tianmen登录
sqlplus tianmen/ucaqaz@helowin

#查看所有库
SQL> SELECT DISTINCT owner FROM dba_objects;

4、备份还原数据
(1)指定用户创建directory目录

1、配置备份目录授权
SQL>CREATE OR REPLACE DIRECTORY dumptam AS '/home/oracle/tianmen/';
2、将其授权给用户
SQL>GRANT READ,WRITE ON DIRECTORY dumptam TO tianmen;
3、授予用户导入导出的完全权限
SQL>GRANT EXP_FULL_DATABASE,IMP_FULL_DATABASE TO tianmen;
4、授予用户的使用权
SQL>GRANT RESOURCE TO tianmen;
5、查看生成的directory目录
SQL>SELECT * FROM DBA_DIRECTORIES;
#6、删除directory目录(此命令不用执行)
#drop directory DIRENAME;

(2)备份导入导出

#全量备份(full=y)
expdp tianmen/ucaqaz@helowin full=y directory=dumptam dumpfile=tianmen.dmp
#全量还原
impdp tianmen/ucaqaz@helowin full=y directory=dumptam dumpfile=tianmen.dmp

#备份指定库(schemas=tianmen)
expdp tiananmen/ucaqaz@helowin schemas=tianmen dumpfile=tianmen.dmp directory=dumptam

#还原指定库
impdp tianmen/ucaqaz@helowin schemas=tianmen directory=dumptam dumpfile=tianmen.dmp

5、修改oracle的SID
(1)关闭数据库

#进入容器
docker exec -it oracle_llg /bin/bash
#先关闭数据库使用sys登录
sqlplus sys/ucaqaz@helowin as sysdba
#将其停止
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit

(2)修改文件目录将SID修改为orcl

#找到先面的变量将其修改为你要使用的SID=orcl
vi /home/oracle/.bash_profile
ORACLE_SID=orcl;export ORACLE_SID
#然后source一下
source /home/oracle/.bash_profile
#修改下面的文件,将其开头修改为你的SID
vi /etc/oratab
orcl:/home/oracle/app/oracle/product/11.2.0/dbhome_2:Y
#将下面的文件名修改为你要使用的SID
mv hc_helowin.dat hc_orcl.dat
mv orapwhelowin orapworcl
mv spfilehelowin.ora spfileorcl.ora
mv lkHELOWIN lkORCL
#将其关闭的数据库打开
sqlplus / as sysdba
#打开
SQL> startup
ORACLE instance started.

Total System Global Area 1603411968 bytes
Fixed Size                  2213776 bytes
Variable Size             402655344 bytes
Database Buffers         1191182336 bytes
Redo Buffers                7360512 bytes
Database mounted.
Database opened.
#退出
SQL> exit
#然后登录查看其是否已经修改
sqlplus sys/ucaqaz@helowin as sysdba
#查看SID的名称,可以看到是我要改的,可以改之前先查看
SQL> select instance from v$thread;

INSTANCE
--------------------------
orcl
#退出
SQL> exit

<think>好的,我需要帮助用户在CentOS 7使用Docker安装Oracle 11g数据库。首先,我要回顾用户提供的引用资料,确保步骤正确。用户提到了多个引用,其中引用[1]、[4]、[5]都涉及Oracle 11g的安装。我需要整合这些信息,确保步骤清晰。 第一步是安装Docker。用户可能已经安装了,但如果没有,需要指导他们安装。根据引用[5],用户提到了查看CentOS7安装Docker的教程,所以可能需要先确认Docker是否已安装。如果未安装,应该提供安装命令,比如使用yum安装Docker启动服务。 接下来是拉取镜像。引用[1]和[5]提到了不同的镜像源。比如,引用[5]使用的是阿里云的镜像registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g,而引用[1]用的是jaspeen/oracle-11g。需要比较这两个镜像的可靠性,可能选择用户引用较多的那个。例如,引用[5]的步骤更详细,可能优先使用。因此,拉取镜像的命令应该是docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g。 然后运行容器。这里需要注意参数,比如--privileged、端口映射、卷挂载。引用[1]和[5]都用了--privileged,这是为了赋予容器足够的权限,避免安装问题。端口映射是1521:1521,保持一致。挂载卷方面,用户可能需要将宿主机的目录挂载到容器内,方便数据持久化。例如,-v /install:/install或者其他的目录。需要明确挂载点的作用,可能需要在步骤中解释。 进入容器后,可能需要进行初始化配置。引用[5]提到进入容器后切换到oracle用户,运行source ~/.bash_profile,然后启动lsnrctl和sqlplus。这部分需要详细说明,确保用户能够正确启动监听和数据库实例。 测试连接部分,用户可能需要使用sqlplus或者Navicat。引用[4]提到使用Navicat连接,所以需要确保宿主机的防火墙开放了1521端口,检查容器是否正常运行。可能需要指导用户如何设置Navicat的连接参数,比如主机IP、端口、服务名、用户名和密码。 在常见问题处理中,需要提醒用户注意镜像拉取速度慢的问题,建议使用国内镜像源。另外,如果容器启动失败,可能需要检查日志,使用docker logs命令。权限问题可能需要使用--privileged参数,这点已经在步骤中提到。 最后生成相关问题,需要涵盖安装后的配置、持久化存储、连接失败处理、升级到新版本以及数据迁移等内容,确保用户有后续的参考方向。 需要确保所有步骤中的命令正确,语法无误,且符合用户的操作系统环境。同时,引用对应的参考资料,比如在拉取镜像时引用[5],在运行容器时引用[1]和[5],在配置部分引用[2]和[5]。每个步骤末尾添加正确的引用标识,比如[^5]或[^1]。 总结起来,步骤应该是:安装Docker -> 拉取镜像 -> 运行容器 -> 进入容器配置 -> 测试连接 -> 常见问题处理。每个步骤详细说明,附上相关命令和解释,确保用户能够顺利安装。</think>### 逐步解答 #### **步骤 1: 安装 Docker** 如果尚未安装 Docker,需先执行以下命令: ```bash # 安装依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加 Docker 仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装 Docker sudo yum install -y docker-ce docker-ce-cli containerd.io # 启动 Docker 服务 sudo systemctl start docker # 设置开机自启 sudo systemctl enable docker ``` --- #### **步骤 2: 拉取 Oracle 11g 镜像** 使用国内镜像源加速下载(推荐阿里云镜像): ```bash sudo docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g ``` 此镜像已预配置 Oracle 11g 的安装环境[^5]。 --- #### **步骤 3: 运行 Docker 容器** 通过以下命令启动容器: ```bash sudo docker run --privileged --name oracle11g \ -p 1521:1521 \ -v /your_host_dir:/install \ registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g ``` - `--privileged`: 赋予容器完全权限,避免安装过程中权限不足。 - `-p 1521:1521`: 将宿主机的 1521 端口映射到容器的 Oracle 监听端口。 - `-v /your_host_dir:/install`: 挂载宿主机目录到容器内,用于持久化数据--- #### **步骤 4: 进入容器初始化配置** 1. **进入容器终端**: ```bash sudo docker exec -it oracle11g /bin/bash ``` 2. **切换为 Oracle 用户**: ```bash su - oracle source ~/.bash_profile # 加载环境变量 ``` 3. **启动监听和数据库**: ```bash lsnrctl start # 启动监听服务 sqlplus / as sysdba SQL> startup # 启动数据库实例 SQL> exit ``` --- #### **步骤 5: 测试连接** - **通过 SQLPlus 连接**: ```bash sqlplus system/oracle@localhost:1521/helowin ``` - **通过 Navicat 连接**: - 主机: `宿主机 IP` - 端口: `1521` - 服务名: `helowin` - 用户名: `system` - 密码: `oracle`[^4]。 --- #### **常见问题处理** 1. **镜像下载慢**:更换为阿里云镜像源加速。 2. **容器启动失败**:检查日志 `docker logs oracle11g`。 3. **权限问题**:确保使用 `--privileged` 参数[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值