首頁 > 軟體

Oracle 11g資料庫使用expdp每週進行資料備份並上傳到備份伺服器

2022-06-28 18:06:49

學校需要將之前的生產資料庫備份到華為雲,之後實現每週自動備份

1.看看資料庫情況

1.1先看了下表空間情況,生產環境表空間大概90G,用了才一半不到

檢視所有表空間及使用情況

SELECT
  B.FILE_NAME 物理檔名,
  B.TABLESPACE_NAME 表空間名稱,
  B.BYTES/1024/1024 大小M,
  (B.BYTES-SUM(NVL(A.BYTES,0)))/1024/1024 已使用M,
  SUBSTR((B.BYTES-SUM(NVL(A.BYTES,0)))/(B.BYTES)*100,1,5) 使用率
FROM DBA_FREE_SPACE A,DBA_DATA_FILES B
WHERE A.FILE_ID=B.FILE_ID
GROUP BY B.TABLESPACE_NAME,B.FILE_NAME,B.BYTES
ORDER BY B.TABLESPACE_NAME;

2.資料庫備份

2.1登陸資料庫

[root@]$ sqlplus / as sysdba

2.2建立邏輯目錄

執行這個操作並不會在Linux中建立/opt/data_backup這個檔案,最後需要手動去建立該檔案才能進行備份。

SQL> create directory back_dir as '/opt/backup'
SQL> select * from dba_directories; #檢視所有邏輯目錄,看是否建立成功

2.3給資料庫使用者檔案操作許可權#dbuser為資料庫使用者名稱,更具實際情況更改

Grant read,write on directory back_dir to dbuser;

2.3建立物理目錄

[root@]$ mkdir -p /opt/backup #-p 確保目錄名稱存在,不存在的就建一個,可使用引數建立多級目錄

1.3備份資料庫

[root@]$ expdp dbuser/passwd@192.168.110.9:1521/orcl dumpfile=dbback.dmp log=log.log directory=back_dir schemas=cbyxy

exedp有很多引數,這裡是用到的一些解釋
dbuser/passwd@192.168.110.9:1521/orcl #匯出使用者名稱/密碼@資料庫IP/資料庫SID
dumpfile=匯出的檔名.dmp
log=匯出過程的紀錄檔名.log
directory=備份放的路徑名,用的之前的邏輯目錄名
schemas=要備份的資料庫使用者名稱字
FULL=y #加上意思為匯出整個資料庫就不需要schemas引數了
也可以按表空間匯出TABLESPACES=
表名匯出TABLES=
等等還有很多引數自行了解

3.shell指令碼實現自動備份

#!/bin/bash
#匯入環境變數,根據具自己實際情況填寫
export ORACLE_BASE=/home/oracle/app
export ORACLE_HOME=$ORACLE_BASE/oracle/product/11.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export LOCAL_IP=192.168.110.183:1521
export BACKUP_USER_IP_DIR=root@192.168.110.187:/opt/   #備份伺服器的使用者,ip,儲存地址
export ORACLE_USER_NAME=system #資料庫的使用者密碼根據實際情況填寫,備份整個庫最好使用system或sys管理員使用者
export ORACLE_USER_PASSWD=Abc123556..
export ORACLE_SID=orcl #不知道可以使用Oracle使用者執行echo $ORACLE_SID,或者SQL> SELECT instance_name FROM v$instance
export DATA_DIR=/opt/backup   #與資料庫中的邏輯地址相同,用來儲存備份檔案
export DELTIME=`date -d "7 days ago" +%Y%m%d` # -d "7 days ago" 為獲取七天前的日期,以日期命名方便任務自動刪>除
export BAKUPTIME=`date +%Y%m%d` #備份日期年月日
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK #定義語言地域和字元集屬性的環境變數,根據自己資料庫情況修改
mkdir -p $DATA_DIR
echo "Starting bakup..."
echo "Backup file path $DATA_DIR/$BAKUPTIME.dmp"
expdp $ORACLE_USER_NAME/$ORACLE_USER_PASSWD@$LOCAL_IP/$ORACLE_SID dumpfile=$BAKUPTIME.dmp log=$BAKUPTIME.log directory=expdp full=y
echo "backup file success..."
tar -zcvPf $DATA_DIR/$BAKUPTIME.tar.gz $DATA_DIR/$BAKUPTIME.dmp --remove-files ##-P:指定絕對路徑 --remove-files :打包後刪除原檔案
echo "tar the file backup successfully"
echo "scp to":$BACKUP_IP
scp $DATA_DIR/$BAKUPTIME.tar.gz $BACKUP_USER_IP_DIR #遠端伺服器防火牆有限制scp埠需要加:-P 埠號
rm -f $DATA_DIR/$DELTIME.log #刪除之前的備份
echo "Bakup completed."

4.新增定時任務

[root@ ]$ crontab -e

新增行:* 1 * * 6 /opt/back.sh #每個星期的星期六早上執行備份任務

*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 星期中星期幾 (0 - 6) (星期天 為0)
|    |    |    +---------- 月份 (1 - 12) 
|    |    +--------------- 一個月中的第幾天 (1 - 31)
|    +-------------------- 小時 (0 - 23)
+------------------------- 分鐘 (0 - 59)

4.參考文章

https://www.cnblogs.com/xwdreamer/p/3511047.html
https://www.cnblogs.com/farmer-y/p/5888432.html
https://blog.csdn.net/weixin_41607523/article/details/110817646
https://blog.csdn.net/XUEYUTIANQI/article/details/113976558

到此這篇關於Oracle 11g資料庫使用expdp每週進行資料備份並上傳到備份伺服器的文章就介紹到這了,更多相關Oracle 11g使用expdp備份資料內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com