基於Docker部署Oracle、MySQL等資料庫的資料檔案持久化

lhrbest發表於2020-04-02
-- docker:如何檢視容器的掛載目錄
docker inspect container_name | grep Mounts -A 8
docker inspect container_id | grep Mounts -A 8
--檢視環境設定
docker inspect -f "{{.Config.Env}}" oracle19clhr
The commit operation will not include any data contained in volumes mounted inside the container.
commit操作並不會包含容器內掛載資料卷中的資料變化。


總結:通過命令“docker inspect oracle19clhr | grep Destination”查出來的路徑裡邊的檔案不會被commit到新的映象裡邊,所以必須將該路徑下的內容拷貝到其它地方才行。


參考:  https://www.jianshu.com/p/530d00f97cbf


------------------ 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





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-04-01 06:00 ~ 2020-04-30 24:00 在西安完成

● 最新修改時間:2020-04-01 06:00 ~ 2020-04-30 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-2684114/,如需轉載,請註明出處,否則將追究法律責任。

相關文章