差异备份的问题?看帮助没看明白

lifeforu 2004-08-11 05:30:19
首先是安全备份
restore database TestDB1 from disk='D:\DataBaseFile\BackUpDataFile\TestDBEntirety_1'
with norecovery
(此处若不加该参数则在会在还原差异备份时出现服务器:
消息 4306,级别 16,状态1,行 1 先前的还原操作未指定 WITH NORECOVERY 或 WITH STANDBY。请在除最后步骤之外的所有其它步骤中指定 WITH NORECOVERY 或 WITH STANDBY 后,重新启动该还原序列。)
, move 'TestDB_Data' to 'D:\DataBaseFile\BackUpDataFile\TestDB_Data.mdf', move 'TestDB_Log' to 'D:\DataBaseFile\BackUpDataFile

如果加了norecovery参数则还原出来的数据处于“正在加载”状态,无法对数据库进行操作
差异备份语句
restore database TestDB1 from disk='D:\DataBaseFile\BackUpDataFile\TestDBEntirety_2'


是不是写法有什么问题?
...全文
261 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
netcoder 2004-08-12
  • 打赏
  • 举报
回复
数据库同步的时候两台服务器的用户都要读取数据的。
-------------------------------------------------
看样子楼主本来就不应该选择 备份-》还原 的方式来同步数据库
可以采用的方法还有:
1、复制
2、DTS
3、编程实现
4、触发器
5、几种方式的综合
lifeforu 2004-08-12
  • 打赏
  • 举报
回复
zjcxc 元老 2004-08-12
  • 打赏
  • 举报
回复
那就没有什么好办法.
zjcxc 元老 2004-08-12
  • 打赏
  • 举报
回复
那就没有什么办法.
lifeforu 2004-08-12
  • 打赏
  • 举报
回复
日志传送
在 Microsoft® SQL Server™ 2000 企业版中,可以使用日志传送不间断地将事务日志从一个数据库提供给另一个。不间断地从源数据库中备份事务日志,然后将它们复制并还原到目的数据库,使目的数据库与源数据库保持同步。这使您得以有一台备用服务器,为将查询处理从主计算机(源服务器)卸载到只读目的服务器上提供了一条途径。

当初也想到这点了,但是这个功能在企业版及开发版中才有,现在情况是不可能让用户去更换版本的。
zjcxc 元老 2004-08-12
  • 打赏
  • 举报
回复
那是你用错了方法,看:

SQL Server 2000之日志传送功能
http://blog.csdn.net/DigJim
lifeforu 2004-08-12
  • 打赏
  • 举报
回复
这样不行啊,我做的是数据同步,每隔一段时间就可能会差异备份一次的,并且这期间用户还得访问数据!
zjcxc 元老 2004-08-12
  • 打赏
  • 举报
回复
--如果你喜欢做两次还原,则第一次差异备份还原用:

--差异备份语句(第一次)
restore database TestDB1
from disk='D:\DataBaseFile\BackUpDataFile\TestDBEntirety_2'
with norecovery --这里就要加这个了,否则就会出现数据库正在加载

--第二次用
restore database TestDB1 from disk='D:\DataBaseFile\BackUpDataFile\TestDBEntirety_3' WITH RECOVERY
zjcxc 元老 2004-08-12
  • 打赏
  • 举报
回复


差异备份,第二次差异包含了自完全备份以来的所有数据变化,既包含了第一次差异备份的内容

所以你根本不需要做还原第一次差异备份的操作,直接还原第二次差异备份的就行了.
lifeforu 2004-08-12
  • 打赏
  • 举报
回复
按你的做法第一次差异备份的时候可以正常执行并数据库状态正常,
但是再做第二次差异备份的时候又出现同样的问题:
restore database TestDB1 from disk='D:\DataBaseFile\BackUpDataFile\TestDBEntirety_3' WITH RECOVERY
------------------------------------------------------------------
服务器: 消息 4306,级别 16,状态 1,行 1
先前的还原操作未指定 WITH NORECOVERY 或 WITH STANDBY。请在除最后步骤之外的所有其它步骤中指定 WITH NORECOVERY 或 WITH STANDBY 后,重新启动该还原序列。
服务器: 消息 3013,级别 16,状态 1,行 1
RESTORE DATABASE 操作异常终止。

这是什么原因?
lifeforu 2004-08-12
  • 打赏
  • 举报
回复
数据库同步的时候两台服务器的用户都要读取数据的。
zjcxc 元老 2004-08-12
  • 打赏
  • 举报
回复
你管它干什么? 执行完后面的差异备份还原就正常了嘛

--差异备份语句
restore database TestDB1
from disk='D:\DataBaseFile\BackUpDataFile\TestDBEntirety_2'
with recovery --这里就要加这个了,否则就会出现数据库正在加载
lifeforu 2004-08-12
  • 打赏
  • 举报
回复
--首先是安全备份(这步没有错)

restore database TestDB1
from disk='D:\DataBaseFile\BackUpDataFile\TestDBEntirety_1'
with norecovery
,move 'TestDB_Data' to 'D:\DataBaseFile\BackUpDataFile\TestDB_Data.mdf'
,move 'TestDB_Log' to 'D:\DataBaseFile\BackUpDataFile'
to zjcxc(邹建) :关键是这步执行后数据库状态处于(正在装载)状态。
lifeforu 2004-08-12
  • 打赏
  • 举报
回复
还想到一个办法就是分析日志,黑黑,只知道有软件可以分析,自己不知道怎么做,谁知道?
lifeforu 2004-08-12
  • 打赏
  • 举报
回复
to netcoder(朱二) :
现在实际情况是两台服务器相当于没有物理联接,唯一的办法是编程实现,关键就是没有什么好的解决方案,触发器风险太大,况且业务系统数据库有好几个,表有N多,简直无法实现。
我现在的方案是用trace记录所有操作成功的SQL语句,生成文件传过去解析了再execute,这样做同样风险很大:
1、SQL2000不支持SQL语句开始跟踪到表,这样的话就需要用户手工操作控制跟踪的开始;
2、如果设定跟踪到文件,结果文件大小达到设定值就会自动在原文件名后面加'(n)'标识作为新文件名保存结果,这样风险也大:必须记录上次读取的文件名及ID,这样如果文件名发生变化或是生成的结果文件过多就会造成数据同步差异;
3、接收方首先按文件排序可能产生差错,其次在执行SQL语句过程中如果有语句执行失败就会出问题,需要用户手工干预;
4、如果我仅仅选择跟踪执行成功的SQL语句,那么如果在企业管理器表格里更改数据的话跟踪出来的SQL语句无法执行(大家可以试试);
5、还担心其它的安全稳定问题,比如trace够不够稳定,是否有可能会发生操作频繁的时候出现误记录或不记录...
6、还有开启trace是否对服务器效率有什么影响,trace本身能否长时间稳定运行等
还请各位高手指点、点评
zjcxc 元老 2004-08-11
  • 打赏
  • 举报
回复
叫你看书,看来你还是没有看仔细
zjcxc 元老 2004-08-11
  • 打赏
  • 举报
回复
--首先是安全备份(这步没有错)

restore database TestDB1
from disk='D:\DataBaseFile\BackUpDataFile\TestDBEntirety_1'
with norecovery
,move 'TestDB_Data' to 'D:\DataBaseFile\BackUpDataFile\TestDB_Data.mdf'
,move 'TestDB_Log' to 'D:\DataBaseFile\BackUpDataFile'

--差异备份语句
restore database TestDB1
from disk='D:\DataBaseFile\BackUpDataFile\TestDBEntirety_2'
with recovery --这里就要加这个了,否则就会出现数据库正在加载
jimoren 2004-08-11
  • 打赏
  • 举报
回复
如果加了norecovery参数则还原出来的数据处于“正在加载”状态,无法对数据库进行操作
差异备份语句
restore database TestDB1 from disk='D:\DataBaseFile\BackUpDataFile\TestDBEntirety_2'

写法没有问题.
到文档里找找资料去看.
lifeforu 2004-08-11
  • 打赏
  • 举报
回复
消息 4306,级别 16,状态1,行 1 先前的还原操作未指定 WITH NORECOVERY 或 WITH STANDBY。请在除最后步骤之外的所有其它步骤中指定 WITH NORECOVERY 或 WITH STANDBY 后,重新启动该还原序列。)
52juanjuan 2004-08-11
  • 打赏
  • 举报
回复
restore database TestDB1 from disk='D:\DataBaseFile\BackUpDataFile\TestDBEntirety_2' with recovery看看有没有错误提示
加载更多回复(3)

34,576

社区成员

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

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