Oracle 備份與恢復 (Docker部署版) 一,宿主機設置定時備份腳本 1.檢查Oracle容器是否正常運行 docker ps 2.進入容器,創建shell腳本 #oracle11g 是容器名 docker exec -it oracle11g bash #創建資料庫dump的目錄 mkdi ...
Oracle 備份與恢復 (Docker部署版)
一,宿主機設置定時備份腳本
1.檢查Oracle容器是否正常運行
docker ps
2.進入容器,創建shell腳本
#oracle11g 是容器名
docker exec -it oracle11g bash
#創建資料庫dump的目錄
mkdir -p /home/oracle/dump/
cd /home/oracle/dump/
#編寫腳本並插入如下內容
vi dump.sh
#!/bin/bash
whoami
su - oracle <<!
whoami
cd /home/oracle/dump
exp CQDX_JXGLXX/unicorn owner=CQDX_JXGLXX file=exp_xxx.dmp log=exp_xxx.log buffer=6000000
#腳本保存後賦予可執行許可權
chmod 777 dump.sh
3.在宿主機創建定時任務執行容器內腳本並拷貝至宿主機
#首先退出制宿主機,然後創建保存目錄
mkdir -p /home/oracle/
cd /home/oracle/
#創建shell腳本
vi oracle.sh
#添加如下內容
#!/bin/bash
docker exec -u 0 oracle11g bash -c "cd /home/oracle/;./dump.sh"
docker cp oracle11g:/home/oracle/dump /home/oracle/
備註:bash -c 後面是需要在oracle容器內部執行的指令。分別指,是進入到腳本所在的目錄,執行腳本。
4.設置定時任務
#首先查看是否安裝crontab
service crond status
#如果沒有就執行安裝命令
yum install cronie
#啟動服務
service crond start
crontab的其他命令
#重啟服務
service crond restart
#關閉服務
service crond stop
#重新載入服務
service crond reload
#查看狀態
service crond status
確定已經啟動crontab後就創建定時任務
#執行後會出現一個可編輯的界面
crontab -e
#末尾添加定時任務指令,可以按需求調整執行時間
30 18 * * 5 bash /home/oracle/oracle.sh
#查看是否設置成功
crontab -l
備註:時間格式如下
f1 f2 f3 f4 f5 program
- 其中 f1 是表示分鐘,f2 表示小時,f3 表示一個月份中的第幾日,f4 表示月份,f5 表示一個星期中的第幾天。program 表示要執行的程式。
- 當 f1 為 * 時表示每分鐘都要執行 program,f2 為 * 時表示每小時都要執行程式,其餘類推
- 當 f1 為 a-b 時表示從第 a 分鐘到第 b 分鐘這段時間內要執行,f2 為 a-b 時表示從第 a 到第 b 小時都要執行,其餘類推
- 當 f1 為 */n 時表示每 n 分鐘個時間間隔執行一次,f2 為 */n 表示每 n 小時個時間間隔執行一次,其餘類推
- 當 f1 為 a, b, c,... 時表示第 a, b, c,... 分鐘要執行,f2 為 a, b, c,... 時表示第 a, b, c...個小時要執行,其餘類推
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期幾 (0 - 6) (星期天 為0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一個月中的第幾天 (1 - 31)
| +-------------------- 小時 (0 - 23)
+------------------------- 分鐘 (0 - 59)
例:
周五每天下午 5:00執行腳本
0 17 * * 5 bash /home/oracle/oracle.sh
二,拷貝到目標伺服器
1.配置ssh免密
#首先在安裝Oracle的伺服器上
cd /root/.ssh/
#如果沒有該目錄則執行
ssh-keygen -t rsa
#然後一直回車,重新進入該目錄
cd /root/.ssh/
ll
#如果沒有authorized_keys就新建一個
touch authorized_keys
切換到目標伺服器,同樣如果沒有.ssh目錄就執行ssh-keygen -t rsa,然後進入.ssh目錄
#查詢密鑰
cat id_rsa.pub
然後複製此處查詢出的密鑰,繼續回到安裝Oracle的伺服器
#編輯authorized_keys,把剛纔的密鑰複製進去,然後保存
vi authorized_keys
回到目標伺服器測試能否遠程登錄
ssh root@<Oracle伺服器Ip>
2.繼續在目標伺服器編寫定時任務
#新建備份文件夾
mkdir -p /home/oracle/
vi scp.sh
#腳本內添加
#!/bin/bash
scp -r root@<Oracle宿主機IP>:/home/oracle/dump /home/test/oracle/
設置定時任務
crontab -e
#因為Oracle宿主機的備份任務是設置到星期五的晚上六點半,為防止資料庫過大,所以scp的任務間隔時間要長一點
30 20 * * 5 bash /home/oracle/scp.sh
#查看是否設置成功
crontab -l
三,數據恢復
1.首先安裝Oracle(教程)
2.創建Oracle表空間和用戶,導入表結構
#進入安裝oracle的伺服器
docker exec -it -u root <服務名> bsah
#進入容器後切換oracle用戶
su - oracle
#進入oracle
sqlplus / as sysdba
#創建表空間
create tablespace YG_JXGLXX datafile '/home/oracle/app/oracle/oradata/helowin/tets02.dbf' size 1G reuse autoextend on next 50M maxsize unlimited default storage(initial 128k next 128k minextents 2 maxextents unlimited);
#創建用戶並分配表空間
create user CQDX_JXGLXX identified by unicorn default tablespace YG_JXGLXX temporary tablespace TEMP;
#給用戶賦權
grant connect,dba,exp_full_database,imp_full_database to CQDX_JXGLXX with admin option;
3.導入流程
首先把備份的資料庫文件exp_xxx.dmp上傳到新庫伺服器
#然後拷貝到容器內部
docker cp ./exp_xxx.dmp oracle_11g:/home
#進入oracle容器
docker exec -it oracle_11g bash
# 臨時設置環境變數
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2
export ORACLE_SID=helowin
export PATH=$ORACLE_HOME/bin:$PATH
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
cd ~
#需要根據實際調整賬號密碼 以及fromuser touser
imp CQDX_JXGLXX/unicorn fromuser=CQDX_JXGLXX touser=CQDX_JXGLXX file=/home/exp_xxx.dmp log=imp.log ignore=y
rm -f /home/exp_xxx.dmp