ITPub博客

首页 > 数据库 > Oracle > Docker中安装Oracle 19c

Docker中安装Oracle 19c

原创 Oracle 作者:lhrbest 时间:2020-03-31 15:59:07 0 删除 编辑

参考:

https://www.jianshu.com/p/b683640677c9

https://www.jianshu.com/p/9000cdd58cd8

https://blog.csdn.net/qianglei6077/article/details/103886056


https://github.com/oracle/docker-images

https://github.com/oracle/docker-images/tree/master/OracleDatabase/SingleInstance

https://github.com/mysql/mysql-docker

https://github.com/oracle/docker-images/tree/master/OracleDatabase/RAC



------------------ Docker 安装19.3企业版
cd /
git clone https://github.com/oracle/docker-images.git
cd /docker-images/OracleDatabase/SingleInstance/dockerfiles/19.3.0/
wget https://download.oracle.com/otn/linux/oracle19c/190000/LINUX.X64_193000_db_home.zip?AuthParam=1585643275_8ef5dad33171ee0e1708ea00f4b54328
wget http://rpmfind.net/linux/epel/6/x86_64/Packages/r/rlwrap-0.42-1.el6.x86_64.rpm
cd docker-images/OracleDatabase/SingleInstance/dockerfiles/19.3.0/
vi Dockerfile
#FROM oraclelinux:7-slim as base
FROM centos:7.6.1810 as base
....
# Copy files needed during both installation and runtime
# -------------
COPY $SETUP_LINUX_FILE $CHECK_SPACE_FILE $INSTALL_DIR/
COPY oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm $INSTALL_DIR/
COPY rlwrap-0.42-1.el6.x86_64.rpm $INSTALL_DIR/
COPY $RUN_FILE $START_FILE $CREATE_DB_FILE $CONFIG_RSP $PWD_FILE $CHECK_DB_FILE $USER_SCRIPTS_FILE $ORACLE_BASE/ 
....
## 修改文件
vi setupLinuxEnv.sh
mkdir -p $ORACLE_BASE/scripts/setup && \
mkdir -p $ORACLE_BASE/scripts/startup && \
mkdir -p $ORACLE_BASE/oradata && \
mkdir -p $ORACLE_HOME && \
ln -s $ORACLE_BASE/scripts /docker-entrypoint-initdb.d && \
chmod ug+x $ORACLE_BASE/*.sh && \
yum -y install oracle-database-preinstall-19c openssl && \
yum -y localinstall /opt/install/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm  &&  \
yum -y localinstall /opt/install/rlwrap-0.42-1.el6.x86_64.rpm && \
yum -y install openssl  && \
yum -y install openssl-devel && \
yum -y install lsof && \
yum -y install iproute && \
yum -y install net-tools && \
yum -y install rsyslog && \
yum -y install bash-completion && \
yum -y install tmux && \
yum -y install lrzsz && \
yum -y install telnet && \
rm -rf /var/cache/yum && \
ln -s $ORACLE_BASE/$PWD_FILE /home/oracle/ && \
echo oracle:lhr | chpasswd && \
echo root:lhr | chpasswd && \
chown -R oracle:dba $ORACLE_BASE
vi installDBBinaries.sh
…
# Temp location
#rm -rf /tmp/* && \
…
./buildDockerImage.sh -v 19.3.0 -e
groupadd -g 1300 dba
groupadd -g 1301 oper
groupadd -g 1302 oinstall
useradd -u 54321 -g oinstall -G dba,oper -d /home/oracle -s /bin/bash -c "Oracle Software Owner" oracle
echo "lhr" | passwd --stdin oracle
mkdir -p /oracle/oradata
chown oracle:oinstall /oracle/oradata
docker run -e TZ="Asia/Shanghai" -itd -h oracle19clhr  --name oracle19clhr \
-p 1521:1521 -p 5500:5500 \
-e ORACLE_SID=DCLHR \
-e ORACLE_PDB=LHRPDB1 \
-e ORACLE_PWD=lhr \
-e ORACLE_CHARACTERSET=AL32UTF8 \
-v /oracle/oradata:/opt/oracle/oradata \
oracle/database:19.3.0-ee
docker logs -f oracle19clhr
--修改密码
docker exec <container name> ./setPassword.sh <your password>
docker exec -it oracle19clhr /bin/bash
export ORACLE_SID=DCLHR
sqlplus / as sysdba
sqlplus sys/lhr@121.36.78.6/DCLHR AS sysdba
sqlplus sys/<your password>@//localhost:1521/<your SID> as sysdba
sqlplus system/<your password>@//localhost:1521/<your SID>
sqlplus pdbadmin/<your password>@//localhost:1521/<Your PDB name>
https://121.36.78.6:5500/em/
vi ~/.bash_profile
export ORACLE_SID=DCLHR
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
export PATH=$PATH:$ORACLE_HOME/bin
export EDITOR=vi
stty erase ^H
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
alias sas='sqlplus / as sysdba'
source ~/.bash_profile
vi /etc/pam.d/su
注释:#session                include         system-auth
vi $ORACLE_HOME/sqlplus/admin/glogin.sql
set linesize 1000 pagesize 1000
set sqlprompt "_USER'@'_CONNECT_IDENTIFIER> "
vi $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER =
  (SID_LIST =
   (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /opt/oracle/product/19c/dbhome_1)
      (PROGRAM = extproc)
    )
   (SID_DESC =
     (GLOBAL_DBNAME = DCLHR)
     (SID_NAME = DCLHR)
     (ORACLE_HOME = /opt/oracle/product/19c/dbhome_1)
   )
  )
lsnrctl reload
---------- 修改数据库数据文件路径,便于打包传播
# docker inspect oracle19clhr | grep Destination
[root@ecs-rac1 ~]# docker inspect oracle19clhr | grep Mounts -A 8
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/oracle/oradata",
                "Destination": "/opt/oracle/oradata",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
所有在目录“/opt/oracle/oradata”下的文件都需要移动到容器内的其他地方,否则导出导入容器这些文件不会移动。
关闭数据库后进行操作
mkdir -p /oracle/oradata19c
chown oracle.oinstall /oracle/oradata19c
chown -R oracle.oinstall /oracle/oradata19c
cp -R * /oracle/oradata19c/
拷贝listener.ora、sqlnet.ora、tnsnames.ora、orapwDCLHR、spfileDCLHR.ora至相应位置,取消原有的硬连接。
startup nomount
alter system set control_files='/oracle/oradata19c/DCLHR/control01.ctl' scope=spfile;
startup force mount
select 'alter database rename file '''||name||''' to ''' || name || ''';' from v$datafile;
alter database rename file '/opt/oracle/oradata/DCLHR/redo01.log' to '/oracle/oradata19c/DCLHR/redo01.log';
alter database rename file '/opt/oracle/oradata/DCLHR/redo02.log' to '/oracle/oradata19c/DCLHR/redo02.log';
alter database rename file '/opt/oracle/oradata/DCLHR/redo03.log' to '/oracle/oradata19c/DCLHR/redo03.log';
alter database rename file '/opt/oracle/oradata/DCLHR/system01.dbf' to '/oracle/oradata19c/DCLHR/system01.dbf';
alter database rename file '/opt/oracle/oradata/DCLHR/sysaux01.dbf' to '/oracle/oradata19c/DCLHR/sysaux01.dbf';
alter database rename file '/opt/oracle/oradata/DCLHR/undotbs01.dbf' to '/oracle/oradata19c/DCLHR/undotbs01.dbf';
alter database rename file '/opt/oracle/oradata/DCLHR/pdbseed/system01.dbf' to '/oracle/oradata19c/DCLHR/pdbseed/system01.dbf';
alter database rename file '/opt/oracle/oradata/DCLHR/pdbseed/sysaux01.dbf' to '/oracle/oradata19c/DCLHR/pdbseed/sysaux01.dbf';
alter database rename file '/opt/oracle/oradata/DCLHR/users01.dbf' to '/oracle/oradata19c/DCLHR/users01.dbf';
alter database rename file '/opt/oracle/oradata/DCLHR/pdbseed/undotbs01.dbf' to '/oracle/oradata19c/DCLHR/pdbseed/undotbs01.dbf';
alter database rename file '/opt/oracle/oradata/DCLHR/LHRPDB1/system01.dbf' to '/oracle/oradata19c/DCLHR/LHRPDB1/system01.dbf';
alter database rename file '/opt/oracle/oradata/DCLHR/LHRPDB1/sysaux01.dbf' to '/oracle/oradata19c/DCLHR/LHRPDB1/sysaux01.dbf';
alter database rename file '/opt/oracle/oradata/DCLHR/LHRPDB1/undotbs01.dbf' to '/oracle/oradata19c/DCLHR/LHRPDB1/undotbs01.dbf';
alter database rename file '/opt/oracle/oradata/DCLHR/LHRPDB1/users01.dbf' to '/oracle/oradata19c/DCLHR/LHRPDB1/users01.dbf';
ALTER datatabase open;
---保证数据库正常
-- 还可以自己在容器内新建数据库
su - root
mkdir -p /u01/app/oracle/oradata
mkdir -p /u01/app/oracle/flash_recovery_area
chown oracle.dba /u01/app/oracle/oradata
chown oracle.dba /u01/app/oracle/flash_recovery_area
su - oracle
dbca -silent -createDatabase -templateName General_Purpose.dbc -responseFile NO_VALUE \
-gdbname lhrdb  -sid lhrdb \
-createAsContainerDatabase false \
-sysPassword lhr -systemPassword lhr \
-datafileDestination '/u01/app/oracle/oradata' -recoveryAreaDestination '/u01/app/oracle/flash_recovery_area' \
-storageType FS \
-redoLogFileSize 50 \
-characterset AL32UTF8 -nationalCharacterSet AL16UTF16 \
-sampleSchema true \
-memoryPercentage 30 \
-databaseType OLTP  \
-emConfiguration NONE
-- 将容器打包成镜像,执行docker commit
docker container stop oracle19clhr
docker commit oracle19clhr oracle19clhr_db
docker save oracle19clhr_db > oracle19clhr_db.tar
docker load < oracle19clhr_db.tar
--导出容器
docker export oracle19clhr > oracle19clhr_db.tar
--复制新镜像到其他环境后
scp oracle19clhr_db.tar root@192.168.6.161:/root/
-- 然后导入tar包(导入后是镜像)
docker import oracle19clhr_db.tar oracle19clhr_db:19.3.0-ee
-- 创建新的容器
docker run -itd -h oracle19c --name oracle19c  -p 1521:1521 -p 5500:5500  oracle19clhr_db:19.3.0-ee  /bin/bash
docker logs -f oracle19c
docker exec -it oracle19c /bin/bash
su - oracle
lsnrctl start
sqlplus / as sysdba
startup 
docker volume create ora19clhr
docker inspect ora19clhr
docker volume ls
docker volume rm ora19clhr
-- 上传到docker hub
docker commit 6c1870bee3a5 lhrbest/oracle19c-ee
docker login
docker push lhrbest/oracle19c-ee:latest





Docker制作Oracle19c镜像

1. 介质准备

1.1. 下载Oracle docker build file

近期Oracle 官方发布了19.3 版本的docke-images 构建程序,可在这里下载:可到github下载docker-images-master.zip

https://github.com/oracle/docker-images




将下好的docker-images-master.zip 解压放在  /Users/myz/Docker/ 目录下:
cd /Users/myz/Docker/docker-images-master/OracleDatabase/SingleInstance/dockerfiles/19.3.0/



1.2. 下载Oracle19c 预安装程序

手动下载oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm ,同样放在19.3.0/ 目录下
下载地址:

http://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm


1.3.  准备Oracle19c的安装程序

下载19C安装介质(可从官网) LINUX.X64_193000_db_home.zip同样放在19.3.0/ 目录下
其他可根据需要 把常用的安装包也放到这个位置 下, 如我常用  rlwrap-0.42-1.el6.x86_64.rpm

image.png


2. 配置 Oracle image

2.1. 修改Dockerfile

使用自带的oraclelinux:7-slim 及用官网介绍的方法遇到一些问题不好解决.  后来换成我常用的基础镜像centos:7.6.1810 加Oracle预安装文件oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm最后成功构建 .

vi Dockerfile
#FROM oraclelinux:7-slim as base
FROM centos:7.6.1810 as base
....
# Copy files needed during both installation and runtime
# -------------
COPY $SETUP_LINUX_FILE $CHECK_SPACE_FILE $INSTALL_DIR/
COPY oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm $INSTALL_DIR/
COPY rlwrap-0.42-1.el6.x86_64.rpm $INSTALL_DIR/
COPY $RUN_FILE $START_FILE $CREATE_DB_FILE $CONFIG_RSP $PWD_FILE $CHECK_DB_FILE $USER_SCRIPTS_FILE $ORACLE_BASE/ 
....




2.2. 修改setupLinuxEnv.sh

使用本地安装preinstall 包, 及增加些其他常用工具包;

vi setupLinuxEnv.sh
…
mkdir -p $ORACLE_BASE/scripts/setup && \
mkdir $ORACLE_BASE/scripts/startup && \
ln -s $ORACLE_BASE/scripts /docker-entrypoint-initdb.d && \
mkdir $ORACLE_BASE/oradata && \
mkdir -p $ORACLE_HOME && \
chmod ug+x $ORACLE_BASE/*.sh && \
yum -y install oracle-database-preinstall-19c openssl && \
yum -y localinstall /opt/install/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm   \
&& yum -y install openssl  \
&& yum -y install openssl-devel \
&& yum -y install lsof \
&& yum -y install iproute \
&& yum -y install net-tools \
&& yum -y install rsyslog \
&& yum -y install bash-completion \
&& yum -y install tmux \
&& yum -y install lrzsz \
&& yum -y install telnet \
&& yum -y localinstall /opt/install/rlwrap-0.42-1.el6.x86_64.rpm && \
rm -rf /var/cache/yum && \
ln -s $ORACLE_BASE/$PWD_FILE /home/oracle/ && \
echo oracle:welcome1 | chpasswd && \
echo root:welcome1 | chpasswd && \
chown -R oracle:dba $ORACLE_BASE




2.3. 修改installDBBinaries.sh 文件




vi installDBBinaries.sh

# Temp location

#rm -rf /tmp/* && \

这里需要注释掉 rm /tmp/* 动作, 不然会报如下错误:




rm: cannot remove '/tmp/ks-script-6pKh_p': Operation not permitted

rm: cannot remove '/tmp/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm': Operation not permitted

rm: cannot remove '/tmp/yum.log': Operation not permitted

Removing intermediate container 508f7c0f5041

The command '/bin/sh -c chmod ug+x $INSTALL_DIR/*.sh &&     sync &&     $INSTALL_DIR/$INSTALL_DB_BINARIES_FILE $DB_EDITION' returned a non-zero code: 1ERROR: Oracle Database Docker Image was NOT successfully created.ERROR: Check the output and correct any reported problems with the docker build operation.



2.4 .其它视需要

默认数据库 CDB模式,   数据库名 ORCLCDB,   PDB name  为 ORCLDPB1 (可在run时指定)
其他可视需要修改 createDB.sh 及runOracle.sh



3. 构建 Oracle镜像

Dockfile所在上一级目录下下执行build

./buildDockerImage.sh -v 19.3.0  -e



大概10分钟左右成功完成镜像制作
如果过程中报错,需要仔细查看报错文件及内容进行排错;


接下来就可以通过该镜像来安装部署Oracle19c实例....



Docker安装Oracle19c

1. 准备镜像

接上一章 准备好Oraccle19c镜像:

https://www.jianshu.com/p/b683640677c9


2. 通过镜像创建实例

2.1. 创建实例

把数据文件 ,参数配置文件 ,tns ,监听挂载出来
分配2G内存,设定时区, 容器中的主机名,  容器名, 端口映身等

mkdir  -p /Users/myz/Docker/Oracle/19.3/
--执行创建
docker run -e TZ="Asia/Shanghai"  -itd -h ora193 -m 2048m --name ora193 \
  -p 1521:1521 -p 5500:5500 \
  -e ORACLE_SID=mycdb \
  -e ORACLE_PDB=pdb1 \
  -v /Users/myz/Docker/Oracle/19.3/:/opt/oracle/oradata  oracle/database:19.3.0-ee




通过命令:docker logs -f ora193  观察部署进度,预估15-25分钟完成

myzmac:Oracle myz$ docker logs -f ora193ORACLE PASSWORD FOR SYS, SYSTEM AND PDBADMIN: C1eNxx1/a+k=1LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 21-FEB-2020 00:03:01Copyright (c) 1991, 2019, Oracle.  All rights reserved.Starting /opt/oracle/product/19c/dbhome_1/bin/tnslsnr: please wait...TNSLSNR for Linux: Version 19.0.0.0.0 - ProductionSystem parameter file is /opt/oracle/product/19c/dbhome_1/network/admin/listener.oraLog messages written to /opt/oracle/diag/tnslsnr/ora193a/listener/alert/log.xmlListening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))STATUS of the LISTENER------------------------Alias                     LISTENERVersion                   TNSLSNR for Linux: Version 19.0.0.0.0 - ProductionStart Date                21-FEB-2020 00:03:01Uptime                    0 days 0 hr. 0 min. 0 secTrace Level               offSecurity                  ON: Local OS AuthenticationSNMP                      OFFListener Parameter File   /opt/oracle/product/19c/dbhome_1/network/admin/listener.oraListener Log File         /opt/oracle/diag/tnslsnr/ora193/listener/alert/log.xmlListening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))The listener supports no servicesThe command completed successfullyPrepare for db operation8% completeCopying database files31% completeCreating and starting Oracle instance32% complete36% complete<---这里时间比较久40% complete43% complete46% completeCompleting Database Creation51% complete54% completeCreating Pluggable Databases58% complete77% completeExecuting Post Configuration Actions100% completeDatabase creation complete. For details check the logfiles at:
 /opt/oracle/cfgtoollogs/dbca/MYCDB.Database Information:Global Database Name: MYCDBSystem Identifier(SID): MYCDBLook at the log file "/opt/oracle/cfgtoollogs/dbca/MYCDB/MYCDB.log" for further details.SQL*Plus: Release 19.0.0.0.0 - Production on Fri Feb 21 00:25:35 2020Version 19.3.0.0.0Copyright (c) 1982, 2019, Oracle.  All rights reserved.Connected to:Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - ProductionVersion 19.3.0.0.0SQL>System altered.SQL>System altered.SQL>Pluggable database altered.SQL>PL/SQL procedure successfully completed.SQL> Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - ProductionVersion 19.3.0.0.0The Oracle base remains unchanged with value /opt/oracle#########################DATABASE IS READY TO USE!#########################The following output is now a tail of the alert.log:ORCLPDB1(3):ALTER DATABASE DEFAULT TABLESPACE "USERS"ORCLPDB1(3):Completed: ALTER DATABASE DEFAULT TABLESPACE "USERS"2020-02-21T00:25:35.547850+08:00ALTER SYSTEM SET control_files='/opt/oracle/oradata/MYCDB/control01.ctl' SCOPE=SPFILE;2020-02-21T00:25:35.568154+08:00ALTER SYSTEM SET local_listener='' SCOPE=BOTH;
   ALTER PLUGGABLE DATABASE PDB1 SAVE STATECompleted:    ALTER PLUGGABLE DATABASE PDB1 SAVE STATEXDB initialized.^Cmyzmac:Oracle myz$

当看到显示 DATABASE IS READY TO USE!
表示部署完成, 可以ctrl+c退出Log,  查看实例:

myzmac:Oracle myz$ docker ps -a
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS                     PORTS                                            NAMES
02c23cc4cda5        oracle/database:19.3.0-ee   "/bin/sh -c 'exec $O…"   27 minutes ago      Up 27 minutes (healthy)    0.0.0.0:1521->1521/tcp, 0.0.0.0:5500->5500/tcp   ora193

3. 使用

设置sys,system等用户密码

docker exec ora193  ./setPassword.sh welcome1

3.1. 客户端连接

 sqlplus sys/oracle@//127.0.0.1:1521/mycdb as sysdbaSQL> sho pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO         3 PDB1                           READ WRITE NO
SQL>   
 sqlplus sys/oracle@//127.0.0.1:1521/pdb1 as sysdbaSQL> sho con_name
CON_NAME------------------------------PDB1
SQL>

3.2. 容器本地连接

需要配置环境变量,不然报如下错

myzmac:Oracle myz$ docker exec -it ora193a  bash[oracle@ora193a ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Fri Feb 21 00:33:03 2020Version 19.3.0.0.0Copyright (c) 1982, 2019, Oracle.  All rights reserved.ERROR:ORA-12162: TNS:net service name is incorrectly specifiedEnter user-name: ^C[oracle@ora193a ~]$  
--这里报错是因为没有配环境变量

配置bash_profile

vi ~/.bash_profile 
--增加如下内容
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
export EDITOR=vi
stty erase ^H
vi ~/.bashrc
--增加如下内容
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
export ORACLE_SID=MYCDB
PS1='\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[35;40m\]\W\[\e[0m\]]\$'
alias tf='tail -100f /opt/oracle/diag/rdbms/mycdb/MYCDB/trace/al*.log'
alias tf100='tail -100 /opt/oracle/diag/rdbms/mycdb/MYCDB/trace/al*.log|more'
alias tf1000='tail -1000 /opt/oracle/diag/rdbms/mycdb/MYCDB/trace/al*.log|more'

不知道为什么ORACLEA_SID写到.bash_profile中并不生效.. 改到bashrc中了
重新登录

[oracle@ora193~]$ sqlplus / as sysdba       
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Dec 31 20:57:15 2019Version 19.3.0.0.0Copyright (c) 1982, 2019, Oracle.  All rights reserved.Connected to:Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - ProductionVersion 19.3.0.0.0SQL>

4. 其他操作, 如迁移容器:

导出该容器,做为新的镜像 , 过程为 容器-> 导出为镜像-> scp-> 导入镜像->创建实例

--导出
docker export 02c23cc4cda5 >  19c.tar
--复制新镜像到其他环境后然后导入tar包(导入后是镜像)docker import 19c.tar  oracle19c:19.3
--就可以创建个新的容器出来, 如果是本机注意外挂目录, 及映身端口的不同



Docker安装Oracle 19c


安装Oracle 19c

有时候为了试验,需要安装Oracle新版本数据库,由于安装比较繁琐耗时,所以可通过docker快速安装部署。

说明

有两种方式安装:
1.通过官方dockerfile自己编译镜像安装
2.通过已编译好的镜像安装(已上传到hub.docker.com仓库中)

下载官方oracle的docker镜像

[root@docker LEI]# git clone https://github.com/oracle/docker-images.git
Cloning into 'docker-images'...
remote: Enumerating objects: 77, done.
remote: Counting objects: 100% (77/77), done.
remote: Compressing objects: 100% (52/52), done.
remote: Total 9878 (delta 25), reused 55 (delta 23), pack-reused 9801
Receiving objects: 100% (9878/9878), 10.20 MiB | 2.47 MiB/s, done.
Resolving deltas: 100% (5686/5686), done.
[root@docker LEI]# cd /docker-images/OracleDatabase/SingleInstance/dockerfiles/
[root@docker dockerfiles]# ll
总用量 24
drwxr-xr-x. 2 1101 oinstall  126 12月 24 04:12 11.2.0.2
drwxr-xr-x. 2 1101 oinstall 4096 12月 24 04:12 12.1.0.2
drwxr-xr-x. 2 1101 oinstall 4096 12月 24 04:12 12.2.0.1
drwxr-xr-x. 2 1101 oinstall 4096 12月 24 04:12 18.3.0
drwxr-xr-x. 2 1101 oinstall  159 12月 24 04:12 18.4.0
drwxr-xr-x. 2 1101 oinstall 4096 1月   7 17:36 19.3.0
-rwxr-xr-x. 1 1101 oinstall 5103 12月 24 04:12 buildDockerImage.sh123456789101112131415161718

目前支持以上几个版本的docker安装。

开始安装

1. 下载官方的dockerfile:

[root@docker LEI]# git clone https://github.com/oracle/docker-images.git
Cloning into 'docker-images'...
remote: Enumerating objects: 77, done.
remote: Counting objects: 100% (77/77), done.
remote: Compressing objects: 100% (52/52), done.
remote: Total 9878 (delta 25), reused 55 (delta 23), pack-reused 9801
Receiving objects: 100% (9878/9878), 10.20 MiB | 2.47 MiB/s, done.
Resolving deltas: 100% (5686/5686), done.
[root@docker LEI]# cd /docker-images/OracleDatabase/SingleInstance/dockerfiles/
[root@docker dockerfiles]# ll
总用量 24
drwxr-xr-x. 2 1101 oinstall  126 12月 24 04:12 11.2.0.2
drwxr-xr-x. 2 1101 oinstall 4096 12月 24 04:12 12.1.0.2
drwxr-xr-x. 2 1101 oinstall 4096 12月 24 04:12 12.2.0.1
drwxr-xr-x. 2 1101 oinstall 4096 12月 24 04:12 18.3.0
drwxr-xr-x. 2 1101 oinstall  159 12月 24 04:12 18.4.0
drwxr-xr-x. 2 1101 oinstall 4096 1月   7 17:36 19.3.0
-rwxr-xr-x. 1 1101 oinstall 5103 12月 24 04:12 buildDockerImage.sh      ---制作镜像123456789101112131415161718

我们看到是存在19.3.0的dockerfile的,同时检查其安装的安装包文件名:

[root@docker dockerfiles]# cd 19.3.0/
[root@docker 19.3.0]# cat Dockerfile|grep INSTALL_FILE_1
    INSTALL_FILE_1="LINUX.X64_193000_db_home.zip" \             --可以看到Oracle的安装介质文件名
COPY --chown=oracle:dba $INSTALL_FILE_1 $INSTALL_RSP $INSTALL_DB_BINARIES_FILE $INSTALL_DIR/1234

2. 将安装包拷贝到该目录下,运行开始安装:

需要提前下载Oracle安装介质,文件名默认是不需要更改的,应该是 LINUX.X64_193000_db_home.zip,然后将其复制到对应版本的目录下即可。

[root@docker 19.3.0]# ll
总用量 2988068
-rwxr-xr-x. 1 1101 oinstall       1050 12月 24 04:12 checkDBStatus.sh
-rwxr-xr-x. 1 1101 oinstall        905 12月 24 04:12 checkSpace.sh
-rw-r--r--. 1 1101 oinstall         63 12月 24 04:12 Checksum.ee
-rw-r--r--. 1 1101 oinstall         63 12月 24 04:12 Checksum.se2
-rwxr-xr-x. 1 1101 oinstall       3088 12月 24 04:12 createDB.sh
-rw-r--r--. 1 1101 oinstall       9204 12月 24 04:12 dbca.rsp.tmpl
-rw-r--r--. 1 1101 oinstall       6878 12月 24 04:12 db_inst.rsp
-rw-r--r--. 1 1101 oinstall       3357 12月 24 04:12 Dockerfile
-rwxr-xr-x. 1 1101 oinstall       2526 12月 24 04:12 installDBBinaries.sh
-rw-r--r--. 1 1101 oinstall 3059705302 1月   2 19:13 LINUX.X64_193000_db_home.zip         --安装介质
-rwxr-xr-x. 1 1101 oinstall       6526 12月 24 04:12 runOracle.sh
-rwxr-xr-x. 1 1101 oinstall       1015 12月 24 04:12 runUserScripts.sh
-rwxr-xr-x. 1 1101 oinstall        758 12月 24 04:12 setPassword.sh
-rwxr-xr-x. 1 1101 oinstall        932 12月 24 04:12 setupLinuxEnv.sh
-rwxr-xr-x. 1 1101 oinstall        678 12月 24 04:12 startDB.sh
[root@docker dockerfiles]# ./buildDockerImage.sh -v 19.3.0 -e 
12345678910111213141516171819

-e表示企业版

Successfully built 701b50f5832a
Successfully tagged oracle/database:19.3.0-ee
  Oracle Database Docker Image for 'ee' version 19.3.0 is ready to be extended: 
    
    --> oracle/database:19.3.0-ee
  Build completed in 2624 seconds.123456789

当出现上面的提示,就表示镜像制作完成了,剩下就是利用该镜像启动容器即可。

3. 启动容器:安装数据库

注意:oracle 企业版的docker run的命令格式如下(XE版的都有所区别):

[root@docker dockerfiles]# docker run --name oracle-19c \
-p 1521:1521 -p 5500:5500 \
-e ORACLE_SID=lei \
-e ORACLE_PDB=leipdb \
-e ORACLE_PWD=Oracle \
-v /oracle/oradata:/opt/oracle/oradata \
oracle/database:19.3.0-ee1234567

注意: /oracle/oradata目录权限一定要正确,在容器中oracle用户的uid是54321,所以要保证容器内的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
chown oracle:oinstall /oracle/oradata1234567

注:如果"DATABASE IS READY TO USE!"提示信息,表示数据库已成功安装了。

登陆主机或数据库进行操作:

[root@docker dockerfiles]# docker exec -it oracle-19c /bin/bash
[oracle@6a5cd3f9fb6c dbs]$ export ORACLE_SID=LEI
[oracle@6a5cd3f9fb6c dbs]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jan 8 02:00:16 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> show pdbs;
    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 LEIPDB			  READ WRITE NO
SQL> 
123456789101112131415161718192021

至此就完成了docker安装Oracle 19c!对于测试、试验非常方便~




Oracle Database on Docker

https://github.com/oracle/docker-images


Sample Docker build files to facilitate installation, configuration, and environment setup for DevOps users. For more information about Oracle Database please see the Oracle Database Onlin e Documentation.

How to build and run

This project offers sample Dockerfiles for:

  • Oracle Database 19c (19.3.0) Enterprise Edition and Standard Edition 2
  • Oracle Database 18c (18.4.0) Express Edition (XE)
  • Oracle Database 18c (18.3.0) Enterprise Edition and Standard Edition 2
  • Oracle Database 12c Release 2 (12.2.0.2) Enterprise Edition and Standard Edition 2
  • Oracle Database 12c Release 1 (12.1.0.2) Enterprise Edition and Standard Edition 2
  • Oracle Database 11g Release 2 (11.2.0.2) Express Edition (XE)

To assist in building the images, you can use the buildDockerImage.sh script. See below for instructions and usage.

The buildDockerImage.sh script is just a utility shell script that performs MD5 checks and is an easy way for beginners to get started. Expert users are welcome to directly call docker b uild with their prefered set of parameters.

Building Oracle Database Docker Install Images

IMPORTANT: You will have to provide the installation binaries of Oracle Database (except for Oracle Database 18c XE) and put them into the dockerfiles/<version> folder. You only need
to provide the binaries for the edition you are going to install. The binaries can be downloaded from the [Oracle Technology Network](http://www.oracle.com/technetwork/database/enterprise-e
dition/downloads/index.html), make sure you use the linux link: Linux x86-64. The needed file is named linuxx64__database.zip. You also have to make sure to have internet conne
ctivity for yum. Note that you must not uncompress the binaries. The script will handle that for you and fail if you uncompress them manually!

Before you build the image make sure that you have provided the installation binaries and put them into the right folder. Once you have chosen which edition and version you want to build an
image of, go into the dockerfiles folder and run the buildDockerImage.sh script:

[oracle@localhost dockerfiles]$ ./buildDockerImage.sh -h


Usage: buildDockerImage.sh -v [version] [-e  | -s | -x] [-i] [-o] [Docker build option]
Builds a Docker Image  for Oracle Database.

Parameters:
   - v: version to build

…back 1 page

Oracle Database on Docker

Sample Docker build files to facilitate installation, configuration, and environment setup for DevOps users. For more information about Oracle Database please see the Oracle Database Onlin e Documentation.

How to build and run

This project offers sample Dockerfiles for:

  • Oracle Database 19c (19.3.0) Enterprise Edition and Standard Edition 2
  • Oracle Database 18c (18.4.0) Express Edition (XE)
  • Oracle Database 18c (18.3.0) Enterprise Edition and Standard Edition 2
  • Oracle Database 12c Release 2 (12.2.0.2) Enterprise Edition and Standard Edition 2
  • Oracle Database 12c Release 1 (12.1.0.2) Enterprise Edition and Standard Edition 2
  • Oracle Database 11g Release 2 (11.2.0.2) Express Edition (XE)

To assist in building the images, you can use the buildDockerImage.sh script. See below for instructions and usage.

The buildDockerImage.sh script is just a utility shell script that performs MD5 checks and is an easy way for beginners to get started. Expert users are welcome to directly call docker b uild with their prefered set of parameters.

Building Oracle Database Docker Install Images

IMPORTANT: You will have to provide the installation binaries of Oracle Database (except for Oracle Database 18c XE) and put them into the dockerfiles/<version> folder. You only need
to provide the binaries for the edition you are going to install. The binaries can be downloaded from the [Oracle Technology Network](http://www.oracle.com/technetwork/database/enterprise-e
dition/downloads/index.html), make sure you use the linux link: Linux x86-64. The needed file is named linuxx64__database.zip. You also have to make sure to have internet conne
ctivity for yum. Note that you must not uncompress the binaries. The script will handle that for you and fail if you uncompress them manually!

Before you build the image make sure that you have provided the installation binaries and put them into the right folder. Once you have chosen which edition and version you want to build an
image of, go into the dockerfiles folder and run the buildDockerImage.sh script:

[oracle@localhost dockerfiles]$ ./buildDockerImage.sh -h


Usage: buildDockerImage.sh -v [version] [-e | -s | -x] [-i] [-o] [Docker build  option]
Builds a Docker Image  for Oracle Database.

Parameters:
   -v: version  to build
       Choose one  of11.2 .0 .2   12.1 .0 .2   12.2 .0 .1   18.3 .0   18.4 .0   19.3 .0
   -e: creates image based  on  'Enterprise Edition'
   -s: creates image based  on  'Standard Edition 2'
   -x: creates image based  on  'Express Edition'
   -i: ignores the MD5 checksums
   -o: passes  on Docker build  option

select one edition only: -e, -s,  or -x

LICENSE UPL  1.0

Copyright (c)  2014 -2019 Oracle  and/ or its affiliates. All rights reserved.

IMPORTANT: The resulting images will be an image with the Oracle binaries installed. On first startup of the container a new database will be created, the following lines highlight when
the database is ready to be used:


######
######
######
######
#

    DATABASE IS READY TO USE!
     ###### ###### ###### ###### #

You may extend the image with your own Dockerfile and create the users and tablespaces that you may need.

The character set for the database is set during creating of the database. 11g Express Edition supports only UTF-8. You can set the character set for the Standard Edition 2 and Enterprise E
dition during the first run of your container and may keep separate folders containing different tablespaces with different character sets.

Running Oracle Database in a Docker container

Running Oracle Database Enterprise and Standard Edition 2 in a Docker container

To run your Oracle Database Docker image use the docker run command as follows:

    docker run --name <container name> \

    -p <host port>: 1521 -p <host port>: 5500 \
    -e ORACLE_SID=<your SID> \
    -e ORACLE_PDB=<your PDB name> \
    -e ORACLE_PWD=<your database passwords> \
    -e ORACLE_CHARACTERSET=<your character  set> \
    -v [<host mount point>:]/opt/oracle/oradata \
    oracle/database: 19.3 .0-ee

    Parameters:
       --name:        The name  of the container ( defaultauto generated)
       -p:            The port mapping  of the host port  to the container port. 
                      Two ports are exposed:  1521 (Oracle Listener),  5500 (OEM Express)
       -e ORACLE_SID: The Oracle Database SID that should be used ( default: ORCLCDB)
       -e ORACLE_PDB: The Oracle Database PDB name that should be used ( default: ORCLPDB1)
       -e ORACLE_PWD: The Oracle Database SYS, SYSTEM  and PDB_ADMIN password ( defaultauto generated)
       -e ORACLE_CHARACTERSET:
                      The character  set  to use  when creating the database ( default: AL32UTF8)
       -v /opt/oracle/oradata
                      The data volume  to use  for the database.
                      Has  to be writable  by the Unix  "oracle" (uid:  54321) user inside the container!
                       If omitted the database will  not be persisted over container recreation.
       -v /opt/oracle/scripts/startup | /docker-entrypoint-initdb.d/startup
                       Optional: A volume  with  custom scripts  to be run after database startup.
                       For further details see the  "Running scripts after setup and on startup" section below.
       -v /opt/oracle/scripts/setup | /docker-entrypoint-initdb.d/setup
                       Optional: A volume  with  custom scripts  to be run after database setup.
                       For further details see the  "Running scripts after setup and on startup" section below.

Once the container has been started and the database created you can connect to it just like to any other database:

    sqlplus sys
/<your password>@/
/localhost:1521/<your SID> 
as sysdba

    sqlplus system /<your password>@/ /localhost:1521/<your SID>
    sqlplus pdbadmin /<your password>@/ /localhost:1521/<Your PDB name>

The Oracle Database inside the container also has Oracle Enterprise Manager Express configured. To access OEM Express, start your browser and follow the URL:

    https:
//localhost:5500/em/

NOTE: Oracle Database bypasses file system level caching for some of the files by using the O_DIRECT flag. It is not advised to run the container on a file system that does not suppor
t the O_DIRECT flag.

Changing the admin accounts passwords

On the first startup of the container a random password will be generated for the database if not provided. You can find this password in the output line:

    ORACLE PASSWORD 
FOR SYS, SYSTEM 
AND PDBADMIN:

The password for those accounts can be changed via the docker exec command. Note, the container has to be running:

    docker exec 
<
container 
name> ./setPassword.sh 
<
your 
password>

Running Oracle Database 18c Express Edition in a Docker container

To run your Oracle Database 18c Express Edition Docker image use the docker run command as follows:

    docker run --name <container name> \

    -p <host port>: 1521 -p <host port>: 5500 \
    -e ORACLE_PWD=<your database passwords> \
-e ORACLE_CHARACTERSET=<your character  set> \
    -v [<host mount point>:]/opt/oracle/oradata \
    oracle/database: 18.4 .0-xe

    Parameters:
       --name:        The name  of the container ( defaultauto generated)
       -p:            The port mapping  of the host port  to the container port.
                      Two ports are exposed:  1521 (Oracle Listener),  8080 (APEX)
       -e ORACLE_PWD: The Oracle Database SYS, SYSTEM  and PDB_ADMIN password ( defaultauto generated)
       -e ORACLE_CHARACTERSET:
                      The character  set  to use  when creating the database ( default: AL32UTF8)
       -v /opt/oracle/oradata
                      The data volume  to use  for the database.
                      Has  to be writable  by the Unix  "oracle" (uid:  54321) user inside the container!
                       If omitted the database will  not be persisted over container recreation.
       -v /opt/oracle/scripts/startup | /docker-entrypoint-initdb.d/startup
                       Optional: A volume  with  custom scripts  to be run after database startup.
                       For further details see the  "Running scripts after setup and on startup" section below.
       -v /opt/oracle/scripts/setup | /docker-entrypoint-initdb.d/setup
                       Optional: A volume  with  custom scripts  to be run after database setup.
                       For further details see the  "Running scripts after setup and on startup" section below.

Once the container has been started and the database created you can connect to it just like to any other database:

    sqlplus sys
/<your password>@//localhost:
1521/XE 
as sysdba

    sqlplus system /<your password>@//localhost: 1521/XE
    sqlplus pdbadmin /<your password>@//localhost: 1521/XEPDB1

The Oracle Database inside the container also has Oracle Enterprise Manager Express configured. To access OEM Express, start your browser and follow the URL:

    https:
//localhost:5500/em/

On the first startup of the container a random password will be generated for the database if not provided. You can find this password in the output line:

    ORACLE PASSWORD 
FOR SYS 
AND SYSTEM:

Note: The ORACLE_SID for Express Edition is always XE and cannot be changed, hence there is no ORACLE_SID parameter provided for the XE build.

The password for those accounts can be changed via the docker exec command. Note, the container has to be running:
       docker exec/opt/oracle/setPassword.sh

Running Oracle Database 11gR2 Express Edition in a Docker container

To run your Oracle Database Express Edition Docker image use the docker run command as follows:

    docker run --name <container name> \

    --shm-size= 1g \
    -p  1521: 1521 -p  8080: 8080 \
    -e ORACLE_PWD=<your database passwords> \
    -v [<host mount point>:]/u01/app/oracle/oradata \
    oracle/database: 11.2 .0 .2-xe

    Parameters:
       --name:        The name  of the container ( defaultauto generated)
       --shm-size:    Amount  of Linux  shared memory
       -p:            The port mapping  of the host port  to the container port.
                      Two ports are exposed:  1521 (Oracle Listener),  8080 (APEX)
       -e ORACLE_PWD: The Oracle Database SYS, SYSTEM  and PDB_ADMIN password ( defaultauto generated)

       -v /u01/app/oracle/oradata
                      The data volume  to use  for the database.
                      Has  to be writable  by the Unix  "oracle" (uid:  1000) user inside the container!
                       If omitted the database will  not be persisted over container recreation.
       -v /u01/app/oracle/scripts/startup | /docker-entrypoint-initdb.d/startup
                       Optional: A volume  with  custom scripts  to be run after database startup.
                       For further details see the  "Running scripts after setup and on startup" section below.
       -v /u01/app/oracle/scripts/setup | /docker-entrypoint-initdb.d/setup
                       Optional: A volume  with  custom scripts  to be run after database setup.
                       For further details see the  "Running scripts after setup and on startup" section below.

There are two ports that are exposed in this image:

  • 1521 which is the port to connect to the Oracle Database.
  • 8080 which is the port of Oracle Application Express (APEX).

On the first startup of the container a random password will be generated for the database if not provided. You can find this password in the output line:

    ORACLE PASSWORD 
FOR SYS 
AND SYSTEM:

Note: The ORACLE_SID for Express Edition is always XE and cannot be changed, hence there is no ORACLE_SID parameter provided for the XE build.

The password for those accounts can be changed via the docker exec command. Note, the container has to be running:
       docker exec/u01/app/oracle/setPassword.sh

Once the container has been started you can connect to it just like to any other database:

    sqlplus sys
/<your password>@//localhost:
1521/XE 
as sysdba

    sqlplus system /<your password>@//localhost: 1521/XE

Running SQL*Plus in a Docker container

You may use the same Docker image you used to start the database, to run sqlplus to connect to it, for example:

    docker run --rm -ti oracle/database:19.3.0-ee sqlplus pdbadmin/
<
yourpassword>@//
<
db-container-ip>:1521/ORCLPDB1

Another option is to use docker exec and run sqlplus from within the same container already running the database:

    
docker exec -ti <container name> sqlplus pdbadmin
@ORCLPDB1

Running scripts after setup and on startup

The docker images can be configured to run scripts after setup and on startup. Currently sh and sql extensions are supported.
For post-setup scripts just mount the volume /opt/oracle/scripts/setup or extend the image to include scripts in this directory.
For post-startup scripts just mount the volume /opt/oracle/scripts/startup or extend the image to include scripts in this directory.
Both of those locations are also represented under the symbolic link /docker-entrypoint-initdb.d. This is done to provide
synergy with other database Docker images. The user is free to decide whether to put the setup and startup scripts
under /opt/oracle/scripts or /docker-entrypoint-initdb.d.

After the database is setup and/or started the scripts in those folders will be executed against the database in the container.
SQL scripts will be executed as sysdba, shell scripts will be executed as the current user. To ensure proper order it is
recommended to prefix your scripts with a number. For example 01_users.sql, 02_permissions.sql, etc.

Note: The startup scripts will also be executed after the first time database setup is complete.  
Note: Use /u01/app/oracle/scripts/ instead of /opt/oracle/scripts/ for Express Edition.

The example below mounts the local directory myScripts to /opt/oracle/myScripts which is then searched for custom startup scripts:


docker run --name oracle-ee -p 
1521:
1521 -v /home/oracle/myScripts:/opt/oracle/scripts/startup -v /home/oracle/oradata:/opt/oracle/oradata oracle/database:
19.
3.
0-ee

Known issues

  • The `overlay` storage driver on CentOS has proven to run into Docker bug #25409. We recommend using btrfs or ov<br />erlay2 instead. For more details see issue #317.

Frequently asked questions

Please see FAQ.md for frequently asked questions.

Support

Oracle Database in single instance configuration is supported for Oracle Linux 7 and Red Hat Enterprise Linux (RHEL) 7.
For more details please see My Oracle Support note: Oracle Support for Database Running on Docker (Doc ID 2216342.1)

License

To download and run Oracle Database, regardless whether inside or outside a Docker container, you must download the binaries from the Oracle website and accept the license indicated at that
page.

All scripts and files hosted in this project and GitHub docker-images/OracleDatabase repository required to build the Docker images are, unless otherwise noted, released under UPL 1. 0 license.

Copyright

Copyright (c) 2014-2019 Oracle and/or its affiliates. All rights reserved.







About Me

........................................................................................................................

● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除

● 本文在itpub、博客园、CSDN和个人微 信公众号( DB宝)上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文博客园地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、个人简介及小麦苗云盘地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA宝典今日头条号地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群号: 230161599 、618766405

● 微 信群:可加我微 信,我拉大家进群,非诚勿扰

● 联系我请加QQ好友 646634621 ,注明添加缘由

● 于 2020-03-01 06:00 ~ 2020-03-31 24:00 在西安完成

● 最新修改时间:2020-03-01 06:00 ~ 2020-03-31 24:00

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

........................................................................................................................

小麦苗的微店https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麦苗出版的数据库类丛书http://blog.itpub.net/26736162/viewspace-2142121/

小麦苗OCP、OCM、高可用网络班http://blog.itpub.net/26736162/viewspace-2148098/

小麦苗腾讯课堂主页https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客户端扫描下面的二维码来关注小麦苗的微 信公众号( DB宝)及QQ群(DBA宝典)、添加小麦苗微 信, 学习最实用的数据库技术。

........................................................................................................................

欢迎与我联系

 

 



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26736162/viewspace-2683609/,如需转载,请注明出处,否则将追究法律责任。

上一篇: Docker中安装Oracle
全部评论
【QQ:646634621】【微信:lhrbestxh】【微信公众号:DB宝】【11g、12c OCM】【QQ群:230161599、618766405】【《数据库笔试面试宝典》作者】【OCP、OCM、高可用(RAC+DG+OGG)、MySQL培训班已开讲,只讲实用内容】

注册时间:2012-09-23

  • 博文量
    1491
  • 访问量
    8664091