我正在将数据库从 SQL Server 2019 迁移到 SQL Server 2017。 为此,我使用源数据库中的“生成脚本”功能来分别生成架构和数据。(我可能需要将数据导入分成多个文件以避免内存错误。)
当我尝试在目标服务器中运行架构脚本时,脚本失败并显示以下响应:
Msg 5133, Level 16, State 1, Line 4
Directory lookup for the file "E:\SqlData\my-db-test.mdf" failed with the operating system error 21(The device is not ready.).
我见过的所有说明都没有提到需要将此 .mdf 文件从源服务器复制到目标,但目标服务器似乎希望该文件存在。脚本的开头如下所示:
USE [master]
GO
/****** Object: Database [my-db-test] Script Date: 2/9/2024 8:14:49 AM ******/
CREATE DATABASE [my-db-test]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N'my-db-dev8b', FILENAME = N'E:\SqlData\my-db-test.mdf' , SIZE = 794624KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB )
LOG ON
( NAME = N'my-db-dev8b_log', FILENAME = N'E:\SqlData\my-db-test_log.ldf' , SIZE = 5971968KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB )
GO
ALTER DATABASE [my-db-test] SET COMPATIBILITY_LEVEL = 140
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
我是否需要将 .mdf 和 .ldf 文件从源服务器复制到目标服务器才能运行此脚本?是否可以更改脚本以便我不需要 .ldf 文件?
我不确定为什么脚本引用 my-db-dev8b,这是数据库的旧名称。我不知道剧本中的这些旧名字是否会让事情变得复杂。
将数据库从 SQL Server 2019 迁移到 SQL Server 2017 是否需要 .mdf 和 .ldf 文件?我可以通过以某种方式手动编辑脚本来帮助我的事业吗?
看起来我只需要 E:\SqlData 出现在新服务器上。创建必要的目录后,我就可以运行脚本并自动生成 .mdf 和 .ldf 文件。
就我而言,目标服务器上没有 E 盘,因此我在 D 盘中创建了 SqlData 目录,并编辑脚本以引用 D:\SqlData:
创建数据库将创建引用的文件,但文件夹结构必须存在且可写。
您可以通过服务器属性(或 GUI)检查位置
请参阅https://learn.microsoft.com/en-us/sql/t-sql/functions/serverproperty-transact-sql?view=sql-server-ver16
对于未来的数据库,您可以通过服务器属性(数据库设置)或通过写入注册表来更改默认位置(如果您有权限):
这将需要重新启动才能激活新设置。
请注意,它只会影响 GUI 中使用的默认值。创建数据库脚本仍然需要完全限定的路径。