如何进行数据库的即时备份

ThinkX 2005-03-17 05:28:36
局域网内的两台机器上有两个数据库A,B,其中B为A的备份。
如何对A操作时(Insert, update, delete)时,自动修改B,是B和A进行同步的备份。
如果sqlserver本身有这样的功能(据说oracle有),那么如何开启;如果sqlserver本身没有这种功能,那么用什么办法可以实现这种效果。
要求是:
1.因为目前的应用都搭在A上,所以尽量少修改或者不修改应用就可以实现。
2.如果备份机B瘫痪,那么不影响A的正常应用。

各位想想办法,谢谢。
...全文
209 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
631799 2005-03-18
  • 打赏
  • 举报
回复
2.如果备份机B瘫痪,那么不影响A的正常应用。

______________________________
SQL群集不能实现此功能。
zjcxc 元老 2005-03-18
  • 打赏
  • 举报
回复
用日志传送就可以了
jinjazz 2005-03-17
  • 打赏
  • 举报
回复

--即时同步两个表的实例:

--测试环境:SQL2000,远程主机名:xz,用户名:sa,密码:无,数据库名:test

--创建测试表,不能用标识列做主键,因为不能进行正常更新
--在本机上创建测试表,远程主机上也要做同样的建表操作,只是不写触发器
if exists (select * from dbo.sysobjects where id = object_id(N'[test]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [test]

create table test(id int not null constraint PK_test primary key
,name varchar(10))
go

--创建同步的触发器
create trigger t_test on test
for insert,update,delete
as
set XACT_ABORT on
--启动远程服务器的MSDTC服务
exec master..xp_cmdshell 'isql /S"xz" /U"sa" /P"" /q"exec master..xp_cmdshell ''net start msdtc'',no_output"',no_output

--启动本机的MSDTC服务
exec master..xp_cmdshell 'net start msdtc',no_output

--进行分布事务处理,如果表用标识列做主键,用下面的方法
BEGIN DISTRIBUTED TRANSACTION
delete from openrowset('sqloledb','xz';'sa';'',test.dbo.test)
where id in(select id from deleted)
insert into openrowset('sqloledb','xz';'sa';'',test.dbo.test)
select * from inserted
commit tran
go

--插入数据测试
insert into test
select 1,'aa'
union all select 2,'bb'
union all select 3,'c'
union all select 4,'dd'
union all select 5,'ab'
union all select 6,'bc'
union all select 7,'ddd'

--删除数据测试
delete from test where id in(1,4,6)

--更新数据测试
update test set name=name+'_123' where id in(3,5)

--显示测试的结果
select * from test a full join
openrowset('sqloledb','xz';'sa';'',test.dbo.test) b on a.id=b.id

xluzhong 2005-03-17
  • 打赏
  • 举报
回复
具体的配置和常见问题参考:

SQL Server 2000之日志传送功能 DigJim(原作)

http://blog.csdn.net/digjim/category/12527.aspx
xluzhong 2005-03-17
  • 打赏
  • 举报
回复
主/备服务器最好用sql的日志传送功能来实现

在 Microsoft® SQL Server™ 2000 企业版中,可以使用日志传送不间断地将事务日志从一个数据库提供给另一个。不间断地从源数据库中备份事务日志,然后将它们复制并还原到目的数据库,使目的数据库与源数据库保持同步。这使您得以有一台备用服务器,为将查询处理从主计算机(源服务器)卸载到只读目的服务器上提供了一条途径。日志传送使用的所有服务器上都必须安装 SQL Server 2000 企业版。

如何配置日志传送(企业管理器)
新增信息 - SQL Server 2000 SP3。

使用数据库维护计划向导配置日志传送



说明 在配置日志传送之前,必须在主数据库上创建一个共享以使事务日志可用。这是从事务日志转储目录创建的共享。例如,如果将日志转储到目录 e:\data\tlogs\,则可以从该目录创建 \\logshipping\tlogs 共享。

在"选择数据库"屏幕上,选择"如下数据库"复选框,然后选择要进行日志传送的数据库。
如果选择了多个数据库,则不会执行日志传送,日志传送选项也不可用。不允许选择已配置了日志传送的数据库。

选择"将事务日志传送到其它的 SQL Server(日志传送)"复选框。


继续执行向导,指定其余的数据库维护选项,直到到达"指定日志传送目的"屏幕。


单击"添加"按钮添加目的数据库。
要使该选项可用,必须已经在向导的前面步骤中选择了使用日志传送。

在"添加目的数据库"屏幕中,选择一个服务器名。
该服务器必须已经注册,而且正在运行 Microsoft® SQL Server™ 2000 企业版,这样才能显示在下拉列表中。如果要使该目的成为可用的源数据库,必须选择“允许数据库采用主角色”复选框。如果该复选框未被选中,则该目的数据库将来就无法采用源数据库角色。如果已选定“允许数据库采用主角色”复选框,还必须在日志将要备份到的目的数据库中指定"事务日志备份目录"。

若要从默认位置更改事务日志目的数据库,请在"目录"框中输入一个位置。


如果源数据库不在目的数据库上,则选择"创建新数据库"复选框。
"数据库名称"框将默认为源数据库名。如果想要在目的服务器上用另一个数据库名,则指定一个新名称。如果已经选择了允许该目的数据库承担源角色,就无法从默认值改变该数据库的名称。

如果已经选择了"创建新数据库"复选框,则还必须在"用于数据"和"用于日志"框中指定目的数据库上数据和日志的文件目录。


如果源数据库已经存在于目的数据库上,则选择"使用现有数据库"复选框。如果目的服务器上的数据库名不同,则在"数据库名称"框中输入该名。该数据库必须是使用 WITH STANDBY 选项还原过的,以便正确接受日志。


在"初始化目的数据库"屏幕上,执行下列操作之一:
单击"立即提取完全数据库备份"。
–或-

单击"使用最新备份文件"以初始化目的数据库。
在"日志传送调度"屏幕上,查看默认的日志传送调度。如果要改变调度,请单击"更改"。


在"复制/装载的频率"框中,设置希望目的服务器从源服务器备份和还原事务日志的频率(以分钟计)。


在"装载延迟"框中,设置希望目的数据库从源服务器还原事务日志之前要等待的延迟(以分钟计)。
该框的默认值为 0 分钟,表示目的数据库应立即还原所有事务日志备份。

在"文件保持期"框中指定事务日志在删除之前应该存留的时间长度。


从"日志传送阈值"对话框中,设置"备份警报阈值"。
这是距离源服务器上一次事务日志备份时间的最长期限。一旦时间超过此指定阈值,监视服务器将生成警报。

在"不同步警报阈值"框中,指定源服务器上最近一次事务日志备份与目的服务器最近一次事务日志还原之间的时间。
一旦时间超过此指定阈值,监视服务器将生成警报。

在"指定日志传送监视器信息"屏幕中,键入将监视日志传送的服务器名称。


单击"使用 Windows 身份验证"或"使用 SQL Server 身份验证"连接到监视服务器。log_shipping_monitor_probe 登录名是固定的,必须使用它连接到监视服务器。如果这是一个新帐户,则选择一个新密码。如果该帐户已经存在于监视服务器上,则必须指定现有的密码。


安全说明 如果可能,请使用 Windows 身份验证。



说明 使用数据库维护向导设置日志传送,只可以向磁盘传送日志,而不能使用"备份到磁带"选项。

34,595

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧