⑴ 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;
}
⑵ RMAN表空间恢复成功,但是数据并未恢复
如果你的表被手动删除过,你都已经recover了,当然找不到了。
这种情况可以使用
TSPITR(TableSpace Point-In-Time Recovery)
⑶ 如何使用 RMAN 增量备份恢复 data guard log gap
1、RMAN 异机恢复的时候,db_name必须相同。 如果说要想改成其他的实例名,可以在恢复成功后,用nid 命令修改。 实例名的信息会记录到控制文件里,所以如果在恢复的时候,如果实例名不一致,恢复的时候会报错。
2、如果恢复的路径和源库不一致,就需要在restore时用set 命令指定新位置。 并且使用switch datafile all将信息更新的到控制文件。
在做plicate的时候,RMAN 会自动根据pfile中的log_file_name_convert和db_file_name_convert来进行set 的转换。 手工restore时,只能只只能使用set 命令。
3、异机恢复对相同目录和不同目录都做了说明。
⑷ RMAN备份异机还原,备份之后的归档日志在RMAN中怎么处理
rman备份是一种物理的备份,它直接去读取数据块,因此rman是块级别的备份。从备份的那个时间点开始rman将锁定此刻的数据文件信息,也就是说只是备份数据文件到此刻的信息为之。
但是rman并不锁定数据文件的使用,也就是说rman的备份,不是数据库一致性状态的备份,由于rman备份是块级别的,它只备份控制文件中已经存在的数据块,同时数据库还在运行之中,那么就有可能会出现某些已经提交的操作,但是dbwn还没有写入数据文件,或者已经被rman备份过的数据块,又重新被修改,等等,
这些信息rman备份都不会记录,也是rman无法记录的。但是记录这些信息的是redo file,所以在rman完毕建议马上执行日志切换,然后备份归档日志,因为在rman恢复过程中,rman本身备份的数据是不一直的,要靠这些已经归档的redo file信息恢复和保持数据库的一直状态。
当然备份的归档日志中,可能包含有rman开始之前的归档,这些是没用的,
其实这些归档文件中真正有用的是从rman备份开始到rman备份结束时刻系统产生的归档日志。
同时rman在恢复的时候,restore database完毕后,会依次利用归档日志和联机日志进行完全恢复
。此时利用的这些归档就是从rman备份开始到rman备份结束产生的归档日志。
因此备份归档日志是很必要的,当然联机日志也是必须的,这些日志保证了rman能够完全的恢复数据库。
⑸ 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是累计增量备份
--和比他小得级别相比(即全备份),改变的数据备份
然后根据实际情况还要将备份的策略往脚本添加
⑹ 使用RMAN可以异机恢复数据库吗
启动数据库到nomount
设置DBID,从原库中查询DBID的值
RMAN> set dbid=1374484832
状态恢复spfile
RMAN>restore spfile from '/u01/app/rman_backup/controlfileback/cntrl_%s_%p_%s';
恢复controlfile,
RMAN>restore controlfile from '/u01/app/rman_backup/controlfileback/cntrl_%s_%p_%s';
启动数据库到mount状态,然后建立controfile中对应的数据文件,联机日志文件所对应的目录。向controlfile中注册rman信息。
RMAN>catalog start with '/u01/app/';
mkdir /u01/app/oracle/oradata/rman/取回备份数据。
开始恢复数据
RMAN>restore database;
开始恢复
RMAN>recover database;
启动数据库
RMAN>alter database open;
如果是不完全恢复,则需要使用resetlogs模式打开数据库,
RMAN>alter database open resetlogs;
⑺ 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的执行日志记录。
⑻ rman备份shell脚本相关问题
你确定这个'date +%m%d%y' 用的是数字键左边的反引号``,而不是单引号''么?
你要用反引号``,才能正确的以日期形式显示。
⑼ oracle有rman备份文件,怎么异机还原
大体步骤: 1.恢复控制文件。 2.恢复 full backup 3.恢复 1 级备份,(好像这堆文件中没有) 3.恢复 archivelog 。
⑽ rman自定义备份脚本生成的bak文件怎么恢复
先定义好备份的过期策略,然后有两种方法。 1、可以使用Schele backup。 2、自己写脚本,并且使用操作系统上的定时任务,定期执行删除脚本。