oracle自動備份腳本
① oracle怎麼用rman腳本進行備份
Oracle資料庫中rman備份腳本非常實用
查詢字元集
sql> select * from nls_database_parameters;
NLS_CHARACTERSET
AL32UTF8
備份時字元集很重要,不然會出亂碼
一、0級備份(全備)紅色是要修改的,根據個人的存放位置。
[oracle@oracle122 script]$ cat db_bak0.rman
run
{
configure retention policy to recovery window of 8 days;
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to '/home/oracle/rmanbak/%F';
allocate channel ch1 device type disk format '/home/oracle/rmanbak/inc0_%d_%s_%p_%u_%T';
backup incremental level 0 tag='level 0' database skip inaccessible filesperset 10 plus archivelog filesperset 20;
release channel ch1;
}
allocate channel for maintenance device type disk;
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
delete noprompt archivelog until time 'sysdate-30';
0級運行腳本
[oracle@oracle122 script]$ cat exec_0_level.sh
ORACLE_HOSTNAME=oracle122; export ORACLE_HOSTNAME
ORACLE_BASE=/u01/app; export ORACLE_BASE
ORACLE_HOME=/u01/app/oracle/proct/11.2.0/dbhome_1; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
export DATE=$(date +%Y_%m_%d)
export NLS_LANG="Simplified Chinese_china".AL32UTF8
/u01/app/oracle/proct/11.2.0/dbhome_1/bin/rman target sys/sys_admin cmdfile /home/oracle/rmanbak/script/db_bak0.rman log /home/oracle/rmanbak/script/log/rman_$DATE.log append
二、1級備份(增量)
[oracle@oracle122 script]$ cat db_bak1.rman
run
{
configure retention policy to recovery window of 8 days;
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to '/home/oracle/rmanbak/%F';
allocate channel ch1 device type disk format '/home/oracle/rmanbak/inc1_%d_%s_%p_%u_%T';
backup incremental level 1 tag='level 1' database skip inaccessible filesperset 10 plus archivelog filesperset 20;
release channel ch1;
}
allocate channel for maintenance device type disk;
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
delete noprompt archivelog until time 'sysdate-30';
1級運行腳本
[oracle@oracle122 script]$ cat exec_1_level.sh
ORACLE_HOSTNAME=oracle122; export ORACLE_HOSTNAME
ORACLE_BASE=/u01/app; export ORACLE_BASE
ORACLE_HOME=/u01/app/oracle/proct/11.2.0/dbhome_1; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
export DATE=$(date +%Y_%m_%d)
export NLS_LANG="Simplified Chinese_china".AL32UTF8
/u01/app/oracle/proct/11.2.0/dbhome_1/bin/rman target sys/sys_admin cmdfile /home/oracle/rmanbak/script/db_bak1.rman log /home/oracle/rmanbak/script/log/rman_$DATE.log append
三、2級備份(從0級追加到現在的備份)
[oracle@oracle122 script]$ cat db_bak2.rman
run
{
configure retention policy to recovery window of 8 days;
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to '/home/oracle/rmanbak/%F';
allocate channel ch1 device type disk format '/home/oracle/rmanbak/inc2_%d_%s_%p_%u_%T';
backup incremental level 2 tag='level 2' database skip inaccessible filesperset 10 plus archivelog filesperset 20 delete all input;
release channel ch1;
}
allocate channel for maintenance device type disk;
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
2級運行腳本
[oracle@oracle122 script]$ cat exec_2_level.sh
ORACLE_HOSTNAME=oracle122; export ORACLE_HOSTNAME
ORACLE_BASE=/u01/app; export ORACLE_BASE
ORACLE_HOME=/u01/app/oracle/proct/11.2.0/dbhome_1; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
export DATE=$(date +%Y_%m_%d)
export NLS_LANG="Simplified Chinese_china".AL32UTF8
/u01/app/oracle/proct/11.2.0/dbhome_1/bin/rman target sys/sys_admin cmdfile /home/oracle/rmanbak/script/db_bak2.rman log /home/oracle/rmanbak/script/log/rman_$DATE.log append
定時備份星期天為0級全備,星期三為2級備份,星期一,星期二,星期四,星期五,星期六為1級增量備份晚上11點開始備份
[oracle@oracle122 script]$ crontab -l
* 23 * * 0 /home/oracle/rmanbak/script/exec_0_level.sh
* 23 * * 1 /home/oracle/rmanbak/script/exec_1_level.sh
* 23 * * 2 /home/oracle/rmanbak/script/exec_1_level.sh
* 23 * * 3 /home/oracle/rmanbak/script/exec_2_level.sh
* 23 * * 4 /home/oracle/rmanbak/script/exec_1_level.sh
* 23 * * 5 /home/oracle/rmanbak/script/exec_1_level.sh
* 23 * * 6 /home/oracle/rmanbak/script/exec_1_level.sh
② oracle資料庫如何每天自動執行腳本完成正式資料庫到備份資料庫的備份
寫個腳本完成正式資料庫到備份資料庫的備份
再設定Task Schele 每天某個時間自動執行這個腳本
③ 如何實現ORACLE 9I的自動備份和還原
可以寫個批處理:將以下文本保存為.bat文件,將該文件加入計劃任務即可,需要建立目標文件夾,本例中為E:\backup。
rem
windows環境停Oracle資料庫(的)自動備份腳本..
rem
可以將本批處理設成windows任務計劃下自動施行..
@echo
off
@echo
================================================
@echo
windows環境停Oracle資料庫(的)自動備份腳本
@echo
說明:起步備份時,,亟需配備以次變數
@echo
一、BACKUP_DIR
指定要備份到哪個索引
@echo
二、ORACLE_USERNAME
指定備份所用(的)Oracle用戶名
@echo
三、ORACLE_PASSWORD
指定備份所用(的)Oracle密碼
@echo
四、ORACLE_DB
指定備份所用(的)Oracle聯接名
@echo
五、BACK_OPTION
備份選項,,可認為空,,可認為full=y,,可認為owner=a用戶,b用戶
之類....
@echo
================================================
rem
以下變數急需根據實際情況配備------>
set
BACKUP_DIR=E:\backup
set
ORACLE_USERNAME=zzsys
set
ORACLE_PASSWORD=zzsys
set
ORACLE_DB=ZZYW
set
BACK_OPTION=
for
/f
"tokens=1,2"
%%a
in
('date/t')
do
set
TODAY=%%a
set
BACK_NAME=%ORACLE_USERNAME%_%TODAY%
set
BACK_FULL_NAME=%BACKUP_DIR%\%BACK_NAME%
mkdir
%BACKUP_DIR%\%TODAY%
set
BACK_FULL_NAME=%BACKUP_DIR%\%TODAY%\%BACK_NAME%
rem
開始備份
exp
%ORACLE_USERNAME%/%ORACLE_PASSWORD%@%ORACLE_DB%
%BACK_OPTION%
file="%BACK_FULL_NAME%.dmp"
log="%BACK_FULL_NAME%exp.log"
@echo
設置第二個用戶
set
ORACLE_USERNAME=privzzsys
set
ORACLE_PASSWORD=privzzsys
set
ORACLE_DB=ZZYW
set
BACK_NAME=%ORACLE_USERNAME%_%TODAY%
set
BACK_FULL_NAME=%BACKUP_DIR%\%TODAY%\%BACK_NAME%
rem
開始備份
exp
%ORACLE_USERNAME%/%ORACLE_PASSWORD%@%ORACLE_DB%
%BACK_OPTION%
file="%BACK_FULL_NAME%.dmp"
log="%BACK_FULL_NAME%exp.log"
④ oracle 自動備份的腳本 望高手給解釋
很好理解的,一句一句來:
exp CJHDJ/CJHDJ file=E:\QIAOs環境備份\資料庫每日備份\oa\gzql_oa_%date:~0,10%.dmp:
導出 CJHDJ用戶數據, 導出文件路徑為 E:\QIAOs環境備份\資料庫每日備份\oa\ ,導出文件名為gzql_oa_%date:~0,10%.dmp ,其中%date:~0,10%是取系統時間精確到日,
dir *.dmp /O:-D >dir.txt :
列出所有後綴為.dmp文件的信息記錄到dir.txt 文件中,/O:-D 是dir命令的參數,排序和顯示目錄名和文件名的順序,按日期和時間,最晚的優先。
for /F "skip=20 tokens=4" %%a in (dir.txt) do @if exist %%a del %%a:
讀取dir.txt文件中的第4列的文件名(.dmp文件)並進行刪除文件操作
在說一下為什麼要"skip=20 tokens=4" 讀取dir.txt文件中從首行開始跳過20行 ,dir.txt的第4列
因為dir.txt中前5行是驅動器,目錄等信息,所以需要跳過。而前3列為日期,時間等信息,第4列為文件名,所以取第4列
你可以試一下,執行 dir * /O:-D >d:\dir.txt
d:\dir.txt 文件內容如下:
驅動器 C 中的卷是 OS
卷的序列號是 541D-F538
C:\ 的目錄
2011-02-18 08:14 <DIR> WINDOWS
2011-02-12 18:41 <DIR> TEMP
2011-02-03 15:24 <DIR> Program Files
2011-01-18 10:16 <DIR> UXLOG
⑤ oracle資料庫怎麼自動備份
配置批處理文件
1
新建名為"oracleBackup"的文本文檔(名字自己定),然後重命名後綴為"oracleBackup.bat"的批處理文件。
2
在oracleBackup.bat文件上點擊右鍵,選擇編輯,填寫以下相關內容:
rem ---------------------------------------------------------------------------
rem windows環境下Oracle資料庫的自動備份腳本。
rem 可以將本批處理設成windows任務計劃下自動執行。
@echo off
@echo ================================================
@echo windows環境下Oracle資料庫的自動備份腳本
@echo 說明:啟動備份時,需要配置以下變數
@echo 1、BACKUP_DIR 指定要備份到哪個目錄
@echo 2、ORACLE_USERNAME 指定備份所用的Oracle用戶名
@echo 3、ORACLE_PASSWORD 指定備份所用的Oracle密碼
@echo 4、ORACLE_DB 指定備份所用的Oracle連接名
@echo 5、BACK_OPTION 備份選項,可以為空,可以為full=y,可以為owner=a用戶,b用戶 等等....
@echo 6、RAR_CMD 指定RAR命令行壓縮工具所在目錄
@echo ================================================
rem 以下變數需要根據實際情況配置------> 注意:此腳本必須放在E:\backup目錄下
set BACKUP_DIR=E:\backup
set ORACLE_USERNAME=se
set ORACLE_PASSWORD=xj
set ORACLE_DB=xj_orcl
set BACK_OPTION= OWNER=se
set RAR_CMD="C:\Program Files\WinRAR\Rar.exe"
for /f "tokens=1,2" %%a in ('date/t') do set TODAY=%%a
set BACK_NAME=%ORACLE_DB%_%TODAY%()_
set BACK_FULL_NAME=%BACKUP_DIR%\%BACK_NAME%
rem 開始備份
exp %ORACLE_USERNAME%/%ORACLE_PASSWORD%@%ORACLE_DB% %BACK_OPTION% file="%BACK_FULL_NAME%.dmp" log="%BACK_FULL_NAME%exp.log"
rem 壓縮並刪除原有文件
%RAR_CMD% a -df "%BACK_FULL_NAME%back.rar" "%BACK_FULL_NAME%.dmp" "%BACK_FULL_NAME%exp.log"
rem ---------------------------------------------------------------------------
forfiles /m *.rar -d -7 /c "cmd /c del /f @path"
3
配置相關參數:
BACKUP_DIR:該參數為備份數據文件的存放位置,可根據實際情況進行設置(註:設置的文件路徑不允許包含漢字、特殊字元等內容)。
ORACLE_USERNAME:該參數為指定備份的Oracle資料庫用戶名。
ORACLE_PASSWORD:該參數為指定備份的Oracle資料庫密碼。
ORACLE_DB:該參數為指定備份的Oracle資料庫連接名。
BACK_OPTION:該參數為備份選項,可以為空,也可以為full=y等。
RAR_CMD:指定RAR命令行壓縮工具所在目錄
END
安裝軟體
1
下載WINRAR安裝包。
2
點擊"wrar520sc_setup.exe",進行安裝軟體。
3
根據軟體的安裝路徑,在命名的bat處理文件中配置:RAR_CMD參數。
END
添加定時任務
打開電腦的控制面板,選擇"任務計劃",雙擊打開。頁面如圖所示:
雙擊打開添加定時任務,點擊下一步進入相關設置頁面。頁面如圖所示:
單擊瀏覽按鈕,找到oracleBackup.bat文件添加,然後進行配置:根據實際情況選擇要備份的時間類型,此處以每天執行為例,選擇每天,點擊下一步,設置執行時間。
輸入執行定時任務機器的用戶名及密碼,點擊下一步,進入完成界面,點擊完成,至此,Oracle資料庫定時任務備份的設置。
5
利用修改機器時間進行定時任務的測試。
⑥ 求一個oracle 11g自動備份腳本,每行腳本需要有注釋。例如:資料庫名LC0001,密碼123456,SID為ORCL,
要求自動的話,自己在windows下設置定時任務,這個就不說了,網上教程很多。
另外,這個東西跟資料庫名沒什麼關系,跟本地實例,還有用戶名有關
寫個腳本:
@echooff
echo刪除30天前的備分文件和日誌
forfiles/pC:data_bak/m*.dmp/d-30/c"cmd/cdel@path"
forfiles/pC:data_bak/m*.log/d-30/c"cmd/cdel@path"
echo正在備份Oracle資料庫,請稍等……
expscott/tiger@sytvfile=c:/data_bak/orcl_data_bak_%date:~0,4%%date:~5,2%%date:~8,2%.dmplog=c:/data_bak/orcl_data_bak_%date:~0,4%%date:~5,2%%date:~8,2%.logowner=scottbuffer=65535
cdC:ProgramFilesWinRAR
rara-drC:/data_bak/orcl_data_bak_%date:~0,4%%date:~5,2%%date:~8,2%.dmp.rarC:/data_bak/orcl_data_bak_%date:~0,4%%date:~5,2%%date:~8,2%.dmp
echo任務完成!
echo.&pause請按任意鍵結束!
也沒什麼可解釋的了。
exp scott/tiger@sytv file=c:/data_bak/orcl_data_bak_%date:~0,4%%date:~5,2%%date:~8,2%.dmp log=c:/data_bak/orcl_data_bak_%date:~0,4%%date:~5,2%%date:~8,2%.log owner=scott buffer=65535
也就這部分,scott是用戶名,tiger是密碼,sytv是本地實例名,然後file是備份文件名,log是日誌文件名,owner=scott是導出scott下的所有對象,這個可根據自己情況修改。
執行後,文件是這樣的:

⑦ 怎麼執行oracle資料庫自動備份 linux 腳本
Oracle自動備份資料庫不外乎以下三種方式WINDOWS下的任務計劃(At命令)
UNIX下的Crontab
第三方工具如Viritas
在以上三種方式中Viritas屬於第三方工具,很多人可能都沒有接觸,主要說一下windows的任務計劃與unix的cron
1、生成腳本文件,如backup.rcv 假定文件內容如下:
$>cat backup.rcv connect target sys/password rcvcat rman/rman@localname; run{ allocate channel c1 type disk; allocate channel c2 type disk; allocate channel c3 type disk; backup fileaperset 3 format 『/u01/oradata/backup/arch%u_%s_%p』 archivelog all delete input; release channel c1; release channel c2; release channel c3; }
2、生成執行文件在windows上生成backup_archive.bat,內容包括rman cmdfile = backup.rcv 在unix下生成 backup_archive.sh,內容包括oracle/ramn/rman cmdfile = backup.rcv
3、加入調度在windows中用任務計劃向導即可,或使用at命令。在unix中,在目標機器上編寫一個文件,用以啟動Oracle自動備份進程。假定文件名為ORACLE,文件將放在/var/spool/cron/crontabs目錄下
$>cat oracle
0 23 * * 0 backup_archive.sh
#表示星期天23點對資料庫備份
0 12,18 * * * backup_archive.sh
#表示每天12點,18點備份
Crontab文件的每一行由六個域(minutes,hours,day of month,month,day of week,command)組成,域之間用空格或Tab分隔開來
⑧ ORACLE如何用腳本自動備份伺服器上資料庫到本地資料庫上
使用dataguard。具體怎麼用請自己查步驟,太多了,寫不下(嚴重推薦,很多大型企業都在用)。
大概步驟就是建一個test1資料庫,再將test1做全備份,再恢復到test2上。這兩庫就一致了。然後將test2打開到mount,設成standby庫。按照文檔修改參數,讓test1能傳數據過來。
太詳細的我這里也寫不完。你自己查一下「如何使用dataguard或者standby」
一旦資料庫崩潰可以很快切換到備份庫上,兩者之間的數據相差非常小(也就傳一兩個archivelog的時間)。此外,還可以通過第三方軟體(較安全),實現報表分離。也就是這個庫還可以專門做報表。
⑨ oracle(11g)求一個自動備份腳本
1、某一個時段自動備份用crontab計劃任務實現即可,例如
crontab -e添加
0 4 * * * /opt/bak.sh
2、刪除三天前的備份文件用find . -type f -mtime +3 -exec rm -rf {} \;實現
3、異地備份你就scp到其他主機上一份
4、實例bak.sh:
#!/bin/sh
today=`date +%Y%m%d%H`
bakfile=/opt/backup/bak_${today}.dmp
logfile=/opt/backup/logs/bak_${today}.log
find /opt/backup -type f -mtime +3 -exec rm -rf {} \;
#執行某些sql語句
#echo -e "select count(*) from table purge;"| sqlplus -s 'user01/123456'
exp user01/123456 file=$bakfile TABLES=T1,T2 log=$logfile
#你需要提前實現ssh無密碼訪問或者安裝sshpass之類的軟體
scp $bakfile [email protected]:/opt/backup/
⑩ 如何編寫一個windows下的oracle自動備份腳本
@echo off
echo ================================================
echo Windows環境下Oracle資料庫的自動備份腳本
echo 1. 使用當前日期命名備份文件。
echo 2. 自動刪除7天前的備份。
echo ================================================
::以「YYYYMMDD」格式取出當前時間。
set BACKUPDATE=%date:~0,4%%date:~5,2%%date:~8,2%
::設置用戶名、密碼和要備份的資料庫。
set USER=xxx
set PASSWORD=123456
set DATABASE=dbtest
::創建備份目錄。
if not exist "D:\backup\data" mkdir D:\backup\data
if not exist "D:\backup\log" mkdir D:\backup\log
set DATADIR=D:\backup\data
set LOGDIR=D:\backup\log
exp %USER%/%PASSWORD%@%DATABASE% file=%DATADIR%\data_%BACKUPDATE%.dmp log=%LOGDIR%\log_%BACKUPDATE%.log
::刪除7天前的備份。
forfiles /p "%DATADIR%" /s /m *.* /d -7 /c "cmd /c del @path"
forfiles /p "%LOGDIR%" /s /m *.* /d -7 /c "cmd /c del @path"
exit
