一、简单实用的备份方法:
企业管理器中的Tools,Database Maintenance Planner,可以设置数据库的定期自动备份计划。并通过启动Sql server Agent来自动运行备份计划。具体步骤如下:
1、打开企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器
2、然后点上面菜单中的工具-->选择数据库维护计划器
3、下一步选择要进行自动备份的数据-->下一步更新数据优化信息,这里一般不用做选择-->下一步检查数据完整性,也一般不选择
4、下一步指定数据库维护计划,默认的是1周备份一次,点击更改选择每天备份后点确定
5、下一步指定备份的磁盘目录,选择指定目录,如您可以在D盘新建一个目录如:d:\databak,然后在这里选择使用此目录,如果您的数据库比较多最好选择为每个数据库建立子目录,然后选择删除早于多少天前的备份,一般设定4-7天,这看您的具体备份要求,备份文件扩展名默认的是BAK
6、下一步指定事务日志备份计划,看您的需要做选择-->下一步要生成的报表,一般不做选择-->下一步维护计划历史记录,最好用默认的选项-->下一步完成
7、完成后系统很可能会提示Sql Server Agent服务未启动,先点确定完成计划设定,然后找到桌面最右边状态栏中的SQL绿色图标,双击点开,在服务中选择Sql Server Agent,然后点击运行箭头,选上下方的当启动OS时自动启动服务
8、可以设置启动启动sql server Agent:运行Services.msc,设置sqlserverAgent为自动启动。
修改备份计划:
打开企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->管理-->数据库维护计划
二、异地备份
运行环境分析:
现有两台机器具体配置如下:
操作系统:两台都是Windows 2000 Advanced Server
数据库: Sql Server 2000
IP: 一台是192.168.0.1,另一台是192.168.0.100
要求:定期自动实现将192.168.0.1中数据库中bbsbak数据库备份到192.168.0.100的机器上,并删除15天以前对192.168.0.100中自动备份的bbsbak数据库。
注:本操作涉及到Ms Sql Server2000数据库数据转换服务中包的高级设置、数据库存储过程、作业的添加及简单Transact_SQL语句的操作等内容,在此不再详述,请参考相关资料及微软官方网站。
操作步骤:
1. 在本机(win2000)中打开SQL数据库――-数据转换服务――本地包(如图)
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0 onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0606/00001_Y7l2vTPXYJIN.jpg');}">
2. 右键――新建包,出现如图画面
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0 onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0606/00002_CLxGkSexphxp.jpg');}" resized="true">
A:首先建立Microsoft OLE DB Provider for SQL Server(如图)
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0 onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0606/00003_pKIEkQGWar4l.jpg');}" resized="true">
在此注意两点:
第一指定的服务器应是192.168.0.100;
第二192.168.0.100数据库的选择(在此我用master数据库)。
B:下面建立执行 SQL 任务: 未定义如图
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0 onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0606/00004_ohD3JHlS8hWw.jpg');}" resized="true">
a.命令超时项设置为:300;
b.SQL语句为:
select 'bbsbak'+convert(varchar(4), datepart(yyyy, getdate())) + convert(varchar(4), datepart(mm, getdate())) + convert(varchar(4), datepart(dd, getdate()))
注释:红色标记是实现备份后的数据库在bbsbak后加上年月日,如bbsbak20031023.
c.点击参数(A)对参数进行相关设置,出现如上图界面
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0 onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0606/00005_XmKg6kcX991t.jpg');}" resized="true">
选输出参数,如上图
输出参数类型为行值,点击创建全局变量,出现如图界面
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0 onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0606/00006_xTCkaClz5F5o.jpg');}" resized="true">
全局变量的名称为:bbsbak_crt,确定后返回参数映射界面
选择输出全局变量为: bbsbak_crt
OK,第一个SQL任务建立成功!
C:下面建立另外一个执行 SQL 任务: 未定义 如图
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0 onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0606/00007_OUOn5MK1f0My.jpg');}" resized="true">
其中SQL语句为:exec crtdatabase_bbsbak.
OK,继续!
D:建立复制 SQL Server 对象任务: 未定义,如图
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0 onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0606/00008_fUuVEKyMg7cD.jpg');}" resized="true">
注意:此时源服务器为:192.168.0.1,选择要备份的数据库(bbsbak)
下面转到目的服务中:参数如图设置
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0 onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0606/00009_xQKiPGIxhnHi.jpg');}" resized="true">
OK!继续
E:建立动态属性任务: 未定义,如图
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0 onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0606/000010_X5yM8Vr9TMzi.jpg');}" resized="true">
OK!
F:下面设置工作流状态如图
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0 onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0606/000011_RuUCj5uHVHKg.jpg');}" resized="true">
保存为bbsbak_DTS,如图
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0 onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0606/000012_liyvn4GnJwHz.jpg');}" resized="true">
下面调度包
调度前保证SQL agent server启动
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0 onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0606/000013_JzycmRVCbgEO.jpg');}" resized="true">
到此本机中(192.168.0.1)上的操作完成。
3. 打开192.168.0.100机器中的sql数据库――-Master数据库――存储过程,如图
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0 onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0606/000014_sajkx9uu8GO1.jpg');}" resized="true">
存储过程如下:
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0 onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0606/000015_3QFuNclMZMQl.jpg');}" resized="true">
文本语法为:
CREATE proc crtdatabase_bbsbak
as
declare @sql varchar(120)
declare @sql2 varchar(120)
declare @sql3 varchar(260)
declare @nalja varchar(12)
set @nalja=convert(varchar(4), datepart(yyyy, getdate())) + convert(varchar(4), datepart(mm, getdate())) + convert(varchar(4), datepart(dd, getdate()))
set @sql = 'create database bbsbak'+@nalja+' on ( name='+'''backup_mdf'+@nalja+''', filename= ''E:\ bbsbak\backup_mdf\bbsbak'+@nalja+'.mdf'')'
set @sql2=' Log on ( name='+'backup_ldf'+@nalja+' ,filename= ''E:\ bbsbak \backup_ldf\ bbsbak '+@nalja+'.ldf'')'
set @sql3=@sql+@sql2
--select @sql3
exec (@sql3)
GO
注意:E:\DB_backup\Full_backup\此路径中的DB_backup和Full_backup文件夹应当事先在本机E盘上建立好
同样再建立一个存储过程,语法为
CREATE proc deldatabase_bbsbak
as
declare @nalja varchar(12)
declare @sql varchar(120)
set @nalja=convert(varchar(4), datepart(yyyy, getdate()-15))+convert(varchar(4), datepart(mm,getdate()-15))
+convert(varchar(4), datepart(dd, getdate()-15))
set @sql='drop database nage'+@nalja
exec (@sql)
GO
最后再agent server 中建立一个作业调度存储过程,其中作业中的步骤命令为:exec deldatabase_bbsbak
注意调度时的日期应当推迟15天
OK了!!!
三、本地备份
若是在本机(192.168.0.1)中实现自动备份?
操作如下:sql agent中直接添加作业bbsbak_full_backup
如图
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0 onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0606/000016_WfVh20VMAbm3.jpg');}" resized="true">
其中:作业中的步骤命令为:
BACKUP DATABASE bbsbak TO DISK = 'F:\DB_backup\Full_backup\bbsbak.bak' WITH INIT, NOUNLOAD, NAME=N'bbsbak Full backup', SKIP, STATS = 10, NOFORMAT
注意:F:\DB_backup\Full_backup\此路径中的DB_backup和Full_backup文件夹应当事先在本机上建立好
日志文件的步骤同样添加作业:bbsbak_log_backup
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0 onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0606/000017_52WAGCHf5FUb.jpg');}" resized="true">
其中:作业中的步骤命令为:
BACKUP LOG [bbsbak] TO DISK = N'F:\DB_backup\Log_backup\bbsbak_log.bak' WITH INIT , NOUNLOAD , NAME = N'bbsbak log backup', NOSKIP , STATS = 10, NOFORMAT
注意:F:\DB_backup\Log_backup \此路径中的DB_backup和Log_backup文件夹应当事先在本机上建立好
好,到此所有的操作已完成,望各位继续讨论。
数据库自动备份简易贴(方法二)
==================
一 配置发布服务器
在发布服务器上执行以下步骤:
(1) 从[工具]下拉菜单的[复制]子菜单中选择[配置发布、订阅服务器和分发]出现配置发布和分发向导
(2) [下一步] 选择分发服务器 可以选择把发布服务器自己作为分发服务器或者其他sql的服务器
(3) [下一步] 设置快照文件夹
一般采用默认\\servername\d$\Program Files\Microsoft SQL Server\MSSQL\ReplData
**(4) [下一步] 自定义配置
可以选择:
是,让我设置分发数据库属性启用发布服务器或设置发布设置
否,使用下列默认设置
建议采用自定义设置
(5) [下一步] 设置分发数据库名称和位置 采用默认值
(6) [下一步] 启用发布服务器 选择作为发布的服务器
(7) [下一步] 选择需要发布的数据库和发布类型
(8) [下一步] 选择注册订阅服务器
(9) [下一步] 完成配置
二 创建出版物
发布服务器上
(1)从[工具]菜单的[复制]子菜单中选择[创建和管理发布]命令
(2)选择要创建出版物的数据库,然后单击[创建发布]
(3)在[创建发布向导]的提示对话框中单击[下一步]系统就会弹出一个对话框。
对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助)
(4)单击[下一步]系统要求指定可以订阅该发布的数据库服务器类型,
SQLSERVER允许在不同的数据库如 ORACLE或ACCESS之间进行数据复制。
但是在这里我们选择运行"SQL SERVER 2000"的数据库服务器
(5)单击[下一步]系统就弹出一个定义文章的对话框也就是选择要出版的表
注意: 如果前面选择了事务发布 则再这一步中只能选择带有主键的表
(6)选择发布名称和描述
**(7)自定义发布属性
向导提供的选择:
是 我将自定义数据筛选,启用匿名订阅和或其他自定义属性
否 根据指定方式创建发布
建议采用自定义的方式
(8)[下一步] 选择筛选发布的方式
(9)[下一步] 可以选择是否允许匿名订阅
1)如果选择署名订阅,则需要在发布服务器上添加订阅服务器
方法: [工具]->[复制]->[配置发布、订阅服务器和分发的属性]->[订阅服务器] 中添加
否则在订阅服务器上请求订阅时会出现的提示:改发布不允许匿名订阅
如果仍然需要匿名订阅则用以下解决办法
[企业管理器]->[复制]->[发布内容]->[属性]->[订阅选项] 选择允许匿名请求订阅
2)如果选择匿名订阅,则配置订阅服务器时不会出现以上提示
(10)[下一步] 设置快照 代理程序调度
(11)[下一步] 完成配置
当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库。
三 订阅服务器的配置
(一) 强制订阅的配置
在发布服务器上
[企业管理器]->[复制]->[发布内容]->[属性]->[订阅]->[强制新建]
然后出现强制订阅向导
选择订阅服务器->订阅数据库名->设置分发代理程序调度->初始化订阅->启动要求的服务
(发布服务器的agent要启动)->完成即可
(二) 请求订阅的配置
订阅服务器上执行以下操作
(1) 从[工具]下拉菜单中选择[复制]子菜单的[请求订阅]
(2) 选择[请求新订阅] 打开请求订阅向导
(3) [下一步]选择已注册的发布
(4) [下一步]选择创建订阅的数据库
(5) [下一步]选择匿名订阅或署名订阅
(6) [下一步] 初始化订阅 选择初始化架构和数据
(7) [下一步]选择快照文件的存放位置 一般采用发布服务器的默认快照文件夹
**(8) [下一步]设置分发代理程序调度 可以选择订阅更新内容的间隔
(9) [下一步]系统会提示检查发布服务器的代理服务的运行状态
(10) [下一步] 完成配置
一笑 发表于2004-07-22 3:16 AM
理论备注:
===============
利用数据库复制技术 实现数据同步更新
复制的概念
复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式。使用复制技术,用户可以将一份
数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。复制技术可以确保分布在不同地点的数据自
动同步更新,从而保证数据的一致性。
SQL复制的基本元素包括
出版服务器、订阅服务器、分发服务器、出版物、文章
SQL复制的工作原理
SQL SERVER 主要采用出版物、订阅的方式来处理复制。源数据所在的服务器是出版服务器,负责发表数据。出版服务器把要发表的数据的所有
改变情况的拷贝复制到分发服务器,分发服务器包含有一个分发数据库,可接收数据的所有改变,并保存这些改变,再把这些改变分发给订阅
服务器
SQL SERVER复制技术类型
SQL SERVER提供了三种复制技术,分别是:
1、快照复制(呆会我们就使用这个)
2、事务复制
3、合并复制
只要把上面这些概念弄清楚了那么对复制也就有了一定的理解。接下来我们就一步一步来实现复制的步骤。
第一先来配置出版服务器
(1)选中指定[服务器]节点
(2)从[工具]下拉菜单的[复制]子菜单中选择[发布、订阅服务器和分发]命令
(3)系统弹出一个对话框点[下一步]然后看着提示一直操作到完成。
(4)当完成了出版服务器的设置以后系统会为该服务器的树形结构中添加一个复制监视器。同时也生成一个分发数据库(distribution)
第二创建出版物
(1)选中指定的服务器
(2)从[工具]菜单的[复制]子菜单中选择[创建和管理发布]命令。此时系统会弹出一个对话框
(3)选择要创建出版物的数据库,然后单击[创建发布]
(4)在[创建发布向导]的提示对话框中单击[下一步]系统就会弹出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默
认的快照发布(其他两个大家可以去看看帮助)
(5)单击[下一步]系统要求指定可以订阅该发布的数据库服务器类型,SQLSERVER允许在不同的数据库如 ORACLE或ACCESS之间进行数据复制。但
是在这里我们选择运行"SQL SERVER 2000"的数据库服务器
(6)单击[下一步]系统就弹出一个定义文章的对话框也就是选择要出版的表
(7)然后[下一步]直到操作完成。当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库。
第三设计订阅
(1)选中指定的订阅服务器
(2)从[工具]下拉菜单中选择[复制]子菜单的[请求订阅]
(3)按照单击[下一步]操作直到系统会提示检查SQL SERVER代理服务的运行状态,执行复制操作的前提条件是SQL SERVER代理服务必须已经启动
。
(4)单击[完成]。完成订阅操作。
完成上面的步骤其实复制也就是成功了。但是如何来知道复制是否成功了呢?这里可以通过这种方法来快速看是否成功。展开出版服务器下面
的复制——发布内容——右键发布内容——属性——击活——状态然后点立即运行代理程序接着点代理程序属性击活调度把调度设置为每一天
发生,每一分钟,在0:00:00和23:59:59之间。接下来就是判断复制是否成功了打开d:\Program Files\Microsoft SQL
Server\MSSQL\REPLDATA\unc\XIAOWANGZI_database_database下面看是不是有一些以时间做为文件名的文件夹差不多一分中就产生一个。 |