前置条件
linux版本:
CentOS Linux release 7.8.2003 (Core),别的版本请自行测试,理论上7系列问题不大
相关参数:
ORACLE_SID : ORACLESID (必须大写)
备注:如果不想从官方安装包开始弄,可以直接拉我做好的镜像,然后直接跳到
docker run这一步教程开始,可以节省时间
docker pull registry.cn-hangzhou.aliyuncs.com/cjjjj/cj-oracle-19c:v1
正片开始:
19c官方下载目录
https://www.oracle.com/database/technologies/oracle19c-linux-downloads.html
(可能需要登录才让下载,登录即可)
安装git
yum install -y git
克隆官方工具
git clone https://github.com/oracle/docker-images.git
cd /docker-images/OracleDatabase/SingleInstance/dockerfiles/
ll命令查看后,选择版本
19.3.0
cd 19.3.0
查看dockerfile文件中用的哪个安装包
cat Dockerfile|grep INSTALL_FILE_1
将安装包拷贝到该目录下(
/app/docker-images/OracleDatabase/SingleInstance/dockerfiles/19.3.0
),
运行开始安装./buildDockerImage.sh -v 19.3.0 -e
(-e表示企业版,废弃,别用)./buildContainerImage.sh -v 19.3.0 -e
(新版脚本改名了,用这个)
/docker-data/oracle目录权限一定要正确,在容器中oracle用户的uid是54321,
mkdir -p /docker-data/oracle
(没有则创建,这一步完成创建后面在授权)
所以要保证容器内的oracle用户有权限读写该目录。
如创建oracle用户且uid是54321:
groupadd -g 1000 oinstall
groupadd -g 1300 dba
groupadd -g 1301 oper
useradd -u 54321 -g oinstall -G dba,oper -d /home/oracle -s /bin/bash -c "Oracle Software Owner" oracle
echo "oracle" | passwd --stdin oracle (给宿主机用户oracle设置密码为 oracle)
chown oracle:oinstall /docker-data/oracle (非常重要,容器启动前权限授到位!!!,
可以通过 ll -a /docker-data/oracle观察归属)
启动容器
docker run --name oracle-19c \
-p 1521:1521 -p 5500:5500 \
-e ORACLE_SID=oraclesid \
-e ORACLE_PDB=oraclepdb \
-e ORACLE_PWD=oracle \
-v /docker-data/oracle:/opt/oracle/oradata \
oracle/database:19.3.0-ee
(注 oracle/database:19.3.0-ee 是buildDockerImage.sh
中默认生成的固定值,ORACLE_SID指定SID,ORACLE_PDB指定PDB)
如果"DATABASE IS READY TO USE!"提示信息,表示数据库已成功安装了。
登陆主机或数据库进行操作:docker exec -it oracle-19c /bin/bash
(普通用户进入容器)docker exec -it -u root oracle-19c /bin/bash
(以root身份进入容器)export ORACLE_SID=ORACLESID
(连接时必须大写,不然连不上,一定要先执行这个再使用sqlplus进行连接,否则连不上各种报错)
sqlplus / as sysdba
修改密码
docker exec -it oracle-19c /bin/bash
进到容器后,cd ~./setPassword.s oracle
后面的参数就是 sys和system用户后面新的密码
有了sys账号后创建别的账号啥的就可以为所欲为了
创建用户
create user username identified by password;
eg:create user C##msc identified by oracle;
–在CDB中用户得以C##开头;如果不想用C##开头可以尝试新建表空间
删除用户及其数据
drop user username cascade;
grant connect, resource to username;
我一般是本地测试用直接给的dba权限,省事(生产服务器别这么玩)
grant dba to C##msc; --在CDB中用户得以C##开头;如果不想用C##开头可以尝试新建表空间
更新容器为开机自启动命令
docker update --restart=always 容器id;