oracle中的資料進行備份.
說明:
使用前提:
需要配置好oracle用戶端。
功能:
備份oracle資料庫。
最新備份的資料庫在backup目錄下,上一次備份存放在Old_backup目錄下,每次備份前,都會先删除Old_backup中的檔案,然後将上一次的備份資料拷貝到Old_backup目錄中,最後才進行備份。
關鍵腳本:
exp.txt
*****************************
userid=system/manager@xyj
owner=scott
INDEXES=y
grants=y
rows=y
constraints=y
compress=N
Oracle_bakup.bat
del /q ..\old_backup\*.*
copy
..\backup\*.* ..\old_backup
del /q
..\backup\*.*
Oracle_bakup.vbs
Option Explicit
On Error Resume Next
Dim fname, cmd
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
fname = Date
cmd = "exp log=../backup/" & fname
& "_Oracle_bak.log file=../backup/" & fname &
"_Oracle_bak.dmp parfile=exp.txt"
WshShell.run cmd
Set WshShell = Nothing
‘WScript.Echo cmd
然後一個backup檔案夾和Old_backup檔案夾
備份步驟:
1.修改script/exp.txt檔案
主要修改的參數為:
userid=system/manager@xyj
:這是用那個使用者去備份資料庫,并指明了連接配接的資料庫
在這裡,用system使用者備份資料庫,其密碼為manager,要備份的資料庫為xyj。該部分一般要改。
owner=scott:要備份哪個使用者,該例中,要備份scott使用者。如果要備份多個使用者,使用者名之間要用逗号‘,’隔開。該部分一般要改。
如備份scott使用者與system使用者,則‘owner=scott,system‘。
如果熟悉exp備份工具,則可以該其他參數。也可以向exp.txt檔案中加入其他參數。
檢視exp的幫助:dos>
exp -help
2.運作script\oracle_bakup.bat備份資料庫。可以将該檔案加入到windows的任務管理器中就實作了自動備份的功能。
===================================
VBS一鍵備份Oracle資料庫
資料庫備份是網絡管理人員日常伺服器維護最常見的工作,目前流行的資料庫均提供了比較完善的資料庫自動備份功能,但在實際工作中經常需要訂制一些特殊的資料庫備份操作,讓資料庫的備份工作更加“個性化”,是以直接使用資料庫系統提供的程式工具将很難完成。為了能夠更加靈活的對資料庫進行備份操作,筆者通過參考了微軟的VBS技術文檔和Oracle資料庫有關文檔,使用VBS腳本實作的自動化遠端Oracle資料庫的一鍵備份操作。
Oracle資料庫系統中通常進行資料導出操作可以使用EXP.EXE工具,但由于該程式是一個基于指令行的程式,在使用過程中需要輸入比較複雜的參數,一般都是編寫在批處理檔案中之用,但Windows的批處理指令功能有限,筆者希望能夠将備份的資料用備份時間作為檔案名進行備份,然後進行壓縮儲存,是以使用一般的批處理指令難以完成,故筆者決定采用VBS編寫腳本完成相應操作。
提示:EXP.EXE必須在安裝了Oracle用戶端的電腦中使用,調用格式如下:
EXP.EXE [username]/[password]@[name] file=[filename]
其中[username]是使用者名,[password]是密碼,[filename]是需要備份的目标檔案名,[name]是在tnsnames.ora中設定的連接配接字元串,具體tnsnames.ora的配置本文不再贅述。
VBS腳本是屬于WSH技術的腳本,它可以通過使用WScript.Shell對象的Run方法來調用EXP.EXE進行資料庫的備份操作,另外可以使用VBS中的Date函數擷取目前系統時間。按以上思路編寫資料庫備份子程式OracleEXP,如所附代碼,其中App是EXP.EXE程式的完整路徑名,User和Pass分别是資料庫連接配接的使用者名和密碼,Dir是備份資料目标路徑,ConStr是資料庫連接配接字元串,即本文前面提示中的tnsnames.ora中設定的連接配接字元串。
通過以上的子程式已經可以實作遠端資料庫的備份了,但是一般資料庫備份後至少是幾百兆,大量的資料嚴重浪費了系統的磁盤空間資源,是以一般DBA都會使用WinRar等壓縮軟體對資料進行壓縮處理。能不能讓腳本自動實作資料的壓縮呢?顯然是可以通過VBS腳本調用WinRar來完成壓縮任務,但一般有經驗的管理者會選擇盡量不在伺服器安裝多餘的軟體,是以筆者在這裡選擇了作業系統自帶的MakeCab.exe這個實用的小工具進行資料的壓縮工作。
MakeCab.exe是Windows
2000/XP/2003系統自帶的一個指令行工具,可以将一個或者多個檔案打包成CAB格式檔案。因為CAB格式是微軟釋出程式的安裝包格式,是以在作業系統下無需安裝任何軟體可以直接打開,并且配置合理的壓縮參數其壓縮率可以達到WinRar等商業壓縮軟體的壓縮率。
提示:MakeCab.exe的使用方法如下:
makecab.exe /d compressiontype=lzx /d compressionmemory=21 [FullFileName]
其中/d compressiontype=lzx 設定适用LZX壓縮算法進行壓縮,/d
compressionmemory=21設定壓縮參數,21表示目前最大的壓縮率。[FullFileName]是目标檔案路徑名。
最後通過使用附錄中完整的VBS腳本實作了資料庫資料的備份和壓縮操作,并且資料備份的檔案名可以按照程式的要求進行定制,本例中就是按照備份的日期作為備份名。使用腳本進行備份比直接使用指令行工具或者批處理指令備份有資料備份靈活的特點,通過VBS的腳本程式的控制可以調用其他的應用程式對備份的資料進一步處理,這樣大大拓展了應用範圍,為自定義備份提供了一條可行的方案。
由于腳本中儲存了資料庫使用者名和密碼等敏感資訊,如果對安全性有比較高的要求,可以從微軟網站下載下傳Windows Script
Encoder工具對腳本進行簡單的加密,基本上可以滿足一般的安全需求。
附:VBS一鍵備份腳本程式
‘ 備份Oracle資料庫中資料
Function OracleEXP(App,User,Pass,Dir,ConStr)
Dim wshell,file
Set wshell = CreateObject("WScript.Shell")
file = Dir & "\" & Replace(CStr(Date),"-","") & ".dmp"
makeDumpCmdString = App & " " & User & "/" & Pass
& ConStr & " file=" & file
wshell.Run makeDumpCmdString,1,True
Set wshell = Nothing
OracleEXP = file
End Function
‘ 打開備份好資料庫檔案所在檔案夾
Sub OpenDir(Dir)
Dim wshell
Set wshell = CreateObject("WScript.Shell")
makeDumpCmdString = "C:\Windows\Explorer.exe " & Dir
wshell.Run makeDumpCmdString,1,True
End Sub
‘ 對資料庫備份檔案進行壓縮操作
Sub MakeCabinet(FullFileName)
Dim wshell,fso
makeDumpCmdString = "makecab.exe /d compressiontype=lzx /d
compressionmemory=21 " & FullFileName & " " &
Replace(CStr(Date),"-","") & ".cab"
Set fso = Wscript.CreateObject("Scripting.FileSystemObject")
fso.DeleteFile(FullFileName)
Set fso = Nothing
Set wshell = Nothing
‘ 程式入口
Dim cmd,user,dir
Dim DumpFile
‘ 運作參數
cmd = "E:\oracle\ora90\BIN\EXP.EXE"
user = "OracleUser"
pass = "OraclePassw0rd"
dir = "e:\資料庫備份"
constr = "@DB"
MsgBox "開始備份?",vbOK,"開始"
DumpFile = OracleEXP(cmd,user,pass,dir,constr)
MakeCabinet DumpFile
OpenDir dir ‘打開dir檔案夾
配置用戶端: