文章詳情頁
Oracle 11g數據庫使用expdp每周進行數據備份并上傳到備份服務器
瀏覽:151日期:2023-03-12 15:24:56
目錄
- 1.看看數據庫情況
- 1.1先看了下表空間情況,生產環境表空間大概90G,用了才一半不到
- 2.數據庫備份
- 2.1登陸數據庫
- 2.2創建邏輯目錄
- 2.3給數據庫用戶文件操作權限#dbuser為數據庫用戶名,更具實際情況更改
- 2.3創建物理目錄
- 1.3備份數據庫
- 3.shell腳本實現自動備份
- 4.添加定時任務
- 4.參考文章
學校需要將之前的生產數據庫備份到華為云,之后實現每周自動備份
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 BWHERE A.FILE_ID=B.FILE_IDGROUP BY B.TABLESPACE_NAME,B.FILE_NAME,B.BYTESORDER 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/appexport ORACLE_HOME=$ORACLE_BASE/oracle/product/11.2.0/dbhome_1export PATH=$ORACLE_HOME/bin:$PATHexport LOCAL_IP=192.168.110.183:1521export 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$instanceexport 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_DIRecho "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=yecho "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_IPscp $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.參考文章
到此這篇關于Oracle 11g數據庫使用expdp每周進行數據備份并上傳到備份服務器的文章就介紹到這了,更多相關Oracle 11g使用expdp備份數據內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!
標簽:
Oracle
排行榜
