Linux下安装docker以及docker安装Oracle19c的全部详细过程及各种问题解决
1. docker 安装
-
直接 yum 命令安装
yum install -y docker
-
安装之后查看 docker 是否安装成功
yum list installed |grep docker
2. docker启动等简单命令
-
查看 docker 版本
docker -v docker version
-
查看 docker 服务状态
systemctl status docker
-
启动 docker 服务
sudo systemctl start docker
-
停止 docker 服务
systemctl stop docker
-
重启 docker 服务
systemctl restart docker
3. 配置 docker 镜像加速
-
编辑
daemon.json
:vim /etc/docker/daemon.json -
添加下面的内容:
{ "registry-mirrors": [ "https://mirror.ccs.tencentyun.com" ] }
-
重载所有修改过的配置文件
systemctl daemon-reload
-
重启服务
systemctl restart docker
4. Docker拉取镜像
- 命令:
docker pull <镜像名称>:<版本号>
- 比如拉取 redis
-
查看 redis 版本
https://hub.docker.com/_/redis
-
拉取命令:
docker pull redis:6.2.7
-
查看本地镜像
docker images
-
5. docker 安装 oracle19c
5.1 准备工作
- 拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c
- 创建挂载文件、并授权(不授权会导致后面安装失败)
[root@hello_TQ1 ~]# mkdir -p /opt/myData/oracle/oracleData [root@hello_TQ1 ~]# [root@hello_TQ1 ~]# [root@hello_TQ1 ~]# chmod -R 777 /opt/myData/
5.2 开始安装Oracle 19c
- 安装 Oracle
- 执行下面的
docker run
命令docker run -d -it --name orcl19c_03 -p 1521:1521 -p 5500:5500 -e ORACLE_SID=orcl -e ORACLE_PDB=orclPDB1 -e ORACLE_PWD=123456 -e ORACLE_EDITION=standard -e ORACLE_CHARACTERSET=AL32UTF8 -v /opt/myData/oracle/oracleData:/opt/myData/oracle/oracleData registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c
- 上面执行的命令中,备注:
ORACLE_SID=orcl
是服务名,安装后连接Oracle 时用的服务名,CDB数据库的
ORACLE_PWD=123456
是安装后 dba 用户的密码,即:123456
ORACLE_PDB=orclPDB1
是安装后的PDB数据库,想更明白一点,可以往下看6.3.1创建用户的两种方式,一个是在CDB库下,一个是下PDB库下
- 执行下面的
5.3 进入Oracle容器
-
查看oracle容器id:
docker ps
容器id 可以用上面生成的那串字符串,也可用命令docker ps
查看 -
进入容器(将oracle容器id换成你自己的id)
docker exec -it oracle容器id bash
6. docker 下连接Oracle 19c
6.1 查看安装目录等
- 进入容器查看 Oracle 安装目录
- 配置监听
- 开始配置1
本地实例名 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 远程数据库IP地址)(PORT = 远程服务器端口号)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = 远程数据库服务名) ) )
- 启动监听
启动监听命令:lsnrctl start
- 启动监听时,发现问题(待解决)
The listener supports no services
- 重新启动监听
- 开始配置1
6.2 多种方式连接Oracle
6.2.1 sqlplus 免密连接(连接后存在问题,待解决)
- 连接 Oracle
或者:sqlplus / as sysdba
sqlplus /nolo
g 然后conn /as sysdba
- 修改 dba 的密码
-
命令如下:
alter user system identified by system;
-
问题如下:报错,出现问题,如下(待解决):
ERROR at line 1: ORA-01034: ORACLE not available Process ID: 0 Session ID: 0 Serial number: 0
发现执行任何语句都报这个错,不知道什么情况,待解决!。。
-
6.2.2 sqlplus 用户密码连接(错误问题同上)
- 这个需要注意,这种连接在密码后面需要加上
as sysdba
- 连接命令:
sqlplus system/123456 as sysdba
,如下:
6.2.3 sqlplu 远程连接数据库(无错误信息)
- 两种写法
- 第一种写法:
sqlplus 用户名/密码@ip地址:端口号/数据库服务名
- 第二种写法
sqlplus 用户名/密码@//ip:1521/orcl
- 第一种写法:
6.2.4 plsql 工具连接
- 如下:
6.3 plsql 里新增用户、授权、修改密码等
6.3.1 创建用户
1. 方式一(CDB库下)
- 创建语句
create user c##susu identified by susu;
- ORA-65096 问题原因:
根据 Oracle 的版本不一样确定的,19c需要加:c##
但是这样创建之后,我们创建了一个c##susu
的用户,这不是我们想要的用户,看着难受,所以我么可以把这个给修改了,试试再说,修改的时候,如果提示没有权限,就用sys
用户 以sysdba
进行登录即可修改 用户
-
修改时,只需执行下面一条 update 语句即可,执行完之后 all_users 与 dba_users 的数据都会更新成 susu.
update all_users t set t.USERNAME='susu' where t.USER_ID='106';
-
但是修改完之后该用户就不能用了,不能进行授权等,上网搜了一下说刷新,刷新也不好用,
alter system checkpoint; alter system flush shared_pool;
-
2. 方式2(PDB库下)
-
真的有点接收不了那个c##,继续查了一下,大概结论是:==在CDB容器中创建用户时,前面必须添加C## ,而PDB数据库不需要加前缀。==尝试试试
-
查看一下我的PDB数据库,试试切换,下面的
ORCLPDB1
就是上面我们在用 docker run 安装oracle数据库时定义的那个名字,我们接下来就切换到这个数据库试试select t.CON_ID,t.name,t.OPEN_MODE from v$containers t;
1 1 CDB$ROOT 1646200604 READ WRITE 2 2 PDB$SEED 313548930 READ ONLY 3 3 ORCLPDB1 2020570011 READ WRITE
-
接下来进入 PDB 容器,
ORCLPDB1
是上面查出来的alter session set container=ORCLPDB1;
-
切换容器之后,再创建用户试试,可以不用加c##来创建用户了
-
创建、授权、修改密码都没有问题,但是登录出了问题
-
解决上面登录不上的问题,换一下数据库即可,数据库连错了,要换成对应的pdb数据库
orclpdb1
6.3.2 给用户授权等
-
重点是上边的,这个我们就简单写个语句就好了,看下面的即可
-
给用户并授权,如下:
--给新创建的用户赋予权限: grant create session to susu;--登录权限】 grant connect ,resource,dba to susu; grant create any table to hi;
-
授予可执行存储过程的权限
问题:在Oracle存储过程使用 execute immediate 语句建表时可能会存在权限不足的问题。
解决问题:grant create any table to hi;
,执行此语句授权之后即可解决 -
修改密码
alter user susu identified by susu123;