建议:建议使用其它系统去装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/oradatadocker 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 sysdbaConnected 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