使用Oracle自带的备份恢复工具RMAN(Recovery Manager)具有以下几种优势:
支持增量备份
能自动管理备份文件
自动化备份与恢复
备份的文件有效性检查
配置快闪恢复区(flash recovery area)
快闪恢复区是存储备份和恢复数据文件以及相关信息的存储区。需要设置两个参数:db_recovery_file_dest_size(快闪恢复区的最大容量),db_recovery_file_dest(快闪恢复区所在的路径)。
查看快闪恢复区信息:
1
2
3
4
5
<code>SQL> show parameter db_recovery_file_dest;</code>
<code>NAME</code> <code>TYPE VALUE</code>
<code>------------------------------------ ----------- ------------------------------</code>
<code>db_recovery_file_dest string /data/app/oracle/recovery_area</code>
<code>db_recovery_file_dest_size big </code><code>integer</code> <code>3882M</code>
修改快闪恢复区大小:
6
7
<code>SQL> </code><code>alter</code> <code>system </code><code>set</code> <code>db_recovery_file_dest_size=2g;</code>
<code>System altered.</code>
<code>db_recovery_file_dest_size big </code><code>integer</code> <code>2G</code>
查看使用情况:
<code>SQL> </code><code>select</code> <code>name</code><code>,space_limit,space_used,number_of_files </code><code>from</code> <code>v$recovery_file_dest;</code>
<code>NAME</code>
<code>--------------------------------------------------------------------------------</code>
<code>SPACE_LIMIT SPACE_USED NUMBER_OF_FILES</code>
<code>----------- ---------- ---------------</code>
<code>/data/app/oracle/recovery_area</code>
<code> </code><code>2147483648 0 0</code>
显示没有使用。
也可以使用此命令查看详细信息:
<code>SQL> </code><code>select</code> <code>file_type,percent_space_used,percent_space_reclaimable,number_of_files </code><code>from</code> <code>v$flash_recovery_area_usage;</code>
建立RMAN到数据库的连接
创建rman用户,并授权:
8
<code>[oracle@</code><code>temp</code><code>-test oracle]$ sqlplus /nolog</code>
<code>SQL> </code><code>connect</code><code>/</code><code>as</code> <code>sysdba</code>
<code>Connected.</code>
<code>SQL> </code><code>create</code> <code>user</code> <code>rman identified </code><code>by</code> <code>oracle;</code>
<code>User</code> <code>created.</code>
<code>SQL> </code><code>grant</code> <code>resource,</code><code>connect</code><code>,dba </code><code>to</code> <code>rman;</code>
<code>Grant</code> <code>succeeded.</code>
<code>SQL> quit</code>
使用rman用户登录RMAN:
<code>[oracle@</code><code>temp</code><code>-test oracle]$ rman target rman/oracle</code>
<code>Recovery Manager: Release 11.2.0.1.0 - Production </code><code>on</code> <code>Fri Nov 3 16:59:27 2017</code>
<code>Copyright (c) 1982, 2009, Oracle </code><code>and</code><code>/</code><code>or</code> <code>its affiliates. </code><code>All</code> <code>rights reserved.</code>
<code>connected </code><code>to</code> <code>target </code><code>database</code><code>: ORCL (DBID=1486802665)</code>
<code>RMAN></code>
也可以使用如下方式登录:
<code>[oracle@</code><code>temp</code><code>-test oracle]$ rman</code>
<code>Recovery Manager: Release 11.2.0.1.0 - Production </code><code>on</code> <code>Fri Nov 3 17:00:35 2017</code>
<code>RMAN> </code><code>connect</code> <code>target system/rman</code>
<code>RMAN> </code><code>connect</code> <code>target rman/oracle</code>
也可以使用操作系统认证连接RMAN:
<code>[oracle@</code><code>temp</code><code>-test oracle]$ rman target /</code>
<code>Recovery Manager: Release 11.2.0.1.0 - Production </code><code>on</code> <code>Fri Nov 3 17:02:52 2017</code>
配置RMAN
查看RMAN的配置参数:
9
10
11
12
13
14
15
16
17
<code>RMAN> show </code><code>all</code><code>;</code>
<code>using target </code><code>database</code> <code>control file </code><code>instead</code> <code>of</code> <code>recovery catalog</code>
<code>RMAN configuration parameters </code><code>for</code> <code>database</code> <code>with</code> <code>db_unique_name ORCL are:</code>
<code>CONFIGURE RETENTION POLICY </code><code>TO</code> <code>REDUNDANCY 1; # </code><code>default</code>
<code>CONFIGURE BACKUP OPTIMIZATION </code><code>OFF</code><code>; # </code><code>default</code>
<code>CONFIGURE </code><code>DEFAULT</code> <code>DEVICE TYPE </code><code>TO</code> <code>DISK; # </code><code>default</code>
<code>CONFIGURE CONTROLFILE AUTOBACKUP </code><code>OFF</code><code>; # </code><code>default</code>
<code>CONFIGURE CONTROLFILE AUTOBACKUP FORMAT </code><code>FOR</code> <code>DEVICE TYPE DISK </code><code>TO</code> <code>'%F'</code><code>; # </code><code>default</code>
<code>CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE </code><code>TO</code> <code>BACKUPSET; # </code><code>default</code>
<code>CONFIGURE DATAFILE BACKUP COPIES </code><code>FOR</code> <code>DEVICE TYPE DISK </code><code>TO</code> <code>1; # </code><code>default</code>
<code>CONFIGURE ARCHIVELOG BACKUP COPIES </code><code>FOR</code> <code>DEVICE TYPE DISK </code><code>TO</code> <code>1; # </code><code>default</code>
<code>CONFIGURE MAXSETSIZE </code><code>TO</code> <code>UNLIMITED; # </code><code>default</code>
<code>CONFIGURE ENCRYPTION </code><code>FOR</code> <code>DATABASE</code> <code>OFF</code><code>; # </code><code>default</code>
<code>CONFIGURE ENCRYPTION ALGORITHM </code><code>'AES128'</code><code>; # </code><code>default</code>
<code>CONFIGURE COMPRESSION ALGORITHM </code><code>'BASIC'</code> <code>AS</code> <code>OF</code> <code>RELEASE </code><code>'DEFAULT'</code> <code>OPTIMIZE </code><code>FOR</code> <code>LOAD</code> <code>TRUE</code> <code>; # </code><code>default</code>
<code>CONFIGURE ARCHIVELOG DELETION POLICY </code><code>TO</code> <code>NONE; # </code><code>default</code>
<code>CONFIGURE SNAPSHOT CONTROLFILE </code><code>NAME</code> <code>TO</code> <code>'/data/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_orcl.f'</code><code>; # </code><code>default</code>
参数含义:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1
保留的备份副本数量,表示只保留一个数据文件的副本,并且保留最新的备份副本。
CONFIGURE DEFAULT DEVICE TYPE TO DISK
数据文件默认备份到磁盘上,也可以是其他设备如磁带(sbt)
CONFIGURE BACKUP OPTIMIZATION OFF
不使用备份优化,启用备份优化的作用是如果已经备份了某个文件的相同版本,则不会再备份该文件。,只保留一份备份文件。
CONFIGURE CONTROLFILE AUTOBACKUP OFF
不启动控制文件的自动备份,修改为ON之后,如果数据库结构发生变化或者在备份数据库过程中,控制文件会自动再备份到指定目录下
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET
备份通道数量为1,默认使用备份集的方式。通道数量越多,执行任务时间越短。
如果要修改参数,可以执行如下命令:
开启备份优化:
<code>RMAN> CONFIGURE BACKUP OPTIMIZATION </code><code>ON</code><code>;</code>
<code>new RMAN configuration parameters:</code>
<code>CONFIGURE BACKUP OPTIMIZATION </code><code>ON</code><code>;</code>
<code>new RMAN configuration parameters are successfully stored</code>
设置备份类型为Copy,也就是映像模式:
<code>RMAN> CONFIGURE DEVICE TYPE DISK BACKUP TYPE </code><code>TO</code> <code>COPY; </code>
<code>CONFIGURE DEVICE TYPE DISK BACKUP TYPE </code><code>TO</code> <code>COPY PARALLELISM 1;</code>
备份控制文件到快闪恢复区:
<code>RMAN> backup </code><code>current</code> <code>controlfile;</code>
<code>Starting backup </code><code>at</code> <code>03-NOV-17</code>
<code>using channel ORA_DISK_1</code>
<code>channel ORA_DISK_1: starting datafile copy</code>
<code>copying </code><code>current</code> <code>control file</code>
<code>output</code> <code>file </code><code>name</code><code>=/data/app/oracle/recovery_area/ORCL/controlfile/o1_mf_TAG20171103T180113_dzrhm9vk_.ctl tag=TAG20171103T180113 RECID=3 STAMP=959104874</code>
<code>channel ORA_DISK_1: datafile copy complete, elapsed </code><code>time</code><code>: 00:00:01</code>
<code>Finished backup </code><code>at</code> <code>03-NOV-17</code>
如果没有指定快闪恢复区也可以用手动指定路径:
将快闪恢复区改为test目录
<code>SQL> connect</code><code>/as</code> <code>sysdba</code>
<code>NAME TYPE VALUE</code>
<code>db_recovery_file_dest string </code><code>/data/app/oracle/recovery_area</code>
<code>db_recovery_file_dest_size big integer 2G</code>
<code>SQL> alter system </code><code>set</code> <code>db_recovery_file_dest=</code><code>'/data/app/oracle/test'</code><code>;</code>
<code>NAME TYPE VALUE</code>
<code>db_recovery_file_dest string </code><code>/data/app/oracle/test</code>
<code>db_recovery_file_dest_size big integer 2G</code>
配置控制文件备份的磁盘类型和备份目录,路径以%F结尾:
<code>RMAN> configure controlfile autobackup </code><code>format</code> <code>for</code> <code>device </code><code>type</code> <code>disk to </code><code>'/data/app/oracle/test/%F'</code><code>;</code>
<code>CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO </code><code>'/data/app/oracle/test/%F'</code><code>;</code>
RMAN脱机备份
RMAN脱机备份需要关闭数据库,启动数据库到mount状态。
<code>SQL> </code><code>connect</code><code>/</code><code>as</code> <code>sysdba</code>
<code>SQL> shutdown immediate;</code>
<code>Database</code> <code>closed.</code>
<code>Database</code> <code>dismounted.</code>
<code>ORACLE instance shut down.</code>
<code>SQL> startup mount;</code>
<code>ORACLE instance started.</code>
<code>Total System </code><code>Global</code> <code>Area 1586708480 bytes</code>
<code>Fixed </code><code>Size</code> <code>2213736 bytes</code>
<code>Variable </code><code>Size</code> <code>939526296 bytes</code>
<code>Database</code> <code>Buffers 637534208 bytes</code>
<code>Redo Buffers 7434240 bytes</code>
<code>Database</code> <code>mounted.</code>
进入RMAN,备份数据:
先查看数据备份的默认参数,备份方式(copy或backupset),和备份格式(disk 或其他)
执行备份命令使用copy方式,映像复制整个库:
<code>RMAN> backup </code><code>as</code> <code>copy </code><code>database</code><code>;</code>
如果是使用默认的backupset模式,可以使用:
<code>RMAN> backup </code><code>as</code> <code>compressed backupset </code><code>database</code><code>;</code>
备份完成后,打开数据库:
<code>RMAN> sql </code><code>'alter database open'</code><code>;</code>
<code>sql statement: </code><code>alter</code> <code>database</code> <code>open</code>
RMAN联机备份整个数据库
联机备份必须要设置快闪恢复区,快闪恢复区要足够大,并且数据库要置于归档模式。在数据库进行备份的同时,可以进行DML操作,可以正常读取,新的DML操作记录会在重做日志文件中,如果备份时间很长,而且在这个期间产生了大量的数据变化,重做日志会切换从而将这些变化的数据写到归档日志文件中。这里的归档日志就类似于mysql的binlog,在出现介质故障的时候,使用备份和归档日志记录和完成数据的全部恢复。
查看数据库归档模式是否开启,当前属于关闭状态:
<code>SQL> archive log list;</code>
<code>Database log mode No Archive Mode</code>
<code>Automatic archival Disabled</code>
<code>Archive destination USE_DB_RECOVERY_FILE_DEST</code>
<code>Oldest online log sequence 22</code>
<code>Current log sequence 24</code>
开启日志归档:
<code>SQL> alter database archivelog;</code>
<code>alter database archivelog</code>
<code>*</code>
<code>ERROR at line 1:</code>
<code>ORA-01126: database must be mounted </code><code>in</code> <code>this instance and not </code><code>open</code> <code>in</code> <code>any</code>
<code>instance</code>
日志归档必须在mount模式,关闭数据库启动到mount模式,开启归档模式:
18
19
20
21
22
23
24
25
26
<code>SQL> </code><code>shutdown</code> <code>immediate;</code>
<code>Database closed.</code>
<code>Database dismounted.</code>
<code>SQL> startup </code><code>mount</code><code>;</code>
<code>Total System Global Area 1586708480 bytes</code>
<code>Fixed Size 2213736 bytes</code>
<code>Variable Size 1040189592 bytes</code>
<code>Database Buffers 536870912 bytes</code>
<code>Redo Buffers 7434240 bytes</code>
<code>Database mounted.</code>
<code>Database altered.</code>
<code>SQL> alter database </code><code>open</code><code>;</code>
<code>SQL> archive log list;</code>
<code>Database log mode Archive Mode</code>
<code>Automatic archival Enabled</code>
<code>Next log sequence to archive 24</code>
使用RMAN联机备份数据库:
<code>RMAN> backup as compressed backupset database plus archivelog delete all input;</code>
使用备份集格式进行备份,并采用压缩的方式,压缩比例大概为5:1。备份数据文件,同时也备份归档日志文件,备份完成之后会将已经备份的归档日志文件从存储目录中删除,清除归档空间。
备份表空间:
<code>RMAN> backup tablespace </code><code>users</code><code>;</code>
<code>Starting backup at 06-NOV-17</code>
<code>input datafile </code><code>file</code> <code>number=00004 name=</code><code>/data/app/oracle/oradata/orcl/users01</code><code>.dbf</code>
<code>output </code><code>file</code> <code>name=</code><code>/data/app/oracle/test/ORCL/datafile/o1_mf_users_dzzxzmxv_</code><code>.dbf tag=TAG20171106T134939 RECID=12 STAMP=959348980</code>
<code>Finished backup at 06-NOV-17</code>
使用压缩:
<code>RMAN> backup as compressed backupset tablespace </code><code>users</code><code>;</code>
使用RMAN备份数据文件,%U表示自动分配一个唯一的命名:
<code>RMAN> backup as backupset datafile 1 </code><code>format</code> <code>'/data/app/backup/datafile_1_%U'</code><code>;</code>
清除命令,慎用
清除旧的备份文件set格式:
<code>RMAN> delete obsolete; </code>
<code>RMAN> crosscheck backupset;</code>
<code>RMAN> delete expired backupset;</code>
清楚旧的备份文件和所有备份,copy模式:
<code>RMAN> list datafilecopy all;</code>
<code>RMAN> delete expired backupcopy;</code>
<code>RMAN> crosscheck datafilecopy all;</code>
如果是由于快闪恢复区容量限制,可以修改快闪恢复区的路径和容量:
<code>SQL> </code><code>alter</code> <code>system </code><code>set</code> <code>db_recovery_file_dest_size=10g;</code>
RMAN增量备份
使用backup database时,都是全库备份,每次这样备份很耗时也占用磁盘空间,RMAN的增量备份就能解决这些问题。
这里有两种备份级别,级别0备份为全库备份,级别1的备份为增量备份,一般情况下需要对数据进行0级别的备份之后在进行级别1的增量备份。
<code>RMAN> backup incremental level 0 database;</code>
级别1的差异增量备份:
<code>RMAN> backup incremental level 1 database;</code>
对映像副本进行增量备份
<code>RMAN> run { </code>
<code>2> backup incremental level 1 </code><code>for</code> <code>recover of copy with tag </code><code>'incr_copy_backup'</code> <code>database;</code>
<code>3> recover copy of database with tag </code><code>'incr_copy_backup'</code><code>;</code>
<code>4> }</code>
每次执行这条命令,就可以使用映像的方式对数据库进行增量备份。
本文转自 酥心糖 51CTO博客,原文链接:http://blog.51cto.com/tryingstuff/1979382