sqlserver BCP还原
学习新东西首要参考官方文档吧!最舒服的是,这文档还是中文的~~ 使用格式化文件批量导入数据 - SQL Server | Microsoft Docs
如果是还原BCP文件,那么我们需要的是.bcp文件(这仅仅是数据)、.fmt文件(还原的数据要对应的规则,这块可以扩展使用,去看一下官方文档就能明白),还有数据库的表(要有结构)!
我所做的操作是:
1.用bak文件还原了一个数据库,表结构要有,不管有没有数据都行。
2.然后就可以运行语句啦
USE ProductLogDB;
GO
TRUNCATE TABLE Packaging_Mapping; ----清除表中旧数据用的。
BULK INSERT dbo.Packaging_Mapping
FROM 'D:\bcp\Tracking_2021.bcp'
WITH (FORMATFILE = 'D:\bcp\FMT\bcp1.fmt');
GO
注:ProductLogDB为数据库名。后边两个路径是bcp文件和对应的fmt文件的路径。
运行时可能出现两个问题:
①无法进行大容量加载。文件“D:\bcp\Tracking_2021.bcp”不存在或你没有文件访问权限。----这个就是你没法访问那个路径,如果不想去研究具体的权限问题,就试试把文件夹建在C盘下的某个文件夹呢,桌面不行哈。
②无法截断表 'Packaging_Mapping',因为该表正由 FOREIGN KEY 约束引用。----这个就是因为主键约束了,查到了两个方法,一个(1条消息) 无法截断表 ‘tbl_***‘,因为该表正由 FOREIGN KEY 约束引用。_多写文章能生发的博客-CSDN博客。但我觉得有点麻烦,用了另一个简单的(1条消息) 无法截断表 ‘tbl_******** ‘,因为该表正由 FOREIGN KEY 约束引用_多写文章能生发的博客-CSDN博客 。基本这两种方法能解决哒。
※FMT格式文件:非 XML 格式化文件 (SQL Server) - SQL Server | Microsoft Docs
※创建非 XML 格式化文件:
创建格式化文件 (SQL Server) - SQL Server | Microsoft Docs
-------------------------------------2022-10-14------------------------------------------------------
因为操作的文件和数据库部署在两个服务器上,并且服务器对账户的权限要求比较严格,所以有数据共享的问题。
A服务器:所有文件和系统服务器
B服务器:数据库所在服务器
B在执行sql语句时,读取文件遭到了阻碍。虽然A已经共享了文件夹,但不能共享给Everyone,so我们必须知道数据库在访问磁盘文件夹时用的什么账户名,
我查了很久也试了adminitrator、user、system账户,都不对。最后灵光一现,去看了数据库自动备份出来的bak文件的属性,Owner是一个叫***SQLService**的账户(不同的服务器和域肯定起的名字不一样,视情况而定)。将共享文件夹配置这个SQLService账户的Read/Write权限。就可以啦~~~