當前位置:首頁 » 數據倉庫 » oracle批處理備份資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

oracle批處理備份資料庫

發布時間: 2023-05-27 10:10:09

『壹』 我寫了個Oracle資料庫自動備份腳本,執行後只有log文件,沒有dmp文件,在線等。bat文件內容如下:

大致看了下,沒發現你的批處理有明顯問題。

那就簡單說下排查思路。

1、既然問題出在備份上,就先不要理會刪除備份的問題。

2、相信你寫批處理以前應該手工輸入exp命令成功備份過。

3、把 exp那句輸出到文本或批處理文件如下,用記事本打開backdb.txt看看與你成功備份的手輸命令有和不同,然後做相應修改即可。

exp改為:

echoexp%USER%/%PASSWORD%@%DATABASE%full=yfile=%DATADIR%\%BACKUPDATE%.DMPlog=%LOGDIR%\%BACKUPDATE%.log>backdb.txt

『貳』 oracle資料庫備份exp命令

oracle資料庫備份exp命令:

第一個,表模式,備份某個用戶模式下指定的對象(表)。業務資料庫通常採用這坦陪哪種備份方式。若備份到本地文件,使用如下命令:

exp icdmain/icd rows=y indexes=n compress=n buffer=65536

feedback=100000 volsize=0

file=exp_icdmain_csd_yyyymmdd.dmp

log=exp_icdmain_csd_yyyymmdd.log

tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo

若直接備份到磁帶設備,使用如下命令:

exp icdmain/icd rows=y indexes=n compress=n buffer=65536

feedback=100000 volsize=0

file=/dev/rmt0

log=exp_icdmain_csd_yyyymmdd.log

tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo

註:在磁碟空間允許的情況下,應先備份到本地伺服器,然後再拷亂渣貝到磁帶。出於速度方面的考慮,盡量不要直接備份到磁帶設備。

第二個,用戶模式,備份某個用戶模式下的所有對象。業務資料庫通常採用這種備份方式。若備份到本地文件,使用讓碼如下命令:

exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536

feedback=100000 volsize=0

file=exp_icdmain_yyyymmdd.dmp

log=exp_icdmain_yyyymmdd.log

若直接備份到磁帶設備,使用如下命令:

exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536

feedback=100000 volsize=0

file=/dev/rmt0

log=exp_icdmain_yyyymmdd.log

註:如果磁碟有空間,建議備份到磁碟,然後再拷貝到磁帶。如果資料庫數據量較小,可採用這種辦法備份。

第三個,完全模式,備份完整的資料庫。業務資料庫不採用這種備份方式。備份命令為:

exp icdmain/icd rows=y indexes=n compress=n buffer=65536

feedback=100000 volsize=0 full=y

file=exp_fulldb_yyyymmdd.dmp(磁帶設備則為/dev/rmt0)

log=exp_fulldb_yyyymmdd.log

對於資料庫備份,建議採用增量備份,即只備份上一次備份以來更改的數據。增量備份命令:

exp icdmain/icd rows=y indexes=n compress=n buffer=65536

feedback=100000 volsize=0 full=y inctype=incremental

file=exp_fulldb_yyyymmdd.dmp(磁帶設備則為/dev/rmt0)

log=exp_fulldb_yyyymmdd.log

(2)oracle批處理備份資料庫擴展閱讀:

關於增量備份必須滿足下列條件:

1、只對完整資料庫備份有效,且第一次需要full=y參數,以後需要inctype=incremental參數

2、用戶必須有EXP_FULL_DATABASE的系統角色。

3.、話務量較小時方可採用資料庫備份。

4、 如果磁碟有空間,建議備份到磁碟,然後再備份到磁碟。

版權聲明:本文為CSDN博主「kalogen」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。

『叄』 Oracle資料庫的備份及恢復策略研究

多工聯機重作日誌文件

每個資料庫實例都有其自己的聯機重作日誌組 在操作資料庫時 Oracle首先將資料庫的全部改變坦喚保存在重作日誌緩沖區中 隨後日誌記錄器進程(LGWR)將數據從系統共用區SGA(System Global Area)的重作日誌緩沖區寫入聯機重作日誌文件 在磁碟崩潰或實例失敗時 可以通過與之相關的聯機重作日誌來保護資料庫 將損失降至最低 但Oracle在默認的方式下只創建一組重作日誌文件(每一組只有一個項目文件) 為了減少丟失這些重要的重作日誌文件的危險 因此需要對其進行鏡像拷貝

在Oracle級多工聯機重作日誌文件 即增加多個文件到每個組以便鏡像數據 這樣I/O故障或寫丟失只損壞一個拷貝 從而保證了LGWR後台進程至少能夠向一個成員寫入信息 資料庫仍然可以繼續運行 同時應保證日誌組的成員不應駐存在同一物理設備上 因為這將削弱多重日誌文件的作用

鏡像拷貝控制文件

控制文件描述通用的資料庫結構 它存儲了大量資料庫狀態信息 包括物理結構和聯機重作日誌文件在當時的名稱 位置 狀態 控制文件在資料庫啟動時被Oracle實例讀取 保持打開並隨著操作而文件內容更新 直到實例關閉為止 在它打開的過程中能夠同步需要恢復的信息 包括檢查點信息 因此若損壞或丟失了控制文件 Oracle將不能繼續工作 因此應在系統中保持控制文件的多個拷貝 且這些拷貝應置於安裝於不同磁碟控制器下的不同磁碟設備中

由於Oracle沒有提供對控制文件多工的完整支持 因此應在對控制文件使用操作系統或硬體鏡像 即在修改初始化文件的control_files參數後重新啟動資料庫前 應將控制文件復制到定義的新位置 否則資料庫啟動時將會出錯

激活歸檔進程

當資料庫運行於NOARCHIVELOG模式下時 只能在完全關閉資料庫後進行資料庫的一致備份 並且同時禁用了聯機重作日誌的存檔 這樣在Oracle實例失敗時只能將資料庫修復到最近畢螞的完整資料庫備份時的那一點上 不能在失效點處對實例進行恢復 而在ARCHIVELOG模式下 資料庫不僅可以進行一致備份 還可以在資料庫打開的情況下進行聯機備份 通過資料庫的備份和聯機與存檔的重作日誌文件 用戶可以恢復所有已提交的事務 並允許將資料庫恢復到指定的時間 SCN或日誌系列號處 增大了恢復的靈活性 減少了故障時的數據丟失 因此資料庫應運行於ARCHIVELOG模式

在ARCHIVELOG模式下為了防止文件損壞和介質故障 應把日誌歸檔到不同的磁碟上 這可以通過在初始化文件中為歸檔重作日誌指定多個目標實現

資料庫實施較大改變時備份

因為控制文件中保存了資料庫的模式結構信息 因此在對資料庫進行較大改變(包括改變表結構 增加 刪除日誌文件或數據文件等)時應立即備份控制文件及相應的數據文件

使用RESETLOGS選項打開資料庫後進行備份

在以RESETLOGS選項打開資料庫後 應對整個資料庫進行離線或聯機的備份 否則將不能恢復重置日誌後的改變

當以RESETLOGS選項打開資料庫時 Oracle將拋棄恢復中沒有應用的重復信息 並確保永遠不再運用 同時還將初始化控制文件中關於聯機日誌和重作線程的信息 清除聯機日誌中的內容 因此 RESETLOGS前的歸檔日誌的序列號將與RESETLOGS後的Oracle控制文件的要讓數凱求值不相符(備份文件中的檢查點比控制文件中的檢查點舊) 即在恢復中不能應用以前的歸檔日誌文件 從而導致RESETLOGS操作之前的備份在新形體中無用

避免備份聯機重作日誌文件

由於文中提出了多工聯機重作日誌文件且資料庫運行於ARCHIVELOG模式 ARCH進程能夠將聯機重作日誌歸檔 因此不必對其進行備份 若用備份的聯機重作日誌文件重建它 可能會引起日誌文件序列號的混亂 從而破壞資料庫 得到適得其反的結果

重置聯機日誌

在進行了不完全恢復或用備份控制文件進行恢復後 應重置聯機日誌

為了確保資料庫的一致性 必須保證在恢復後所有數據文件都恢復到同一個時間點 但不完全恢復可能導致數據文件中具有一個與其它文件不同的檢查點 導致資料庫的一致性受到破壞 同樣 備份的控制文件中保存的SCN和計數器與當前日誌文件中的值可能不同 從而也破壞了資料庫的一致性 因此應在進行完上述兩項操作後重置聯機日誌

資料庫的邏輯備份

以上所述備份都為物理備份 是實際物理資料庫文件從一處拷貝到另一處的備份 除此之外還可使用Oracle提供的導出實用程序進行資料庫的邏輯備份 Oracle同時還提供了相應的導入實用程序重建邏輯備份中保存的信息

邏輯備份只拷貝資料庫中的數據 而不記錄數據位置的備份過程 它利用sql語句 從資料庫中導出數據到一個存放在合適位置的外部文件中 同時並可檢測到數據塊的損壞 因此可用其作為物理備份的補充

備份策略

考慮到如今大部分信息系統每周的業務是 × 操作 因此採用聯機備份 否則可每隔一定時間進行一次離線備份

應用上述規則 可得出下述典型的備份策略

①鏡像拷貝重作日誌文件

②鏡像拷貝控制文件

③激活歸檔進程 即以ARCHIVELOG模式操作資料庫

④每天進行資料庫的部分聯機備份(每天進行資料庫的完全熱備份將無畏地增加資料庫的負擔且沒有必要 同時也增加了資料庫恢復時的靈活性)

⑤每隔一周或幾周進行一次資料庫的邏輯備份

實際項目應用

當資料庫中的文件達到一定數量後 DBA可能記不住該備份的文件的名或位置 因此 若能使備份過程自動化可有效地減輕DBA的負擔 同時不會遺漏應備份的文件 應用自動批處理文件及腳本文件可實現備份 恢復的自動化 下面簡介了在實際項目開發中應用本文所提出的自動備份 恢復策略 通過實際應用 證明了該策略的正確性和可行性

( )下述腳本實現聯機重作日誌的多工

connect 賬戶名/密碼 alter database ktgis add logfile member 日誌文件的存儲位置 to group 聯機日誌組號; shutdown immediate startup pfile=初始化文件的存放位置 exclusive mount; 裝載資料庫且不打開 alter database archivelog; 激活歸檔進程 alter database open; exit

( )下列VB代碼自動建立聯機備份的批處理文件及相應的腳本文件

Set adoTmp = objConnect Execute( select tablespace_name from sys dba_data_files ) 得到資料庫中的表空間名 Dim lnum As Long Dim lnum As Long lNum = FreeFile Open 自動備份批處理文件路徑 For Binary As lNum lnum = FreeFile Open onlinebegin sql For Binary As lnum onlinebegin sql為設置表空間進入熱備份模式的腳本文件文件名 lnum = FreeFile Open onlineend sql For Binary As lnum onlinebegin sql為結束表空間熱備份模式的腳本文件文件名 strTmp = connect 賬戶名/密碼 & Chr( ) & Chr( ) Put lnum strTmp strTmp = shutdown immediate & Chr( ) & Chr( ) Put lnum strTmp strTmp = startup pfile=初始化文件的存放位置exclusive mount; & Chr( ) & Chr( ) Put lnum strTmp strTmp = alter database archivelog; & Chr( ) & Chr( ) Put lnum strTmp strTmp = alter database open; & Chr( ) & Chr( ) Put lnum strTmp strTmp = connect 賬戶名/密碼 & Chr( ) & Chr( ) Put lnum strTmp strTmp = Oracle服務管理器路徑 & @ & onlinebegin sql & Chr( ) & Chr( ) 在服務管理器中執行腳本文件onlinebegin sql Put lNum strTmp Do While Not adoTmp EOF Set adoTmp = objConnect Execute( select file_name from sys dba_data_files where tablespace_name= & adoTmp Fields( ) & ) 得到當前表空間所對應的所有數據文件名 通過循環即可得到所有表空間所對應數據文件名 若只備份指定的表空間 可指定表空間名從而得到其對應的物理數據文件 strTmp = alter tablespace & adoTmp Fields( ) & begin backup; & Chr( ) & Chr( ) 將表空間置於熱備份模式 Put lnum strTmp strTmp = Oracle的o exe工具全路徑 & adoTmp Fields( ) & & 備份文件存放路徑 & Chr( ) & Chr( ) Put lNum strTmp strTmp = alter tablespace & adoTmp Fields( ) & end backup; & Chr( ) & Chr( ) 表空間恢復正常模式 Put lnum strTmp adoTmp MoveNext Loop strTmp = Oracle服務管理器路徑 & @ & onlineend sql & Chr( ) & Chr( ) 在服務管理器中執行腳本文件onlineend sql Put lNum strTmp strTmp = exit & Chr( ) & Chr( ) 退出服務管理器 Put lnum strTmp strTmp = alter system switch logfile; & Chr( ) & Chr( ) 強制日誌轉換 使Oracle創建一個歸檔日誌文件 Put lnum strTmp strTmp = exit & Chr( ) & Chr( ) Put lnum strTmp Close Set adoTmp = Nothing Set adoTmp = Nothing

運行得到的自動批處理文件 即可自動進行資料庫的聯機備份

( )在從備份中恢復數據文件後 執行下列腳本將資料庫的恢復程序

connect賬戶名/密碼 shutdown abort startup mount pfile=初始化文件的存放位置; 裝載資料庫 set autorecovery on; 打開自動恢復 recover database; alter database open; 打開資料庫

結束語

lishixin/Article/program/Oracle/201311/18527

『肆』 Oracle使用expdp方式導出 如何編寫一個BAT的腳本,使資料庫的備份文件可以根據日期備份

樓主:供參考
利用任務計劃、批處理文件和oracle的exp導出功能,可以根據日期自動生成oracle備份文件,大大方便了oracle數據備份。
建議一(做周備份並壓縮為rar)以下為oracle 自動備份批處理文件內容,請配合任務計劃實現 :
例:
@ECHO off
SET backPATH=d:\
ECHO 准備備份資料庫
REM 7天一個循環
IF EXIST %backPATH%\one goto one
IF EXIST %backPATH%\TWO goto TWO
IF EXIST %backPATH%\THREE goto THREE
IF EXIST %backPATH%\four goto four
IF EXIST %backPATH%\FIVE goto FIVE
IF EXIST %backPATH%\SIX goto SIX
IF EXIST %backPATH%\SEVEN goto SEVEN
ECHO E > %backPATH%\one

『伍』 如何寫一個批處理,ORACLE備份一個表數據,然後把這個表數據寫到另一個表中再增加一個每天的日期

把備份數據的操作(以及增加日期的操作)寫到一個sql文件里,假設叫db_backup.sql,然後在批處理里寫如下弊運內容:
sqlplus 用戶名/密碼@庫名 @db_backup.sql

哦,對了,這個是說批處理的寫法,如果你問的是租雀梁備份以及增加每天日期的寫法,咱得另說。主要是"增加一個每天的日期"這句不是太明歲謹白。