利用Oracle內建的impdp和expdp進行簡單備份

來源:互聯網
上載者:User

利用Oracle內建的impdp和expdp進行簡單備份

目前有個這樣的需求,每天晚上23點將生產庫的資料備份到備份機器上,第二天備份機器的資料庫可以直接使用,資料是昨天生產庫的資料。(生產資料目前不多,全部資料不超過3000w條)。

由於沒有接觸過高深的Oracle知識,只會簡單的impdp和expdp這種內建的工具,所以打算用這種內建的命令加shell指令碼進行完成。

現在假設生產庫ip為192.168.1.20(簡稱20),備份庫ip為192.168.1.140(簡稱140)

我的設想是這樣的,20機器在晚上11點進行自動備份,然後想辦法將備份檔案拷貝到140機器,然後140機器進行匯入操作。

實現過程:

1.在140上安裝nfs檔案系統,將指定目錄共用到20上。

2.在20上添加備份指令碼使用crontab按時執行expdp語句

#!/bin/sh

ORACLE_BASE=/oracle
 export ORACLE_BASE
 ORACLE_HOME=$ORACLE_BASE/product/
 export ORACLE_HOME
 ORACLE_SID=ORCL
 export ORACLE_SID
 export PATH=$PATH:$ORACLE_HOME/bin
 export DATA_DIR=/oracle/admin/orcl/dpdump
 export LOGS_DIR=/oracle/admin/orcl/dpdump
 export BAKUPTIME=`date +%Y%m%d%H`
 export NLS_LANG=american_america.AL32UTF8

echo "Starting bakup..."
echo "Bakup file path /oracle/admin/orcl/dpdump/HJXD_$BAKUPTIME.dmp"

expdp HJXD/hjxd directory=DATA_PUMP_DIR dumpfile=HJXD_$BAKUPTIME.dmp  schemas=HJXD

echo "Bakup completed."
echo "start delete 10 day before ."
find /oracle/admin/orcl/dpdump/ -mtime +30 -type f -name *.dmp[ab] -exec rm -f {} \;
echo "end delete 10 day before ."

 

3.在20上添加cron任務將備份的檔案拷貝到nfs共用的目錄

##!my bash

myfilepath=/oracle/admin/ORCL/dpdump/;
filename=HJXD_`date -d "1 day ago" +%Y%m%d`23.dmp;
cp /oracle/admin/orcl/dpdump/$filename $myfilepath

4.140上使用cron任務將拷貝過來的nfs共用目錄下面的資料檔案匯入140的資料庫

fullexp.log

PATH=$PATH:$HOME/bin
export PATH
ORACLE_BASE=/oracle
export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/
export ORACLE_HOME
ORACLE_SID=ORCL
export ORACLE_SID
export PATH=$PATH:$ORACLE_HOME/bin

sqlplus sys/123456 as sysdba <<EOF
@/oracle/admin/ORCL/dpdump/impdp.sql;
EOF

export BAKUPTIME=`date -d "a day ago" +%Y%m%d23`;
chown oracle:oinstall /oracle/admin/ORCL/dpdump/HJXD_$BAKUPTIME.dmp;
echo "Starting impdp...";
echo "impdp file path /oracle/admin/ORCL/dpdump/HJXD_$BAKUPTIME.dmp";
impdp hjxdsas/123456 directory=DATA_PUMP_DIR dumpfile=HJXD_$BAKUPTIME.dmp logfile=fullexp.log remap_schema=HJXD:hjxdsas table_exists_action=replace

impdp.sql檔案

drop user hjxdsas cascade;

create user hjxdsas identified by 123456
default tablespace hjxd
temporary tablespace temp;

grant dba, create any trigger, drop any table, SELECT ANY table, SELECT ANY sequence, create user to hjxdsas identified by 123456;
grant connect, resource to hjxdsas;
grant exp_full_database,imp_full_database to hjxdsas;

第4步最開始的時候設定了oracle環境變數,原因是檔案拷貝過來是通過root使用者拷貝的(nfs要求兩邊操作的使用者有相同的uid,20,140機器的oracle使用者uid不一定一致,root使用者缺少一致);包括在使用oracle使用者進行cron任務執行也會發生一些錯誤,所以直接將oracle環境變數也設定給root,這樣直接使用root進行資料匯入。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.