第一篇:详谈数据库的备份方案与策略
关于SQL SERVER数据库 的维护和备份方案
/ 38
目录
1、引言.............................................................................................................................................4
1.1、为什么要进行数据备份..............................................................................................4
2、数据库的备份和还原.................................................................................................................4
2.1、几种常见的SQL Server数据库备份...........................................................................4 2.2、数据库的还原.................................................................................................................7 2.3、升级...............................................................................................................................11
3、SQL Server 维护计划实现数据库备份...........................................1错误!未定义书签。
3.1、场景设计....................................................................................1错误!未定义书签。3.2、实战操作.......................................................................................................................14
4、SQL Server 维护计划实现数据库备份(策略实战方案)................................................17 4.1、最佳实践.......................................................................................................................26 4.2、注意事项.......................................................................................................................31
5、SQL Server 数据库最小宕机迁移方案................................................................................36 5.1、目的...............................................................................................................................36 5.2、分析与设计思路...........................................................................................................35 5.3、参考脚本2.3、升级....................................................................................................35
参考资料:http://gaizai.cnblogs.com/
SQL Server 2008编程入门经典(第3版)
/ 38
引言
1.1为什么要进行数据备份
在信息化高速发展的今天数据在人们的生活中扮演着越来越重要的角色,信息化渗透着教育、科研、医疗等等各个领域,所以为防止数据丢失的第一道防线是实行数据备份,备份就像锻炼身体,虽然重要,但却常常被忽视,数据备份观念在一些企业中,甚至是在网络管理员中仍然得不到足够的重视。当网站更新或添加内容时,如果实行了数据备份,那么即使出现操作失误,把有用的资讯或者重要的内容删掉了,那么也不至于让之前花了很长时间辛辛苦苦建立起来的数据付之东流,只要及时地通过系统备份和恢复方案就可以实现数据的安全性和可靠性了;又或者是企业网站发生灾难,原始数据丢失或遭到破坏,利用备份数据就可以把原始数据恢复出来,使系统能够继续正常工作。可见,数据备份是何等的重要,数据备份是为了以后能够顺利地将被破坏了或丢失了的数据库安全地恢复的基础性工作,可以这么说,没有数据库的备份,就没有数据库的恢复,企业应当把数据备份和恢复的工作列为一项不可忽视的系统工作,为其网站选择相应的备份设备和技术,进行经济可靠的数据备份,从而避免可能发生的重大损失。
2、SQL Server 备份和还原
2.1、几种常见的SQL Server数据库备份 2.1.1、完全备份
/ 38 备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件。(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份,换言之,清除存档属性)。完全备份也叫完整备份。2.1.2、差异备份
差异备份是针对完全备份:备份上一次的完全备份后发生变化的所有文件。(差异备份过程中,只备份有标记的那些选中的文件和文件夹。它不清除标记,即:备份后不标记为已备份文件,换言之,不清除存档属性)。2.1.3、增量备份
增量备份是针对于上一次备份(无论是哪种备份):备份上一次备份后,所有发生变化的文件。(增量备份过程中,只备份有标记的选中的文件和文件夹,它清除标记,即:备份后标记文件,换言之,清除存档属性。)2.1.4、事务日志备份
在特定事务日志备份之前执行的完整数据库备份和上次差异备份(如果有)。在完整数据库备份之后执行的所有事务日志备份或在特定事务日志备份之前执行的差异备份(如果您还原了差异备份)。如果你设置了恢复模式为【简单】,你将无法使用【事务日志】备份。SQL Server 2000 和 SQL Server 2005: 创建事务日志备份,您必须使用完整恢复或大容量日志记录恢复模型。2.1.5部分备份
通过指定 READ_WRITE_FILEGROUPS 创建的备份称为“部分备份”。在简单恢复模式下,只允许对只读文件组执行文件组备份。还原的数据备份类型: 4 / 38 数据库备份、部分备份或文件备份。对于数据库备份或部分备份,日志备份序列必须从数据库备份或部分备份的结尾处开始延续。对于一组文件备份,日志备份序列必须从整组文件备份的开头开始延续。2.1.6文件备份
“文件备份”包含一个或多个文件(或文件组)中的所有数据。2.1.7日志链
连续的日志备份序列称为“日志链”。日志链从数据库的完整备份开始。通常,仅当第一次备份数据库时,或者将恢复模式从简单恢复模式切换到完整恢复模式或大容量日志恢复模式之后,才会开始一个新的日志链。除非在创建完整数据库备份时选择覆盖现有备份集,否则现有的日志链将保持不变。在该日志链保持不变的情况下,便可从媒体集中的任何完整数据库备份还原数据库,然后再还原相应恢复点之前的所有后续日志备份。恢复点可以是上次日志备份的结尾,也可以是任何日志备份中的特定恢复点。2.1.8一个备份方案例子
某个站点在星期天晚上执行完整数据库备份。在白天每隔 4 小时制作一个事务日志备份集,并用当天的备份重写头一天的备份。每晚则进行差异备份。如果数据库的某个数据磁盘在星期四上午 9:12 出现故障,则该站点可以:
1)备份当前事务日志;(已经出现故障了,如何备份当前事务日志?)2)还原从星期天晚上开始的数据库备份;
3)还原从星期三晚上开始的差异备份,将数据库前滚到这一时刻;
/ 38 4)还原从早上 4 点到 8 点的事务日志备份,以将数据库前滚到早上 8 点;
5)还原故障之后的日志备份。这将使数据库前滚到故障发生的那一刻。2.2、数据库的还原
创建一个叫TestBackup的数据库,创建一张叫Table1的表,这个时候进行一次完整备份,备份文件为:TestBackupDB-full.bak;接着创建表Table2后进行差异备份,备份文件为:TestBackupDB-diff.bak;接着创建表Table3后进行事务日志备份(如果数据库设置了恢复模式为【简单】,那么在备份类型选项中将看不到【事务日志】),备份文件为:TestBackupDB-log.bak;
创建一个叫TestBackup2的数据库,用于测试TestBackup数据库的备份文件的还原。
(图1:创建库结构)
/ 38
(图2:备份类型)
下面我们就可以对三个备份文件:TestBackupDB-full.bak、TestBackupDB-diff.bak、TestBackupDB-log.bak进行还原:
步骤1:还原完整备份文件TestBackupDB-full.bak,选项如图
4、图5所示,还原成功后数据列表就会如图6所示,这是因为恢复状态选项:不对数据库执行任何操作,不回滚未提交的事务。可以还原其他事务日志。(RESTORE WITH NORECOVERY)
(图3:进入SSMS还原)
/ 38
(图4:还原常规)
(图5:还原选项)
/ 38
(图6:完整备份还原)
步骤2:还原差异备份文件TestBackupDB-diff.bak,操作如步骤1所示,这个时候的数据库还是跟图6的状态一样的。
步骤3:还原事务日志备份文件TestBackupDB-log.bak,如图7进入事务日志的还原操作界面;看图8的选项中有指定事务的时间进行还原(还原过程中的恢复状态都是默认为RESTORE WITH RECOVERY,所以这里没有提及这个选项)。还原后的TestBackup2数据库,还原之后的数据库TestBackup2如图9所示。
(图7:进入事务日志)
/ 38
(图8:事务日志)
(图9:还原后的数据库)
/ 38 2.3、升级
通常来说文章写到这里就应该结束了,但是很幸运,再给你介绍一下如何在对表进行分区后的还原操作,从上面的操作来看只包括了mdf和ldf文件,但如果多了几个ndf文件,这些还原又一样吗?所以我称这部分的内容为升级。
情景一:如果本来就有对应的分区文件的,只要在还原的时候修改【还原为】的文件名就可以进行还原了。
情景二:如果刚刚新建了分区文件组和文件,这个时候接着还原备份就会出现图10的错误(不知道是不是在SQL Server 2005的问题);要解决这个问题有两个方法,第一个:重启数据库服务再还原;第二个:设置数据库的【限制访问】设置为【Single】;
(图10:错误)
/ 38
3、如何实现数据库备份 3.1、场景设计
假设我们的数据库不是很大,但是我们的数据会比较重要,大概一天一个备份就能满足我们的业务需要,那我们应该如何设计我们的备份方案呢?
星期天晚上02:00做一次数据库的完全备份,其它时间星期一至星期六晚上02:00做一次差异备份,基本逻辑如下图所示:
(图:数据库备份文件生成逻辑)
Tips:
/ 38 1.如果你的数据库比较大,而且流数据(就是一些记录性的流水数据)比较多,我们的做法是把这些大表分离出一个新的数据库(纵向切割数据库),这样接下来的问题,这篇文章就可以解决了;
2.如果无法把流数据分离出数据库,那么可以考虑表分区,分区之后再对其它表进行数据备份(主分区备份);这些备份是无法使用差异备份了,每次都只能使用完全备份,而且还原的时候表分区是不可以用的,只能修改表名之后再创建新表。详情参考:SQL Server 2008编程入门经典(第3版)
3.如果一天一次的备份满足不了业务上的需求,那么可以考虑发布订阅方案,在两台机器上进行事务复制,可以调整复制的频率,加强数据的安全性。
3.2、实战操作
1.数据库-> 【管理】-> 【维护计划】-> 【新建维护计划】;
/ 38
(图1)
2.勾选【备份数据库(完整)】和【备份数据库(差异)】;
/ 38
(图2)
3.设置 完整备份 文件的路径和备份文件的扩展名;注意特定数据库的选择;
/ 38
(图3)
4.填写 完整备份 作业计划的名称,执行间隔勾选星期日,设置执行时间;
/ 38
(图4)
5.设置 差异备份 文件的路径和备份文件的扩展名;注意特定数据库的选择;
/ 38
(图5)
6.填写 差异备份 作业计划的名称,执行间隔勾选除星期日之外的日期,设置执行时间;
/ 38
(图6)
7.这就生成 完整备份 与 差异备份 的子计划了,(图7)
/ 38 8.在完整备份的设计界面中,从左边拖拉一个【清除历史记录】的控件到右边,并双击进行下图的设置;
(图8)
9.从左边拖拉一个【清除维护】的控件到右边,并双击进行下图的设置,这里需要设置 完整备份 的路径和文件的扩展名;
/ 38
(图9)
10.在步骤上加上箭头形成 完全备份 作业的流程图;
/ 38
(图10)
11.在差异备份的设计界面中,从左边拖拉一个【清除历史记录】的控件到右边,并双击进行下图的设置;
(图11)
/ 38 12.从左边拖拉一个【清除维护】的控件到右边,并双击进行下图的设置,这里需要设置 差异备份 的路径和文件的扩展名;
(图12)
13.在步骤上加上箭头形成 差异备份 作业的流程图;
/ 38
(图13)
14.在维护计划下生成Ant_Backup,在代理中生成 完整备份与差异备份的作业;
(图14)
/ 38
4、SQL Server 维护计划实现数据库备份(策略实战方案)
上面文章使用完整备份和差异备份基本上能解决数据库备份的问题,但是为了保障数据更加安全,我们需要再次完善我们的备份计划;
下面这篇文章主要加入了日志备份,并对设计备份的频率和设计命名规范等问题进行实战; 4.1、最佳实践 4.1.1、备份计划
1)每周星期日的2:00:00执行数据库的完整备份;
2)每周星期一至星期六每天的2:00:00执行数据库的差异备份; 3)每天在8:00:00和23:59:59之间、每1小时执行数据库的日志备份; 4)每个月的最后一个星期日的1:00:00执行数据库的完整备份; 4.1.2、计划讲解
1.根据备份文件的不同,我创建了4个文件用于存放备份文件:(Medusa是数据库名)
1)Medusa_Full:用于存放完整备份文件; 2)Medusa_Diff:用于存放差异备份文件; 3)Medusa_Log:用于存放日志备份文件;
/ 38 4)Medusa_Save:用于存放保留备份文件;
上面的4个文件夹与备份计划的4个步骤是一 一对应的;
(Figure1:文件夹命名规范)
2.创建名为Medusa的维护计划,并创建如下图的4个子计划:
(Figure2:子计划列表)
3.设置【清除历史记录】、【清除维护】的保留时间:
1)Subplan_Full:保留完整备份文件4周;(1个*4周=4个文件)2)Subplan_Diff:保留差异备份文件2周;(6个*2周=12个文件)3)Subplan_Log:保留日志备份文件1周;(16个*7天=112个文件)4)Subplan_Save:保留备份文件1年;(1个*12月=12个文件)
上面的时间策略需要根据数据库的安全级别、磁盘空间、业务特性等情况共同解决的,你可以根据的实际情况进行修改和调整;
/ 38 4.下面的Figure3、Figure4、Figure5、Figure6是具体设置的效果图:
(Figure3:子计划Full)
(Figure4:子计划Diff)
/ 38
(Figure5:子计划Log)
(Figure6:子计划Save)
5.保存维护计划后,在SQL Server代理的作业中会生成Figure7的作业列表:
/ 38
(Figure7:Job列表)
6.执行一段时间后,在各个文件夹中会生成一系列的文件:
(Figure8:Full文件)
(Figure9:Diff文件)
/ 38
(Figure10:Log文件)
(Figure11:Save文件)
7.有了这些文件之后,我们可以虽然还原到某个时间点上的数据,数据的差异为一个小时,例如你是在2012-12-11的15:48:00分误操作了数据库,我能回滚到最接近这个时间的是:2012-12-11的15:00:00
(Figure12:还原完整备份文件)
/ 38
(Figure13:还原差异、日志备份文件)
在使用SSMS的还原的时候,系统会帮你找到最近的备份文件,并且进行了勾选,要完成上面的还原,根据我们之前的备份计划,我们需要文件:
1)完整备份文件:Barfoo.Medusa_backup_2012_12_09_020005_0612500.bak 2)差异备份文件:Barfoo.Medusa_backup_2012_12_11_020005_8354977.bak 3)日志备份文件:
Barfoo.Medusa_backup_2012_12_11_080005_4808937.trn Barfoo.Medusa_backup_2012_12_11_090005_4816881.trn Barfoo.Medusa_backup_2012_12_11_100005_6543553.trn Barfoo.Medusa_backup_2012_12_11_110005_7645233.trn Barfoo.Medusa_backup_2012_12_11_120005_8434417.trn Barfoo.Medusa_backup_2012_12_11_130004_9379977.trn 31 / 38 Barfoo.Medusa_backup_2012_12_11_140005_2044137.trn Barfoo.Medusa_backup_2012_12_11_150005_2208329.trn 还原的步骤就是先还原完整备份文件,接着还原差异备份文件,再依次执行日志备份文件,这样就能回滚到你想要的时间点:2012-12-11的15:00 4.2、注意事项
1.备份计划中“每天在8:00:00和23:59:59之间、每1小时执行数据库的日志备份”很多人会问:这中间相差8个小时的数据不做日志备份呢?其实我是这样考虑的,在凌晨的时候,大部分的情况这段时间是在跑定时器处理数据,如果不是程序有BUG,一般不会造成数据错误需要恢复,而且这个时候用户操作页面也不频繁(个人认为更多数据误操作是因为人为操作不当引起的),你可以根据自己的业务情况做些调整;
2.备份计划中“每个月的最后一个星期日的1:00:00执行数据库的完整备份”,这样做的目的是尽量不影响全备份又能保留一份完整的备份文件,如果需要更加严谨一点,你可以把它换成“仅复制备份(COPY_ONLY)”,这需要在维护计划中使用T-SQL进行备份,这就可以完全不影响日志链; 3.维护计划的可以通过T-SQL脚本生成嘛?
sp_add_maintenance_plan sp_delete_maintenance_plan_db sp_add_maintenance_plan_db sp_delete_maintenance_plan_job 32 / 38 sp_add_maintenance_plan_job sp_help_maintenance_plan sp_delete_maintenance_plan
5、SQL Server 数据库最小宕机迁移方案 5.1、目的
在做SQL Server数据库维护的时候,当上司要求我们把几十G的数据文件搬动到其它服务器,并且要求最小宕机时间的时候,我们有没什么方案可以做到这些要求呢?
在这里我们假设这两台机器并不是在一个机房上,这样看起来我们的解决方案才更有意义,如果你那么好运这两台机器在同一个局域网,那么恭喜你,你可以多很多的方案可以做到。5.2、分析与设计思路
其实我们假设的环境有两个特点:第一个是数据库文件比较大;第二个就是我们的传送文件的速度可能会比较慢。也许这传送速度我们是没有办法了,但是我们可以就从文件的大小这个问题出发,结合SQL Server的特性,这样就有了下面的解决方案了。
为了使宕机时间最短,我们这里使用了完整备份和差异备份来迁移数据库,在白天的时候对需要迁移的数据库进行一次完整备份(XXX_full.bak),并把备份文件拷贝(这里可以使用FTP软件进行断点续传)到目标服务器进行还原,33 / 38 等到下班时间之后再进行一次差异备份(XXX_diff.bak),再把这个差异备份拷贝到目标服务器,在完整还原的基础上再进行差异还原。
这里的宕机时间 = 差异备份时间 + 传送差异备份文件时间 + 还原差异备份文件时间,这宕机时间是不是让你感觉这时间很短呢? 5.3、参考脚本
注意修改下面脚本中数据库的名称,还有绝对路径。
--1:完整备份
declare @dbname varchar(100)declare @sql nvarchar(max)set @dbname = 'DataBaseName' set @sql = '--'+@dbname+'_full
BACKUP DATABASE ['+@dbname+']
TO DISK = ''D:DBBackup'+@dbname+'_full.bak'' WITH NOFORMAT, NOINIT, NAME = '''+@dbname+'-完整数据库备份'',SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO' print @sql
--生成的SQL 34 / 38--DataBaseName_full
BACKUP DATABASE [DataBaseName]
TO
DISK = 'D:DBBackupDataBaseName_full.bak'
WITH NOFORMAT, NOINIT, NAME = 'DataBaseName-完整数据库备份',SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO
--2:完整备份还原
declare @dbname varchar(100)declare @sql nvarchar(max)set @dbname = 'DataBaseName' set @sql = '--RESTORE '+@dbname+'_full RESTORE DATABASE ['+@dbname+']
FROM DISK = ''D:DBBackup'+@dbname+'_full.bak'' WITH FILE = 1,MOVE N''DataBase_Name'' TO N''D:DataBase'+@dbname+'.mdf'',MOVE N''DataBase_Name_log'' TO N''D:DataBase'+@dbname+'_log.ldf'',NORECOVERY, NOUNLOAD, REPLACE, STATS = 10 35 / 38 GO' print @sql
--生成的SQL--RESTORE DataBaseName_full
RESTORE DATABASE [DataBaseName]
FROM
DISK = 'D:DBBackupDataBaseName_full.bak'
WITH
FILE = 1,MOVE N'DataBase_Name' TO N'D:DataBaseDataBaseName.mdf',MOVE N'DataBase_Name_log' TO N'D:DataBaseDataBaseName_log.ldf',NORECOVERY, NOUNLOAD, REPLACE, STATS = 10 GO
--3:差异备份
declare @dbname varchar(100)declare @sql nvarchar(max)set @dbname = 'DataBaseName' set @sql = '--'+@dbname+'_diff BACKUP DATABASE ['+@dbname+']
/ 38 TO DISK = N''D:DBBackup'+@dbname+'_diff.bak'' WITH DIFFERENTIAL , NOFORMAT, NOINIT, NAME = N'''+@dbname+'-差异数据库备份'',SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO '
print @sql
--生成的SQL--DataBaseName_diff
BACKUP DATABASE [DataBaseName]
TO
DISK = N'D:DBBackupDataBaseName_diff.bak'
WITH
DIFFERENTIAL , NOFORMAT, NOINIT, NAME = N'DataBaseName-差异数据库备份',SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO
--4:差异备份还原
declare @dbname varchar(100)declare @sql nvarchar(max)set @dbname = 'DataBaseName'
/ 38 set @sql = '--RESTORE '+@dbname+'_full RESTORE DATABASE ['+@dbname+']
FROM DISK = ''D:DBBackup'+@dbname+'_diff.bak'' WITH FILE = 1,NOUNLOAD, STATS = 10 GO' print @sql
--生成的SQL--RESTORE DataBaseName_full
RESTORE DATABASE [DataBaseName]
FROM
DISK = 'D:DBBackupDataBaseName_diff.bak'
WITH
FILE = 1,NOUNLOAD, STATS = 10 GO
/ 38
第二篇:数据库备份方案
1、完全备份(Full Backup)
备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件。在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份。换言之,清除存档属性。
完全备份就是指对某一个时间点上的所有数据或应用进行的一个完全拷贝。实际应用中就是用一盘磁带对整个系统进行完全备份,包括其中的系统和所有数据。这种备份方式最大的好处就是只要用一盘磁带,就可以恢复丢失的数据。因此大大加快了系统或数据的恢复时间。然而它的不足之处在于,各个全备份磁带中的备份数据存在大量的重复信息;另外,由于每次需要备份的数据量相当大,因此备份所需时间较长。
2、差异备份(Differential Backup)
备份自上一次完全备份之后有变化的数据。差异备份过程中,只备份有标记的那些选中的文件和文件夹。它不清除标记,也即备份后不标记为已备份文件。换言之,不清除存档属性。
差异备份是指在一次全备份后到进行差异备份的这段时间内,对那些增加或者修改文件的备份。在进行恢复时,我们只需对第一次全备份和最后一次差异备份进行恢复。差异备份在避免了另外两种备份策略缺陷的同时,又具备了它们各自的优点。首先,它具有了增量备份需要时间短、节省磁盘空间的优势;其次,它又具有了全备份恢复所需磁带少、恢复时间短的特点。系统管理员只需要两盘磁带,即全备份磁带与灾难发生前一天的差异备份磁带,就可以将系统恢复。
3、增量备份(Incremental Backup)
备份自上一次备份(包含完全备份、差异备份、增量备份)之后有变化的数据。增量备份过程中,只备份有标记的选中的文件和文件夹,它清除标记,既:备份后标记文件,换言之,清除存档属性。
增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加和者被修改的文件。这就意味着,第一次增量备份的对象是进行全备后所产生的增加和修改的文件;第二次增量备份的对象是进行第一次增量备份后所产生的增加和修改的文件,如此类推。这种备份方式最显著的优点就是:没有重复的备份数据,因此备份的数据量不大,备份所需的时间很短。但增量备份的数据恢复是比较麻烦的。您必须具有上一次全备份和所有增量备份磁带(一旦丢失或损坏其中的一盘磁带,就会造成恢复的失败),并且它们必须沿着从全备份到依次增量备份的时间顺序逐个反推恢复,因此这就极大地延长了恢复时间。
第三篇:Sybase数据库备份方案
Sybase数据库备份方案
Sybase数据备份方案,Sybase数据库产品自从1987年问世以来,它的客户机/服务器(client/server)工作模式、分布处理的基础体系结构、完善的安全保密性能、高速快捷的运行方式、多平台跨操作系统的广泛应用等优点,迅速被IT界接受并推广应用。
我们作为金融业的用户,也在1995年开始使用Sybase10版本。在具体的使用中,发现集中式的数据管理有其优点,就是数据风险范围大为缩小,但是作为Sybase的服务器一端,数据风险比较集中,如何做好数据库的数据备份,成为至关重要的问题。
在实际应用中,我们总结出了两种全量备份方案:
一、Sybase数据备份方案之使用Sybase的BackupServer(备份服务器),做Dump备份
转储数据库(Dumpdatabase),就是为整个数据库(包括数据、表结构、触发器、游标、存储过程、事务日志等)做一次物理备份。转储数据库时,系统自动执行一次checkpoint,即将日志和数据从缓冲区拷贝到硬盘(只拷贝脏页),把已被分配的页(日志和数据)转储到设备。命令格式为:
dumpdatabase数据库名to设备文件名with参数
如果备份到硬盘的文件上,可以不预先估算备份文件的大小,只要硬盘有足够的存储空间就可以。如果是备份到dds磁带上,那么就要估算一下备份后的大小,90米的dds磁带压缩存储空间为4G,120米的磁带压缩存储空间为8G,如果数据库的备份文件超过了这个尺寸,就要考虑多文件转储,使用stripe参数。命令格式为:
dumpdatabase数据库名to设备文件名1 stripeon设备文件名2 stripeon设备文件名3…… with参数 这种数据备份方式是将整个数据库的运行环境完整的复制一份,包括数据库的脏页和碎片,在使用load命令恢复时,只能恢复到同样大小的数据库中(数据和日志的大小都只能和原来完全一致),适用于在每天的日终营业网点下班后的日常备份。优点是数据库完整无误,缺点是不能直接查看备份内容。
二、Sybase数据备份方案之分数据结构和数据记录做两次备份
在一般情况下,生产机的数据库都比较庞大,而实验机则相对较小,难以在实验环境中以load命令恢复工作机的内容。所以,在工作实践中,我们摸索出了第二种全量备份方案。
1、数据结构备份
在windows平台的SybaseSQLServerManager(数据库管理)平台中选择ServeràGenerateddl则产生整个数据库服务器的所有信息,如果选择databaseàgenerateddl则产生所选定数据库的信息,以master库为例,产生的文件主要包括:config.ddl(配置)、devices.ddl(设备)、database.ddl(数据库)、logins.ddl(用户)、remote.ddl(远程)、cache.ddl(缓冲)、segment.ddl()、group.ddl(用户组)、user.ddl(用户)、default.ddl(确省)、rule.ddl(规则)、udt.ddl、table.ddl(表)、view.ddl(视图)、proc.ddl(存储过程)、triger.ddl(触发器)。
2、数据记录备份
将数据库各表以Sybase自代的bcp(bulkcopy)工具的方式导成一定格式的文本文件,命令格式:
bcp表名out路径名文件名-c-t分隔符-u(用户名)-p(密码)-S(服务器名)如果将一个数据库中的所有表都做一个bcp备份,就需要针对每一个表都做一次bcp,在一般情况下,一个数据库有100多个表,工作量比较大。可以利用数据库中的系统表信息做一个bcp备份脚本。原理是每一个用户表在系统表中都有信息记载,可以通过isql语句查询得到。现举一例说明: 1)、先编辑一个名为mkbcpout.sql的文件,内容如下: select“echobcp'”+name+“out……………………'
”+“bcp”+name+“out./+”name+“.table-c-t'|'-Uuser-Ppassword-SSERVER”fromsysobjectswheretype='U' go 2)、执行isql命令,以此文件作为输入,执行结果输出到另外一个文件里: isql-Uuser-Ppassword-Sserver-Imkbcpout.sql-Obcpout 3)、对bcppout文件稍微修改,增加可执行权限 chmod+xbcpout 4)、执行bcpout,导出数据文本./bcpout
3、数据库恢复
业务生产机可能为小型机,而实验开发环境的硬件环境为PCserver,安装好winnt或SCOunix下的Sybase服务器后,根据需要创建空间足够大的数据库和tempdb(系统临时数据库),创建数据库用户,并将其更改为此数据库的所有者,要注意两点:1)此数据库允许bcp拷贝,2)此数据库自动清除log。命令格式为:
1>sp_dboptiondatabasedbname,“selectinto/bulkcopy”,true 2>go 1>sp_dboptiondatabasename,“trunclogonchkpt”,true 2>go 上述两个配置可能与生产机的配置不同。
然后以新创建的数据库用户登录,导入数据结构,注意要首先导入表结构,然后才是存储过程、触发器等等。命令格式:
1、isql-Uusername-Ppassword-Itable.ddl-oerror.log.table
2、isql-Uusername-Ppassword-Iproc.ddl-oerror.log.proc ……
为了提高bcp导入数据的速度,需要将比较大的表的索引和主键删除,否则的话,每bcp进一条数据,数据库都自动写一条log日志,记载此数据的上一条和下一条记录,确定本记录在此表中的准确位置,一是影响bcp速度,二是数据库的log飞速膨胀。数据库的自动清除log功能只有在一个事务结束后才起作用。准备工作做完后,开始倒入数据记录。使用类似做bcpout的方法做一个bcpin的脚本,然后执行:./bcpin|teeerror.bcpin 使用tee管道输出的目的是让计算机完整记录下倒入过程,自动存入error.bcpin文件中,待倒入结束后,我们只需要检查日志文件,不需要一直紧盯着计算机屏幕。所有工作做完之后,不要忘记重新将删除的主键和索引建上。
如果有现成的数据库,只需要单纯地导入数据记录,则首先将数据库中所有用户表(也就是所有type=“U”的表)清空,命令格式: 1>truncatetabletablename 2>go 当然最好也是利用做bcpout脚本的做一个truncate脚本,通过执行此脚本将所有用户表清空。然后的数据导入、处理索引和主键的过程与上面类似。
三、Sybase数据备份方案之利用做bcp备份脚本的方法做数据库碎片整理 Sybase数据库作为联机事务处理应用服务器,每天应用程序都对数据库做大量的插入、修改和删除等操作,不可避免的在数据库的物理存储介质上留下页碎片和扩展单元碎片,从而影响数据库的存储效率和运行速度。具体表现为:业务繁忙时出现死锁(deadlock),数据库的输入/输出资源被大量占用,业务处理速度慢。其解决办法是:
1、清空数据库中的所有表,命令格式:
isql-Uusername-Ppassword-Itruncate.sql-oerror.truncate
2、删除所有表的索引和主键
isql-Uusername-Ppassword-Idropindex.sql-oerror.dropindex
3、导入数据./bcpin
4、添加索引和主键
isql-Uusername-Ppassword-Iaddindex.sql-oerror.addindex
5、更新数据库状态
1>updatestatisticstablename 2>go 上述操作都是针对数据库中的所有用户表进行的,利用做bcp备份脚本的方法做出相应的脚本,使繁琐的数据库维护变得简便易行,还克服了直接使用isql语句操作风险大、没有操作日志的毛病。以上就是对Sybase数据备份方案的简单介绍。
第四篇:oracle数据库自动备份方案
1.目的
编写本文档的目的为实现ORACLE数据库的自动备份,为不动产数据增加一份数据安全按保障。
2.软件环境
数据库服务器:oracle 11g atabase x64 v11.2.0.4.0 客户端:Oracle client x64 v11.2.0.4.0 注意:数据库服务器和客户端版本必须保持一致,否则会出现无法预知的错误。
3.实施方案
3.1.编写数据库自动备份脚本
脚本内容如下,将文件存储为oraclebackup.bat:
@echo off echo 删除10天前的备分文件和日志
forfiles /p “D:oraclebackup” /m *.dmp /d-10 /c “cmd /c del @path” forfiles /p “D:oraclebackup” /m *.log /d-10 /c “cmd /c del @path” echo 正在备份 oracle 数据库,请稍等……
exp BDCDJ_CP/BDCDJ_CP@10.6.161.70/orcl file=D:/oraclebackup/BDCDJ_CP%date:~0,4%%date:~5,2%%date:~8,2%.dmp log=D:/oraclebackup/BDCDJ_CP%date:~0,4%%date:~5,2%%date:~8,2%.log echo 任务完成!注意:
1)修改数据库连接用户名、密码、数据库地址和实例名
2)修改备份文件存储地址,以上脚本存储位置为D:oraclebackup 3.2.新建任务计划
1)打开任务计划程序
2)打开创建基本任务,输入任务名称、选择任务执行时间和执行的脚本,完成任务计划创建。
第五篇:数据库备份和恢复方案及步骤(最终版)
操作系统:GNU/Linux 数据库管理系统:Oracle10g
一、安装Recovery Catalog 1,用dbca创建一个DATABASE catdb,用于存放recovery catalog data [oracle@localhost ~]$dbca 2,在catdb中创建一个名为rcat_ts的表空间作为用户rman的默认表空间
[oracle@localhost ~]$sqlplus sys/oracle@catdb as sysdba SQL> create tablespace rcat_ts;SQL> create user rman identified by oracle temporary tablespace temp Default tablespace rcat_ts quota unlimited on rcat_ts;3,授予catlog所有者rman recovery_catalog_owner角色,该角色提供给用户所有查询和维护recovery catalog所必需的权限
SQL> grant connect,resource,recovery_catalog_owner to rman;4,启动rman,以catalog所有者rman登录
[oracle@localhost ~]$rman catalog rman/oracle@catdb RMAN> create catalog tablespace rcat_ts;5,用rman同时连接到target数据库、catalog数据库,在新建的recovery catalog中注册target数据库
[oracle@localhost ~]$rman target sys/oracle@orcl catalog rman/oracle@catdb RMAN> register database;6,察看已在recovery catalog中注册的target数据库
[oracle@localhost ~]$sqlplus rman/oracle@catdb SQL>select * from db;
二、配置RMAN
1,同时连接target数据库和recovery catalog数据库
[oracle@localhost ~]$rman target sys/oracle@orcl catalog rman/oracle@catdb 2,RMAN> show all(检查配置)
configure default device type to disk(设置默认的备份的设备为磁盘)
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;(设置备份的并行级别)
configure channel 1 device type disk format '/home/new/backup_%U'(设置备份文件格式)
configure channel 2 device type disk format '/home/oracle/backup_%U'(设置备份文件格式)
configure controlfile autobackup on(打开控制文件的自动备份)
configure controlfile autobackup format for device type disk to '/home/new/ctl_%F'(设置控制文件备份格式)
三.备份测试
备份全库
1,同时连接target数据库和recovery catalog数据库
[oracle@localhost ~]$rman target sys/oracle@orcl catalog rman/oracle@catdb 2,RMAN> backup database plus archivelog delete input;3,连接target数据库
[oracle@localhost ~]$sqlplus sys/oracle@orcl as sysdba SQL> conn hr/hr;SQL> select salary from employees where employee_id=157;SQL> update employees set salary =2000 where employee_id=157;SQL> commit;SQL> select salary from employees where employee_id=157;
四.恢复测试
复原及恢复全库 1,连接target数据库
[oracle@localhost ~]$sqlplus sys/oracle@orcl as sysdba 2,把target数据库先关闭,然后启动到mount状态 SQL> shutdown immediate;SQL> startup mount;3,复原及恢复全库
RMAN> restore database
channel ORA_DISK_1: restore complete, elapsed time: 00:05:10 RMAN> recover database media recovery complete, elapsed time: 00:00:07
4,连接target数据库
[oracle@localhost ~]$sqlplus sys/oracle@orcl as sysdba 5,打开target数据库
SQL> alter database open;6,查看已录入的事物 SQL> conn hr/hr;SQL> select salary from employees where employee_id=157;
假设备份了一个表空间users
恢复表空间:
rman target rman/rman@test2006 catalog rman/rman@test2007
sql 'alter tablespace users offline immediate'(使TEST2006的USERS表空间脱机)
进入test2006
select tablespace_name,status from dba_tablespaces;(检查USERS已经脱机)
退出RMAN
删除D:oracleoradataTEST2006users01.dbf
rman target rman/rman@test2006 catalog rman/rman@test2007
restore tablespace users
recover tablespace users
sql 'alter tablespace users online'(使TEST2006的USERS表空间在线)
进入test2006
select tablespace_name,status from dba_tablespaces;(检查USERS已经在线)
三、物理(热)备份。
Linux 下Oracle10.2.0.1 RMAN备份及恢复步骤介绍
切换服务器归档模式,如果已经是归档模式可跳过此步:
%sqlplus /nolog(启动sqlplus)
SQL> conn / as sysdba(以DBA身份连接数据库)
SQL> shutdown immediate;(立即关闭数据库)
SQL> startup mount(启动实例并加载数据库,但不打开)
SQL> alter database archivelog;(更改数据库为归档模式)
SQL> alter database open;(打开数据库)
SQL> alter system archive log start;(启用自动归档)
SQL> exit(退出)
2、连接:
%rman target='gti/gti123@LANDF';(启动恢复管理器)
3、基本设置:
RMAN> configure default device type to disk;(设置默认的备份设备为磁盘)
RMAN> configure device type disk parallelism 2;(设置备份的并行级别,通道数)RMAN> RMAN>
RMAN> configure controlfile autobackup on;(打开控制文件与服务器参数文件的自动备份)
RMAN> configure controlfile autobackup format for device type disk to ' /home/oracle/backup/data/ctl_%F';(设置控制文件与服务器参数文件自动备份的文件格式)
4、查看所有设置:
RMAN> show all
5、查看数据库方案报表:
RMAN> report schema;CONFIGURE
CHANNEL
DEVICE
TYPE
DISK
FORMAT '/home/oracle/backup/data1/backup_%U';(设置备份的文件格式,只适用于磁盘设备)CONFIGURE
CHANNEL
DEVICE
TYPE
DISK
FORMAT '/home/oracle/backup/data/backup_%U';(设置备份的文件格式,只适用于磁盘设备)
6、备份全库:
RMAN> backup database plus archivelog delete input;(备份全库及控制文件、服务器参数文件与所有归档的重做日志,并删除旧的归档日志)
7、备份表空间:
热备份(归档状态下才有效果)
1、alter tablespace tablespace_name start backup;
2、拷贝你的该表空间的数据文件备份
3、alter tablespace tablespace_name end backup;
4、一个一个表空间做完,就备份完了
RMAN> backup tablespace system plus archivelog delete input;(备份指定表空间及归档的重做日志,并删除旧的归档日志)RMAN> backup tablespace UNDOTBS plus archivelog delete input;(备份指定表空间及归档的重做日志,并删除旧的归档日志)RMAN> backup tablespace SYSAUX plus archivelog delete input;(备份指定表空间及归档的重做日志,并删除旧的归档日志)RMAN> backup tablespace TEMP plus archivelog delete input;(备份指定表空间及归档的重做日志,并删除旧的归档日志)
8、备份归档日志:
RMAN> backup archivelog all delete input;
9、复制数据文件:
RMAN> copy datafile 1 to '/home/oracle/product/10.2.0.1/backup/system.copy';/* RMAN> RMAN> RMAN> */
10、查看备份和文件复本:
RMAN> list backup;
11、验证备份:
RMAN> validate backupset 3;copy copy copy
'/home/oracle/data/gti_sys01.dbf'
'/home/oracle/data/gti_undotbs.dbf' '/home/oracle/data/sysaux_01.dbf' 1
to to to '/home/oracle/product/10.2.0.1/backup/system.copy';'/home/oracle/product/10.2.0.1/backup/undo.copy';'/home/oracle/product/10.2.0.1/backup/sysaux.copy';
12、从自动备份中恢复服务器参数文件:
RMAN> shutdown immediate;(立即关闭数据库)
RMAN> startup nomount;(启动实例)
RMAN> restore spfile to pfile '/backup1/initgti.ora' from autobackup;(从自动备份中恢复服务器参数文件)
13、从自动备份中恢复控制文件:
RMAN> shutdown immediate;(立即关闭数据库)
RMAN> startup nomount;(启动实例)
RMAN> restore controlfile to '/backup1' from autobackup;(从自动备份中恢复控制文件)
13、恢复和复原全数据库:
RMAN> shutdown immediate;(立即关闭数据库)
RMAN> exit(退出)
%mv
%rman target='gti/gti123@LANDF';(启动恢复管理器)
RMAN> startup pfile=/home/oracle/product/10.2.0.1/dbs/initgti.ora(指定初始化参数文件启动数据库)
RMAN> restore database;(还原数据库)
RMAN> recover database;(恢复数据库)
RMAN> alter database open;(打开数据库)
14、恢复和复原表空间:
RMAN> sql 'alter tablespace users offline immediate';(将表空间脱机)
RMAN> exit(退出恢复管理器)
/home/oracle/product/10.2.0.1/dbs/snapcf_gti.f /home/oracle/product/10.2.0.1/dbs/snapcf_gti.f.bak(将数据文件重命名)%mv
%mv /home/oracle/data/gti_undotbs.dbf /home/oracle/data/gti_undotbs.dbf.bak(将表空间重命名)
%mv /home/oracle/data/sysaux_01.dbf /home/oracle/data/sysaux_01.dbf.bak(将表空间重命名)
%rman target='gti/gti123@LANDF';(启动恢复管理器)
RMAN> restore tablespace users;(还原表空间)
RMAN> recover tablespace users;(恢复表空间)
RMAN> sql 'alter tablespace users online';(将表空间联机)
15、增量备份与恢复:
第一天的增量基本备份:
RMAN> backup incremental level=0 database plus archivelog delete input;
第二天的增量差异备份:
RMAN> backup incremental level=2 database plus archivelog delete input;
第三天的增量差异备份:
RMAN> backup incremental level=2 database plus archivelog delete input;
第四天的增量差异备份:
RMAN> backup incremental level=1 database plus archivelog delete input;
第五天的增量差异备份:
RMAN> backup incremental level=2 database plus archivelog delete input;
第六天的增量差异备份:
RMAN> backup incremental level=2 database plus archivelog delete input;
/home/oracle/product/10.2.0.1/dbs/gti_sys01.dbf /home/oracle/data/gti_sys01.dbf.bak(将表空间重命名)第七天的增量差异备份:
RMAN> backup incremental level=0 database plus archivelog delete input;
增量恢复:
RMAN> shutdown immediate;
RMAN> exit
%mv
%rman target='gti/gti123@LANDF';(启动恢复管理器)
RMAN> startup pfile=/home/oracle/product/10.2.0.1/dbs/initgti.ora(指定初始化参数文件启动数据库)
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open./home/oracle/product/10.2.0.1/dbs/snapcf_gti.f /home/oracle/product/10.2.0.1/dbs/snapcf_gti.f.bak(将数据文件重命名)
RMAN>crosscheck backupset;RMAN>delete obsolete RMAN>crosscheck archivelog all;RMAN>delete archivelog all;