❶ Oracle:怎樣備份控制文件
一. 使用命令來備份
alter database backup controlfile to 'x:control.bak';
alter database backup controlfile to 'x:control.bak' reuse; reuse=就覆蓋以前的了
alter database backup controlfile to trace;
alter database backup controlfile to trace resetlogs;
alter database backup controlfile to trace noresetlogs;
二. 通過拷貝來備份
shutdown 關閉數據
查看在init.ora文件中的control_file一行,找到控制文件通過控制文件的路徑,然後拷貝粘貼到你備份的地方。
startup
三. 總結
第一種方法產生的是一個二進制文件,就是當前控制文件的一個一模一樣的備份。
第二種方法產生的是一個跟蹤文件,裡面存放的是創建控制文件的腳本,可以用記事本等文本編輯器打開這個腳本可以讓你重新創建控制文件,生成一個跟蹤文件到init.ora中user_mp_dest所指的目錄下"ORACLE_HOMEADMINORADBUDUMP"。
❷ oracle中如何用命令去備份另外一台資料庫
你想怎麼備份呢如果是導出的庫的話使用exp命令就可以了,只要能連上就行
❸ oracle怎麼用命令備份資料庫
1)導出資料庫命令expexpjmlsfd/jmlsfdfile=F:\jmlsfd.dmplog=F:\0709.logowner=jmlsfdjmlsfd/jmlsfd為需要導出資料庫的用戶名及密碼jmlsfd.dmp備份資料庫文件所在位置log導出數據的日誌文件ower備份數據的所有者2)導入資料庫命令impI
❹ oracle 備份
手工備份
單表備份(前提庫的結構是一樣的)
導出:
開始鈕->運行->輸入CMD->進入DOS界面
EXP 用戶名/密碼@連接字元串 GRANTS=Y TABLES=(stu) file=C:\文件名.DMP
導入:
開始鈕->運行->輸入CMD->進入DOS界面
IMP 用戶名/密碼@連接字元串 IGNORE=Y TABLES=(stu) FULL=N file=C:\文件名.DMP
其中stu是你要的表名
全庫導
導出:
開始鈕->運行->輸入CMD->進入DOS界面
EXP 用戶名/密碼@連接字元串 FULL=Y file=C:\文件名.DMP
導入:
開始鈕->運行->輸入CMD->進入DOS界面
IMP 用戶名/密碼@連接字元串 FULL=Y file=C:\文件名.DMP
自動備份
建議一:
利用任務計劃、批處理文件和ORACLE的EXP導出功能,可以根據日期自動生成ORACLE備份文件,大大方便了ORACLE數據備份。:
1,批處理文件backup.bat\.
exp system/manager file=d:\backup\oracle\oracle%date:~0,10%.dmp owner=system log=d:\backup\oracle\oracle%date:~0,10%.log
將生成oracle2006-01-09.dmp文件
exp system/manager file=d:\backup\oracle\oracle%date:~11,3%.dmp owner=system log=d:\backup\oracle\oracle%date:~11,3%.log
將生成oracle星期一.dmp文件,則每周循環保留一個備份文件,共7個備份文件循環
2,添加一個任務計劃
利用任務計劃向導,根據備份策略設置自動執行任務的時間頻率(例如每天零時),執行d:\oracle\backup.bat
3、以後每天將在目錄中生成形如「oracle2005-08-31.dmp和oracle2005-08-31.log」的備份和日誌文件。
說明:
1、%date%的值在不同的系統、語言版本下可能是不一樣的,控制面板裡面區域選項的設定也會改變%date%的值。請先在命令行中測試 echo %date% 的返回值。%date:~4,10% 是返回日期函數,~後的第一個參數是要截取的起始位置(從0開始),第二個參數是要截取的長度,如沒有則是截取到最後,參數可酌情修改。
2、如需要准確的時間做為文件名,請用%time%函數,參數同上。
建議二:
@echo off
set filename=e:\data_bak\%date:~8,2%日
exp userid=user/pass@esdata file=%filename%.dmp owner=user INDEXES=y grants=y constraints=y compress=y log=%filename%.log
rar a %filename%.rar %filename%.*
del %filename%.dmp
del %filename%.log
放計劃任務裡面定時執行,
文件名以日期的day部分來命名
備份後調用rar進行壓縮
這樣可以保存一個月的歷史數據
注意:需要把program files/winrar目錄下的rar.exe拷貝到系統system32目錄下
如果是以星期命名,則需要將set filename=e:\data_bak\%date:~8,2%日修改為
set filename=e:\data_bak\%date:~0,3%
建議三:
以下為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
:ONE
SET BACKPATH_FULL=%BACKPATH%\ONE
REN %BACKPATH%\ONE TWO
GOTO BACK
:TWO
SET BACKPATH_FULL=%BACKPATH%\TWO
REN %BACKPATH%\TWO THREE
GOTO BACK
:THREE
SET BACKPATH_FULL=%BACKPATH%\THREE
REN %BACKPATH%\THREE FOUR
GOTO BACK
:FOUR
SET BACKPATH_FULL=%BACKPATH%\FOUR
REN %BACKPATH%\FOUR FIVE
GOTO BACK
:FIVE
SET BACKPATH_FULL=%BACKPATH%\FIVE
REN %BACKPATH%\FIVE SIX
GOTO BACK
:SIX
SET BACKPATH_FULL=%BACKPATH%\SIX
REN %BACKPATH%\SIX SEVEN
GOTO BACK
:SEVEN
SET BACKPATH_FULL=%BACKPATH%\SEVEN
REN %BACKPATH%\SEVEN ONE
GOTO BACK
:BACK
EXP TESTUSER/TEST FILE=%BACKPATH_FULL%.DMP
SET BACKPATH=
SET BACKPATH_FULL=
EXIT
建議四:
RMAN TARGET=RMAN/RMAN@ORCL < C:\RMAN.TXT
建議五:
在文本里編輯cmd命令。然後保存成bat文件。在windows中定義任務計劃,就
可以自動執行了。
例:
編輯文本文件
del c:\exp\*.dmp
exp userid=cw/cw@db file='c:\exp\*.dmp' tables=(student)
保存成bat文件
建議六:
寫個簡單的批處理文件備份恢復:
備份:
@echo off 不顯示命令行
echo 開始備份表..... 列印信息
D: DOS切換到D: 盤
cd oracle\ora92\bin 切換到cd oracle\ora92\bin目錄
exp 用戶名/密碼@資料庫 file=d:\config_bak.dmp tables=(table1,table2) 備份表一表二到d:\config_bak.dmp
echo 備份完畢!
恢復:
@echo off
echo 開始恢復表.....
D:
cd oracle\ora92\bin
imp 用戶名/密碼@資料庫 file=d:\config_bak.dmp tables=(table1,table2) ignore=y
sqlplus /nolog @oraStartup.sql>>oraStartup.log 調用sql文件
pause 執行完sql文件以後暫停,看信息
echo 恢復完畢!
編寫oraStartup.sql
conn 用戶名/密碼@資料庫 as sysdba
select * from table1;
quit;
執行環境:可以在SQLPLUS.EXE或者DOS(命令行)中執行,
DOS中可以執行時由於 在oracle 8i 中 安裝目錄\ora81\BIN被設置為全局路徑,
該目錄下有EXP.EXE與IMP.EXE文件被用來執行導入導出。
oracle用java編寫,我想SQLPLUS.EXE、EXP.EXE、IMP.EXE這倆個文件是被包裝後的類文件。
SQLPLUS.EXE調用EXP.EXE、IMP.EXE他們所包裹的類,完成導入導出功能。
下面介紹的是導入導出的實例,向導入導出看實例基本上就可以完成,因為導入導出很簡單。
數據導出:
1 將資料庫TEST完全導出,用戶名system 密碼manager 導出到D:\chu.dmp中
exp system/manager@TEST file=d:\chu.dmp full=y
2 將資料庫中system用戶與sys用戶的表導出
exp system/manager@TEST file=d:\chu.dmp owner=(system,sys)
3 將資料庫中的表table1 、table2導出
exp system/manager@TEST file=d:\chu.dmp tables=(table1,table2)
4 將資料庫中的表table1中的欄位filed1以"00"打頭的數據導出
exp system/manager@TEST file=d:\chu.dmp tables=(table1) query=\" where filed1 like '00%'\"
上面是常用的導出,對於壓縮我不太在意,用winzip把dmp文件可以很好的壓縮。
不過在上面命令後面 加上 compress=y 就可以了
數據的導入
1 將D:\chu.dmp 中的數據導入 TEST資料庫中。
imp system/manager@TEST file=d:\chu.dmp
上面可能有點問題,因為有的表已經存在,然後它就報錯,對該表就不進行導入。
在後面加上 ignore=y 就可以了。
2 將d:\chu.dmp中的表table1 導入
imp system/manager@TEST file=d:\chu.dmp tables=(table1)
導入
基本上上面的導入導出夠用了。不少情況我是將表徹底刪除,然後導入。
❺ 怎樣用命令備份還原Oracle資料庫
Oracle中沒有備份和還原的概念,應該叫導出和導入。
一、導出:
1. 獲取幫助
exp help=y
2. 導出一個完整資料庫
exp system/manager file=bible_db log=dible_db full=y
3. 導出資料庫定義而不導出數據
exp system/manager file=bible_db log=dible_db full=y rows=n
4. 導出一個或一組指定用戶所屬的全部表、索引和其他對象
exp system/manager file=seapark log=seapark owner=seapark
exp system/manager file=seapark log=seapark owner=(seapark,amy,amyc,harold)
注意:在導出用戶時,盡管已經得到了這個用戶的所有對象,但是還是不能得到這些對象引用的任何同義詞。解決方法是用以下的SQL*Plus命令創建一個腳本文件,運行這個腳本文件可以獲得一個重建seapark所屬對象的全部公共同義詞的可執行腳本,然後在目標資料庫上運行該腳本就可重建同義詞了。
SET LINESIZE 132
SET PAGESIZE 0
SET TRIMSPOOL ON
SPOOL c:\seapark.syn
SELECT 'Create public synonym '||synonym_name
||' for '||table_owner||'.'||table_name||';'
FROM dba_synonyms
WHERE table_owner = 'SEAPARK' AND owner = 'PUBLIC';
SPOOL OFF
5. 導出一個或多個指定表
exp seapark/seapark file=tank log=tank tables=tank
exp system/manager file=tank log=tank tables=seapark.tank
exp system/manager file=tank log=tank tables=(seapark.tank,amy.artist)
6. 估計導出文件的大小
全部表總位元組數:
SELECT sum(bytes)
FROM dba_segments
WHERE segment_type = 'TABLE';
seapark用戶所屬表的總位元組數:
SELECT sum(bytes)
FROM dba_segments
WHERE owner = 'SEAPARK'
AND segment_type = 'TABLE';
seapark用戶下的aquatic_animal表的位元組數:
SELECT sum(bytes)
FROM dba_segments
WHERE owner = 'SEAPARK'
AND segment_type = 'TABLE'
AND segment_name = 'AQUATIC_ANIMAL';
7. 導出表數據的子集(oracle8i以上)
NT系統:
exp system/manager query='Where salad_type='FRUIT'' tables=amy.salad_type
file=fruit log=fruit
UNIX系統:
exp system/manager query=\"Where salad_type=\'FRUIT\'\" tables=amy.salad_type
file=fruit log=fruit
8. 用多個文件分割一個導出文件
exp system/manager
file=(paycheck_1,paycheck_2,paycheck_3,paycheck_4)
log=paycheck, filesize=1G tables=hr.paycheck
9. 使用參數文件
exp system/manager parfile=bible_tables.par
bible_tables.par參數文件:
#Export the sample tables used for the Oracle8i Database Administrator's Bible.
file=bible_tables
log=bible_tables
tables=(
amy.artist
amy.books
seapark.checkup
seapark.items
)
10. 增量導出
「完全」增量導出(complete),即備份整個資料庫
exp system/manager inctype=complete file=990702.dmp
「增量型」增量導出(incremental),即備份上一次備份後改變的數據
exp system/manager inctype=incremental file=990702.dmp
「累計型」增量導出(cumulative),即備份上一次「完全」導出之後改變的數據
exp system/manager inctype=cumulative file=990702.dmp
二、導入:
1. 獲取幫助
imp help=y
2. 導入一個完整資料庫
imp system/manager file=bible_db log=dible_db full=y ignore=y
3. 導入一個或一組指定用戶所屬的全部表、索引和其他對象
imp system/manager file=seapark log=seapark fromuser=seapark
imp system/manager file=seapark log=seapark fromuser=(seapark,amy,amyc,harold)
4. 將一個用戶所屬的數據導入另一個用戶
imp system/manager file=tank log=tank fromuser=seapark touser=seapark_
imp system/manager file=tank log=tank fromuser=(seapark,amy) touser=(seapark1, amy1)
5. 導入一個表
imp system/manager file=tank log=tank fromuser=seapark TABLES=(a,b)
6. 從多個文件導入
imp system/manager file=(paycheck_1,paycheck_2,paycheck_3,paycheck_4)
log=paycheck, filesize=1G full=y
7. 使用參數文件
imp system/manager parfile=bible_tables.par
bible_tables.par參數文件:
#Import the sample tables used for the Oracle8i Database Administrator's
Bible. fromuser=seapark touser=seapark_ file=seapark log=seapark_import
8. 增量導入
imp system./manager inctype= RECTORE FULL=Y FILE=A
❻ oracle數據備份
份:
在SQL*PLUS中
1.NOARCHIVELOG模式的備份(冷備份)
1)關閉資料庫
2)備份數據文件
A 查找數據文件的位置
SELECT * FROM V$DATAFILE
B 備份數據文件
$ C:\orajd\ora92\oradata\ora200\*.dbf d:\bak\*.*;
3)備份控制文件
A 查找控制文件
select * from v$controlfile;
B 備份控制文件
$ C:\orajd\ora92\oradata\ora200\*.ctl d:\bak\*.*;
4)備份重做日誌文件
A 查找重做日誌文件
select * from v$logfile;
B 備份重做日誌文件
$ C:\orajd\ora92\oradata\ora200\*.log d:\bak\*.*;
2.ARCHIVELOG模式的備份(熱備份)
1)查詢備份的數據文件於哪一個表空間有關
SELECT V$TABLESPACE.NAME,V$DATAFILE.NAME
FROM V$TABLESPACE JOIN V$DATAFILE USING(TS#);
2)備份數據文件
alter tablespace 表空間 BEGIN BACKUP;
$ COPY 數據文件 存放路徑
ALTER TABLESPACE 表空間 END BACKUP;
3)查詢是否還有表空間處於備份模式
SELECT * FROM V$BACKUP; STATUS不是ACTIVE即可以
SELECT V$TABLESPACE.NAME,V$BACKUP.STATUS,V$DATAFILE.NAME
FROM V$TABLESPACE JOIN V$DATAFILE USING (TS#) JOIN V$BACKUP USING (FILE#);
4)備份控制文件
ALTER DATABASE BACKUP CONTROLFILE TO '目標路徑及文件名';
3.邏輯備份
1)資料庫方式(導出用戶要具有exp_full_database許可權)
exp system/system@ora110 full=y file="f:\full.dmp"
2)用戶方式
exp system/system@ora110 owner=(czgk,scott) file="f:\user.dmp"
3)表方式
exp czgk/czgk@ora110 tables=(users,budget) file="f:\table.dmp"
恢復:
1.冷備份恢復
方案一:
1.SHUTDOWN;
2.$ COPY 存放路徑 數據文件 $ COPY F:\BAK\*.DBF C:\ORADATA\*.*;
3.$ COPY 存放路徑 控制文件 $ COPY F:\BAK\*.CTL C:\ORADATA\*.*;
4.$ COPY 存放路徑 日誌文件 $ COPY F:\BAK\*.LOG C:\ORADATA\*.*;
5.STARTUP;
方案二:
1.STARTUP MOUNT;
2.ALTER DATABASE DATAFILE 數據文件 OFFLINE DROP; ALTER DATABASE DATAFILE 'C:\ORADATA\USERS01.DBF' OFFLINE DROP;
3.ALTER DATABASE OPEN;
2.熱備份恢復
方案一:
1.SHUTDOWN;
2.$ COPY 存儲數據文件 數據文件;
3.startup mount;
4.recover datafile 數據文件; 價值恢復只能存檔模式下
example:
recover datafile 'c:\orajd\oradata\ora200\users01.dbf';
5.ALTER DATABASE OPEN;
方案二:
1.STARTUP MOUNT;
檢查是否運行在歸檔模式
2.ALTER DATABASE DATAFILE 數據文件 OFFLINE; //system01.dbf不能設置未OFFLINE狀態
3.ALTER DATABASE OPEN;
3.邏輯恢復
1)資料庫方式(導入用戶要具有exp_full_database許可權)
imp system/system@ora110 full=y file="f:\full.dmp"
2)用戶方式
imp system/system@ora110 fromuser=aaa,bbb touser=ccc file="f:\user.dmp"
imp system/system@ora110 fromuser=aaa,bbb touser=ccc,ccc file="f:\user.dmp"
看有什麼錯誤
3)表方式
imp system/system@ora110 fromuser=aaa touser=ccc file="f:\user.dmp"
注意:導出用戶要和導入用戶相同可以用上面的方法,否則用
imp czgk/czgk@ora110 full=y file="f:\table.dmp"
❼ oracle有那些備份方式
前面的很全了,但是還差一點,就是可以冗餘備份。
❽ oracle導出導入資料庫的命令是在哪裡執行的。
exp可以在客戶端執行也可以在伺服器端執行,
在客戶端執行需要先安裝有oracle的客戶端,這樣才會有exp.exe存在,配製好tns,在cmd命令行下直接執行即可。
在伺服器端執行也是在cmd命令行下直接執行即可。
如果是linux系統,就是以oracle用戶登錄,在控制台下執行。
建議在伺服器端執行exp,備份速度快。
❾ 怎麼從oracle資料庫備份資料庫
1、首先先確認oracle伺服器上oracle中標紅的相關的服務是否已經正常啟動。
❿ Oracle 備份的方法有哪些
我們為Oracle 10g制定的夜間備份策略9步是: 1、刪除舊的日誌文件並重命名當前的日誌2、刪除所有RMAN備份文件3、執行一個0級RMAN備份4、創建克隆文件5、創建歸檔日誌備份,包括恢復目錄內務6、刪除數據泵導出文件7、執行數據泵導出8、檢查日誌錯誤9、廣播和/或發送簡短錯誤描述的電子郵件1、刪除舊日誌文件並重命名當前的日誌這是每天都要執行的,為所有的腳本創建一個日誌文件是很好的實踐,在步驟8中,我檢查所有日誌錯誤,因此重命名了當前日誌,當它們被重命名後,就很容易參考舊的作業分辨出錯誤了,這些所有需要刪除的最終是為了不引起空間問題。代碼清單1:qgrep -l rman D:Oracleadmincommonbackuplogs* >>%LOGFILE%del /Q D:Oracleadmincommonbackuplogs*.oldlog3 >>%LOGFILE%ren D:Oracleadmincommonbackuplogs*.oldlog2 *.oldlog3 >>%LOGFILE%ren D:Oracleadmincommonbackuplogs*.oldlog1 *.oldlog2 >>%LOGFILE%ren D:Oracleadmincommonbackuplogs*.log *.oldlog1 >>%LOGFILE%提示:盡力自動清除日誌文件,要記住這些命令是不容易的。2、刪除所有RMAN備份文件這僅需要在0級RMAN備份之前執行一次,我們的RMAN備份在X:驅動器上執行,正確地說是X:RMAN。我們估算這個驅動器可以容納下我們的0級備份、歸檔日誌、歸檔日誌備份和數據泵導出文件。每周清除一次RMAN文件基本上可以保證驅動器上有足夠的空間存儲下一周的備份。代碼清單2:# Running these commands will show the files that will be deleted in the next step.FORFILES /p x:rman /m *.bks /d -0 /c "CMD /C echo @PATH@FILE @FDATE.@FTIME" >>%logfile%FORFILES /p x:rman /m *cfile* /d -0 /c "CMD /C echo@PATH@FILE @FDATE.@FTIME" >>%logfile%# These commands perform the actual deletion.FORFILES /p x:rman /d -0 /c "CMD /C del *.bks" >>%logfile%FORFILES /p x:rman /d-0 /c "CMD /C del *cfile*" >>%logfile%提示:一定要自動刪除磁碟上的大文件。在一個不恰當的時間刪除你將用光磁碟空間。X因子X:驅動器是這個備份的關鍵部分,我們定期在其他伺服器或交替節點上克隆我們的生產資料庫進行測試和開發。RMAN喜歡從它們的備份中獲取它的文件,最簡單的方法就是備份到磁帶上,這種方法與你在伺服器上執行克隆沒什麼區別,當你告訴RMAN你的目標資料庫,它就直接為它需要的文件轉到介質管理層(MML),我們使用磁帶的問題是磁帶不可靠或磁帶驅動不可靠,我們的解決辦法是備份到磁碟上,問題是它將中伺服器相同的驅動器映射中來回地復制文件,我們需要做的是映射一個SAN驅動器到我們的生產伺服器上,然後在啟動時將我們的測試伺服器映射到同一個SAN驅動器,我們可以在伺服器命令行使用一個命令來完成這個任務,我們可以通過使用一個來自Windows資源套件中叫做AutoExNT的服務來解決這個問題,它允許我們在啟動時運行一個批處理文件,我們可以將命令放在那裡,現在生產和測試伺服器都映射到同一個X:驅動器。X文件因子AutoExNT只能工作在32位伺服器上,當你有64位伺服器時問題就來了,不幸的是,Windows資源套件對64位伺服器無效,因此無法使用AutoExNT,幸運的是,我們可以說服我們的開發人員在64位Windows上創建一個「啟動」服務,讓它與AutoExNT服務一樣,無論怎樣,我們讓批處理文件在伺服器啟動時執行。3、執行一個0級RMAN備份這一步通常每周執行一次,我們有一些更大、更活動的資料庫創建的數量巨大的歸檔日誌,在恢復或克隆時,恢復資料庫的時間將很長,在這些情況下,我們在一周內將不止執行一次0級備份,在0級RMAN備份中,我們執行非恢復目錄維護,腳本叫做DBname_lvl_0_disk.rcv。代碼清單3:#************* Configure controls for Recovery Manager *******************#***************** in case they have been changed ************************configure controlfile autobackup on;configure controlfile autobackup format for device type disk to 'X:rmanCFILE_%F.bks';configure channel 1 device type disk format 'X:rmanBACKUPPIECE_%d_%U_%T_%s.bks' maxpiecesize 2048M;configure retention policy to recovery window of 34 days;#************* Perform weekly RMAN level 0 Database Backup ***************backup as compressed backupset incremental level = 0 database;#************* Confirm level 0 Backup is valid ***************************restore database check logical validate;第一個命令配置RMAN讓控制文件和spfile自動備份,第二個命令指定RMAN用一種特定的格式給文件命名,本例中,備份到磁碟上的文件叫做「X:rmanCFILE_F%.bks」,第三個命令創建一個磁碟通道並命名為「1」,命名備份片「X:rmanBACKUPPICE_%d_%U_%T_%s.bks」以及任何一個備份片的大小不能超過2GB,第四個命令告訴恢復目錄目標資料庫的備份應該保留34天,第五個命令才是真正的執行備份,它告訴RMAN創建一個壓縮的備份集,它真正可以容納更多的備份片,它還指定了僅對資料庫執行一個完整備份,沒有備份歸檔日誌,因為存儲是最主要的問題,壓縮備份對節省空間真正的有幫助,我們發現這是RMAN最有用的特性之一,最後一行的命令執行已經完成的備份檢查,它讀取備份文件並確認它們沒有被破壞,我強烈建議不要跳過這一步,沒有什麼比在需要恢復一個資料庫時發現一個或更多的文件不可用更糟糕的了。提示:只有當備份文件確認有效後你才可以使用它們,是的,事情就是這樣!我已經試過多次在備份完成後但檢查確認未完成之前的實驗了。我使用一個Windows批處理文件調用RMAN 0級備份腳本,這個批處理文件叫做DBname_lvl_0_disk.bat。代碼清單4:set NLS_DATE_FORMAT=DD-MON-YYYY HH24:MI:SSset NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252set CURDIR=D:Oracleadmincommonbackupcd %CURDIR%rman target ID/pword@DBname catalog rcatID/rcatpword@rcatname log=logsDBname_lvl_0_disk.log @DBname_lvl_0_disk.rcvpage_on_backup.vbs DBname_level_0_disk.log page_DBname_level_0.log Dbname最前面兩行設置操作系統的環境變數,我們更喜歡詳細一點的日期掩碼,05-DEC-2007 23:59:59"比"05-DEC-2007"好,日期格式在恢復過程中變得更重要了,設置NLS_LANG變數,移除所有資料庫正在使用的字元設置疑惑,第三和第四行對於使用計劃任務而言是很重要的,Windows需要直接指定RMAN腳本的位置,因此設置好目錄並將腳本移動到那裡,接下來,才真正的調用RMAN,需要同時登陸到target和catalog,在當前目錄下一個獨立的叫做「logs」的子目錄下創建一個日誌文件,以及調用列表4中的腳本代碼,如果出現任何錯誤,一個VB腳本被調用呼叫支持人員,如果不出現錯誤,那麼只會發送一封日誌文件的電子郵件,在第9小節會有更多細節信息。4、 創建克隆文件這是用RMAN備份自動「刷新」測試資料庫最關鍵的一步,克隆文件批處理作業實際上創建了「復制資料庫」語句,我們使用它克隆我們的生產資料庫到我們的測試資料庫上,下面是一個叫做create_TESTDB_clone_files.sql的在生產伺服器上運行的SQL腳本文件。代碼清單5: set echo off;set feedback off;set linesize 140;SET PAGESIZE 0;set trimspool on;ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MON-DD HH24:MI:SS';select checkpoint_change# from v$database;alter system archive log current;select sysdate from al;-- ***********************************************************************-- ***********************************************************************-- ***********************************************************************-- ******************************* TESTDBSERVER **************************-- ******************************* TESTDBSERVER **************************-- ******************************* TESTDBSERVER **************************-- ***********************************************************************-- ***********************************************************************-- ***********************************************************************--TESTDB1spool TESTDBSERVERd$Oracleadmincommoncloneclone_to_TETSTDB1.rcvselect 'plicate target database to TESTDB1 until time ' ||''''|| sysdate ||''';' from al;spool off;--TESTDB2spool TESTDBSERVERd$Oracleadmincommoncloneclone_to_TETSTDB2.rcvselect 'plicate target database to TESTDB2until time ' ||''''|| sysdate ||''';' from al;spool off;--TESTDB3spool TESTDBSERVERd$Oracleadmincommoncloneclone_to_TETSTDB3.rcvselect 'plicate target database to TESTDB23until time ' ||''''|| sysdate ||''';' from al;spool off;-- ***********************************************************************-- ***********************************************************************-- ***********************************************************************-- ********************************* THE END *****************************-- ********************************* THE END *****************************-- ***********************************************************************-- ***********************************************************************-- ***********************************************************************alter system archive log current;select sysdate from al;select checkpoint_change# from v$database;select sysdate from al;exit;這個腳本在生產伺服器上運行,spool輸出到測試伺服器,首先你注意的是NLS_DATE_FORMAT設置,與0級備份時設置方法一樣;接下來,你看到我們已經選擇了系統改變序號或SCN,資料庫也可以通過使用SCN克隆和/或恢復,我們不再使用SCN進行資料庫復制,我們不取消這一步是因為我們想查看日誌文件中的SCN,假設在一個生產恢復情景下,SCN在一個額外的位置是可用的,在接下來的語句中,我們對當前的重做日誌進行歸檔,我們從Oracle 8i開始就已經執行過了RMAN復制,但日誌方面總有問題,這是唯一可以確定的最好的方法,我們每次都這樣使用;接下來,我們選擇sysdate,我們想在SCN下查看它,向下移動到spool語句,你看到一個為TESTDBSERVER編寫的名叫clone_to_TESTDB.rcv的RMAN腳本,只有一行:代碼清單6:plicate target database to TESTDB1 until time '2007-DEC-05 19:55:00';你可以在你的測試資料庫伺服器上為每個測試資料庫單獨編寫一個克隆腳本,正如你看到的,這就是我們所做的,我們有一部分生產資料庫伺服器不止安裝有一個生產資料庫,對那些我們有兩個腳本,在每個生產資料庫上為測試資料庫創建一個克隆腳本。代碼清單7:set NLS_DATE_FORMAT=DD-MON-YYYY HH24:MI:SSset NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252set CURDIR=D:Oracleadmincommonbatchcd %CURDIR%sqlplus system/pword@DBNAME @create_TESTDB_clone_files.sql >logscreate_TESTDB_clone_files.log這個腳本的批處理文件非常簡單,最前面的兩行設置你的環境變數,第三和第四行用於任務調度,非常重要,windows需要直接指定SQL腳本的位置,因此需要設置好目錄後,將腳本移動到目錄中,接下來,SQLplus才真正被調用和運行腳本以創建克隆文件,在當前目錄下的一個叫做logs的子目錄中單獨生成了一個日誌文件。