使用docker搭建oracle数据库

1、oracle cdb和pdb

  • CDB :容器数据库,名称为 CDB$ROOT。其作用就是系统数据库,sys等账号都保存在里面。同时它可以管理PDB数据库
  • PDB :可插拔的数据库。用户可以在PDB自建数据库
    • Oracle安装成功后有个默认的pdb数据库(在安装Oracle的时候自己设定)
    • PDB中自带有PDB$SEED,属于PDB的模板数据库,自己创建数据库的时候以此库为模板

一、cdb 和 pdb 常见操作

1. 查看PDB信息

sql 复制代码
SQL> show pdbs --查看所有pdb
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           READ WRITE NO
         4 PDB2                           READ WRITE NO
         5 SBDB1                          READ WRITE NO
sql 复制代码
SQL> col name for a20
SQL> select name,dbid,open_mode from v$pdbs; --v$pdbs为PDB信息视图
SQL> select name,dbid,open_mode from v$pdbs;
NAME                       DBID OPEN_MODE
-------------------- ---------- ----------
PDB$SEED              943290432 READ ONLY
PDB1                 1666453508 READ WRITE
PDB2                 1345465961 READ WRITE
SBDB1                3044255387 READ WRITE

2.切换容器

sql 复制代码
SQL> alter session set container=sbdb1 --切换到PDB sbdb1
SQL> alter session set container=CDB$ROOT --切换到CDB容器

查看当前属于哪个容器

sql 复制代码
SQL> show con_name;/show pdbs; --用show查看当前属于哪个容器
SQl> select sys_context('USERENV','CON_NAME') from dual; --使用sys_context查看属于哪个容

3. 启动PDB

sql 复制代码
SQL> alter pluggable database sbdb1 open; --开启指定PDB
SQL> alter pluggable database all open; --开启所有PDB
SQL> alter session set container=sbdb1; --切换到PDB进去开启数据库
SQL> startup

4.关闭PDB

sql 复制代码
SQL> alter pluggable database sbdb1 close; --关闭指定的PDB
SQL> alter pluggable database all close; --关闭所有PDB
SQL> alter session set container=sbdb1; --切换到PDB进去关闭数据库
SQL> shutdown immediate

5.创建PDB

创建或克隆前要指定文件映射的位置(需要CBD下sysdba权限)

sql 复制代码
SQL> alter system set db_create_file_dest='/u01/app/oracle/oradata';

创建一个新的PDB(需要CBD下sysdba权限)

sql 复制代码
SQL> create pluggable database sbdb2 admin user sbdb2_user identified by oracle;
SQL> alter pluggable database sbdb2 open; --将PDB sbdb2 打开

6.克隆PDB

(需要CBD下sysdba权限)

sql 复制代码
SQL> create pluggable database sbdb3 from sbdb1; --sbdb1必须是打开的,才可以被克隆
SQL> alter pluggable database sbdb3 open; --然后打开这个pdb

7. 删除PDB

(需要CBD下sysdba权限)

sql 复制代码
SQL> alter pluggable database sbdb3 close; --关闭之后才能删除
SQL> drop pluggable database sbdb3 including datafiles; --删除PDB sbdb3

8.设置CDB中PDB自动启动

方式一:设置触发器

sql 复制代码
CREATE TRIGGER open_all_pdbs
AFTER STARTUP
ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'alter pluggable database all open';
END open_all_pdbs;
/

方式二:使用save state参数(12cR2及以上版本)

通过SAVE STATE保存CDB重启前PDB的状态。这样重启CDB之后,会自动打开PDB到之前的状态。

sql 复制代码
SQL> ALTER PLUGGABLE DATABASE sbdb1 SAVE STATE;
SQL> ALTER PLUGGABLE DATABASE all SAVE STATE;

取消保存CDB重启前PDB的状态

sql 复制代码
SQL> ALTER PLUGGABLE DATABASE sbdb1 DISCARD STATE;
SQL> ALTER PLUGGABLE DATABASE all DISCARD STATE;

二、直连PDB

检查监听文件是否有下面的内容,没有则加上,其中的IP地址是虚拟机的ip :

三、解决连接错误(ORA-01034: ORACLE not available)

查看监听进程状态

lua 复制代码
lsnrctl status 

查看进程

perl 复制代码
ps -ef|grep ora_pm

查看 环境变量

bash 复制代码
env|grep SID 

由此可以看出是环境变量有问题 临时解决

ini 复制代码
export ORACLE_SID=XE;

永久解决

2、搭建Oracle11g

bash 复制代码
docker pull rohitbasu77/oracle11g

docker run -d --name oracle11g -p 40022:22 -p 41521:1521 -p 48080:8080 rohitbasu77/oracle11g:latest

连接信息

vbnet 复制代码
Connect database:

hostname: docker machine ip 
port: 41521
sid: xe
username: system
password: oracle
Password for SYS & SYSTEM is oracle
Password for fareuser, searchuser, bookinguser, checkinuser is rohit123

3、搭建 oracle12c

bash 复制代码
docker pull fluigfws/oracle12c

docker run -d --name oracle11g -p 5500:5500 -p 1522:1521  fluigfws/oracle12c

连接信息

yaml 复制代码
Connect database:
hostname: docker machine ip 
port: 1522
sid: xe
username: system
password: oracle
Password for SYS & SYSTEM is oracle

4、搭建oracle 19c

bash 复制代码
docker pull registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c 

docker run -d -p 1528:1521 -p 5505:5500 -e ORACLE_SID=XE -e ORACLE_PDB=ORCLPDB1 -e ORACLE_PWD=123456 -e ORACLE_EDITION=standard -e ORACLE_CHARACTERSET=AL32UTF8 -v /mydata/oracle/oradata:/opt/oracle/oradata --name orcl19c_03 registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c

连接信息

vbnet 复制代码
Connect database:

hostname: docker machine ip  
port: 1528
sid: ORCLPDB1
username: system
password: 123456
Password for SYS & SYSTEM is oracle


docker exec -it orcl19c_03 /bin/bash sqlplus / as sysdba show pdbs;
如许就能够了 还能够经由过程拜访https://localhost:5505/em
username:sys password:123456 Container Name:ORCLPDB1

5、搭建 oracle 21c

bash 复制代码
docker pull nomhiro1204/oracle21c

mkdir Oracle21

docker run -d --name oracle21 \
-p 31521:1521 -p 35500:5500 \
-e ORACLE_SID=XE \
-e ORACLE_PDB=ORCLPDB1 \
-e ORACLE_PWD=123456 \
nomhiro1204/oracle21c:latest

配置信息

bash 复制代码
docker exec -it oracle21 bash

依次执行如下命令进入oracle并设置 PDB
grep $ORACLE_HOME /etc/oratab | cut -d: -f1
export ORACLE_SID=ORCLCDB
sqlplus / as sysdba
- 设置pdb
show pdbs;
alter session set container=ORCLPDB1;

要是忘记密码可以进入容器使用脚本设置密码
./setPassword.sh 新密码

连接信息

vbnet 复制代码
Connect database:

hostname: docker machine ip 
port: 31521
sid: ORCLPDB1
username: system
password: 123456
Password for SYS & SYSTEM is oracle

6、搭建oracle 23c

bash 复制代码
docker pull holgerdewall/oracle23c_apex


docker run -d -it --name my_oracle -p 1523:1521 -p 5555:5500 -e ORACLE_PWD=123456 container-registry.oracle.com/database/free:latest

连接信息

yaml 复制代码
Connect database:

hostname: docker machine ip 
port: 1523
sid: FREEPDB1
username: system
password: 123456
Password for SYS & SYSTEM is oracle
相关推荐
Cengineering2 分钟前
sqlalchemy 加速数据库操作
数据库
【D'accumulation】4 分钟前
令牌主动失效机制范例(利用redis)注释分析
java·spring boot·redis·后端
2401_8543910814 分钟前
高效开发:SpringBoot网上租赁系统实现细节
java·spring boot·后端
Cikiss22 分钟前
微服务实战——SpringCache 整合 Redis
java·redis·后端·微服务
Cikiss24 分钟前
微服务实战——平台属性
java·数据库·后端·微服务
OEC小胖胖37 分钟前
Spring Boot + MyBatis 项目中常用注解详解(万字长篇解读)
java·spring boot·后端·spring·mybatis·web
小小不董37 分钟前
《Linux从小白到高手》理论篇:深入理解Linux的网络管理
linux·运维·服务器·数据库·php·dba
2401_857617621 小时前
SpringBoot校园资料平台:开发与部署指南
java·spring boot·后端
无敌少年小旋风1 小时前
MySQL 内部优化特性:索引下推
数据库·mysql
计算机学姐1 小时前
基于SpringBoot+Vue的在线投票系统
java·vue.js·spring boot·后端·学习·intellij-idea·mybatis