SMO, CREATE DATABASE: doesn't always replicate file/filegroups accurately.
还没有人认领这个 Issue。
评估
调研方向
从生成 CREATE DATABASE 语句的 SMO Database 脚本路径开始,然后重现 primary、log 和其他 filegroup 文件的 fileId 值存在间隔的情况。将生成的脚本与所需的 CREATE DATABASE 加上 ALTER DATABASE ADD FILE 或 REMOVE FILE 操作进行比较。当移动卷并启动服务器后,脚本化的数据库仍保留原始文件映射时,即表示完成。
由索引模型根据 Issue 内容生成。
描述
Imagine a database on server A, with several files: PRIMARY DATA, LOG, and additional DATA files belonging to a filegroup. Now imagine you have server B. You want to swap the DATA/LOG drives from server A, to server B, for example, to do a "quick" OS/SQL upgrade (obviously, in a virtual/cloud environment). So: you prepare a new server, flip the drives, and voila.
Before moving the volumes you need to pre-create the database on server B, such that when you flip volumes and boot the SQL Server B, the database is known, and goes ONLINE (yes, I am aware of other db-scoped attributes, login mappings, etc.), but bear with me. :-)
Then, you use SMO/Database to script the database create. It builds the CREATE DATABASE and adds all of the necessary files.
Then, you swap the volumes, boot server B -- and sometimes . . . . you get an error, something like:
2023-05-25 10:30:18.060 spid27s An unexpected file id was encountered. File id 3 was expected but 7 was read from "E:\MSSQL\DATA\blah_5_new.mdf". Verify that files are mapped correctly in sys.master_files. ALTER DATABASE can be used to correct the mappings.
What we found, is that SMO isn't "accurately" building the CREATE DATABASE statement. It adds all files into one statement. That is incorrect (in this case, at least). What it should be doing, is building CREATE DATABASE for the primary DATA and LOG files, and then using a combination of ALTER DATABASE {database} ADD FILE (or REMOVE FILE), to match the fileId values, and more importantly to introduce required "gaps" into the fileId values.
We wrote such code to solve this problem. Was wondering if SMO should be "fixed" too, if deemed a bug? Admittedly, if you're just moving random databases between machines this logic is necessary, but if you're moving ALL databases on a machine, then it comes into play.
Thanks!
- 主要语言
- C#
- 星标
- 143
- 派生
- 28
- PR 合并指标
- 30 天内没有已合并 PR
贡献指南
这个仓库没有索引到贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
microsoft/sqlmanagementobjects 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 62/100
-
难度 3/5 1-2 天 新手友好度 72/100
-
难度 4/5 3-5 天 新手友好度 74/100
-
难度 3/5 1-2 天 新手友好度 78/100
-
难度 3/5 1-2 天 新手友好度 68/100
查看 microsoft/sqlmanagementobjects 的全部 Issue
相似的 Issue
-
Documentation
难度 2/5 1-3 小时 新手友好度 75/100
cake-build/cake#5024 ·
-
Frontend status/draft TechnicalDebt
难度 2/5 1-2 天 新手友好度 75/100
Altinn/altinn-auth#4143 ·
-
.NET Flaky Test Testing Tests
难度 2/5 1-3 小时 新手友好度 84/100
getsentry/sentry-dotnet#5617 · 1 条评论 ·
-
:watch: Not Triaged dotnet-fsharp/svc
难度 1/5 1 小时以内 新手友好度 90/100
-
Client customer-reported needs-team-attention question Service Attention WebPubSub
难度 2/5 1-3 小时 新手友好度 76/100
Azure/azure-sdk-for-net#63292 · 3 条评论 · 1 个 reaction ·