首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Server备份还原数据

从Server备份还原数据
EN

Database Administration用户
提问于 2020-06-18 20:02:14
回答 4查看 100关注 0票数 0

每月我需要同步Server数据库。基本上,源数据库生成一个.bak文件,然后将该文件恢复到目标数据库。

这在最初几次起作用了,现在目标数据库改变了,因为添加了一些用户,创建了一些表。

我想打开.bak文件,查询目标DB,删除副本,然后只使用新的数据执行和插入。

这是合理的吗?

如何读取/打开.bak文件?

另外,我一直在跟踪这个使用说明

基本上这是我的问题,但它使用机器人复制,以及工作,我现在不能使用它们。

它使用此代码还原备份:

代码语言:javascript
复制
PRINT '*** Restore full backup of DB $(DB) ***'
:CONNECT $(TGT)
GO
USE [master]
GO

IF EXISTS (SELECT * FROM sys.databases WHERE name = '$(DB)')
BEGIN
    ALTER DATABASE $(DB) 
        SET SINGLE_USER WITH ROLLBACK IMMEDIATE

    DROP DATABASE $(DB)
END

RESTORE DATABASE $(DB)
FROM disk = '$(RESTORE_PATH)\$(DB).bak'
WITH RECOVERY, NOUNLOAD, STATS = 10, REPLACE,
     MOVE '$(DATAFILENAME)' TO '$(RESTORE_DATA_PATH)\$(DATAFILENAME).mdf',
     MOVE '$(LOGFILENAME)' TO '$(RESTORE_DATA_PATH)\$(LOGFILENAME).ldf'
GO

根据我从Server中所记得的,它将恢复整个数据库。可以只恢复一个表吗?

谢谢

EN

回答 4

Database Administration用户

发布于 2020-06-18 21:25:04

可以只恢复一个表吗?

不是的。

由于添加了一些用户和一些表,所以目标数据库发生了更改。

如果无法使用还原后运行的简单脚本添加这些添加,则它们应该位于单独的数据库中。您可以使用视图或同义词来跨数据库引用表。

票数 1
EN

Database Administration用户

发布于 2020-07-06 12:25:31

我对此的建议是将您对目标数据库的关注分开。

基本上,在目标服务器上,有一个数据库,您可以根据需要对其进行还原和覆盖,此处不允许进行任何更改。

在目标服务器上,您有第二个数据库,用户可以在该数据库中创建新的表、视图、存储过程。他们可以使用三部分命名..。若要访问原始数据库中的项,请执行以下操作。

这将允许你做一个盲恢复从源到目标,而不清除任何他们正在做的事情。他们的自定义/测试工具仍然保存在自己的数据库中。

用户是一个较难解决的问题,但您只需在还原作业结束时添加一个步骤就可以了。或者在数据库中有一个存储过程,允许它们访问所需的数据,然后在还原结束时调用它。

票数 1
EN

Database Administration用户

发布于 2020-07-06 05:51:26

如果您只想还原一个表和用户,可以通过从选择的数据库生成一个Sql脚本来导出信息(只有模式或者在您的情况下只有数据和模式)。遵循本教程中的步骤:

https://dzone.com/articles/generate-database-scripts-with-data-in-sql-server

希望能帮上忙。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/269431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档