當前位置:首頁 » 編程軟體 » rman全備份腳本結構

rman全備份腳本結構

發布時間: 2022-09-04 09:43:39

① oracle資料庫這樣的(照片所示)rman備份腳本怎麼寫

只考慮備份,不考慮其他情況下:
root下的3個rman備份級別的腳本:
#cat
rman_0.sql
backup
incremental
level
0
database;
#cat
rman_1.sql
backup
incremental
level
1
database;
#cat
rman_1c.sql
backup
incremental
level
1
cumulative
database;
root下的調用rman腳本
#cat
rman_0.sh
#!/bin/bash
su
-
oracle
-c
"rman
target
sys/SHUIMITAO@rabbit
@/root/rman_0.sql"
#cat
rman_1.sh
#!/bin/bash
su
-
oracle
-c
"rman
target
sys/SHUIMITAO@rabbit
@/root/rman_1.sql"
#cat
rman_1c.sh
#!/bin/bash
su
-
oracle
-c
"rman
target
sys/SHUIMITAO@rabbit
@/root/rman_1c.sql"
root的計劃任務:
#crontab
-e
0
1
*
*
0
/root/rman_0.sh
0
2
*
*
1
/root/rman_1.sh
0
2
*
*
2
/root/rman_1.sh
0
3
*
*
3
/root/rman_1c.sh
0
2
*
*
4
/root/rman_1.sh
0
3
*
*
5
/root/rman_1c.sh
0
2
*
*
6
/root/rman_1.sh
11g里只有0和1兩個備份級別,請自行對應oracle低版本
level
0是full
level
1是差異增量備份
--和前一次備份比較,將這個期間改變的數據備份下來
level
1c是累計增量備份
--和比他小得級別相比(即全備份),改變的數據備份
然後根據實際情況還要將備份的策略往腳本添加

② 在ORACLE里什麼是RMAN命令,它有什麼作用備份

3. 恢復目錄

3.1.恢復目錄的概念

恢復目錄是由RMAN使用、維護的用來放置備份信息的倉庫。RMAN利用恢復目錄記載的信息去判斷如何執行需要的備份恢復操作。

恢復目錄可以存在於ORACLE資料庫的計劃中。

雖然恢復目錄可以用來備份多個資料庫,建議為恢復目錄資料庫創建一個單獨的資料庫。

恢復目錄資料庫不能使用恢復目錄備份自身。

3.2.建立恢復目錄

第一步,在目錄資料庫中創建恢復目錄所用表空間:

SQL> create tablespace rman_ts datafile 'd:\oracle\oradata\rman\rman_ts.dbf' size 20M;

表空間已創建。

第二步,在目錄資料庫中創建RMAN 用戶並授權:

SQL> create user rman identified by rman default tablespace rman_ts temporary tablespace temp quota unlimited on rman_ts;

用戶已創建。

SQL> grant recovery_catalog_owner to rman ;

授權成功。
SQL> grant connect, resource to rman ;

授權成功。

第三步,在目錄資料庫中創建恢復目錄

C:\>rman catalog rman/rman

恢復管理器:版本8.1.6.0.0 - Proction

RMAN-06008:連接到恢復目錄資料庫
RMAN-06428:未安裝恢復目錄
RMAN>create catalog tablespace rman_ts;
RMAN-06431:恢復目錄已創建

注意:雖然使用RMAN不一定必需恢復目錄,但是推薦使用。因為恢復目錄記載的信息大部分可以通過控制文件來記載,RMAN在恢復資料庫時使用這些信息。不使用恢復目錄將會對備份恢復操作有限制。

3.3.使用恢復目錄的優勢

可以存儲腳本;

記載較長時間的備份恢復操作;

4. 啟動RMAN

RMAN為互動式命令行處理界面,也可以從企業管理器中運行。

為了使用下面的實例,先檢查環境符合:

the target database is called "his" and has the same TNS alias

user rman has been granted "recovery_catalog_owner "privileges

目標資料庫的連接用戶為internal帳號,或者以其他SYSDBA類型帳號連接

the recovery catalog database is called "rman" and has the same TNS alias

the schema containing the recovery catalog is "rman" (same password)

在使用RMAN前,設置NLS_DATE_FORMAT 和NLS_LANG環境變數,很多RMAN LIST命令的輸出結果是與日期時間相關的,這點在用戶希望執行以時間為基準的恢復工作也很重要。

下例是環境變數的示範:

NLS_LANG= SIMPLIFIED CHINESE_CHINA.ZHS16GBK
NLS_DATE_FORMAT=DD-MON-YYYY HH24:MI:SS

為了保證RMAN使用時能連接恢復目錄,恢復目錄資料庫必須打開,目標資料庫至少要STARTED(unmount),否則RMAN會返回一個錯誤,目標資料庫必須置於歸檔模式下。

4.1.使用不帶恢復目錄的RMAN

設置目標資料庫的 ORACLE_SID ,執行:

% rman nocatalog
RMAN> connect target
RMAN> connect target internal/<password>@his

4.2.使用帶恢復目錄的RMAN

% rman rman_ts rman/rman@rman
RMAN> connect target
% rman rman_ts rman/rman@rman target internal/<password>@his

4.3.使用RMAN

一旦連接到目標資料庫,可以通過交互界面或者事先存儲的腳本執行指定RMAN命令, 下面是一個使用RMAN交互界面的實例:

RMAN> resync catalog;
RMAN-03022:正在編譯命令:resync
RMAN-03023:正在執行命令:resync
RMAN-08002:正在啟動全部恢復目錄的 resync
RMAN-08004:完成全部 resync

使用腳本的實例:

RMAN> execute script alloc_1_disk;

創建或者替代存儲的腳本:

RMAN> replace script alloc_1_disk {
2> allocate channel d1 type disk;
3> }

5.注冊或者注銷目標資料庫

5.1.注冊目標資料庫

資料庫狀態:

恢復目錄狀態:打開

目標資料庫:載入或者打開

目標資料庫在第一次使用RMAN之前必須在恢復目錄中注冊:

第一步,啟動恢復管理器,並且連接目標資料庫:

C:\>rman target internal/oracle@his catalog rman/rman@rman

恢復管理器:版本8.1.6.0.0 - Proction

RMAN-06005:連接到目標資料庫:HIS (DBID=3021445076)
RMAN-06008:連接到恢復目錄資料庫

第二步,注冊資料庫:

RMAN> register database;
RMAN-03022:正在編譯命令:register
RMAN-03023:正在執行命令:register
RMAN-08006:注冊在恢復目錄中的資料庫
RMAN-03023:正在執行命令:full resync
RMAN-08002:正在啟動全部恢復目錄的resync
RMAN-08004:完成全部resync

5.2.注銷目標資料庫

RMAN提供了一個注銷工具,叫DBMS_RCVCAT工具包,請注意一旦注銷了該目標資料庫,就不可以使用恢復目錄中含有的備份集來恢復資料庫了。

為了能注銷資料庫,需要獲得資料庫的標識碼(DB_ID)和資料庫鍵值(DB_KEY)。其中連接目標資料庫時將會獲得DB_ID。

C:\>rman target internal/oracle@his catalog rman/rman@rman

恢復管理器:版本8.1.6.0.0 - Proction

RMAN-06005:連接到目標資料庫:HIS (DBID=3021445076)
RMAN-06008:連接到恢復目錄資料庫

其中DBID=3021445076,利用DBID=3021445076查詢資料庫鍵值碼:

連接到目標資料庫,查詢db表:

SQL> select * from db;

DB_KEY DB_ID CURR_DBINC_KEY
---------- ---------- --------------
1 3021445076 2

獲得DB_KEY=1,這樣,該目標資料庫DB_KEY=1,DBID=3021445076,利用兩個值使用DBMS_RCVCAT工具包就可以注銷資料庫:

SQL> execute dbms_rcvcat.unregisterdatabase(1,3021445076);
PL/SQL 過程已成功完成。

至此,注銷資料庫操作完成。
... ...

③ rman備份腳本和rman增量備份腳本分享

一、單獨備份
1、經典整庫備份:backup
as
compressed
backupset
database
include
current
controlfile
plus
archivelog
delete
all
input;
2、tablespace:backup
tablespace
名字;
3、數據文件:backup
datafile
n;
(n:具體的數據文件編號select
file_name,file_id,tablespace_name
from
dba_data_files;)
4、控制文件:backup
current
controlfile;或者backup
database
include
current
controlfile;
5、日誌文件:backup
archivelog
all;或者
database
plus
archivelog;
6、參數文件:backup
spfile;
7、全庫備份腳本:
復制代碼
代碼如下:
run{
allocate
channel
c1
type
disk;
backup
full
tag
『dbfull'
format
『/backup/full%u_%s_%p'
database
include
current
controlfile;
sql
『alter
system
archive
log
current';
#在資料庫進行全備份完成之後,需要執行該條命令將當前日誌歸檔,備份歸檔日誌時應該包括最後生成的歸檔
backup
filesperset
3
format
『/backup/arch%u_%s_%p'#filesperset
3設定每個備份集里文件不超過3個
archivelog
all
delete
input;
#備份歸檔可選,可以單獨定期備份
release
channel
c1;
}
二、增量備份
1、0級增量備份
復制代碼
代碼如下:
run{
allocate
channel
c1
type
disk;
backup
incremental
level
0
tag
『db0'
format
『/backup/db0%u_%s_%p'database
include
current
controlfile;
;
sql
'alter
system
archive
log
current';#在資料庫進行全備份完成之後,需要執行該條命令將當前日誌歸檔,備份歸檔日誌時應該包括最後生成的歸檔
backup
filesperset
3
format
『/backup/arch%u_%s_%p'#filesperset
3設定每個備份集里文件不超過3個
archivelog
all
delete
input;
#備份歸檔可選,可以單獨定期備份
release
channel
c1;
}
2、1級備份腳本
復制代碼
代碼如下:
run{
allocate
channel
c1
type
disk;
backup
incremental
level
1
tag
『db1'
format
『/backup/db1%u_%s_%p'
database
skip
readonly
include
current
controlfile;
backup
filesperset
3
format
『/backup/arch%u_%s_%p'#filesperset設定每個備份集里文件不超過3個
archivelog
all
delete
input;
#備份歸檔可選,可以單獨定期備份
release
channel
c1;
}

④ oracle rman備份腳本怎麼寫

在ORACLE資料庫中,RMAN備份的腳本非常多,下面介紹一例shell腳本如何通過RMAN備份,以及ftp上傳RMAN備份文件以及歸檔日誌文件的腳本。
fullback.sh 裡面調用RMAN命令做資料庫備份,它使用的cmdfile為/home/oracle/backup/bin/fullback.rcv,同時在/home/oracle/backup/logs目錄下生成日誌文件。
1: [oracle@DB-Server bin]$ more fullback.sh
2:
3: #!/bin/bash
4:
5: export ORACLE_BASE=/u01/app/oracle
6:
7: export ORACLE_SID=gps
8:
9: ORACLE_HOME=$ORACLE_BASE/proct/10.2.0/db_1; export ORACLE_HOME
10:
11: TMP=/tmp; export TMP
12:
13: TMPDIR=$TMP; export TMPDIR
14:
15: PATH=/usr/sbin:$PATH; export PATH
16:
17: PATH=$ORACLE_HOME/bin:$PATH; export PATH
18:
19: LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
20:
21: CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
22:
23: export CLASSPATH
24:
25: TODAY=`date +%Y_%m_%d`
26:
27: rman nocatalog target / cmdfile /home/oracle/backup/bin/fullback.rcv log /home/oracle/backup/logs/fullbackup_$TODAY.log
28:
29: /home/oracle/backup/bin/ftpbackup.sh
30:
fullback.rcv文件非常簡單, 如下所示:
1: [oracle@DB-Server bin]$ more /home/oracle/backup/bin/fullback.rcv
2:
3: run{
4:
5: allocate channel c4 type disk;
6:
7: backup as compressed backupset
8:
9: skip inaccessible
10:
11: tag fullbackupwitharchivelog
12:
13: (database);
14:
15: backup current controlfile;
16:
17: backup spfile;
18:
19: sql "alter system archive log current";
20:
21: delete noprompt obsolete;
22:
23: release channel c4;
24:
25: }
26:
RMAN生成的備份文件,需要通過FTP上傳到FTP伺服器,一則資料庫伺服器沒有這么多空間存儲多天的備份,二則是出於容災、數據安全需要。
下面腳本中FTP伺服器,用戶名密碼均使用xxx替代,在實際環境中,使用具體的信息替代即可。
1: [oracle@DB-Server bin]$ more ftpbackup.sh
2:
3: #!/bin/sh、
4:
5: rm -f /home/oracle/.netrc
6:
7: date_yesterday=`date -d'yesterday' +%Y_%m_%d`
8:
9: date_today=`date +%Y_%m_%d`
10:
11: echo "default login xxxx password xxxxxx" >> /home/oracle/.netrc
12:
13: echo "macdef init" >> /home/oracle/.netrc
14:
15: echo "binary" >> /home/oracle/.netrc
16:
17: echo "cd archivelog" >> /home/oracle/.netrc
18:
19: echo "mkdir $date_yesterday" >> /home/oracle/.netrc
20:
21: echo "cd $date_yesterday" >> /home/oracle/.netrc
22:
23: echo "lcd /u04/flash_recovery_area/gps/archivelog/$date_yesterday" >> /home/oracle/.netrc
24:
25: echo "mput *" >> /home/oracle/.netrc
26:
27: echo "cd .." >> /home/oracle/.netrc
28:
29: echo "mkdir $date_today" >>/home/oracle/.netrc
30:
31: echo "cd $date_today" >>/home/oracle/.netrc
32:
33: echo "lcd /u04/flash_recovery_area/gps/archivelog/$date_today" >>/home/oracle/.netrc
34:
35: echo "mput * ">>/home/oracle/.netrc
36:
37: echo "cd .." >>/home/oracle/.netrc
38:
39: echo "cd ../backupset" >> /home/oracle/.netrc
40:
41: echo "mkdir $date_today" >> /home/oracle/.netrc
42:
43: echo "cd $date_today" >> /home/oracle/.netrc
44:
45: echo "lcd /u04/flash_recovery_area/gps/backupset/$date_today" >> /home/oracle/.netrc
46:
47: echo "mput *" >> /home/oracle/.netrc
48:
49: echo "cd .." >> /home/oracle/.netrc
50:
51: echo "cd ../autobackup" >> /home/oracle/.netrc
52:
53: echo "mkdir $date_today" >> /home/oracle/.netrc
54:
55: echo "cd $date_today" >> /home/oracle/.netrc
56:
57: echo "lcd /u04/flash_recovery_area/gps/autobackup/$date_today" >> /home/oracle/.netrc
58:
59: echo "mput *" >> /home/oracle/.netrc
60:
61: echo "quit" >> /home/oracle/.netrc
62:
63: echo "" >> /home/oracle/.netrc
64:
65: chmod 600 /home/oracle/.netrc
66:
67: ftp -i -v xxx.xxx.xxx.xxx 8021 >>/home/oracle/backup/logs/ftp$date_today.log 2>&1
68:
另外,關於歸檔日誌也需要每隔2小時上傳一次到FTP伺服器,2小時上傳一次歸檔日誌的shell腳本如下所示:
1: [oracle@DB-Server bin]$ more ftp2hours.sh
2:
3: #!/bin/sh
4:
5: rm -f /home/oracle/.netrc
6:
7: date_yesterday=`date -d'yesterday' +%Y_%m_%d`
8:
9: date_today=`date +%Y_%m_%d`
10:
11: echo "default login xxxx password xxxx" >> /home/oracle/.netrc
12:
13: echo "macdef init" >> /home/oracle/.netrc
14:
15: echo "binary" >> /home/oracle/.netrc
16:
17: echo "cd archivelog" >> /home/oracle/.netrc
18:
19: echo "mkdir $date_today" >>/home/oracle/.netrc
20:
21: echo "cd $date_today" >>/home/oracle/.netrc
22:
23: echo "lcd /u04/flash_recovery_area/gps/archivelog/$date_today" >>/home/oracle/.netrc
24:
25: echo "mput * ">>/home/oracle/.netrc
26:
27: echo "quit" >> /home/oracle/.netrc
28:
29: echo "" >> /home/oracle/.netrc
30:
31: chmod 600 /home/oracle/.netrc
32:
33: ftp -i -v xxx.xxx.xxx.xxx 8021 >>/home/oracle/backup/logs/ftp2hours.$date_today.log 2>&1
34:
最後需要將RMAN備份生成的日誌文件,以及FTP上傳備份文件以及歸檔日誌的記錄通過郵件形式發送給DBA或系統管理員,
1: [oracle@DB-Server bin]$ more chkbackandmail.sh
2: #!/bin/bash
3: rm -f /home/oracle/backup/bin/sendmail.pl
4: date_today=`date +%Y_%m_%d`
5: subject="Oracle Backup Alert Service on $date_today"
6: content="Dear colleagues,
7:
8: Attached please find the logs of xxx(xxx.xxx.xxx.xxx) oracle database backup and transfer to FTP Server(xxx.xxx.xxx.xxx), please
9: review the file and check whether the backup succeeded or not,and double check all backups have been mped to tape, many tha
10: nks
11:
12:
13:
14:
15: Best regards
16: Oracle Alert Services
17:
18: "
19: file="/home/oracle/backup/logs/fullbackup_$date_today.log,/home/oracle/backup/logs/ftp$date_today.log"
20: echo "#!/usr/bin/perl" >> /home/oracle/backup/bin/sendmail.pl
21: echo "use Mail::Sender;" >> /home/oracle/backup/bin/sendmail.pl
22: echo "\$sender = new Mail::Sender {smtp => 'xxx.xxx.xxx.xxx', from => '[email protected]'}; ">> /home/oracle/backup/bin/sendmai
23: l.pl
24: echo "\$sender->MailFile({to => '[email protected]',">> /home/oracle/backup/bin/sendmail.pl
25: echo "cc=>'[email protected],[email protected],[email protected]'," >> /home/oracle/backup/b
26: in/sendmail.pl
27: echo "subject => '$subject',">> /home/oracle/backup/bin/sendmail.pl
28: echo "msg => '$content',">> /home/oracle/backup/bin/sendmail.pl
29: echo "file => '$file'});">> /home/oracle/backup/bin/sendmail.pl
30: perl /home/oracle/backup/bin/sendmail.pl
最後在Crontab 作業裡面配置調用這些shell腳本。例如如下所示,在1:01分執行fullback.sh ,每隔兩個小時(例如0:50、2:50...)執行一次ftp2hours.sh, 在每天早上8:40執行chkbackandmail.sh 發送fullback.sh 以及ftp2hour.sh的執行日誌記錄。

⑤ 求oracle 8i RMAN全備份步驟、腳本

RMAN的 0 級備份是:

backup incremental level 0 tag 'dbf00'
format '/home/oracle/backup/dbf00_%T_%u_%p.bak'
database filesperset 16 skip readonly ;

sql 'alter system archive log current'; -- 歸檔一個後再備份
backup archivelog from time 'sysdate-1'
format '/home/oracle/backup/log00_%T_%u_%p.bak';

channel 不要開4個,開2個就足夠了

⑥ 如何開始使用RMAN的Oracle備份腳本

1 資料庫修改為自動歸檔模式
2 修改rman參數
3 rman自動備份腳本
4 設置系統自動備份參數
5 rman還原
恢復整個資料庫
恢復單個表空間

linux下RMAN備份腳本問題<一>

1、 「-f」 是判斷後面接的文件存在而且是一般文件
2、 「${1}」 指的確實是執行腳本的時候跟的第一個參數 ${2}、${3}....依此類推
3、 「export」 是聲明後面的變數是「全局變數」
4、 「#」 後面是是注釋信息,去掉#號才會起作用。前面的「##」是為了美觀,並且告訴你一些腳本信息

⑧ 請解釋下Oracle里邏輯備份、物理備份、Rman備份的區別。教科書和百度上的解釋不是很懂,謝謝。

Oracle資料庫的邏輯備份
ORACLE資料庫有兩類備份方法。第一類為物理備份,該方法實現資料庫的完整恢復,但資料庫必須運行在歸擋模式下(業務資料庫在非歸擋模式下運行),且需要極大的外部存儲設備,例如磁帶庫;第二類備份方式為邏輯備份,業務資料庫採用此種方式,此方法不需要資料庫運行在歸擋模式下,不但備份簡單,而且可以不需要外部存儲設備。資料庫邏輯備份方法ORACLE資料庫的邏輯備份分為三種模式:表備份、用戶備份和完全備份。

表模式

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

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

註:關於增量備份必須滿足下列條件:
1. 只對完整資料庫備份有效,且第一次需要full=y參數,以後需要inctype=incremental參數。
2. 用戶必須有EXP_FULL_DATABASE的系統角色。
3. 話務量較小時方可採用資料庫備份。
4. 如果磁碟有空間,建議備份到磁碟,然後再備份到磁帶。

業務資料庫備份方法及周期用EXP進行備份前,先在SYS用戶下運行CATEXP.SQL文件(如果以前已運行該文件,則不要執行這個腳本)。
沒有特殊說明,不允許在客戶端執行備份命令。

備份命令參照表模式下的備份命令。

RMAN備份原理

在之前,看了用戶管理的備份恢復管理,通過以SCN為線索貫穿整個過程,來熟悉了備份原理。
RMAN的備份過程和用戶備份恢復管理有很大的區別,很多朋友了都沒有理清楚原理
下面的是我的理解:
RMAN備份數據塊的工作原理:

原理:RMAN基於備份演算法規則來編譯要備份的數據文件列表。基於通道數和同時備份的數據文件數,RMAN在ORACEL共享內存段中
創建一些內存緩沖區一般是在PGA中不過有時候內存緩沖區會被推入SGA。通道服務進程隨後就開始讀取數據文件,並在RMAN緩沖取
中填充這些數據塊。一個緩沖區被填滿時,輸入緩沖區的數據就會推出到輸出緩沖區。數據文件中的數據塊都會都會發生這種
memery—to—monery write 的過程,如果數據塊符合備份的標准,並且memery—to—monery write操作沒有檢查到
數據corruption則該數據塊會被保存到輸出數據緩沖區中,直到輸出緩沖區被填滿。一但輸出緩沖區被填滿,輸出緩沖區的內容就會被
推到備份位置(磁碟或者磁帶)

RMAN備份資料庫過程:
RMAN發出備份全庫命令後,RMAN生成到目標資料庫的bequeath連接,也就是說會檢查ORACLA_SID變數中的實例名,並在該在實
例上產生一個伺服器進程,然後作為sysdba登陸,然後會產生一個作為備份的通道,(在PGA或者是在SGA分配存儲)。隨後RMAN調用
SYS.DBMS_RCVMAN請求資料庫結構信息,包括控制文件的信息(當前序列號,創建時間……)由於指定了備份全庫,所以RMAN會請求
資料庫中數據文件信息,並判斷是否存在offline數據文件(包括所在的位置和工作方式)。
RMAN開始備份,為了保持數據一致性RMAN必須構建控制文件快照,接下來RMAN調用DBMS _BACKUP_RESTORE數據包,該調用
可以創建備份片。RMAN擁有文件列表,所以它為數據文件讀取操作分配內存緩沖區,分配緩沖區後RMAN初始化備份片。一旦初始化了備份片,
RMAN會判斷是否使用了伺服器參數文件,如果使用了則會做為備份的一部分,還要備份控制文件,之後才開始備份數據文件,並將其推至內存。
為了實現這一功能,通道進程在磁碟上執行預讀取操作,並且將多個數據文件讀入內存中,RMAN會判斷數據塊頭信息是否仍然為零,如果數據塊
沒有被使用過,就不會發生到輸出緩沖區的寫操作,同時會丟棄這個數據塊(這就RMAN為什麼會只備份使用過的數據的原因,也是它的優點)
RMAN還會執行檢查數據塊有沒有corruption操作。當檢查通過了就被寫入到輸出緩沖區。一旦輸出緩沖區填滿了,就被推至備份文件位置。
在備份數據塊的時候,RMAN影子進程會得到備份狀態信息。並將它傳給V$session_longops視圖。查詢它能得到信息。
當數據文件的所有數據塊都被讀入輸入緩沖區並確定了狀態之後RMAN就會通過將這個數據文件寫入備份片來結束該文件的備份操作。所有
數據文件寫入備份片之後,RMAN生成最後一個對SYS DBMS BACKUP RESTORE 數據包的調用,該調用在控制文件中寫入備份信息(包括
備份片名,啟動備份操作時的檢查點的SCN和完成備份的時間)
至此完成備份!

希望大家繼續討論RMAN備份恢復原理(RMAN功能太強大了)

⑨ 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

⑩ linux下RMAN備份腳本問題<二>

。。。你說的都對了
1、 「unset」 就是取消後面的變數
2、 「!」 就是取反,如果你那個目錄不存在,就創建它
3、 「$?」 這個的意思你可以去試試,執行一次錯誤的命令然後「echo $?",然後再執行一次正確的命令再」echo $?「,它的作用就是返回上一次命令的執行結果

熱點內容
趣粉腳本 發布:2025-02-13 02:11:23 瀏覽:951
壓縮的茶葉怎麼弄開 發布:2025-02-13 02:11:16 瀏覽:738
n1ftp伺服器 發布:2025-02-13 02:10:39 瀏覽:347
沒有卡沒有密碼怎麼辦啊 發布:2025-02-13 01:51:53 瀏覽:460
linux2個ftp伺服器 發布:2025-02-13 01:44:31 瀏覽:14
戴爾r730網路配置後如何保存 發布:2025-02-13 01:38:27 瀏覽:344
php用什麼編譯 發布:2025-02-13 01:37:12 瀏覽:703
手機緩存的文件路徑是在哪 發布:2025-02-13 01:34:58 瀏覽:563
oppo手機密碼哪裡設置 發布:2025-02-13 01:30:38 瀏覽:683
android網易 發布:2025-02-13 01:30:37 瀏覽:488