expdp備份+FTP自動上傳
需求:
兩臺P550+DS4700架設oracle10g RAC,由於使用者比較多、資料量比較大,透過exp匯出需要的時間巨大(大約要24小時),時間窗不允許採用這樣的備份方式,又沒有備份軟體進行自動備份,所以需要一種備份機制可以實現自動備份的前提下,用時也能控制在沒有業務發生的時間內完成。
解決辦法:
由於是oracle10g,我能想到的好辦法是使用expdp方式在主機備份後、壓縮並自動上傳到FTP伺服器,並刪除伺服器上的備份檔案及上一次的壓縮檔案,以保持系統的可用空間。
下面是我的詳細操作過程,記錄下來備忘的同時希望能幫得到需要的朋友。
(1)先在作業系統上建立備份目錄:/oracle/dpump_dir,給oracle:dba許可權,賦於775許可權
(2)透過oracle在資料庫中建立備份目錄:
>CREATE DIRECTORY DPUMP_DIR as '/oracle/dpump_dir';
查詢建立了那些子目錄:
>SELECT * FROM dba_directories;
(3)注意事項:
我這裡是使用system使用者來進行操作的。 如果是其他使用者,那麼就需要對這個使用者進行賦權。
SQL> grant create any directory to system;
Grant succeeded.
#檢視system使用者的許可權
SQL> select * from dba_sys_privs where grantee='SYSTEM';
grantee privilege adm
------------------------------ ---------------------------- ------------
system create any directory no
system global query rewrite no
system create materialized view no
system create table no
system unlimited tablespace yes
system select any table no
如果是其他使用者使用sys建立的目錄,也需要進行賦權,如:
SQL> grant read, write on directory dpump_dir to system;
匯出整個資料庫,且使用並行匯出方式
(4)建立備份指令碼backup.sh,並給於775許可權,指令碼內容及說明如下:
=========================================================
#backup.sh檔案。該檔案先定義Oracle的環境變數,然後匯出當天的資料,並建立相關的日誌,然後把當天的資料和日誌打包成.tar.gz檔案。
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
#Oracle的字符集,Oracle資料庫的中文字符集為AMERICAN_AMERICA.ZHS16GBK
export ORACLE_HOME=/oracle/db10g
#Oracle資料庫的根目錄
/oracle/db10g/bin/expdp system/password@orcl1 directory=DPUMP_DIR dumpfile=orcl_`date +%Y%m%d`_%u.dmp logfile=orcl_`date +%Y%m%d`.log parallel=6 full=yes
#匯出當日的資料庫的資料並寫日誌。如當為2012-12-17,資料檔案為orcl_20121217_01.dmp,日誌為orcl_20121217.log
cd /oracle/dpump_dir
tar -cf orcl_`date +%Y%m%d`.tar orcl_`date +%Y%m%d`_*.dmp orcl_`date +%Y%m%d`.log
#把資料檔案和日誌打包
rm -f orcl_`date +%Y%m%d`_*.dmp
rm -f orcl_`date +%Y%m%d`.log
#刪除備份.dmp檔案和.log日誌
gzip orcl_`date +%Y%m%d`.tar
#把tar包壓縮成.tar.gz包
cat orcl_`date +%Y%m%d`.log | mail -s 'jdt_orcl Web Backup' yuyulu@live.cn[/email]
#把當天日誌傳送到[email=yuyulu@live.cn]yuyulu@live.cn郵箱
mv orcl_`date +%Y%m%d`.tar.gz /svr
#把當前目錄的.tar.gz包移動到/svr目錄下
find /svr -type f -mtime +7 -exec rm -f {} \;
#刪除上個星期前生成的備份檔案
#透過FTP上傳到備份伺服器
cd /svr
ftp -v -n 192.168.100.7 << EOF
user test test
binary
hash
prompt
put orcl_`date +%Y%m%d`.tar.gz
bye
EOF
==========================================================
注意:該語句是採用6個執行緒的方式備份整個資料,備份檔名稱自動加上01-06的編號!!!!expdp語句後面沒有分號,如果是雙機注意SID例項名是否正確。否則會出現 ORA-39001引數錯誤。如果出現ORA-39002,一般是由於沒有建立備份目錄造成的!!!!)
(5)將指令碼新增到crontab自動執行
#crontab -e
(格式為minute hour day_of_month month weekday command)
0 1 * * 6 /home/oracle/backup.sh >/dev/null 2>&1 #backup database every weeky at saterday 1:00 am!
(6)資料泵的監控
1).查詢dba_directories獲得所建立的目錄
2).可以查詢dba_datapump_jobs來檢視資料泵作業的執行情況,也可以利用ATTACH重新連線上還在進行的JOB
每個datapump可以透過job_name 引數來指定作業名稱,如未指定,則系統使用預設的作業名稱,如下面的檢視中為
SYS_EXPORT_FULL_01
透過v$session_longops也可以檢視長時間執行的datapump job的具體內容
SQL> select owner_name owr,job_name jbn,operation ope,job_mode jbm,state,degree,
attached_sessions atts,datapump_sessions dats
from dba_datapump_jobs;
OWR JBN OPE JBM STATE DEGREE ATTS DATS
---------- -------------------- -------------------- --------------- ---------- ---------- ---------- ----------
SCOTT SYS_EXPORT_FULL_01 EXPORT FULL COMPLETING 2 1 2
SQL> select sid, serial#,session_type from v$session s, dba_datapump_sessions d where s.saddr = d.saddr;
SID SERIAL# SESSION_TYPE
---------- ---------- --------------
143 10 DBMS_DATAPUMP
149 37 MASTER
132 3 WORKER
136 3 WORKER
135 4 WORKER
141 5 WORKER
128 2 WORKER
142 4 WORKER
3).監控資料泵的邏輯備份程度
>SELECT sid, serial#, context, sofar, totalwork,
ROUND(sofar/totalwork*100,2) "%_COMPLETE"
FROM v$session_longops
WHERE opname LIKE '%EXP%'
AND totalwork != 0
AND sofar <> totalwork;
SID SERIAL# CONTEXT SOFAR TOTALWORK %_COMPLETE
130 33 0 54 70 77.14
(7)資料恢復的方法,透過oracle使用者進行恢復
$impdp system/password DIRECTORY=/oracle/dpump_dir DUMPFILE=orcl_20121212_01.dmp,orcl_20121212_02.dmp,orcl_20121212_03.dmp SQLFILE=aa.sql
使用這種方法的impdp,可以從dp出來的dmp檔案中提取物件的DDL語句,這樣的impdp並不把資料匯入資料庫中,只是建立DDL語句檔案,匯入時不要使用parallel引數
(8)如果單獨匯出資料,在執行expdp後,按下exit組合,退出資料匯出模式,進入互動模式
Export>
Export> status
(9)停止作業
Export> stop_job
是否確實要停止此作業 ([Y]/N): yes
...................
(10)用job_name再次連線到job
>expdp system/password attach=SYS_EXPORT_FULL_01
ATTACH用於在客戶會話與已存在匯出作用之間建立關聯. 如果使用ATTACH選項,在命令列除了連線字串和ATTACH選項外
,不能指定任何其他選項。
Export: Release 10.2.0.4.0 - Production on 星期一 12月 27 15:26:14 2012
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
連線到: Oracle Database 11g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
作業: SYS_EXPORT_FULL_01
所有者: SYSTEM
操作: EXPORT
建立者許可權: TRUE
GUID: 454A188F62AA4D578AA0DA4C35259CD8
開始時間: 星期一, 27 12月, 2012 15:26:16
模式: FULL
例項: orcl
...............................
(11)expdb的一個功能就是可以停止或是啟動JOB(如果需要的話)
Export> start_job
檢視狀態
Export> status
兩臺P550+DS4700架設oracle10g RAC,由於使用者比較多、資料量比較大,透過exp匯出需要的時間巨大(大約要24小時),時間窗不允許採用這樣的備份方式,又沒有備份軟體進行自動備份,所以需要一種備份機制可以實現自動備份的前提下,用時也能控制在沒有業務發生的時間內完成。
解決辦法:
由於是oracle10g,我能想到的好辦法是使用expdp方式在主機備份後、壓縮並自動上傳到FTP伺服器,並刪除伺服器上的備份檔案及上一次的壓縮檔案,以保持系統的可用空間。
下面是我的詳細操作過程,記錄下來備忘的同時希望能幫得到需要的朋友。
(1)先在作業系統上建立備份目錄:/oracle/dpump_dir,給oracle:dba許可權,賦於775許可權
(2)透過oracle在資料庫中建立備份目錄:
>CREATE DIRECTORY DPUMP_DIR as '/oracle/dpump_dir';
查詢建立了那些子目錄:
>SELECT * FROM dba_directories;
(3)注意事項:
我這裡是使用system使用者來進行操作的。 如果是其他使用者,那麼就需要對這個使用者進行賦權。
SQL> grant create any directory to system;
Grant succeeded.
#檢視system使用者的許可權
SQL> select * from dba_sys_privs where grantee='SYSTEM';
grantee privilege adm
------------------------------ ---------------------------- ------------
system create any directory no
system global query rewrite no
system create materialized view no
system create table no
system unlimited tablespace yes
system select any table no
如果是其他使用者使用sys建立的目錄,也需要進行賦權,如:
SQL> grant read, write on directory dpump_dir to system;
匯出整個資料庫,且使用並行匯出方式
(4)建立備份指令碼backup.sh,並給於775許可權,指令碼內容及說明如下:
=========================================================
#backup.sh檔案。該檔案先定義Oracle的環境變數,然後匯出當天的資料,並建立相關的日誌,然後把當天的資料和日誌打包成.tar.gz檔案。
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
#Oracle的字符集,Oracle資料庫的中文字符集為AMERICAN_AMERICA.ZHS16GBK
export ORACLE_HOME=/oracle/db10g
#Oracle資料庫的根目錄
/oracle/db10g/bin/expdp system/password@orcl1 directory=DPUMP_DIR dumpfile=orcl_`date +%Y%m%d`_%u.dmp logfile=orcl_`date +%Y%m%d`.log parallel=6 full=yes
#匯出當日的資料庫的資料並寫日誌。如當為2012-12-17,資料檔案為orcl_20121217_01.dmp,日誌為orcl_20121217.log
cd /oracle/dpump_dir
tar -cf orcl_`date +%Y%m%d`.tar orcl_`date +%Y%m%d`_*.dmp orcl_`date +%Y%m%d`.log
#把資料檔案和日誌打包
rm -f orcl_`date +%Y%m%d`_*.dmp
rm -f orcl_`date +%Y%m%d`.log
#刪除備份.dmp檔案和.log日誌
gzip orcl_`date +%Y%m%d`.tar
#把tar包壓縮成.tar.gz包
cat orcl_`date +%Y%m%d`.log | mail -s 'jdt_orcl Web Backup' yuyulu@live.cn[/email]
#把當天日誌傳送到[email=yuyulu@live.cn]yuyulu@live.cn郵箱
mv orcl_`date +%Y%m%d`.tar.gz /svr
#把當前目錄的.tar.gz包移動到/svr目錄下
find /svr -type f -mtime +7 -exec rm -f {} \;
#刪除上個星期前生成的備份檔案
#透過FTP上傳到備份伺服器
cd /svr
ftp -v -n 192.168.100.7 << EOF
user test test
binary
hash
prompt
put orcl_`date +%Y%m%d`.tar.gz
bye
EOF
==========================================================
注意:該語句是採用6個執行緒的方式備份整個資料,備份檔名稱自動加上01-06的編號!!!!expdp語句後面沒有分號,如果是雙機注意SID例項名是否正確。否則會出現 ORA-39001引數錯誤。如果出現ORA-39002,一般是由於沒有建立備份目錄造成的!!!!)
(5)將指令碼新增到crontab自動執行
#crontab -e
(格式為minute hour day_of_month month weekday command)
0 1 * * 6 /home/oracle/backup.sh >/dev/null 2>&1 #backup database every weeky at saterday 1:00 am!
(6)資料泵的監控
1).查詢dba_directories獲得所建立的目錄
2).可以查詢dba_datapump_jobs來檢視資料泵作業的執行情況,也可以利用ATTACH重新連線上還在進行的JOB
每個datapump可以透過job_name 引數來指定作業名稱,如未指定,則系統使用預設的作業名稱,如下面的檢視中為
SYS_EXPORT_FULL_01
透過v$session_longops也可以檢視長時間執行的datapump job的具體內容
SQL> select owner_name owr,job_name jbn,operation ope,job_mode jbm,state,degree,
attached_sessions atts,datapump_sessions dats
from dba_datapump_jobs;
OWR JBN OPE JBM STATE DEGREE ATTS DATS
---------- -------------------- -------------------- --------------- ---------- ---------- ---------- ----------
SCOTT SYS_EXPORT_FULL_01 EXPORT FULL COMPLETING 2 1 2
SQL> select sid, serial#,session_type from v$session s, dba_datapump_sessions d where s.saddr = d.saddr;
SID SERIAL# SESSION_TYPE
---------- ---------- --------------
143 10 DBMS_DATAPUMP
149 37 MASTER
132 3 WORKER
136 3 WORKER
135 4 WORKER
141 5 WORKER
128 2 WORKER
142 4 WORKER
3).監控資料泵的邏輯備份程度
>SELECT sid, serial#, context, sofar, totalwork,
ROUND(sofar/totalwork*100,2) "%_COMPLETE"
FROM v$session_longops
WHERE opname LIKE '%EXP%'
AND totalwork != 0
AND sofar <> totalwork;
SID SERIAL# CONTEXT SOFAR TOTALWORK %_COMPLETE
130 33 0 54 70 77.14
(7)資料恢復的方法,透過oracle使用者進行恢復
$impdp system/password DIRECTORY=/oracle/dpump_dir DUMPFILE=orcl_20121212_01.dmp,orcl_20121212_02.dmp,orcl_20121212_03.dmp SQLFILE=aa.sql
使用這種方法的impdp,可以從dp出來的dmp檔案中提取物件的DDL語句,這樣的impdp並不把資料匯入資料庫中,只是建立DDL語句檔案,匯入時不要使用parallel引數
(8)如果單獨匯出資料,在執行expdp後,按下exit組合,退出資料匯出模式,進入互動模式
Export>
Export> status
(9)停止作業
Export> stop_job
是否確實要停止此作業 ([Y]/N): yes
...................
(10)用job_name再次連線到job
>expdp system/password attach=SYS_EXPORT_FULL_01
ATTACH用於在客戶會話與已存在匯出作用之間建立關聯. 如果使用ATTACH選項,在命令列除了連線字串和ATTACH選項外
,不能指定任何其他選項。
Export: Release 10.2.0.4.0 - Production on 星期一 12月 27 15:26:14 2012
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
連線到: Oracle Database 11g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
作業: SYS_EXPORT_FULL_01
所有者: SYSTEM
操作: EXPORT
建立者許可權: TRUE
GUID: 454A188F62AA4D578AA0DA4C35259CD8
開始時間: 星期一, 27 12月, 2012 15:26:16
模式: FULL
例項: orcl
...............................
(11)expdb的一個功能就是可以停止或是啟動JOB(如果需要的話)
Export> start_job
檢視狀態
Export> status
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-2135852/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 容災備份 | 看我使用Powershell操作FTP進行資料檔案自動上傳備份FTP
- Oracle EXPDP自動備份緩慢問題解決Oracle
- 寶塔自動備份網站到FTP空間網站FTP
- MySQL 自動備份併傳送到郵箱MySql
- expdp 邏輯備份指令碼指令碼
- gitlab自動定時備份檔案,備份失敗傳送郵件Gitlab
- Python實現騰訊雲CDB備份檔案自動上傳到COSPython
- Linux自動備份MySQLLinuxMySql
- 自動備份指令碼指令碼
- Expdp 備份到ASM之 ORA-39070ASM
- 定時ftp上傳,如何設定定時ftp上傳檔案FTP
- GitLab的自動備份、清理備份與恢復Gitlab
- ftp上傳軟體,好用的ftp上傳軟體,使用方法FTP
- PHP ftp上傳檔案PHPFTP
- ftp上傳工具下載,ftp上傳工具下載使用教程,Linux如何配置ftp伺服器?FTPLinux伺服器
- 用友U8設定了自動備份,備份失效
- Oracle 效能優化-expdp備份速度優化02Oracle優化
- Oracle 效能優化-expdp備份速度優化03Oracle優化
- oracle自動冷備份指令碼Oracle指令碼
- 使用 restic 和 systemd 自動備份REST
- RMAN自動備份任務新增
- Mysql資料庫自動備份MySql資料庫
- Java程式呼叫expdp資料泵實現自動邏輯備份Oracle資料庫的方案設計JavaOracle資料庫
- MySQL自動備份指令碼30天自動刪除MySql指令碼
- 每天自動備份Oracle資料庫Oracle資料庫
- Linux下Mysql定時自動備份LinuxMySql
- 定時備份 MySQL 並上傳到七牛MySql
- windows/linux自動備份mysql並刪除7天前的備份WindowsLinuxMySql
- linux實現mysql資料庫每天自動備份定時備份LinuxMySql資料庫
- Cleannote 宣傳備份
- Windows環境PgSql自動備份指令碼WindowsSQL指令碼
- MySQL儲存安全(TDE加密、自動備份)MySql加密
- shell 備份檔案指令碼+自動清理指令碼
- 使用 GitHub Actions 自動備份程式碼倉Github
- 備份Outlook 2016 的自動補全列表
- 異地自動備份INSTALL資料夾
- 【BASIS】HANA備份指令碼,Catalog自動清理指令碼
- Oracle資料庫的邏輯備份工具-expdp資料泵Oracle資料庫
- 熱備份/冷備份/ 冷啟動/熱啟動