基于docker的oracle12.2.0.1部署及oracle使用与docker镜像容器制作迁移方法
本文介绍了基于docker的oracle12.2.0.1部署,包含了oracle基本配置、监听器和实例启动方法、PDB和CDB操作方法、表空间建立和用户数据库建立、常见启动问题解决等,并介绍了镜像制作、镜像打包、镜像迁移、容器打包和容器迁移方法等。
主要参考网站:
https://www.cnblogs.com/atuotuo/p/6999833.html
在MAC上安装docker并部署oracle12.2_docker 部署oracle 12.2.0.1-CSDN博客
一、下载镜像构建文件(docker-images-main.zip)
docker-images/OracleDatabase/SingleInstance/dockerfiles at main · oracle/docker-images · GitHub
附:如果不能直接打开,可先至:
进入OracleDatabase/SingleInstance/dockerfiles目录
二、下载oracle安装介质(V839960-01.zip)
1、下载oracle安装介质(V839960-01.zip)
Database Software Downloads | Oracle
登录oracle账号后,进入
https://edelivery.oracle.com/osdc/faces/SoftwareDelivery
点击continue, 同意协议后点击download下载:Oracle_SSN_DLM_05281401.exe
运行Oracle_SSN_DLM_05281401.exe,下载需要的安装介质V839960-01.zip
2、将下载的镜像构建文件和oracle安装介质上传到服务器
mkdir /data/oracle12c-docker
上传文件V839960-01.zip和docker-images-main.zip到/data/oracle12c-docker下
如果服务器容易上传中断,可以采用FTP服务上传
3、解压镜像构建文件,并将oracle安装介质移动到./docker-images-main/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1
解压镜像构建文件docker-images-main.zip
sudo yum install unzip
cd /data/oracle12c-docker/
unzip docker-images-main.zip
4、将oracle安装介质V839960-01.zip移动到 镜像构建文件对应版本下,并修改文件名为linuxx64_12201_database.zip
mv /data/oracle12c-docker/V839960-01.zip /data/oracle12c-docker/docker-images-main/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/
mv V839960-01.zip linuxx64_12201_database.zip
三、制作oracle12.2.0.1ee镜像
1、安装docker
(1)设置docker镜像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
(2)安装docker
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 安装docker
yum install -y docker-ce
# (3)启动docker
sudo systemctl start docker
【附:docker相关命令】
【
systemctl status docker
启动命令:systemctl start docker
停止命令:systemctl stop docker
设置开机启动:systemctl enable docker
】
2、构建oracle12.2.0.1.0镜像
(1)构建镜像
cd /data/oracle12c-docker/docker-images-main/OracleDatabase/SingleInstance/dockerfiles/
sh buildContainerImage.sh -v 12.2.0.1 -e
(2)验证是否成功
docker images
附:
(1)报错linuxx64_12201_database.zip: FAILED open or read如下,则说明未更改文件名
cd /data/oracle12c-docker/docker-images-main/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1/
mv V839960-01.zip linuxx64_12201_database.zip
(2)命令参数
四、构建oracle容器
1、创建持久化目录
chmod 777 /data/oracle12c-docker/oradata/
2、容器构建
docker run -d --name oracle-12cr2 \-p 1523:1523 -p 5500:5500 \-e ORACLE_SID=JTG \-e ORACLE_PWD=YXY123 \
-e ORACLE_BASE=/opt/oracle \
-e ORACLE_HOME=/opt/oracle/product/12.2.0.1/dbhome_1 \
-e PATH=/opt/oracle/product/12.2.0.1/dbhome_1/bin:/opt/oracle/product/12.2.0.1/dbhome_1/OPatch/:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \-v /data/oracle12c-docker/oradata/:/opt/oracle/oradata \
oracle/database:12.2.0.1-ee
五、修改oracle配置文件
1、进入容器,修改配置文件
(1)、Listener.ora文件
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1523))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = xe)
(SID_NAME = xe)
(ORACLE_HOME = /opt/oracle/product/12.2.0.1/dbhome_1)
)
)
ADR_BASE_LISTENER = /opt/oracle
DEDICATED_THROUGH_BROKER_LISTENER=ON
DIAG_ADR_ENABLED = off
(2)、tnsnames.ora文件
XE=localhost:1521/XE
ORCLPDB1=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1523))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCLPDB1)
)
)
xe =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = master)(PORT = 1523))
)
(CONNECT_DATA =
(SID = xe)
)
)
JTG =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1523))
)
(CONNECT_DATA =
(SERVICE_NAME = JTG)
)
)
六、监听器启动及数据库实例创建
1、Oracle的启动命令
(1)启动oracle
sqlplus / as sysdba
(2)创建oracle实例
startup nomount pfile=’init.ora’
(3)测试是否创建成功
select status from v$instance
(3)启动oracle监听器
lsnrctl start
(4)配置文件修改后操作
lsnrctl reload
lsnrctl start
lsnrctl status
数据库启动问题常见解决:见附录
七、创建CDB和PDB
12.2.0.1版本的数据库有CDB和PDB概念,多个PDB可插拔在CDB。创建用户即是创建数据库,用户名即为数据库名称。CDB用户名称以“C##”开头,PDB为本地用户。
我们创建一个CDB后,进入该CBD,创建PDB用户使用.
Sqlplus / as sysdba
1、创建CDB用户
alter pluggable database CDB$ROOT open;
create user c##jtg identified by Inspur123;
grant connect,resource,sysdba to c##jtg;
2、查看已有PDB
select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
3、创建PDB
CREATE PLUGGABLE DATABASE JTG ADMIN USER jtg IDENTIFIED BY "jtg";
4、打开创建的PDB数据库
alter pluggable database JTG open;
alter session set container=JTG;
-
八、PDB表空间和用户创建,用户绑定表空间
1、创建表空间
-
create tablespace USERS logging datafile '/oraDataJtg/XE/10DFE005CF4A2D21E063020011AC8573/datafile/myjtg.dbf' size 2G autoextend on next 1G maxsize unlimited extent management local;
-- 查询表空间 select name from v$datafile;
2、创建用户
进入PDB,创建用户,用户名即为数据库名
alter pluggable database JTG open;
alter session set container=JTG;
CREATE USER jtg IDENTIFIED BY jtg DEFAULT TABLESPACE USERS;
grant create session to jtg;
grant connect,resource,sysdba to jtg;
grant resource to jtg;
grant sysdba to jtg;
commit;
3、用户绑定表空间
alter user JTG default tablespace USERS ;
select name from v$datafile;
九、开放端口
#开放端口
firewall-cmd --zone=public --add-port=1503/tcp --permanent
firewall-cmd –reload
十、Navicate连接
十一、服务器登录数据库操作
由于涉及到CDB和PDB,登录时先执行
Sqlplus / as sysdba
alter pluggable database JTG open;
alter session set container=JTG;
十二、常用指令
1、日常登录:
切换会话到指定PDB及数据库
alter session set container=cdb$root; --切换会话到CDB
alter session set container=ORCLPDB; --切换会话到PDB
2、Docker镜像迁移
docker save oracle/database:12.2.0.1-ee > /data/oracle12c-docker/oracle12-2-0-1-ee_image.tar
上传打包后的镜像到另外一台服务器, 执行语句:
docker load < /data/oracle12c-docker/oracle12-2-0-1-ee_image.tar
3、Docker容器迁移
docker export -o /data/oracle12-2-0-1ee-container.tar ora12c-r2
上传打包后的容器到另外一台服务器, 执行语句:
docker import oracle12-2-0-1ee-container.tar oracle-container:v12.2.0.1
十三、附录:数据库启动问题常见解决
1、ORA-01102: cannot mount database in EXCLUSIVE mode
(1)查询共享内存段
ipcs -s
Ipcrm -s <semid>
(2)用于锁内存的文件lk和sgadef.dbf文件没有被删除。
(3)cd $ORACLE_HOME/dbs
(4)ls lk*
(5)lksid文件没有被删除。将它删除掉
(6)rm lk*
2、ORA-01172、ORA-01151 oracle 资源正忙,Oracle解锁,解决“ORA-00054:资源正忙”错误
查询被锁的会话:
conn jtg/jtg@JTG
select session_id from v$locked_object;
会话详细信息
SELECT sid, serial#, username, osuser FROM v$session where sid =
ALTER SYSTEM KILL SESSION 'sid, serial';
ALTER SYSTEM KILL SESSION '263,20112';
ALTER SYSTEM KILL SESSION ‘10,22317’;
ALTER SYSTEM KILL SESSION '748,46995';
ALTER SYSTEM KILL SESSION '137,1194';
ALTER SYSTEM KILL SESSION '384,27872';
3、创建实例提示找不到pfile,实例对应文件夹下有spfile和pfile,可以根据spfile创建pfile。
create pfile='/opt/oracle/product/12.2.0.1/dbhome_1/dbs/initjtg.ora' from spfile='/opt/oracle/product/12.2.0.1/dbhome_1/dbs/spfileJTG.ora';
startup pfile='/u01/***/*****/*****/dbs/initjtg.ora'
show parameter dump;
十四、主要总结:
1、Oracle配置:
tnsnames.ora Listener.ora
2、监听器启动方法及数据库实例启动方法
3、PDB/CDB的常见应用
4、Docker镜像制作和迁移
5、Docker容器制作和迁移