命令行导入SQLServer的备份bak文件

总结帖,自用记录

1、安装SQLServer

这里不细说,查看Linux:CentOS7安装SQLServer_大坏蛋_的博客-CSDN博客_centos7安装sqlserver,亲测可行。

2、Navicat导入bak文件

用Navicat的导入功能和命令导入总是提示备份集中的数据库备份与现有的 'test' 数据库不同,如下:

[root@localhost ~]# sqlcmd -S localhost -U SA -p
Password:
1> RESTORE DATABASE [test] FROM DISK = N'/opt/mssql/UFSystem/UFSystem.bak' WITH FILE = 1, NORECOVERY, STATS = 5;
2> go
Msg 3154, Level 16, State 4, Server localhost, Line 1
备份集中的数据库备份与现有的 'test' 数据库不同。
Msg 3013, Level 16, State 1, Server localhost, Line 1
RESTORE DATABASE 正在异常终止。

Network packet size (bytes): 4096
1 xact[s]:
Clock Time (ms.): total       150  avg   150.0 (6.7 xacts per sec.)

3、命令行导入bak文件

在用Navicat导入失败后,只能尝试使用原生的命令行导入。

3.1、获取逻辑文件名

 USE  master
 RESTORE  FILELISTONLY
    FROM  DISK = '/opt/mssql/UFSystem/UFSystem.bak '  
 Go

说明:

  • DISK是备份文件的位置;
  • 记下LogicalName和PhysicalName

3.2、利用bak恢复数据库

USE  master
RESTORE DATABASE  UFSystem
  FROM  DISK = '/opt/mssql/UFSystem/UFSystem.bak'
  WITH  MOVE  'UfSystem' TO '/opt/mssql/UFSystem/UFSystem.MDF' ,
        MOVE  'UfSystem_LOG' TO '/opt/mssql/UFSystem/UFSystem.LDF' ,
        STATS  =   10 ,  REPLACE
GO

说明:

  • UFSystem是准备导入到的数据库
  • WITH MOVE 'UfSystem' TO '/opt/mssql/UFSystem/UFSystem.MDF' ,'UfSystem'是之前的LogicalName,'/opt/mssql/UFSystem/UFSystem.MDF' 是新的PhysicalName
  • MOVE 'UfSystem_LOG' TO '/opt/mssql/UFSystem/UFSystem.LDF',和上面一样
  • STATS = 10 每完成10%显示一条记录
  • REPLACE是强制还原
  • 导入成功后,最好不要移动或者改名

3、遇到的问题

已将数据库上下文更改为 "master"。
Msg 3634, Level 16, State 1, Server localhost, Line 2
在对 '/opt/Test/Test.MDF' 尝试 'RestoreContainer::ValidateTargetForCreation' 时,操作系统返回了错误 '5(拒绝访问。)'。
Msg 3156, Level 16, State 5, Server localhost, Line 2
文件 'Test' 无法还原为 '/opt/Test/Test.MDF'。请使用 WITH MOVE 选项来标识该文件的有效位置。
Msg 3634, Level 16, State 1, Server localhost, Line 2
在对 '/opt/Test/Test.LDF' 尝试 'RestoreContainer::ValidateTargetForCreation' 时,操作系统返回了错误 '5(拒绝访问。)'。
Msg 3156, Level 16, State 5, Server localhost, Line 2
文件 'Test_LOG' 无法还原为 '/opt/Test/Test.LDF'。请使用 WITH MOVE 选项来标识该文件的有效位置。
Msg 3119, Level 16, State 1, Server localhost, Line 2
在计划 RESTORE 语句时发现了问题。以前的消息提供了详细信息。
Msg 3013, Level 16, State 1, Server localhost, Line 2
RESTORE DATABASE 正在异常终止。

Network packet size (bytes): 4096
1 xact[s]:
Clock Time (ms.): total       167  avg   167.0 (6.0 xacts per sec.)

开始以为命令错了,后来看到操作系统返回了错误 '5(拒绝访问。)',猜测是否权限问题,后来将文件夹授权后就可以了chown -R mssql /opt/Test

参考文章

Linux:CentOS7安装SQLServer_大坏蛋_的博客-CSDN博客_centos7安装sqlserver
RESTORE DATABASE命令还原SQLServer 2005 数据库

posted @ 2022-08-12 22:57  Gin.p  阅读(1425)  评论(0编辑  收藏  举报