Oracle备份及备份策略

第二章. 了解备份的重要性

能够说,从计算机系统出世的那天起,就有了备份这个概念,计算机以其强大的速度处理能力,取代了不少人为的工做,可是,每每不少时候,它又是那么弱不由风,主板上的芯片、主板电路、内存、电源等任何一项不能正常工做,都会致使计算机系统不能正常工做。固然,这些损坏能够修复,不会致使应用和数据的损坏。可是,若是计算机的硬盘损坏,将会致使数据丢失,此时必须用备份恢复数据。
其实,在咱们的现实世界中,已经就存在不少备份策略,如RAID技术,双机热备,集群技术发展的不就是计算机系统的备份和高可用性吗?有不少时候,系统的备份的确就能解决数据库备份的问题,如磁盘介质的损坏,每每从镜相上面作简单的恢复,或简单的切换机器就能够了。
可是,上面所说的系统备份策略是从硬件的角度来考虑备份与恢复的问题,这是须要代价的。咱们所能选择备份策略的依据是:丢是数据的代价与确保数据不丢失的代价之比。还有的时候,硬件的备份有时根本知足不了现实须要,假如你误删了一个表,可是你又想恢复的时候,数据库的备份就变的重要了。ORACLE自己就提供了强大的备份与恢复策略,这里咱们只讨论ORACLE备份策略,如下的备份都是指ORACLE数据库备份,恢复将放到下一讲中。
所谓备份,就是把数据库复制到转储设备的过程。其中,转储设备是指用于放置数据库拷贝的磁带或磁盘。
可以进行什么样的恢复依赖于有什么样的备份。做为 DBA,有责任从如下三个方面维护数据库的可恢复性:
·使数据库的失效次数减到最少,从而使数据库保持最大的可用性;
·当数据库不可避免地失效后,要使恢复时间减到最少,从而使恢复的效率达到最高;
·当数据库失效后,要确保尽可能少的数据丢失或根本不丢失,从而使数据具备最大的可恢复性。
灾难恢复的最重要的工做是设计充足频率的硬盘备份过程。备份过程应该知足系统要求的可恢复性。例如,若是数据库可有较长的关机时间,则能够每周进行一次冷备份,并归档重作日志,对于24*7的系统,或许咱们考虑的只能是热备份。若是天天都能备份固然会很理想,但要考虑其现实性。企业都在想办法下降维护成本,现实的方案才可能被采用。只要仔细计划,并想办法达到数据库可用性的底线,花少许的钱进行成功的备份与恢复也是可能的。

第三章. 了解ORACLE的运行方式

ORACLE数据库有两种运行方式:一是归档方式(ARCHIVELOG),归档方式的目的是当数据库发生故障时最大限度恢复数据库,能够保证不丢失任何已提交的数据;二是不归档方式(NOARCHIVELOG),只能恢复数据库到最近的回收点(冷备份或是逻辑备份)。咱们根据数据库的高可用性和用户可承受丢失的工做量的多少,对于生产数据库,强烈要求采用为归档方式;那些正在开发和调试的数据库能够采用不归档方式。
如何改变数据库的运行方式,在建立数据库时,做为建立数据库的一部分,就决定了数据库初始的存档方式。通常状况下为NOARCHIVELOG方式。当数据库建立好之后,根据咱们的须要把须要运行在归档方式的数据库改为ARCHIVELOG方式。

3.1改变不归档方式为为归档方式

1.关闭数据库,备份已有的数据,改变数据库的运行方式是对数据库的重要改动,因此要对数据库作备份,对可能出现的问题做出保护。
2. 修改初试化参数,使能自动存档修改(添加)初始化文件init[SID].ora参数:
log_archive_start=true           #启动自动归档
log_archive_format=ARC%T%S.arc   #归档文件格式
log_archive_dest=/arch12/arch        #归档路径
8i中,能够最多有五个归档路径,并能够归档到其它服务器,如备用数据库(standby database)服务器
3.启动InstanceMount状态,即加载数据库但不打开数据库:
$>SVRMGRL
SVRMGRL >connect internal
SVRMGRL >startup mount
4.发出修改命令
SVRMGRL >alter database archivelog;
SVRMGRL>alter database open;

3.2 改变归档状态为不归档状态

   与以上步骤相同,但有些操做不同,主要是在以上的b操做中,如今为删除或注释该参数,在d操做中,命令为
SVRMGRL >alter database noarchivelog;
    注意,从归档方式转换到非归档方式后必定要作一次数据库的全冷备份,防止意外事件的发生。

第四章. ORACLE备份的分类

简单的按照备份进行的方式,能够分为逻辑备份、冷备份(脱机备份)、热备份(联机备份),其实冷备份与热备份又能够合称为物理备份
按照备份的工具,能够分为EXP/IMP备份、OS拷贝、RMAN、第三方工具,如VERITAS
如下咱们将从多个角度来讲明以上的各类备份方式

4.1 EXP/IMP逻辑备份

导入/导出是ORACLE幸存的最古老的两个命令行工具了,其实我历来不认为Exp/Imp是一种好的备份方式,正确的说法是Exp/Imp只能是一个好的转储工具,特别是在小型数据库的转储,表空间的迁移,表的抽取,检测逻辑和物理冲突等中有不小的功劳。固然,咱们也能够把它做为小型数据库的物理备份后的一个逻辑辅助备份,也是不错的建议。
对于愈来愈大的数据库,特别是TB级数据库和愈来愈多数据仓库的出现,EXP/IMP愈来愈力不从心了,这个时候,数据库的备份都转向了RMAN和第三方工具。下面咱们仍是简要介绍一下EXP/IMP的使用。

4.1.1 使用方法

Exp parameter_name=value
Or Exp parameter_name=(value1,value2……)
只要输入参数help=y就能够看到全部帮助
如:
C:\>set nls_lang=simplified chinese_china.zhs16gbk
C:\>exp -help
Export: Release 8.1.6.0.0 - Production on 星期四 4 10 19:09:21 2003
(c) Copyright 1999 Oracle Corporation.  All rights reserved.
 
经过输入 EXP 命令和用户名/口令,您能够
在用户 / 口令以后的命令:
 
实例: EXP SCOTT/TIGER
或者,您也能够经过输入跟有各类参数的 EXP 命令来控制“导出”
的运行方式。要指定参数,您可使用关键字:
 
格式: EXP KEYWORD=value KEYWORD=(value1,value2,...,valueN)
实例: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
TABLES=(T1: P1,T1: P2),若是 T1 是分区表
USERID 必须是命令行中的第一个参数。
关键字  说明(默认)        关键字      说明(默认)
--------------------------------------------------------------------------
USERID   用户名/口令            FULL         导出整个文件 (N)
BUFFER   数据缓冲区的大小          OWNER        全部者用户名列表
FILE     输出文件 (EXPDAT.DMP)    TABLES       表名列表
COMPRESS 导入一个范围 (Y)   RECORDLENGTH  IO 记录的长度
GRANTS  导出权限 (Y)            INCTYPE      增量导出类型
INDEXES 导出索引 (Y)           RECORD       跟踪增量导出 (Y)
ROWS    导出数据行 (Y)         PARFILE      参数文件名
CONSTRAINTS 导出限制 (Y)    CONSISTENT   交叉表一致性
LOG      屏幕输出的日志文件    STATISTICS  分析对象 (ESTIMATE)
DIRECT   直接路径 (N)              TRIGGERS     导出触发器 (Y)
FEEDBACK 显示每 x (0) 的进度
FILESIZE 各转储文件的最大尺寸
QUERY    选定导出表子集的子句
 
下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)
TABLESPACES 将传输的表空间列表
在没有警告的状况下成功终止导出。
C:\>
帮助已经很详细的说明了参数的意义和使用方法,并列举了几个简单的例子,注意的是,从8i开始,已经开始支持数据子集的方法,就是能够指定本身的Where条件,能够从表中导出一行或多行数据。
注意上面的set nls_lang=simplified chinese_china.zhs16gbk,经过设置环境变量,可让exp的帮助以中文显示,若是set nls_lang=American_america.字符集,那么你的帮助就是英文的了。
增量和累计导出必须在全库方式下才有效,并且,大多数状况下,增量和累计导出并无想象中的那么有效。ORACLE9i开始,再也不支持增量导出和累计导出。

4.1.2 表空间传输

表空间传输是8i新增长的一种快速在数据库间移动数据的一种办法,是把一个数据库上的格式数据文件附加到另一个数据库中,而不是把数据导出成Dmp文件,这在有些时候是很是管用的,由于传输表空间移动数据就象复制文件同样快。
关于传输表空间有一些规则,即:
·源数据库和目标数据库必须运行在相同的硬件平台上。
·源数据库与目标数据库必须使用相同的字符集。
·源数据库与目标数据库必定要有相同大小的数据块
·目标数据库不能有与迁移表空间同名的表空间
·SYS的对象不能迁移
·必须传输自包含的对象集
·有一些对象,如物化视图,基于函数的索引等不能被传输
能够用如下的方法来检测一个表空间或一套表空间是否符合传输标准:
exec sys.dbms_tts.transport_set_check(‘tablespace_name’,true);
select * from sys.transport_set_violation;
若是没有行选择,表示该表空间只包含表数据,而且是自包含的。对于有些非自包含的表空间,如数据表空间和索引表空间,能够一块儿传输。
如下为简要使用步骤,若是想参考详细使用方法,也能够参考ORACLE联机帮助。
1.设置表空间为只读(假定表空间名字为APP_Data APP_Index
  alter tablespace app_data read only;
  alter tablespace app_index read only;
2.发出EXP命令
  SQL>host exp userid=”””sys/password as sysdba”””
transport_tablespace=y tablespace=(app_data, app_index)
以上须要注意的是
·为了在SQL中执行EXPUSERID必须用三个引号,在UNIX中也必须注意避免“/”的使用
·在816和之后,必须使用sysdba才能操做
·这个命令在SQL中必须放置在一行(这里是由于显示问题放在了两行)
3.拷贝数据文件到另外一个地点,即目标数据库
  能够是cp(unix)copy(windows)或经过ftp传输文件(必定要在bin方式)
4.把本地的表空间设置为读写
5.在目标数据库附加该数据文件
 imp file=expdat.dmp userid=”””sys/password as sysdba”””
       transport_tablespace=y
        “datafile=(c:\temp\app_data,c:\temp\app_index)”
6.设置目标数据库表空间为读写
  alter tablespace app_data read write;
      alter tablespace app_index read write;

4.1.3 导出/导入与字符集

明白ORACLE的多国语言设置,ORACLE多国语言设置是为了支持世界范围的语言与字符集,通常对语言提示,货币形式,排序方式和CHAR,VARCHAR2,CLOB,LONG字段的数据的显示等有效。ORACLE的多国语言设置最主要的两个特性就是国家语言设置与字符集设置,国家语言设置决定了界面或提示使用的语言种类,字符集决定了数据库保存与字符集有关数据(如文本)时候的编码规则。正如刚才上面的一个小例子,环境变量NLS_LANG的不一样,致使EXP帮助发生变化,这就是多国语言设置的做用(NLS_LANG包含国家语言设置与字符集设置,这里起做用的是国家语言设置,而不是字符集)。
ORACLE字符集设定,分为数据库字符集和客户端字符集环境设置。在数据库端,字符集在建立数据库的时候设定,并保存在数据库props$表中,对于8i以上产品,已经能够采用“Alter database character set 字符集”来修改数据库的字符集,但也仅仅是从子集到超集,不要经过update props$来修改字符集,若是是不支持的转换,可能会失去全部与字符集有关的数据,就是支持的转换,也可能致使数据库的不正常工做。字符集分为单字节字符集与多字节字符集,US7ASCII就是典型的单字节字符集,在这种字符集中length=lengthb,而ZHS16GBK就是经常使用的双字节字符集,在这里lengthb=2*length
在客户端的字符集环境比较简单,主要就是环境变量或注册表项NLS_LANG,注意NLS_LANG的优先级别为:参数文件à注册表à环境变量àalter sessionNLS_LANG的组成为“国家语言设置.字符集”,如nls_lang=simplified chinese_china.zhs16gbk。客户端的字符集最好与数据库端同样(国家语言设置能够不同,如zhs16gbk的字符集,客户端能够是nls_lang =simplified chinese_china.zhs16gbkAmeircan_America.zhs16gbk,都不影响数据库字符的正常显示),若是字符集不同,并且字符集的转换也不兼容,那么客户端的数据显示与导出/导入的与字符集有关的数据将都是乱码。
使用一点点技巧,就可使导出/导入在不一样的字符集的数据库上转换数据。这里须要一个2进制文件编辑工具便可,如uedit32。用编辑方式打开导出的dmp文件,获取23字节的内容,如00 01,先把它转换为10进制数,为1,使用函数NLS_CHARSET_NAME便可得到该字符集:
SQL> select nls_charset_name(1) from dual;
NLS_CHARSET_NAME(1)
-------------------
US7ASCII
能够知道该dmp文件的字符集为US7ASCII,若是须要把该dmp文件的字符集换成ZHS16GBK,则须要用NLS_CHARSET_ID获取该字符集的编号:
SQL> select nls_charset_id('zhs16gbk') from dual;
NLS_CHARSET_ID('ZHS16GBK')
--------------------------
              852
852换成16进制数,为354,把23字节的00 01换成03 54,即完成了把该dmp文件字符集从us7asciizhs16gbk的转化,这样,再把该dmp文件导入到zhs16gbk字符集的数据库就能够了。(注意,十进制数与十六进制之间的转换,想明白其中的道理)

4.1.4 跨版本使用Exp/Imp

Exp/Imp不少时候,能够跨版本使用,如在版本7与版本8之间导出导入数据,但这样作必须选择正确的版本,规则为:
  ·老是使用IMP的版本匹配数据库的版本,若是要导入到816,则使用816的导入工具。
  ·老是使用EXP的版本匹配两个数据库中低的那个版本,如在815816之间互导,则使用815EXP工具。

4.2 OS备份

操做系统备份有两类,冷备份(Cold backup)与热备份(Hot backup),操做系统备份与以上的逻辑备份有本质的区别。逻辑备份提取数据库的数据内容,而不备份物理数据块。而操做系统备份则是拷贝整个的数据文件。

4.2.1 冷备份

在文件级备份开始前数据库必须完全关闭。关闭操做必须用带有normalimmediatetransaction选项的shutdown来执行。
数据库使用的每一个文件都被备份下来,这些文件包括:
    ☆全部数据文件
    ☆全部控制文件
    ☆全部联机REDO LOG 文件
     INIT.ORA文件(可选)
     密码文件(可选)
做冷备份通常步骤是:
a.       正常关闭要备份的实例(instance);
b.       备份整个数据库到一个目录
c.       启动数据库
 
    SVRMGRL>connect internal
    SVRMGRL >shutdown immediate
    SVRMGRL >! cp
   
    SVRMGRL >!tar cvf /dev/rmt/0 /u01/oradata/prod
    SVRMGRL >startup
   注意:若是利用脚本对数据库进行冷备份,必须对关闭数据库的命令进行逻辑检查,若是发生关闭数据库的命令不能正常执行而致使数据库没有正常关闭,那么,全部的冷备份将回是无效的。

4.2.2热备份

热备份是当数据库打开并对用户有效是的OS级的数据备份。热备份只能用于ARCHIVELOG方式的数据库。在数据文件备份以前,对应的表空间必须经过使用ALTER TABLESPACE …… BEGIN BACKUP以备份方式放置。而后组成表空间的数据文件可使用相似冷备份的操做系统命令进行拷贝。在数据文件用操做系统命令拷贝后,应使用ALTER TABLESPACE …… END BACKUP命令使表空间脱离热备份方式。
热备份没有必要备份联机日志,但必须是归档状态,在实例恢复的时候,可能须要用到归档日志。当前联机日志必定要保护好或是处于镜相状态,当前联机日志的损坏,对于数据库的损坏是巨大的,只能以数据的丢失来进行数据库的恢复工做。
对于临时表空间,存放的是临时信息,在热备份是也能够考虑不用备份,若是临时文件发生故障,能够删除该数据文件与表空间,重建一个临时表空间。
热备份的优势是显而易见的
---- a.可在表空间或数据文件级备份,备份时间短。
---- b.备份时数据库仍可以使用。
---- c.可达到秒级恢复(恢复到某一时间点上)。
---- d.可对几乎全部数据库实体做恢复。
---- e.恢复是快速的,在大多数状况下在数据库仍工做时恢复。
操做系统做热备份的通常步骤为:
1. 链接数据库
SVRMGRL>connect internal;
2. 将须要备份的表空间(如User)设置为备份方式
SVRMGRL>Alter tablespace User begin backup;
3. 拷贝数据文件
SVRMGRL>!cp /u01/oradata/prod/user01.ora /backup/prod/user01.ora
Or
$cp cp /u01/oradata/prod/user01.ora /backup/prod/user01.ora
4. 在数据文件拷贝完成后,将表空间拖体备份方式
SVRMGRL>Alter tablespace User end backup;
5. 对全部须要备份的表空间重复234
6. 使用以下的命令备份控制文件ALTER DATABSE …… BACKUP CONTROLFILE
如备份成二进制文件
alter database backup controlfile to ‘new fielname’;
备份成文本文件
alter database backup controlfile to trace;
由于热备份的时候,用户还在操做数据库,因此,最好是每一个表空间处于备份状态的时间最短,这样就要求一个表空间一个表空间的备份,不要一块儿使表空间处于备份状态而同时拷贝数据文件。
注意:若是在热备份的时候若是数据库中断(如断电),那么在从新启动数据库的时候,数据库将提示有数据文件须要恢复,你须要把正在断电时候的处于备份状态的数据文件经过ALTER TABLESPACE …… END BACKUP结束备份方式。具体哪一个数据文件或表空间处于备份状态,能够经过v$backupv$datafile来得到

4.3 RMAN(备份与恢复管理器)

4.3.1 使用RMAN进行备份

4.3.1.1 了解RMAN

Recovery managerRMAN)是ORACLE提供的DBA工具,用于管理备份和恢复操做。RMAN只能用于ORACLE8
     支持在线热备份
     支持多级增量备份
     支持并行备份、恢复
     减小所须要备分量
     备份、恢复使用简单
   重要的是,使用恢复管理器容许您进行增量数据块级的备份(这个与导出/导入的增量大相径庭)。增量RMAN备份是时间和空间有效的,由于他们只备份自上次备份以来有变化的那些数据块。另外一个空间有效的RMAN特性是它只备份数据文件中使用的数据块,忽略空的,未用的数据块,这个对于预分配空间的表空间有很大的好处。
   9i开始,还增长了RMAN的数据块级别的恢复,能够进一步减小数据库恢复时间。
RMAN支持如下不一样类型的备份
FULL                       数据库全备份,包括全部的数据块
INCREMENTAL              增量备份,只备份自上次增量备份以来修改过的数据块。须要一个0级的增量做为增量的基础,能够支持7级增量。
OPEN                       在数据库打开的时候使用
CLOSED                    在数据库安装(MOUNT)但不打开的时候备份,关闭备份能够是CONSISTENTIN CONSISTENT类型的。
CONSISTENT                在数据库安装,单不打开,而且在安装以前数据库被完全关闭(而不是被破坏或异常退出)时使用。CONSISTENT备份能够简单的进行复原(RESTORE)而不是恢复(RECOVER)
INCONSISTENT              在数据库打开或安装(但不打开)时使用。在该数据库正常关闭或崩溃后,INCONSISTENT备份须要恢复。
理解BACKUPRESTORERECOVER命令,这是RMAN最基本的三个命令,能够进行数据库的备份,复原以及恢复操做。

4.3.1.2 了解恢复目录

理解恢复目录,RMAN能够在没有恢复目录(NOCATALOG)下运行,这个时候备份信息保存在控制文件。保存在控制文件的备份信息是很危险的,若是控制文件的破坏将致使备份信息的丢失与恢复的失败,并且,没有恢复目录,不少RMAN的命令将不被支持。因此对于重要的数据库,建议建立恢复目录,恢复目录也是一个数据库,只不过这个数据库用来保存备份信息,一个恢复目录能够用来备份多个数据库。
建立RMAN目录,如下步骤说明了在一个数据库中创建RMAN目录的过程。
1.为目录建立一个单独的表空间
SQL>Create tablespace tools datafile ‘fielname’ size 50m;
2.建立RMAN用户
SQL>Create user RMAN identified by RMAN default tablespace tools temporary tablespace temp;
3.给RMAN授予权限
SQL>Grant connect , resource , recovery_catalog_owner to rman;
4.打开RMAN
$>RMAN
5.链接数据库
RMAN>connect catalog rman/rman
6.建立恢复目录
RMAN>Create catalog tablespace tools
注册目标数据库,恢复目录建立成功后,就能够注册目标数据库了,目标数据库就是须要备份的数据库,一个恢复目录能够注册多个目标数据库,注册目标数据库的命令为:
$>RMAN target internal/password catalog rman/rman@rcdb;
RMAN>Register database;
数据库注册完成,就能够用RMAN来进行备份了,更多命令请参考ORACLE联机手册或《ORACLE8i备份与恢复手册》。
注销数据库不是简单的在RMAN提示下反注册就能够了,须要运行一个程序包,过程以下:
1. 链接目标数据库,得到目标数据库ID
$> RMAN target internal/password catalog rman/rman@rcdb;
 RMAN-06005: connected to target database: RMAN (DBID=1231209694)
2. 查询恢复目录,获得更详细的信息
SQL> SELECT db_key, db_id FROM db WHERE db_id = 1231209694;
 
DB_KEY     DB_ID     
---------- ---------------
      1 1237603294
1 row selected.
3. 运行过程dbms_rcvcat.unregisterdatabase注销数据库,如
SQL> EXECUTE dbms_rcvcat.unregisterdatabase(1 , 1237603294)

4.3.1.3 采用RMAN进行备份

RMAN使用脚原本备份数据库,如下是RMAN进行备份的几个例子。
1.备份整个数据库
 backup full tag ‘basicdb’ format ‘/bak/oradata/full_%u_%s_%p’ database;
2.备份一个表空间
 backup tag ‘tsuser’ format ‘/bak/oradata/tsuser_%u_%s_%p’ tablespace users;
3.备份归档日志
 backup tag ‘alog’ format ‘/bak/archivebak/arcbak_%u_%s_%p’ archivelog all delete input;

4.3.2 维护RMAN

4.3.2.1 查看RMAN的信息

检查现有备份
 RMAN>list backup
列出过时备份
 RMAN>report obsolete
删除过时的备份
 RMAN>allocate channel for maintenance type disk;
 RMAN>change backupset id delete;
 RMAN>release channel;

4.3.2.2 同步或重置RMAN

若是目标数据库物理对象发生了变化,如添加了一个数据文件,须要用以下命令同步:
RMAN>resync catalog;
若是目标数据库reset了数据库,须要用以下命令同步
RMAN>reset database;
当手工删除了数据库的归档文件后,要执行如下脚本同步
RMAN>allocate channel for maintenance type disk;
RMAN> change archivelog all crosscheck;
RMAN>release channel;
当手工删除了数据库的RMAN备份后,要执行如下脚原本同步
RMAN>allocate channel for maintenance type disk;
RMAN>crosscheck backup;
RMAN>delete expire backup;
RMAN>release channel;

第五章. 定制恰当的备份策略

5.1 定制正确的策略

正确的备份策略不只能保证数据库服务器的24*7的高性能的运行,还能保证备份与恢复的快速性与可靠性。咱们将以RMAN的多级增量备份做为一个备份策略的例子来讨论。采用多级备份就是为了减小天天备份所须要的时间,而又保证系统有良好的恢复性。恢复时间与备份时间要有一个权衡。好比只要进行一个数据库的全备份,而后就只备份归档也能够保证能把数据库恢复到最新的状态,可是这样的恢复时间将是不可容忍的。多级备份也正是     为了解决这种问题,如下就是一个多级备份的例子:
每半年作一个数据库的全备份(包括全部的数据和只读表空间)
每个月作一次零级备份(不包含只读表空间)
每一个星期作一次一级备份
天天作一次二级备份
任何数据库的更改须要从新同步CATALOG目录并从新备份(如添加数据文件)或从新备份(如修改表空间为只读)
每次备份后均可以备份归档日志或按期备份归档日志。
若是可能,能够直接备份到磁带上。
数据库全备份的脚本
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup full tag ‘dbfull’ format ‘/u01/oradata/backup/full%u_%s_%p’ database
include current controlfile;
sql ‘alter system archive log current’;
backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’
archivelog all delete input;   #备份归档可选,能够单独按期备份
release channel c1;
release channel c2;
release channel c3;
}
零级备份的脚本
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup incremental level 0 tag ‘db0’ format ‘/u01/oradata/backup/db0%u_%s_%p’
database skip readonly;
sql ‘alter system archive log current’;
backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’
archivelog all delete input;   #备份归档可选,能够单独按期备份
release channel c1;
release channel c2;
release channel c3;
}
同理,咱们能够获得一级备份,二级备份的脚本,如一级备份的脚本
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup incremental level 1 tag ‘db1’ format ‘/u01/oradata/backup/db1%u_%s_%p’
database skip readonly;
sql ‘alter system archive log current’;
backup fileaperset 3 format ‘/u01/oradata/backup/arch%u_%s_%p’
archivelog all delete input;   #备份归档可选,能够单独按期备份
release channel c1;
release channel c2;
release channel c3;
}
若是按照以上备份策略,则天天的所须要备份的数据量只有一天的改变量。而作恢复时最多要恢复当月的一个零级备份+三个一级备份+6个二级备份+当天的归档文件。若是不能接受这样的恢复时间,能够减小零级备份之间的时间间隔。
    在每次备份后,原则上在该备份点以前的归档日志就能够删除掉了,可是为了进一步的安全以及往后须要(如使用LOGMNR查找所需信息),建议有条件的话,归档日志保存一年,能够保存在磁带等廉价存取设备上。

5.2 RMAN备份有关的优化

备份操做主要是完成如下三个步骤
1、从磁盘上读取数据
2、在内存中处理数据块
3、写入数据到磁盘或磁带
以上的读写操做能够同步或异步的完成,在同步I/O操做中,一个时间只容许有一个IO操做,可是在异步I/O操做中,一个时间容许有多个IO操做。所以,备份与恢复的调优主要集中在如下几个方面:
一、  提升同步或异步I/O操做能力
在支持异步操做的操做系统上,能够经过设置TAPE_AYSNCH_IO,DISK_ASYNCH_IOBACKUP_TYPE_IO_SLAVES来支持异步操做,提升写的能力。
二、  提升磁盘读能力
能够在backup命令后经过设置DISKRATIO来保证从多个磁盘上读取数据,保证连续的数据流。
三、  正确设置缓冲区与参数值
设置LARGE_POOL_SIZE,使备份可使用连续的缓冲池,经过设置DB_FIL_DIRECT_IO_COUNT能够提升缓冲区的利用。若是使用磁带备份,还能够设置BACKUP_TYPE_IO_SLAVES来提升磁带的写能力。
四、  采用并行备份
开辟多个通道,能够实现并行备份与恢复

5.3 备份RMAN数据库

RMAN本身的数据库也须要备份,可是自己很小,并且不是常常发生变化,因此在每次RMAN备份完成后,均可以用以下脚本对RMAN数据库备份。
EXP pafile =exprman.sql
exprman.sql
USERID=RMAN/RMAN
BUFFER=32768
OWNER=RMAN
FILE=RMAN.DMP
ROWS=Y
GRANTS=Y
COMPRESS=Y
CONSISTENT=Y

5.4 使自动备份数据库

自动备份数据库不外乎如下三种方式
    WINDOWS下的任务计划(At命令)
    UNIX下的Crontab
    第三方工具如Viritas
在以上三种方式中Viritas属于第三方工具,不少人可能都没有接触,主要说一下windows的任务计划与unixcron
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,文件将放在/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分隔开来

第六章. 常见误区

1、使用EXP/IMP备份
EXP/IMP不是一个良好的备份工具,在之后的发展之中,ORACLEEXP/IMP用于备份的支持会愈来愈低。ORACLE只是把EXP/IMP看成一个好的工具而不是备份工具,在对于大型数据库,如TB级数据库或数据仓库,EXP/IMP确定会力不从心。
2、在应用程序中备份数据库
在论坛上,有不少这样的要求,“我怎么在程序中备份与恢复数据库?”。首先说,这个并非不能够实现,可是实现的过程会很复杂并且意外会不少。就个人感受,提出这样问题的人,首先一点就是对ORACLEDBA的不了解,若是ORACLE能够这么轻松的实现备份与恢复,那么我能够说,就不须要DBA了。
3、冷备份比热备份更容易,效果会更好
有人认为,冷备份是关闭数据库进行的一致性备份,确定比热备份要好,使用也容易,其实不尽然,在热备份中,同样能够实现数据库的全备份,并且不会影响到数据库的运行。建议全部的生产机,都运行在归档方式下,采用热备份方式。

第七章. 常见问题

1、我导出的数据为何不能导入,提示不支持的字符集转换
答:参考上面的字符集原则,导出数据时客户端与数据库字符集一致,导入时修改成与目标数据库字符集一致。
2、个人归档日志愈来愈多,我何时能够删除归档日志?
答:在每一次全备份(如OS全冷备份或全热备份)或基于全备份的增量备份(如RMAN基于0级备份上的增量备份)后均可以删除该备份点以前的归档日志,建议在磁带上保留一年。
3、全备份时必定须要备份全部数据文件吗?
答:不须要,起码有两类数据文件能够不备份,一类就是临时数据文件,若是丢失,能够删除后重建;一类是只读表空间数据文件,若是上次备份以来,没有修改过表空间的只读属性,就能够不须要备份。
4、联机日志须要备份吗?
答:若是是归档方式热备份,就没有必要备份联机日志。可是对于冷备份,能够备份联机日志,特别是不归档状态。备份过联机日志后的冷备份,由于数据库是一致的,能够恢复到该备份点。

第八章. 小结

1、什么是数据库备份,数据库备份就是把数据库复制到转储设备的过程。
2、数据库的运行方式,能够分为归档方式和非归档方式,建议运行在归档方式下运行热备份。
3、了解了数据库的备份方式,逻辑备份、冷备份、热备份
4、了解数据库的备份工具,EXP/IMP执行逻辑备份,OS脚本能够执行冷备份或热备份,RMAN也能够执行冷备份或热备份
5、了解ORACLE的备份策略,并怎样选择最佳的备份策略
6、知道怎么样启动自动备份,了解Windowsat命令与unixcron进程。
相关文章
相关标签/搜索