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权限。就可以啦~~~

 

posted on 2022-03-17 16:43  张不胖  阅读(316)  评论(0编辑  收藏  举报

导航