数据库备份与恢复指南.docx
《数据库备份与恢复指南.docx》由会员分享,可在线阅读,更多相关《数据库备份与恢复指南.docx(28页珍藏版)》请在冰豆网上搜索。
![数据库备份与恢复指南.docx](https://file1.bdocx.com/fileroot1/2022-11/25/91a0f396-8455-4b2d-8616-45f989270a02/91a0f396-8455-4b2d-8616-45f989270a021.gif)
数据库备份与恢复指南
数据库备份与恢复指南
2011-2-23
1.概述
本文档对公司目前使用的三种主流数据库的备份与恢复进行说明。
旨在帮助实施人员在系统运维期,定期进行数据库备份,以防止客户数据丢失。
2.Oracle数据库
2.1逻辑备份
逻辑备份包括读一个数据库记录集和将记录集写入一个文件中。
Export程序来完成数据库备份。
Import程序使用由Export生成的导出文件来恢复数据库。
用Export进行数据库备份时,数据库仍处理连接状态,即不用关闭数据库。
备份:
expuserid=username/password@ora9i_instfile=filename.dmplog=logfilename.log
利用inctype选项,可以进行“完全备份”、“增量备份”、“累计增量备份”。
Oracle10g以后inctype选项被废弃,用RMAN的增量备份代替。
增量备份:
备份从上一次备份后发生改变的数据。
累计增量备份:
备份从上一次“完全备份”后,发生改变的数据。
也就是说,累计增量备份包括之前多次增量备份的数据。
实际应用环境根据实际情况选择备份策略。
一般可以一周进行一次全备份,每天进行一次增量备份。
连续多次增量备份后,进行一次累计增量备份。
exp命令选项:
关键字
描述
userid
执行导出的帐户的用户名/口令,如果这是exp命令后的第一个参数,则关键字userid就不必指定
buffer
用于获取数据行的缓冲区尺寸,缺省值随系统而定,通常设为一个高值(>64000)
file
导出转储文件的名字
filesize
一个导出转储文件的最大尺寸。
如果file条目中列出了多个文件,将根据filesize设置值导出这些文件
compress
一个Y/N标志,用于指定导出是否应把碎片段压缩成单个盘区。
这个标志影响将存储到导出文件中的storage子句
grants
一个Y/N标志,用于指定数据库对象的权限是否导出
indxes
一个Y/N标志,用于指示表上的索引是否导出
rows
一个Y/N标志,用于指示行是否导出。
如果设置为N,在导出文件中将只创建数据库对象的DDL
constraints
一个Y/N标志,用于指示表上的约束条件是否导出。
full
若设为Y,执行Full数据库导出
owner
导出数据库帐户的清单;可以执行这些账户的User导出
tables
导出表的清单,可以执行这些表的Table导出
recordlength
导出转储文件记录的长度,以字节为单位。
除非是在不同的操作系统间转换导出文件,否则就使用缺省值
inctype
要执行的导出类型(允许值为COMPLETE(缺省)、CUMULATIVE和
INCREMENTAL)
direct
一个Y/N标志,用于指示是否执行Direct导出。
Direct导出在导出期间绕过缓冲区,从而大大提高导出处理的效率
record
用于Incremental导出,这个Y/N标志指示一个记录是否存储在记录导出的数据字典表中
parfile
传递给Export的一个参数文件名。
这个文件可以包含这里列出的全部参数条目
Statistics
这个参数指示导出对象的analyze命令是否应写到导出转储文件上。
其有效值是COMPUTE、ESTIMATE(缺省)和N
consistent
一个Y/N标志,用于指示是否应保留全部导出对象的读一致版本在Export处理期间,当相关的表被用户修改时需要这个标志
log
一个要写导出日志的文件名
Feedback
表导出时显示进度的行数。
缺省值是0,所以在一个表全部导出前没有反馈显示
point_in_time_recover
一个Y/N标志,用于向Oracle指示,是否正在导出用于表空间时间点恢复的元数据。
这是个高级恢复技术
recover_tablespaces
在表空间时间点恢复期间,其元数据应被导出的表空间
query
导出时用于每个表的where子句
transport_tablespace
如果正在使用Oracle8i的可移动表空间选项,就设置成Y。
和关键字tablespace一起使用
tablespaces
移动一个表空间时应导出其元数据的表空间
恢复:
impuserid=username/password@ora9i_instfile=filename.dmp
恢复时,要指定与备份文件导出时相同的inctype类型。
先恢复全备份,再按备份时的顺序依次恢复增量备份。
如果有累计增量备份,先恢复最后一次的累计增量备份,再恢复在它之后的增量备份。
2.2物理备份
物理备份是拷贝构成数据库的文件而不管其逻辑内容如何。
由于使用操作系统的文件备份命令,所以这些备份也被称作文件系统备份(filesystembackup)。
Oracle支持两种不同类型的物理文件备份:
脱机(offline)备份和联机(online)备份(也叫作“hot”(热)或“ARCHIVELOG”备份)。
2.2.1脱机备份
也叫冷备份,当数据库已经正常关闭(不包括由失败引起的关闭)时使用脱机备份。
当数据库处于“offline”时,要备份下列文件:
Ø所有数据文件
Ø所有控制文件
Ø所有联机重做日志
Øinit.ora文件(可选择)
当数据库关闭时,复制(利用操作系统拷贝功能)上面所列文件进行备份。
恢复时将这些备份文件拷贝回去,重启数据库即可。
利用脚本进行对test进行冷备份示例:
--连接数据库
connectinternal/oracle;
--关闭数据库
shutdownimmediate;
--备份(数据文件,控制文件和日志文件)
$xcopye:
\Oracle\oradata\test\*.dbfe:
\database\H\R;--数据文件
$xcopye:
\Oracle\oradata\test\*.ctle:
\database\H\R;--控制文件
$xcopye:
\Oracle\oradata\test\*.loge:
\database\H\R;--日志文件
--打开数据库
startup;
2.2.2联机备份
可以为正在ARCHIVELOG方式下运行的数据库使用联机备份。
在这种方式下,联机重做日志被归档,在数据库内创建一个所有事务的完整记录。
Oracle默认以循环方式写入联机重做日志文件:
在填满第一个日志文件后,开始写第二个文件,直到填满;然后开始写第三个文件…当最后一个联机重做日志文件填满后,LGWR(LogWriter)后台进程开始重写第一个重做日志文件。
当以ARCHIVELOG方式运行Oracle时,ARCH(Archiver)后台进程在写入前将每个重做日志文件做一个拷贝。
假若是运行在ARCHIVELOG方式下,数据库打开时就可以执行一个文件系统备份。
联机备份包括将每一个表空间设为备份状态,接着备份其数据文件,然后再将表空间恢复为正常状态。
数据库可从一个联机备份中完全恢复,并且可以通过归档的重做日志,前滚到任一时刻。
要备份以下文件:
Ø所有数据文件。
Ø所有归档的重做日志文件。
Ø一个控制文件,通过alterdatabase命令进行。
联机备份有以下优点:
第一,提供了完全的时间点(point-in-time)恢复。
第二,在文件系统备份时允许数据库保持打开状态。
因此,即使在用户要求数据库不能关闭时也能备份文件系统。
保持数据库打开状态也就可以避免数据库的SystemGlobalArea(SGA)被重新设置。
用脚本进行热备份示例:
--连接数据库
connectinternal/oracle;
--将循环日志改为归档日志
altersystemarchivelogcurrent;
--开始
altertablespacesystembeginbackup;
$xcopye:
\Oracle\oradata\test\system01.dbfe:
\databak\H\R;
altertablespacesystemendbackup;
altertablespacerbsbeginbackup;
$xcopye:
\Oracle\oradata\test\rbs01.dbfe:
\databak\H\R;
altertablespacerbsendbackup;
altertablespaceusersbeginbackup;
$xcopye:
\Oracle\oradata\test\users01.dbfe:
\databak\H\R;
altertablespaceusersendbackup;
altertablespacetoolsbeginbackup;
$xcopye:
\Oracle\oradata\test\tools01.dbfe:
\databak/H/R;
altertablespacetoolsendbackup;
altertablespaceindxbeginbackup;
$xcopye:
\Oracle\oradata\test\indx01.dbfe:
\databak\H\R;
altertablespaceindxendbackup;
--结束
--备份控制文件
--binary
alterdatabasebackupcontrolfileto'e:
\databak\controlbinbak.000';
--ascii
alterdatabasebackupcontrolfiletotrace;
altersystemarchivelogcurrent;
联机备份的恢复:
1、关闭数据库,将备份的数据文件拷贝回原来位置;
2、所有归档日志放到参数LOG_ARCHIVE_DEST_1所指定的位置;
3、利用sqlplus登陆到空实例。
(connect/assysdba)
4、然后
startupmount
setautorecoveryon
recoverdatabase;
--若恢复到某一时间点recoverdatabaseuntiltime'2005-02-28:
14:
43:
01';
--若恢复到某一scn号recoverdatabaseuntilscn31014;
alterdatabaseopen;
2.3不同备份方案的比较
备份方案
综述
优点
缺点
冷备份
冷备份是Oracle最简单的一种备份;执行冷备份前必须关闭数据库;然后使用操作系统实用工具或者第三方工具备份所有相关的数据库文件。
能简单快速地备份。
能简单快速地恢复。
执行简单。
必须关闭数据库。
不能进行点恢复
热备份
热备份是当数据库正在运行时进行数据备份的过程。
执行热备份的前提是:
数据库运行在可归档日志模式。
适用于24X7不间断运行的关键应用系统。
备份时数据库可以是打开的。
热备份可以用来进行点恢复。
初始化参数文件、归档日志在数据库正常运行时是关闭的,可用操作系统命令拷贝。
执行过程复杂。
由于数据库不间断运行,测试比较困难。
不能用操作系统实用工具拷贝打开的文件。
必须使用Oracle提供的ocopy工具来拷贝打开的文件。
热备份可能造成CPU、I/O过载,应在数据库不太忙时进行
Export导出数据库对象
export备份的是数据库对象,是种逻辑备份
能执行对象或者行恢复。
备份和恢复速度更快。
能够跨操作系统平台迁移数据库。
数据库可一直运行
export并不是冷备份和热备份的替代工具。
冷、热备份可保护介质失效。
export备份可保护用户或应用错误。
2.4RMAN备份与恢复
2.4.1一般备份与恢复
一、备份
1:
连接目标数据库:
rman
rman>connecttarget username/password@orcl_inst ---当地机器连接形式
进入归档模式切换:
sqlplus/nolog
sql>connusername/passwordassysdba;
sql>archiveloglist;---查看是否归档模式
启动startmount状态下
进行归档模式的切换
sql>alterdatabasearchivelog;
再启动即可;
2:
查询目标数据库的配置情况;
RMAN>SHOWALL;
修改成如下配置:
configureretentionpolicytoredundancy1;#default
configurebackupoptimizationon;
configuredefaultdevicetypetodisk;#default
configurecontrolfileautobackupon;
configurecontrolfileautobackupformatfordevicetypediskto'f:
rman_back%f';#default
configuredevicetypediskparallelism1;#default
configuredatafilebackupcopiesfordevicetypediskto1;#default
configurearchivelogbackupcopiesfordevicetypediskto1;#default
configurechannel1devicetypediskformat"f:
rman_back%u";
configuremaxsetsizetounlimited;#default
configuresnapshotcontrolfilenameto'f:
rman_backsncfraydb.ora';
如果configurecontrolfileautobackupoff;
执行下面语句:
RMAN>configurecontrolfileautobackupon;
3:
备份控制和数据文件
RMAN>backupdatabase;
4:
备份日志文件;
rman>backuparchivelogalldeleteinput;
二、恢复
1:
先将数据库工作在'已装载'模式下;
sql>shutdownimmediate;
sql>startupmount;
sql>selectstatusfromv$instance;--open
2:
rman>restoredatabase;
3:
rman>recoverdatabase;
数据库恢复成功;
sql>alterdatabaseopen;
2.4.2表空间的备份与恢复
数据库要工作在归档日志模式下;
1:
表空间的备份;
rman>backup(tablespaceusersincludecurrentcontrolfile);
2:
备份归档日志;
rman>backup(archivelogalldeleteinput);
3:
表空间恢复;
3.1:
表空间的脱机;
rman>sql'altertablespaceusersofflineimmediate';
3.2:
表空间所属数据文件还原;
rman>restore(tablespaceusers);
3.3:
表空间恢复过程;
rman>recovertablespaceusers;
3.4:
表空间联机的过程;
rman>sql'altertablespaceusersonline';
2.4.3数据文件的备份恢复
数据库要工作在归档日志模式下;
1:
备份数据文件;
rman>backup(datafile'd:
oracleoradatadbnameusers01.dbf');
2:
备份所有归档日志文件;
rman>backup(archivelogalldeleteinput);
3:
数据文件的恢复;
3.1:
将数据文件所属的表空间users脱机;
rman>sql'altertablespaceusersofflineimmediate';
3.2:
将数据文件还原的过程;
rman>restore(datafile'd:
oracleoradatadbnameusers01.dbf');
3.3:
数据文件的恢复过程;
rman>recoverdatafile'd:
oracleoradatadbnameusers01.dbf';
3.4数据文件所属的表空间的联机;
rman>sql'altertablespaceusersonline';
OK;
2.4.4整库备份与恢复
一、备份
1、只备份数据文件(如果configurecontrolfileautobackupon;将自动包括控件文件,SPFILE)
RMAN>backupdatabase;
2、同时备份归档日志,然后将备份后的归档日志删除
RMAN>backupdatabaseplusarchivelogdeleteinput;
3、明确指定同时备份控件文件:
RMAN>run{
allocatechannelch1typedisk;
sql'altersystemarchivelogcurrent';
backupfulldatabaseincludecurrentcontrolfiletag'db_full_controlfile_%T'
format'/user/oracle/rmanback/full_%u_%s_%p';---'d:
\oracle\rman\full_%u_%s_%p';
sql'altersystemarchivelogcurrent';
releasechannelch1;
}
二、恢复(完全恢复)
目标数据库必须是mount状态
rmantargetusername/password@orcl_inst
RMAN>startupmount
RMAN>restoredatabase;
RMAN>recoverdatabase;
RMAN>alterdatabaseopen;
2.4.5增量备份
增量备份都需要一个0级备份来作为基础,0级备份实际上就是一个完全备份,0级备份与全备份的区别在于0级可以用来增量恢复,而全备份则不可以。
从级别1开始:
差异增量:
是备份上级及同级备份以来所有变化的数据块,差异增量是默认增量备份方式。
通过级别的控制,可以使差异增量达到累积增量的效果。
累积增量:
是备份上级备份以来所有变化的块。
以下是零级备份的例子:
backupincrementallevel0database;
一级差异增量例子
backupincrementallevel1database;
一级累计增量例子
backupincrementallevel1cumulativedatabase;
典型差异备份策略:
星期
差异增量
说明
星期天
0级
0级全备份
星期一
2级
备份从星期天之后到当前的变化
星期二
2级
备份从星期一之后到当前的变化
星期三
1级
备份从星期天之后到当前的变化,相当于一次累计增量
星期四
2级
备份从星期三之后到当前的变化
星期五
2级
备份从星期四之后到当前的变化
星期六
2级
备份从星期五之后到当前的变化
假设周五备份之后周六备份前要进行数据库恢复,那么只需要使用星期天的0级,星期三的一级,星期四、五的二级就可以恢复。
假设上面的备份策略中将差异增量改为累积增量,别级不变,周五之后周六前要进行数据库恢复,则需要使用星期天的0级,星期三的一级,星期五的二级即可进行恢复。
2.4.6删除备份文件
通过retentionpolicy来设置自动备份文件的过期策略。
(showall命令查看过期策略)
RMAN>configureretentionpolicytorecoverywindowof2days;--保留能恢复到2天前的备份.
RMAN>listbackup;--列出所有备份。
RMAN>crosscheckbackup;--检查备份,有三种结果:
AVAILABLE,UNAVAILABLE,andEXPIRED.
RMAN>reportobsolete;--查看废弃的备份
RMAN>deleteobsolete;--删除废弃的备份.
RMAN>deleteobsoleterecoverywindowof7days;--通过指定的过期策略删除过期的备份.
3.SQLServer数据库
以下内容是基于SQLServer2008版本。
其它版本可能略有不同,但大体都差不多。
参考:
3.1完整数据库备份
数据库备份易于使用。
完整数据库备份包含数据库中的所有数据。
对于可以快速备份的小数据库而言,最佳方法就是使用完整数据库备份。
但是,随着数据库的不断增大,完整备份需花费更多时间才能完成,并且需要更多的存储空间。
因此,对于大型数据库而言,您可以用差异备份来补充完整数据库备份。
有关详细信息,请参阅差异数据库备份。
使用ManagementStudio来进行完整备份:
1.连接到相应的MicrosoftSQLServer数据库引擎实例之后,在对象资源管理器中,单击服务器名称以展开服务器树。
2.展开“数据库”,然后根据数据库的不同,选择用户数据库,或展开“系统数据库”,再选择系统数据库。
3.右键单击数据库,指向“任务”,再单击“备份”。
将出现“备份数据库”对话框。
4.在“数据库”列表框中,验证数据库名称。
您也可以从列表中选择其他数据库。
5.可以对任意恢复模式(FULL、BULK_LOGGED或SIMPLE)执行数据库备份。
6.在“备份类型”列表框中,选择“完整”。
(请注意,创建了完整数据库备份后,可以创建差异数据库备份;)
7.还可以根据需要选择“仅复制备份”创建仅复制备份。
“仅复制备份”是独立于常规SQLServer备份序列的SQLServer备份。
有关详细信息,请参阅仅复制备份。
8.对于“备份组件”,请单击“数据库”。
9.可以接受“名称”文本框中建议的默认备份集名称,也可以为备份集输入其他名称。
10.或者,在“说明”文本框中,输入备份集的说明。
11.指定备份集何时过期以及何时可以覆盖备份集而不用显式跳过过期数据验证:
12.通