我将一些数据库备份从一台服务器复制到另一台服务器(新实例不存在数据库)。我尝试使用以下命令进行恢复
Restore database dbname
from disk='g:\e2bak\dbname.bak'
with
stats=10
Run Code Online (Sandbox Code Playgroud)
它因以下错误而失败
文件“G:\MSSQL$s73g\MDF\dbname.mdf”的目录查找失败,出现操作系统错误 3(系统找不到指定的路径。)消息 3156,级别 16,状态 3,第 1 行
服务器级别的默认数据库设置也是存储数据和登录
G:\MSSQL10_50.SG\MSSQL
Run Code Online (Sandbox Code Playgroud)
我可以通过指定移动选项来克服错误。但我的困惑是
1.Why database .bak file is looking for G:\MSSQL$s73g\MDF\dbname.mdf",this is the path
of dbname database files in production from where we copied the .bak file
2.Also when I restored the database with move option and took a backup in same server,
I was able to restore the Database with below command
Restore database dbname
from disk='G:\e1ebk\dbname.bak'
with replace,stats=10
Run Code Online (Sandbox Code Playgroud)
你能帮我理解为什么 .Bak 文件位置指向某个其他目录(它甚至不存在于我们的服务器中,只存在于生产服务器上),以及在第二种情况下为什么这在没有移动选项的情况下有效。
当您进行备份时,包括文件路径在内的所有信息都包含在备份中。正如您发现的那样,如果您只运行还原数据库,它将尝试还原到完全相同的位置。
当您包含和替换时,备份会覆盖现有的 .mdf 和 .ldf 文件。我通常还有数据和日志路径指令来指定放置文件的位置(在我的手机上将编辑以包含确切的命令)。
这是正常行为,因为如果我在同一台服务器上恢复数据库,您很可能正在从某些东西中恢复并且希望 db 文件相同。
编辑:这是我的正常恢复命令,无论是在同一台服务器上还是在不同服务器上。我喜欢具体说明事情的发展方向。
RESTORE DATABASE dbName
FROM DISK = N'Path\To\Backup.bak'
WITH MOVE 'dbName_DataFileLogicalName' TO 'Path\To\Data.mdf',
MOVE 'dbName_LogFileLogicalName' TO 'Path\To\Log.ldf',
REPLACE,
STATS = 10
Run Code Online (Sandbox Code Playgroud)
通过始终指定我正在写入的文件,可以消除一些不确定性,并且当有人来查看时,很清楚发生了什么。
归档时间: |
|
查看次数: |
18716 次 |
最近记录: |