Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

SMO, CREATE DATABASE: doesn't always replicate file/filegroups accurately.

Aberta
#144 1 comentário 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
35/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Estagnada
Stack de tecnologia
csharp, sql
Domínio
databases

Direção de pesquisa

Comece pelo caminho de scripting de SMO Database que produz instruções CREATE DATABASE e, em seguida, reproduza o caso com arquivos dos filegroups primário, de log e adicionais contendo lacunas em seus valores de fileId. Compare o script gerado com as operações necessárias de CREATE DATABASE e ALTER DATABASE ADD FILE ou REMOVE FILE. A tarefa estará concluída quando o banco de dados submetido a scripting preservar os mapeamentos de arquivos originais depois que os volumes forem movidos e o servidor for iniciado.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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!

Linguagem predominante
C#
Estrelas
143
Forks
28
Métricas de merge de PRs
Nenhum PR com merge em 30d

Preparar o ambiente

Ainda não verificamos os arquivos de configuração deste projeto. Comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de microsoft/sqlmanagementobjects

Todas as issues de microsoft/sqlmanagementobjects

Issues semelhantes

Mais issues de C#

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.